public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/15551] New: -mtune=pentium4  -O2 with sjlj EH breaks stack probe worker on windows32  targets
@ 2004-05-21 11:45 dannysmith at users dot sourceforge dot net
  2004-05-21 12:36 ` [Bug target/15551] [3.4/3.5? Regression] " pinskia at gcc dot gnu dot org
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: dannysmith at users dot sourceforge dot net @ 2004-05-21 11:45 UTC (permalink / raw)
  To: gcc-bugs

When following testcase is compiled with

g++ -O2 -mtune=pentium4

for a cygwin or mingw target, the executable segfaults.

When tuning switch is set to pentium3 or lower,
the executable works correctly.

This is observed on 3.4.0 and on trunk, but not on gcc-3.3.3

/* pm.cpp */
/* Testcase submitted by Hans Horn to mingw bug tracker */

#include <cstring>
#include <fstream>
using namespace std;

ostream* logfile;

//char expList[20000];

int main () {

  logfile = new ofstream("bar", ios::out);

  char expList[20000];
  strcpy(expList, "foo");

  return 0;
}

/* end pm.cpp */



The problem appears to be in scheduling pass moving
sjlj exception handling insns across call to the allocate
stack probe worker (_alloca) in the function prologue.

Here is the assembler output for main() prologue from
g++ -S -O2 -mtune=pentium4 pm.cpp

_main:
	pushl	%ebp
	movl	$20092, %eax
	movl	%esp, %ebp
	pushl	%edi
	pushl	%esi
	movl	$___gxx_personality_sj0, -20052(%ebp) <<<<
	movl	$LLSDA1484, -20048(%ebp)              <<<< 
	pushl	%ebx                                     
	movl	$L4, -20040(%ebp)                     <<<< 
	call	__alloca
	movl	$16, %eax
	andl	$-16, %esp
	call	__alloca
	leal	-24(%ebp), %eax
	movl	%eax, -20044(%ebp)
	leal	-20076(%ebp), %eax
	movl	%esp, -20036(%ebp)
	movl	%eax, (%esp)
	call	__Unwind_SjLj_Register
	call	___main
<snip>

The following patch fixes by restoring the gen_blockage
barrier in i386.c:ix86_expand_prologue that was removed at revision 1.608

http://gcc.gnu.org/ml/gcc-cvs/2003-10/msg00685.html


The patch was tested on i386-pc-mingw32 on 3.4.1 and trunk.

	* config/i386/i386.c (ix86_expand_prologue):  Ensure that scheduling 
pass does
	not move insns across __alloca call


Index: i386.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.c,v
retrieving revision 1.668
diff -c -3 -p -r1.668 i386.c
*** i386.c	17 May 2004 15:23:12 -0000	1.668
--- i386.c	20 May 2004 07:30:16 -0000
*************** ix86_expand_prologue (void)
*** 5295,5300 ****
--- 5295,5304 ----
  	  rtx t = plus_constant (stack_pointer_rtx, allocate);
  	  emit_move_insn (eax, gen_rtx_MEM (SImode, t));
  	}
+ 
+       /* Ensure that scheduling pass does not move insns across __alloca
+          call.  */
+       emit_insn (gen_blockage (const0_rtx));
      }
  
    if (frame.save_regs_using_mov && !TARGET_RED_ZONE)

-- 
           Summary: -mtune=pentium4  -O2 with sjlj EH breaks stack probe
                    worker on windows32  targets
           Product: gcc
           Version: 3.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dannysmith at users dot sourceforge dot net
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-mingw32
  GCC host triplet: i686-pc-mingw32
GCC target triplet: i686-pc-mingw32


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15551


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2004-06-22 22:16 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-21 11:45 [Bug target/15551] New: -mtune=pentium4 -O2 with sjlj EH breaks stack probe worker on windows32 targets dannysmith at users dot sourceforge dot net
2004-05-21 12:36 ` [Bug target/15551] [3.4/3.5? Regression] " pinskia at gcc dot gnu dot org
2004-05-29 22:47 ` mmitchel at gcc dot gnu dot org
2004-06-01 20:44 ` kcook at gcc dot gnu dot org
2004-06-07 20:01 ` kcook at gcc dot gnu dot org
2004-06-10 12:47 ` kcook at gcc dot gnu dot org
2004-06-10 13:43 ` mmitchel at gcc dot gnu dot org
2004-06-15 17:42 ` me at cgf dot cx
2004-06-19 17:47 ` mmitchel at gcc dot gnu dot org
2004-06-19 19:18 ` rth at gcc dot gnu dot org
2004-06-21 18:38 ` rth at gcc dot gnu dot org
2004-06-21 21:26 ` mmitchel at gcc dot gnu dot org
2004-06-21 22:52 ` cvs-commit at gcc dot gnu dot org
2004-06-22 21:47 ` cvs-commit at gcc dot gnu dot org
2004-06-22 22:16 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).