From 8d0b6068b550226ed80e62af3bb5b3da171d7802 Mon Sep 17 00:00:00 2001 From: Dave Korn Date: Sat, 31 Jan 2009 17:34:03 +0000 Subject: [PATCH] re PR target/38952 (EH does not work.) 2009-01-31 Dave Korn PR target/38952 * config/i386/i386.c (ix86_builtin_setjmp_frame_value): New. (TARGET_BUILTIN_SETJMP_FRAME_VALUE): Override default to point at it. From-SVN: r143823 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/i386.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 96051f625a16..194b0f034054 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2009-01-31 Dave Korn + + PR target/38952 + * config/i386/i386.c (ix86_builtin_setjmp_frame_value): New. + (TARGET_BUILTIN_SETJMP_FRAME_VALUE): Override default to point + at it. + 2009-01-31 Richard Guenther PR tree-optimization/38937 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index c60ec5ab35e5..c7ddce103c7a 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -7497,6 +7497,17 @@ ix86_initial_elimination_offset (int from, int to) } } +/* In a dynamically-aligned function, we can't know the offset from + stack pointer to frame pointer, so we must ensure that setjmp + eliminates fp against the hard fp (%ebp) rather than trying to + index from %esp up to the top of the frame across a gap that is + of unknown (at compile-time) size. */ +static rtx +ix86_builtin_setjmp_frame_value (void) +{ + return stack_realign_fp ? hard_frame_pointer_rtx : virtual_stack_vars_rtx; +} + /* Fill structure ix86_frame about frame of currently computed function. */ static void @@ -29542,6 +29553,9 @@ ix86_enum_va_list (int idx, const char **pname, tree *ptree) #undef TARGET_MACHINE_DEPENDENT_REORG #define TARGET_MACHINE_DEPENDENT_REORG ix86_reorg +#undef TARGET_BUILTIN_SETJMP_FRAME_VALUE +#define TARGET_BUILTIN_SETJMP_FRAME_VALUE ix86_builtin_setjmp_frame_value + #undef TARGET_BUILD_BUILTIN_VA_LIST #define TARGET_BUILD_BUILTIN_VA_LIST ix86_build_builtin_va_list -- 2.47.2