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.