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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] fix building linuxthreads with tls support for i[45]86 hosts (BZ674)


http://sources.redhat.com/bugzilla/show_bug.cgi?id=674

if you try and build glibc-2.3.6 with linuxthreads and with tls support 
enabled for an i486 or i586 target, the build fails

"Nix" investigated the issue in the mentioned bug report and the attached 
patch is the result ... just compile tested and some basic runtime tests in 
Gentoo
-mike
The i686 pt-machine.h includes useldt.h so that USE_TLS/HAVE___THREAD are
properly defined.  The generic i386 pt-machine.h header does not pull in
useldt.h however, so when building linuxthreads with TLS support for i586,
the final fails:
...
linuxthreads/libpthread_pic.a(pthread.os)(.text+0x161): In function `__pthread_initialize':
: undefined reference to `_res'
linuxthreads/libpthread_pic.a(pthread.os)(.text+0x107a): In function `__pthread_reset_main_thread':
: undefined reference to `_h_errno'
linuxthreads/libpthread_pic.a(pthread.os)(.text+0x1089): In function `__pthread_reset_main_thread':
: undefined reference to `_errno'
...

So, to reiterate, this is due to some parts of linuxthreads being incorrectly
built without the TLS defines.

http://sources.redhat.com/bugzilla/show_bug.cgi?id=674
http://bugs.gentoo.org/90236

2006-04-24  Mike Frysinger  <vapier@gentoo.org>

	* sysdeps/i386/pt-machine.h: Include kernel-features.h.
	[__ASSUME_LDT_WORKS]: Include useldt.h.

--- linuxthreads/sysdeps/i386/pt-machine.h
+++ linuxthreads/sysdeps/i386/pt-machine.h
@@ -26,6 +26,7 @@
 #ifndef PT_EI
 # define PT_EI extern inline __attribute__ ((always_inline))
 #endif
+#include "kernel-features.h"
 
 extern long int testandset (int *spinlock);
 extern int __compare_and_swap (long int *p, long int oldval, long int newval);
@@ -105,4 +106,8 @@ compare_and_swap_is_available (void)
 }
 #endif /* __ASSEMBLER__ */
 
+#if __ASSUME_LDT_WORKS > 0
+#include "useldt.h"
+#endif
+
 #endif /* pt-machine.h */

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