------- Comment #17 from dave dot korn dot cygwin at gmail dot com 2009-01-25 07:47 ------- And this is what I'll try:
-- Target Hook: bool TARGET_BUILTIN_SETJMP_FRAME_VALUE () This target hook should return an rtx that is used to store the address of the current frame into the built in `setjmp' buffer. The default value, `virtual_stack_vars_rtx', is correct for most machines. One reason you may need to define this target hook is if `hard_frame_pointer_rtx' is the appropriate value on your machine. (The first patch fixed all the failing eh testcases, but accessing the local variables downward through %ebp would mean they'd be misaligned, not starting down at the bottom of the frame, and differently aligned according to the dynamic component of the gap, so it would be bound to go wrong in situations involving vectors or other higher-alignment datatypes.) If I leave the can_eliminate test alone but define this target hook, I figure we should still get local vars indexed upward from $esp but will get the frame pointer indexed down from $ebp, or at least that's how I read the above. So hopefully a target hook that overrides the default return value with hard_frame_pointer_rtx if stack_realign_fp is true and otherwise returns virtual_stack_vars_rtx like the default might be what we're looking for. AFAICT it's not currently defined for i386. Need sleep nowzzzzzzZZZZZZZ... -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38952