commit 7a2c88509bea849196ed4b77cf10512c4ff40cce from: rsc date: Mon Jan 17 21:30:05 2005 UTC allow config to override kernel version commit - 38c10d1abcab399ce3735ccf54672a5b6787165e commit + 7a2c88509bea849196ed4b77cf10512c4ff40cce blob - 209436a807e4697838711173f45079f517af891c blob + 9a641aefa037927578b95f021d925261c72f8b7a --- INSTALL +++ INSTALL @@ -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 blob - dbeda7e44f239978228d27c90b1d1c6c65e1f663 blob + 31cc12e1ecaea60f5adfa0ae51cffd628b4bdcf5 --- src/libthread/pthread.c +++ src/libthread/pthread.c @@ -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); } blob - 802faf7686870866b1f80fd9386a45d984befc55 blob + a7af0f5ba39c9a134a69a0cdf60cfd7c30178b6d --- src/libthread/sysofiles.sh +++ src/libthread/sysofiles.sh @@ -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 blob - 842b81d87596768c64251c9e136e23559d34b861 blob + cb5b0168cc7fe978fd07ef63442b5c36ac85c8d5 --- src/libthread/threadimpl.h +++ src/libthread/threadimpl.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "libc.h" #include "thread.h" blob - 6456aece2cf02eb744811445e1109971ec58466c blob + 38ea8145778c67f08d788d1d5cfa5737f48f928a --- src/mkhdr +++ src/mkhdr @@ -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