Red Hat Bugzilla – Full Text Bug Listing
|Summary:||crash in pthread_exit() (tls version) when using new and -rdynamic flag|
|Product:||Red Hat Enterprise Linux 3||Reporter:||Gerard Nantel <gerard.nantel>|
|Component:||glibc||Assignee:||Jakub Jelinek <jakub>|
|Status:||CLOSED NOTABUG||QA Contact:||Brian Brock <bbrock>|
|Fixed In Version:||Doc Type:||Bug Fix|
|Doc Text:||Story Points:||---|
|Last Closed:||2005-02-07 15:47:34 EST||Type:||---|
|oVirt Team:||---||RHEL 7.3 requirements from Atomic Host:|
Description Gerard Nantel 2005-02-01 11:54:53 EST
Description of problem: I am observing a crash in pthread_exit() on ES 3.0 when running a binary compiled on RH 7.2. Stack trace: #0 0xbf7ebc32 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 #1 0xbf6a8a09 in raise () from /lib/tls/libc.so.6 #2 0xbf6aa235 in abort () from /lib/tls/libc.so.6 #3 0xbee78f61 in __frame_state_for () from /lib/libgcc_s.so.1 #4 0xbee79393 in _Unwind_ForcedUnwind () from /lib/libgcc_s.so.1 #5 0xbf7e52a4 in _Unwind_ForcedUnwind () from /lib/tls/libpthread.so.0 #6 0xbf7e3486 in __pthread_unwind () from /lib/tls/libpthread.so.0 #7 0xbf7dfae2 in pthread_exit () from /lib/tls/libpthread.so.0 #8 0x0804a5a0 in Thread(void*) () C++ source code for binary: See sample.cpp attachment. Compile System: Red Hat Linux release 7.2 (Enigma) Kernel 2.4.7-10smp on an i686 Compiler version: gcc-3.2.2 (configured with --enable-languages=c++ --enable- threads=posix --with-pic --disable-shared) (Also tried gcc-3.4.3 configured the same way) Compile command: g++ sample.cpp -rdynamic -lpthread -o sample Running the sample on RH 7.2 works fine. Running the sample on RH ES 3.0 causes the above-mentioned crash. - Note the -rdynamic flag. Without this flag, the crash goes away. - Note that the sample program contains a call to new. Without a call to new, the crash goes away. Moving the call to new around (global scope, Thread() scope, main() scope at begin/end) doesn't change a thing. - As expected, without the call to pthread_exit(), the crash also goes away. Test system: Red Hat Enterprise Linux ES release 3 (Taroon) Kernel 2.4.21-4.ELsmp on an i686 Test system pthread library: /lib/tls/libpthread.so.0 (as can be seen from stack trace) Note that if /lib/i686/libpthread.so.0 is used instead, there is no crash. How reproducible: Every Time. Steps to Reproduce: 1. Compile attached sample.cpp on RH 7.2 using gcc 3.2.2 or 3.4.3 with command: "g++ sample.cpp -rdynamic -lpthread -o sample" 2. Run sample on RH ES 3.0 making sure that it is linking against /lib/tls/libpthread.so and not /lib/i686/libpthread.so Actual results: The sample binary crashed. Expected results: The sample binary should have exited normally. Additional info:
Comment 1 Gerard Nantel 2005-02-01 11:56:40 EST
Created attachment 110501 [details] Sample program that reproduces the issue.
Comment 2 Gerard Nantel 2005-02-02 11:15:41 EST
Setting LD_ASSUME_KERNEL=2.4.19 (or 2.2.5) on the RH ES 3.0 machine also makes the crash go away.
Comment 3 Jakub Jelinek 2005-02-07 15:47:34 EST
That's a bug in RHL 7.2, not RHEL 3. It was incorrectly marking pthread_exit (among other functions) as throw (), while they in fact can throw. Either use LinuxThreads for RHL7.2 compiled C++ programs, or build on RHEL3+, or fix RHL 7.2 headers so that they don't have throw () on their prototypes. The fix was http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/linuxthreads/sysdeps/pthread/pthread.h.diff?r1=1.34&r2=1.35&cvsroot=glibc As RHL 7.2 is no longer supported, there is nothing else that can be done about this.