summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-05 18:19:26 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-05 18:19:26 +0000
commit77ff57c87569b311a41b41072b38af21004dc7b2 (patch)
treed99bcd5da2f6437d8312957a5442aca23f22ce74
parentcd2784c7ed40f8d22d1904e94f2c84e631948a2d (diff)
downloadgcc-77ff57c87569b311a41b41072b38af21004dc7b2.tar.gz
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
-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
-rw-r--r--libjava/ChangeLog7
-rw-r--r--libjava/configure.host15
8 files changed, 60 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c33853b3d27..677e379a9d4 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 6d90a009cde..fa2957080ef 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 07f2a27a502..8d26dd24fb6 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 01821a12fe9..3792e11fe4c 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 9ddf2edfbc7..78026b51843 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 b9631709975..796c7bf87e5 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 257c011d1ad..10ae06b58c8 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 d84757f7928..41429d3cd11 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