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.




Reply via email to