aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-10-05 11:19:26 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-10-05 11:19:26 -0700
commitd3073c70c5db2f657da6185f16662d14e3e32270 (patch)
treed99bcd5da2f6437d8312957a5442aca23f22ce74 /gcc
parent10dc6e8cea9ca2bef33572e27a196d87e772546b (diff)
downloadgcc-d3073c70c5db2f657da6185f16662d14e3e32270.zip
gcc-d3073c70c5db2f657da6185f16662d14e3e32270.tar.gz
gcc-d3073c70c5db2f657da6185f16662d14e3e32270.tar.bz2
re PR target/23602 (1081 test failures in libjava, when configured for i486-linux)
PR target/23602 * toplev.c (process_options): Warn about unsupported combinations of unwind tables and omit-frame-pointer. * config/i386/i386.c (override_options): Similarly. Enable accumulate-outgoing-args if not explicitly disabled. testsuite/ * g++.dg/eh/omit-frame-pointer.C: Remove i?86 specific options. * g++.dg/eh/omit-frame-pointer2.C: Likewise. libjava/ * configure.host (i?86-*): Set -fomit-frame-pointer in libgcj_flags, but not BACKTRACESPEC. (x86_64-*): Similarly. Don't set -ffloat-store in 64-bit mode. From-SVN: r105009
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c15
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/eh/omit-frame-pointer.C1
-rw-r--r--gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C1
-rw-r--r--gcc/toplev.c12
6 files changed, 41 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c33853b..677e379 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2005-10-05 Richard Henderson <rth@redhat.com>
+
+ PR target/23602
+ * toplev.c (process_options): Warn about unsupported combinations
+ of unwind tables and omit-frame-pointer.
+ * config/i386/i386.c (override_options): Similarly. Enable
+ accumulate-outgoing-args if not explicitly disabled.
+
2005-10-05 Steve Ellcey <sje@cup.hp.com>
* vect.md (vec_initv2si): Fix typo of V2SF to V2SI.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 6d90a00..fa29570 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -1653,6 +1653,21 @@ override_options (void)
&& !optimize_size)
target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS;
+ /* ??? Unwind info is not correct around the CFG unless either a frame
+ pointer is present or M_A_O_A is set. Fixing this requires rewriting
+ unwind info generation to be aware of the CFG and propagating states
+ around edges. */
+ if ((flag_unwind_tables || flag_asynchronous_unwind_tables
+ || flag_exceptions || flag_non_call_exceptions)
+ && flag_omit_frame_pointer
+ && !(target_flags & MASK_ACCUMULATE_OUTGOING_ARGS))
+ {
+ if (target_flags_explicit & MASK_ACCUMULATE_OUTGOING_ARGS)
+ warning (0, "unwind tables currently require either a frame pointer "
+ "or -maccumulate-outgoing-args for correctness");
+ target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS;
+ }
+
/* Figure out what ASM_GENERATE_INTERNAL_LABEL builds as a prefix. */
{
char *p;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 07f2a27..8d26dd2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-05 Richard Henderson <rth@redhat.com>
+
+ PR target/23602
+ * g++.dg/eh/omit-frame-pointer.C: Remove i?86 specific options.
+ * g++.dg/eh/omit-frame-pointer2.C: Likewise.
+
2005-10-05 Dale Johannesen <dalej@apple.com>
* gcc.c-torture/execute/float-floor.c: New.
diff --git a/gcc/testsuite/g++.dg/eh/omit-frame-pointer.C b/gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
index 01821a1..3792e11 100644
--- a/gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
+++ b/gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
@@ -1,6 +1,5 @@
// { dg-do run }
// { dg-options -fomit-frame-pointer }
-// { dg-options "-fomit-frame-pointer -mno-accumulate-outgoing-args" { target i?86-*-* } }
#include <iostream>
diff --git a/gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C b/gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
index 9ddf2ed..78026b5 100644
--- a/gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
+++ b/gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
@@ -1,6 +1,5 @@
// Reduced from PR c++/5246, PR c++/2447
// { dg-options "-O -fomit-frame-pointer" }
-// { dg-options "-O -fomit-frame-pointer -mno-accumulate-outgoing-args" { target i?86-*-* } }
// { dg-do run }
void step (int)
diff --git a/gcc/toplev.c b/gcc/toplev.c
index b963170..796c7bf 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1778,6 +1778,18 @@ process_options (void)
}
if (!flag_stack_protect)
warn_stack_protect = 0;
+
+ /* ??? Unwind info is not correct around the CFG unless either a frame
+ pointer is present or A_O_A is set. Fixing this requires rewriting
+ unwind info generation to be aware of the CFG and propagating states
+ around edges. */
+ if (flag_unwind_tables && !ACCUMULATE_OUTGOING_ARGS
+ && flag_omit_frame_pointer)
+ {
+ warning (0, "unwind tables currently requires a frame pointer "
+ "for correctness");
+ flag_omit_frame_pointer = 0;
+ }
}
/* Initialize the compiler back end. */