On Thu, Sep 18, 2003 at 11:36:48PM +0100, Philip Blundell wrote: > On Thu, 2003-09-18 at 13:39, Daniel Jacobowitz wrote: > > What were you debugging when you encountered this, and what was loading > > libpthread? In general, this won't work. The problem is that syslog > > tries to lock a mutex; but the mutex was never initialized because > > libpthread was not loaded until later. > > As far as I can tell, the cause of the problem here is that the openlog > cleanup handler is not being called, leaving the mutex locked on exit > from that function. That in turn happens because __libc_cleanup_push > finds that the GOT entry for _pthread_cleanup_push is NULL, leading it > to believe that libpthread isn't loaded. > > I'll try adding these functions to __libc_pthread_functions and see if > that helps.
Very interesting, very interesting. Take a look at libc.so.6: [EMAIL PROTECTED]:~/deb-cvs/glibc-2.3.2/i386-linux/obj% objdump -T /lib/libc.so.6| grep pthread_cleanup_push 00000000 w D *UND* 00000000 _pthread_cleanup_push_defer 00000000 w D *UND* 00000000 _pthread_cleanup_push [EMAIL PROTECTED]:~/deb-cvs/glibc-2.3.2/i386-linux/obj% objdump -R /lib/libc.so.6| grep pthread_cleanup_push 0012b234 R_386_GLOB_DAT _pthread_cleanup_push_defer 0012b270 R_386_GLOB_DAT _pthread_cleanup_push 0012b0bc R_386_JUMP_SLOT _pthread_cleanup_push_defer 0012b0e0 R_386_JUMP_SLOT _pthread_cleanup_push Then in GDB, stopped in openlog: (gdb) x/x 0x40019000 + 0x0012b270 0x40144270: 0x00000000 (gdb) x/3i 0x4002ebb6 0x4002ebb6: push $0x1b8 0x4002ebbb: jmp 0x4002e830 0x4002ebc0: jmp *0xec(%ebx) OK, one is the PLT reference, the other is the global data. Shouldn't that global data be fixed up by the loader? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

