libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [libunwind] libunwind segv with gcc 2.96 programs run on RedhatEL 3


From: Harrow, Jerry
Subject: RE: [libunwind] libunwind segv with gcc 2.96 programs run on RedhatEL 3 with GLIBC 2.3.2
Date: Thu, 5 Feb 2004 10:52:04 -0500

>>From: Jim Wilson [mailto:address@hidden
>>
>>The call chain is supposed to be terminated with a 0 address.  This
>>requires an instruction to load 0 into rp during the _start function,
>>and an unwind descriptor to indicate that the 0 is there.  David
>>Mosberger first added this stuff to glibc on 2001-04-09, and then
>>revised it 2003-03-27.  I believe you need to have a glibc from after
>>2003-03-27 for this to work reliably.  If you have a glibc in between
>>those two dates, then it will probably work sometimes.  If you have a
>>glibc from before 2001-04-09, then it probably won't work at all.  I
>>don't know what glibc versions and patches are in the RH OS versions
>>that you have.
>>
>>See in particular the glibc sysdeps/ia64/elf/start.S file.  There are
>>also equivalent changes to the dynamic linker.

Ugh!  That must be the problem.  While the GLIBC in Redhat EL3 has all
the fixes you mention (it is from 9/2003).  Unfortunately _start is
built into the main program when it is linked -- so currently any
program built on Redhat/Itanium systems before EL3 cannot be reliably
traced.  

Do you recall how the end of stack was detected, before these changes
went in?  Perhaps by shear luck?  

Any suggestions as to how I could hack in a fix for this?  My only
thought is to stop if we find an address inside of _start(), but that is
not necessarily the easiest piece of data to get a hold of from a shared
library.

Thanks for the quick reply, very helpful.

-Jer


reply via email to

[Prev in Thread] Current Thread [Next in Thread]