This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
How to benefit from asynchronous unwind tables?
- From: Ewgenij Gawrilow <ewgenij dot gawrilow at o2online dot de>
- To: gcc-help at gcc dot gnu dot org
- Date: Fri, 16 Oct 2009 20:03:42 +0200
- Subject: How to benefit from asynchronous unwind tables?
Hello,
is somebody out there who has consciously used the asynchronous unwind
tables? The GCC documentation does not reveal much more about this
feature than the mere statement of its existence.
What I eventually need is the possibility to catch certain signals and
unwind a part of the stack down to a certain frame in a mixed C / C++
program.
A naive approach of throwing an exception from the signal handler does
not work, neither does a siglongjump from the handler unwind the stack
frames between it and the frame where sigsetjump was executed (although
some C++ ABI drafts suggested this behaviour).
The main problem is probably the kernel-generated frame of the signal
handler, lying between the frame where unwinding starts and the catching
frame. If I set up the signal handler to use the alternative stack,
this frame won't be an obstacle any more; but I didn't find any clue how
to tell the unwinding machinery (_Unwind_RaiseException and the
relatives) as it is implemented in libgcc, that it has to scan over a
different stack.
I'd deeply appreciate any helpful advice and tips. The solution needn't
be universally portable; I'll be overly glad to get it running under
Linux on i386 and x86_64, and in the further future, if possible, under
MacOS.
Best regards,
Ewgenij Gawrilow