aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2004-09-17 22:09:31 +0000
committerrsc <devnull@localhost>2004-09-17 22:09:31 +0000
commit282c88f9de897056f7a2461216dbfdb51ab655f3 (patch)
tree41352a8f97673c4475b54a1a6ffbef82ff363685
parentb4c842f139b47e1c999eb395f348c236af83143b (diff)
downloadplan9port-282c88f9de897056f7a2461216dbfdb51ab655f3.tar.gz
plan9port-282c88f9de897056f7a2461216dbfdb51ab655f3.tar.bz2
plan9port-282c88f9de897056f7a2461216dbfdb51ab655f3.zip
Bite the bullet. Have to use different
binaries on 2.4 and 2.6.
-rwxr-xr-xbin/9c8
-rwxr-xr-xbin/9l7
-rw-r--r--src/lib9/ffork-Linux.c35
-rw-r--r--src/lib9/rendez-Linux.c63
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 <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