Commit Diff


commit - b4c842f139b47e1c999eb395f348c236af83143b
commit + 282c88f9de897056f7a2461216dbfdb51ab655f3
blob - 9da9be068d94b02ff74a2e04973a6fd4172ca4aa
blob + 19bb6ebe818b0eb227f2a9e11b907eb6b03b816b
--- bin/9c
+++ 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__" 
blob - a427f2a5eecfab874dc30de17b9901c50c729e29
blob + 4df0ef8de35d694ed09c0ea530ff432d016f5aa6
--- bin/9l
+++ 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"
blob - 5dbd75cf048a4c40531e815c4a0551ae5c5fb17b
blob + b433ec4a43a677546b39b39bc38b63c22d46b257
--- src/lib9/ffork-Linux.c
+++ 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
blob - 6d47931057f19d6296e2893389d29e84ff776425
blob + c86fb5b5b1d89bdb117f8f3385c158498539b445
--- src/lib9/rendez-Linux.c
+++ 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