aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Korn <dave.korn.cygwin@gmail.com>2009-01-31 17:34:03 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2009-01-31 09:34:03 -0800
commit8d0b6068b550226ed80e62af3bb5b3da171d7802 (patch)
tree36489c5c2d00d1f0307ed004016dc1b600764d43
parentb39dea08d9057f4e76e62e9ef58686da4deb67d9 (diff)
downloadgcc-8d0b6068b550226ed80e62af3bb5b3da171d7802.zip
gcc-8d0b6068b550226ed80e62af3bb5b3da171d7802.tar.gz
gcc-8d0b6068b550226ed80e62af3bb5b3da171d7802.tar.bz2
re PR target/38952 (EH does not work.)
2009-01-31 Dave Korn <dave.korn.cygwin@gmail.com> 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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c14
2 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 96051f6..194b0f0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-01-31 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ 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 <rguenther@suse.de>
PR tree-optimization/38937
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index c60ec5a..c7ddce1 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