Clifford Wolf wrote:
Hi,
On Wed, Mar 16, 2005 at 01:50:32PM +0000, Joern RENNECKE wrote:
These can be provided in a separate module of the static libgcc, together
with allocation and deallocation of individual trampolines from the pool
(the latter has to be called from the epilogue of functions that use
initialize (and thus allocate) trampolines).
I also thought about that already. It's a good idea, but not good enough. :-(
what's about longjmp(), gotos from nested functions to their surrounding functions (with a complex calltree inbetween) and (c++) exceptions?
always preserving frame pointers, unrolling the stack frame by frame and executing this epilogues might be possible - but I don't think that we really want to go this way..
In a single-threaded environment, you treat the trampoline pool as a stack, and
when you allocate a new one, check first if there are any trampolines left at the
top that have a static chain pointer that points into deallocated data stack.
In (possibly) multithreaded environments, you could treat the trampolines as objects
with a destructor. Exception handling already knows how to call destructors while
unwinding the stack.