tBite the bullet.  Have to use different binaries on 2.4 and 2.6. - 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 282c88f9de897056f7a2461216dbfdb51ab655f3
 (DIR) parent b4c842f139b47e1c999eb395f348c236af83143b
 (HTM) Author: rsc <devnull@localhost>
       Date:   Fri, 17 Sep 2004 22:09:31 +0000
       
       Bite the bullet.  Have to use different
       binaries on 2.4 and 2.6.
       
       Diffstat:
         M bin/9c                              |       8 +++++++-
         M bin/9l                              |       7 ++++++-
         M src/lib9/ffork-Linux.c              |      35 ++++---------------------------
         M src/lib9/rendez-Linux.c             |      63 ++-----------------------------
       
       4 files changed, 21 insertions(+), 92 deletions(-)
       ---
 (DIR) diff --git a/bin/9c b/bin/9c
       t@@ -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__" 
 (DIR) diff --git a/bin/9l b/bin/9l
       t@@ -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"
 (DIR) diff --git a/src/lib9/ffork-Linux.c b/src/lib9/ffork-Linux.c
       t@@ -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
 (DIR) diff --git a/src/lib9/rendez-Linux.c b/src/lib9/rendez-Linux.c
       t@@ -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 <u.h>
       -#include <signal.h>
       -#include <pthread.h>
       -#include <libc.h>
       -
       -#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