This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH] Fix -static -lpthread


Hi!

Linking with -static -lpthread results in no thread-safety in libio, so e.g.
gcc -static linuxthreads/Examples/ex7.c -lpthread sometimes prints correct
21 lines, sometimes even 24. The problem is that as _IO_flockfile etc.
aren't referenced normally from programs, libpthread.a(lockfile.o) will not
be brought in and then when libio is seen in libc.a, _IO_flockfile will be
satisfied by libc.a(lockfile.o), ie. dummy stubs from
sysdeps/generic/lockfile.c.

2001-08-14  Jakub Jelinek  <jakub@redhat.com>

	* lockfile.c (__pthread_provide_lockfile): New.
	* pthread.c (__pthread_require_lockfile): New.
	* cancel.c (__pthread_require_lockfile): New.

--- libc/linuxthreads/pthread.c.jj	Wed Jul 18 13:51:58 2001
+++ libc/linuxthreads/pthread.c	Tue Aug 14 06:21:18 2001
@@ -1158,9 +1158,12 @@ void __pthread_message(char * fmt, ...)
 
 
 #ifndef SHARED
-/* We need a hook to force the cancelation wrappers to be linked in when
-   static libpthread is used.  */
+/* We need a hook to force the cancelation wrappers and file locking
+   to be linked in when static libpthread is used.  */
 extern const int __pthread_provide_wrappers;
 static const int *const __pthread_require_wrappers =
   &__pthread_provide_wrappers;
+extern const int __pthread_provide_lockfile;
+static const int *const __pthread_require_lockfile =
+  &__pthread_provide_lockfile;
 #endif
--- libc/linuxthreads/lockfile.c.jj	Mon Jan  8 13:42:30 2001
+++ libc/linuxthreads/lockfile.c	Tue Aug 14 06:23:28 2001
@@ -26,6 +26,12 @@
 #include "../libio/libioP.h"
 #endif
 
+#ifndef SHARED
+/* We need a hook to force this file to be linked in when static
+   libpthread is used.  */
+const int __pthread_provide_lockfile = 0;
+#endif
+
 void
 __flockfile (FILE *stream)
 {
--- libc/linuxthreads/cancel.c.jj	Mon Jun 25 08:04:11 2001
+++ libc/linuxthreads/cancel.c	Tue Aug 14 06:21:49 2001
@@ -207,9 +207,12 @@ void __pthread_perform_cleanup(char *cur
 }
 
 #ifndef SHARED
-/* We need a hook to force the cancelation wrappers to be linked in when
-   static libpthread is used.  */
+/* We need a hook to force the cancelation wrappers and file locking
+   to be linked in when static libpthread is used.  */
 extern const int __pthread_provide_wrappers;
-static const int * const __pthread_require_wrappers =
+static const int *const __pthread_require_wrappers =
   &__pthread_provide_wrappers;
+extern const int __pthread_provide_lockfile;
+static const int *const __pthread_require_lockfile =
+  &__pthread_provide_lockfile;
 #endif

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]