diff options
author | rsc <devnull@localhost> | 2005-01-17 21:30:05 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-01-17 21:30:05 +0000 |
commit | 7a2c88509bea849196ed4b77cf10512c4ff40cce (patch) | |
tree | 99f5c61c58ae8193173941e107c2f93351795702 /src/libthread | |
parent | 38c10d1abcab399ce3735ccf54672a5b6787165e (diff) | |
download | plan9port-7a2c88509bea849196ed4b77cf10512c4ff40cce.tar.gz plan9port-7a2c88509bea849196ed4b77cf10512c4ff40cce.tar.bz2 plan9port-7a2c88509bea849196ed4b77cf10512c4ff40cce.zip |
allow config to override kernel version
Diffstat (limited to 'src/libthread')
-rw-r--r-- | src/libthread/pthread.c | 17 | ||||
-rw-r--r-- | src/libthread/sysofiles.sh | 4 | ||||
-rw-r--r-- | src/libthread/threadimpl.h | 1 |
3 files changed, 21 insertions, 1 deletions
diff --git a/src/libthread/pthread.c b/src/libthread/pthread.c index dbeda7e4..31cc12e1 100644 --- a/src/libthread/pthread.c +++ b/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); } diff --git a/src/libthread/sysofiles.sh b/src/libthread/sysofiles.sh index 802faf76..a7af0f5b 100644 --- a/src/libthread/sysofiles.sh +++ b/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 diff --git a/src/libthread/threadimpl.h b/src/libthread/threadimpl.h index 842b81d8..cb5b0168 100644 --- a/src/libthread/threadimpl.h +++ b/src/libthread/threadimpl.h @@ -6,6 +6,7 @@ #include <sched.h> #include <signal.h> #include <ucontext.h> +#include <sys/utsname.h> #include "libc.h" #include "thread.h" |