|
From: | Andrew Cagney |
Subject: | Re: [Libunwind-devel] cursor.is_interrupted() or is_... |
Date: | Thu, 31 Jan 2008 10:39:21 -0500 |
User-agent: | Thunderbird 2.0.0.9 (X11/20071115) |
Mark Wielaard wrote:
Yes, there are a lot of changes. Focusing on this thread, there are three things of immediate interest:Hi Arun, Thanks for looking through these patches. I will chop them up a little and clean up the stuff you pointed out.
-> glibc generates augmentation identifying a signal frameIt should be recorded when the CFA program is run (I'd suggest a field like have_signal_frame_marker, not signal_frame), and the field needs to be appended). It would be useful if unw_is_signal_frame() could also use this information but, unfortunately, that isn't easy. The CFA is currently only looked up and parsed during a step.
-> the additional interface is_interrupted() and appended bit interrupted_frame Since (see above) unw_is_signal_frame() can't detect the CFI signal-frame marker, the code will likely want to first check for dwarf (and the marker) and if there isn't dwarf fall back to using unw_is_signal_frame() (so that non-dwarf frames will be handled correctly).
-> the dwarf CFA program has of-by-one errors (it needs to decrement the pc to find the correct debug info); if we've is_interrupted() working we've a portable way to handle that
and the changes take us in that direction. How ever, we've also got at least:
-> how the end-of-stack is identified-> how null pointers and null-descriptors are handled (in particular on x86-64) and what such a back trace looks like
Andrew
[Prev in Thread] | Current Thread | [Next in Thread] |