Patchwork nptl/tst-cleanupx4 fails with gcc-4.9.0 on i686

login
register
mail settings
Submitter Aurelien Jarno
Date Nov. 24, 2015, 7:32 a.m.
Message ID <20151124073207.GA29465@aurel32.net>
Download mbox | patch
Permalink /patch/9800/
State New
Headers show

Comments

Aurelien Jarno - Nov. 24, 2015, 7:32 a.m.
On 2015-05-05 09:34, Florian Weimer wrote:
> On 06/17/2014 02:59 PM, Aurelien Jarno wrote:
> 
> > So I do wonder what we should do on i386:
> > 
> > (a) Ignore the test on i386 similarly to ARM.
> > 
> > (b) Create tst-cleanupx4aux.c, which includes tst-cleanup4aux.c but is
> > built using -fexceptions, and use it to link with tst-cleanupx4.
> > 
> > Any opinion?
> 
> Do we know actually what causes the failure?  Why isn't this a real bug?

I have been able to determine the regression is caused by the following
patch on the gcc side:


commit d3536cda416e946adbe38d2f71fce378c6f17b63
Author: hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Thu Oct 3 17:25:42 2013 +0000

    	* i386.c (ix86_option_override_internal): Do not enable
    	accumulate-outgoing-args when producing unwind info.
    
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203171 138bc75d-0d04-0410-961f-82ee72b054a4

Patch

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 138d6c5..93cd63d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@ 
+2013-10-03  Jan Hubicka  <jh@suse.cz>
+
+	* i386.c (ix86_option_override_internal): Do not enable
+	accumulate-outgoing-args when producing unwind info.
+
 2013-10-03  Wei Mi  <wmi@google.com>
 
 	* lra-constraints.c (insert_move_for_subreg): New function
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 21fc531..09b0fc5 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -3793,28 +3793,11 @@  ix86_option_override_internal (bool main_args_p)
       }
 
   ix86_tune_mask = 1u << ix86_tune;
-  if ((!USE_IX86_FRAME_POINTER
-       || (x86_accumulate_outgoing_args & ix86_tune_mask))
+  if ((x86_accumulate_outgoing_args & ix86_tune_mask)
       && !(target_flags_explicit & MASK_ACCUMULATE_OUTGOING_ARGS)
       && !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 %saccumulate-outgoing-args%s for correctness",
-		 prefix, suffix);
-      target_flags |= MASK_ACCUMULATE_OUTGOING_ARGS;
-    }
-
   /* If stack probes are required, the space used for large function
      arguments on the stack must also be probed, so enable
      -maccumulate-outgoing-args so this happens in the prologue.  */