From 77ff57c87569b311a41b41072b38af21004dc7b2 Mon Sep 17 00:00:00 2001 From: rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Wed, 5 Oct 2005 18:19:26 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105009 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/i386.c | 15 +++++++++++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/eh/omit-frame-pointer.C | 1 - gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C | 1 - gcc/toplev.c | 12 ++++++++++++ libjava/ChangeLog | 7 +++++++ libjava/configure.host | 15 ++++++++++++--- 8 files changed, 60 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c33853b3d27e..677e379a9d48 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 6d90a009cde9..fa2957080eff 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 07f2a27a502e..8d26dd24fb6d 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 01821a12fe9f..3792e11fe4c9 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 9ddf2edfbc76..78026b518430 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 b96317099752..796c7bf87e54 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. */ diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 257c011d1add..10ae06b58c8b 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2005-10-05 Richard Henderson <rth@redhat.com> + + PR target/23602 + * 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. + 2005-10-02 Andrew Pinski <pinskia@physics.uc.edu> * testsuite/lib/jni.exp (gcj_jni_test_one): For diff --git a/libjava/configure.host b/libjava/configure.host index d84757f7928c..41429d3cd115 100644 --- a/libjava/configure.host +++ b/libjava/configure.host @@ -95,18 +95,27 @@ case "${host}" in ;; i686-*|i586-*|i486-*|i386-*) sysdeps_dir=i386 - libgcj_flags="${libgcj_flags} -ffloat-store" + # With -fomit-frame-pointer -maccumulate-outgoing-args (implied), + # the .text section of libgcj.so is 30k larger, and the .eh_frame + # section is 1.4M smaller. + libgcj_flags="${libgcj_flags} -ffloat-store -fomit-frame-pointer" libgcj_interpreter=yes libgcj_cxxflags= libgcj_cflags= DIVIDESPEC=-fno-use-divide-subroutine - BACKTRACESPEC=-fomit-frame-pointer enable_hash_synchronization_default=yes slow_pthread_self=yes ;; x86_64-*) sysdeps_dir=x86-64 - libgcj_flags="${libgcj_flags} -ffloat-store" + # For 64-bit we always use SSE registers for arithmetic, + # which doesn't have the extra precision problems of the fpu. + # But be careful about 32-bit multilibs. + case " $CC " in + *" -m32 "*) + libgcj_flags="${libgcj_flags} -ffloat-store" ;; + esac + libgcj_flags="${libgcj_flags} -fomit-frame-pointer" libgcj_cxxflags= libgcj_cflags= DIVIDESPEC=-f%{m32:no-}use-divide-subroutine -- GitLab