PR target/23602
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Oct 2005 18:19:26 +0000 (18:19 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Oct 2005 18:19:26 +0000 (18:19 +0000)
        * 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
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/eh/omit-frame-pointer.C
gcc/testsuite/g++.dg/eh/omit-frame-pointer2.C
gcc/toplev.c
libjava/ChangeLog
libjava/configure.host

index c33853b..677e379 100644 (file)
@@ -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.
index 6d90a00..fa29570 100644 (file)
@@ -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;
index 07f2a27..8d26dd2 100644 (file)
@@ -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.
index 01821a1..3792e11 100644 (file)
@@ -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>
 
index 9ddf2ed..78026b5 100644 (file)
@@ -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)
index b963170..796c7bf 100644 (file)
@@ -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.  */
index 257c011..10ae06b 100644 (file)
@@ -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
index d84757f..41429d3 100644 (file)
@@ -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