diff options
author | Richard Henderson <rth@redhat.com> | 2005-10-05 11:19:26 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-10-05 11:19:26 -0700 |
commit | d3073c70c5db2f657da6185f16662d14e3e32270 (patch) | |
tree | d99bcd5da2f6437d8312957a5442aca23f22ce74 /gcc | |
parent | 10dc6e8cea9ca2bef33572e27a196d87e772546b (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 15 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/eh/omit-frame-pointer.C | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C | 1 | ||||
-rw-r--r-- | gcc/toplev.c | 12 |
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. */ |