[Top][All Lists]
[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: |
Tue, 08 Jan 2008 15:11:53 -0500 |
User-agent: |
Thunderbird 2.0.0.9 (X11/20071115) |
Arun Sharma wrote:
On Jan 8, 2008 7:42 AM, Andrew Cagney <address@hidden
<mailto:address@hidden>> wrote:
what thoughts are there on adding a cursor method such as
is_interrupted() or is_caller() or ...? The implementation would
likely
involve the addition of an extra bit field to the cursor.
This sounds analogous to unw_is_signal_frame() - which is implemented
without an extra bit.
-Arun
It is related yes; consider the back-trace:
<signal> is_interrupted=1 is_signal=1 -- inner
handler() is_interrupted=1 is_signal=0
<signal> is_interrupted=0 is_signal=1
foo() is_interrupted=1 is_signal=0
main() is_interrupted=0 is_signal=0 -- outer
(Note that, in the above, the inner most frame has both is_interrupted
and is_signal as will occure when single stepping through the signal
trampoline. More typically just is_interrupted would be set.)
And we can see that is_interrupted() can be computed thus:
if (cursor is inner-most)
return 1; // innermost frame (implicitly interrupted)
else if (cursor's inner is_signal)
return 1; // interrupted by signal
else
return 0;
Unfortunatly the inner frame's state isn't available, so instead we
implement this by caching the computed value during the step vis:
init:
cursor.is_interrupted = 1;
step:
cursor.is_interrupted = inner.is_signal
we can then use cursor.is_interrupted to correctly handle:
From DWARF 3:
In most cases the return address is in the same context as the calling
address, but that need not
be the case, especially if the producer knows in some way the call
never will return. The context
of the 'return address' might be on a different line, in a different
lexical block, or past the end of
the calling subroutine. If a consumer were to assume that it was in
the same context as the
calling address, the unwind might fail.
Andrew