tallow config to override kernel version - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 7a2c88509bea849196ed4b77cf10512c4ff40cce
 (DIR) parent 38c10d1abcab399ce3735ccf54672a5b6787165e
 (HTM) Author: rsc <devnull@localhost>
       Date:   Mon, 17 Jan 2005 21:30:05 +0000
       
       allow config to override kernel version
       
       Diffstat:
         M INSTALL                             |      18 ++++++++++++++++++
         M src/libthread/pthread.c             |      17 +++++++++++++++++
         M src/libthread/sysofiles.sh          |       4 +++-
         M src/libthread/threadimpl.h          |       1 +
         M src/mkhdr                           |       2 --
       
       5 files changed, 39 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/INSTALL b/INSTALL
       t@@ -3,7 +3,25 @@
        PLAN9=`pwd` export PLAN9
        PATH=$PLAN9/bin:$PATH export PATH
        
       +echo "Resetting $PLAN9/config"
       +rm -f $PLAN9/config
       +
        (
       +if [ `uname` = Linux ]; then
       +        # On Linux, we use the kernel version to decide whether
       +        # to use pthreads or not.  On 2.6 versions that aren't
       +        # linking with NPTL by default, pretend to be an older kernel.
       +        echo "Running on Linux: checking for NPTL..."
       +        gcc lib/linux-isnptl.c
       +        if ./a.out
       +        then        
       +                echo "        NPTL found."
       +                echo "SYSVERSION=2.6" >$PLAN9/config
       +        else
       +                echo "        NPTL not found."
       +                echo "SYSVERSION=2.4" >$PLAN9/config
       +        fi
       +fi
        echo "Building mk..."
        cd src
        make
 (DIR) diff --git a/src/libthread/pthread.c b/src/libthread/pthread.c
       t@@ -133,6 +133,23 @@ _threadsetproc(Proc *p)
        void
        _pthreadinit(void)
        {
       +        static struct utsname un;
       +        pthread_t id;
       +
       +        if(uname(&un) < 0){
       +                fprint(2, "warning: uname failed: %r\n");
       +                goto Okay;
       +        }
       +        if(strcmp(un.sysname, "Linux") == 0){
       +                /*
       +                 * Want to distinguish between the old LinuxThreads pthreads
       +                 * and the new NPTL implementation.  NPTL uses much bigger
       +                 * thread IDs.
       +                 */
       +                id = pthread_self();
       +                if(*(ulong*)&id < 1024*1024)
       +                        sysfatal("cannot use LinuxThreads as pthread library; see %s/src/libthread/README.Linux", get9root());
       +        }
                pthread_key_create(&prockey, 0);
        }
        
 (DIR) diff --git a/src/libthread/sysofiles.sh b/src/libthread/sysofiles.sh
       t@@ -1,6 +1,8 @@
        #!/bin/sh
        
       -tag="$OBJTYPE-$SYSNAME-`uname -r`-${CC9:-cc}"
       +test -f $PLAN9/config && . $PLAN9/config
       +
       +tag="$OBJTYPE-$SYSNAME-${SYSVERSION:-`uname -r`}-${CC9:-cc}"
        case "$tag" in
        *-Linux-2.6.*)
                echo pthread.o
 (DIR) diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h
       t@@ -6,6 +6,7 @@
        #include <sched.h>
        #include <signal.h>
        #include <ucontext.h>
       +#include <sys/utsname.h>
        #include "libc.h"
        #include "thread.h"
        
 (DIR) diff --git a/src/mkhdr b/src/mkhdr
       t@@ -7,8 +7,6 @@ OBJTYPE=`uname -m | sed '
                s;ppc64;power;g;
                s;ppc;power;g'`
        
       -SYSVERSION=`uname -r`
       -
        BIN=$PLAN9/bin
        LIBDIR=$PLAN9/lib