From 282c88f9de897056f7a2461216dbfdb51ab655f3 Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 17 Sep 2004 22:09:31 +0000 Subject: Bite the bullet. Have to use different binaries on 2.4 and 2.6. --- bin/9c | 8 ++++++- bin/9l | 7 +++++- src/lib9/ffork-Linux.c | 35 ++++----------------------- src/lib9/rendez-Linux.c | 63 ++++--------------------------------------------- 4 files changed, 21 insertions(+), 92 deletions(-) diff --git a/bin/9c b/bin/9c index 9da9be06..19bb6ebe 100755 --- a/bin/9c +++ b/bin/9c @@ -26,7 +26,13 @@ case "$tag" in *Darwin*) usegcc cflags="$ngflags -g3 -no-cpp-precomp" ;; *HP-UX*) cc=cc; cflags="-g -O -c -Ae" ;; -*Linux*) usegcc ;; +*Linux*) usegcc + case "`uname -r`" in + 2.6*) + cflags="$cflags -D__Linux26__" + ;; + esac + ;; *OSF1*) cc=cc; cflags="-g -O -c" ;; *SunOS*-cc) cc=cc; cflags="-g -O -c -xCC -D__sun__" diff --git a/bin/9l b/bin/9l index a427f2a5..4df0ef8d 100755 --- a/bin/9l +++ b/bin/9l @@ -10,7 +10,12 @@ case "$tag" in extralibs="$extralibs -lutil" ;; *Linux*) ld=gcc - extralibs="$extralibs -lutil -lpthread" + extralibs="$extralibs -lutil" + case "`uname -r`" in + 2.6.*) + extralibs="$extralibs -lpthread" + ;; + esac ;; *Darwin*) ld=gcc ;; *SunOS*) ld="${CC9:-cc} -g" diff --git a/src/lib9/ffork-Linux.c b/src/lib9/ffork-Linux.c index 5dbd75cf..b433ec4a 100644 --- a/src/lib9/ffork-Linux.c +++ b/src/lib9/ffork-Linux.c @@ -1,32 +1,5 @@ -#define ffork ffork_clone -#define getfforkid getfforkid_clone -#include "ffork-Linux-clone.c" -#undef ffork -#undef getfforkid - -#define ffork ffork_pthread -#define getfforkid getfforkid_pthread +#ifdef __Linux26__ #include "ffork-pthread.c" -#undef ffork -#undef getfforkid - -extern int _islinuxnptl(void); - -int -ffork(int flags, void (*fn)(void*), void *arg) -{ - if(_islinuxnptl()) - return ffork_pthread(flags, fn, arg); - else - return ffork_clone(flags, fn, arg); -} - -int -getfforkid(void) -{ - if(_islinuxnptl()) - return getfforkid_pthread(); - else - return getfforkid_clone(); -} - +#else +#include "ffork-Linux-clone.c" +#endif diff --git a/src/lib9/rendez-Linux.c b/src/lib9/rendez-Linux.c index 6d479310..c86fb5b5 100644 --- a/src/lib9/rendez-Linux.c +++ b/src/lib9/rendez-Linux.c @@ -1,60 +1,5 @@ -/* - * On Linux 2.6 and later, we can use pthreads (in fact, we must), - * but on earlier Linux, pthreads are incompatible with using our - * own coroutines in libthread. In order to make binaries that work - * on either system, we detect the pthread library in use and call - * the appropriate functions. - */ - -#include -#include -#include -#include - -#define _procsleep _procsleep_signal -#define _procwakeup _procwakeup_signal -#include "rendez-signal.c" - -#undef _procsleep -#undef _procwakeup -#define _procsleep _procsleep_pthread -#define _procwakeup _procwakeup_pthread +#ifdef __Linux26__ #include "rendez-pthread.c" - -#undef _procsleep -#undef _procwakeup - -int -_islinuxnptl(void) -{ - static char buf[100]; - static int isnptl = -1; - - if(isnptl == -1){ - if(confstr(_CS_GNU_LIBPTHREAD_VERSION, buf, sizeof buf) > 0 - && strncmp(buf, "NPTL", 4) == 0) - isnptl = 1; - else - isnptl = 0; - } - return isnptl; -} - -void -_procsleep(_Procrend *r) -{ - if(_islinuxnptl()) - return _procsleep_pthread(r); - else - return _procsleep_signal(r); -} - -void -_procwakeup(_Procrend *r) -{ - if(_islinuxnptl()) - return _procwakeup_pthread(r); - else - return _procwakeup_signal(r); -} - +#else +#include "rendez-signal.c" +#endif -- cgit v1.2.3