libunwind-devel
[Top][All Lists]
Advanced

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

Re: [Libunwind-devel] cursor.is_interrupted() or is_...


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:
Hi Arun,

Thanks for looking through these patches.
I will chop them up a little and clean up the stuff you pointed out.
Yes, there are a lot of changes. Focusing on this thread, there are three things of immediate interest:

-> glibc generates augmentation identifying a signal frame
It 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





reply via email to

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