Patchwork Diagnose pr54694

login
register
mail settings
Submitter Jakub Jelinek
Date Jan. 16, 2014, 6:21 p.m.
Message ID <20140116182142.GT892@tucnak.redhat.com>
Download mbox | patch
Permalink /patch/311815/
State New
Headers show

Comments

Jakub Jelinek - Jan. 16, 2014, 6:21 p.m.
On Thu, Jan 16, 2014 at 09:51:24AM -0800, Richard Henderson wrote:
> On 01/16/2014 09:35 AM, Jakub Jelinek wrote:
> > Wonder if the test should be turned into dg-do compile,
> > or perhaps a hack like:
> > int xmain() __asm__ ("main");
> > int xmain()
> > instead of
> > int main()
> > to avoid the dynamic stack realigning in main (limit the test to *linux*
> > then?), supply main written in assembly, something else?
> 
> 
> The __asm__ hack seems reasonable, although you'll also have to deal
> with __USER_LABEL_PREFIX__.

So like this?  Tested on x86_64 with
make -k check-gcc RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} i386.exp=pr9771-1.c'

2014-01-16  Jakub Jelinek  <jakub@redhat.com>

	PR debug/54694
	* gcc.target/i386/pr9771-1.c (main): Rename to...
	(real_main): ... this.  Add __asm name "main".
	(ASMNAME, ASMNAME2, STRING): Define.



	Jakub
Richard Henderson - Jan. 16, 2014, 6:37 p.m.
On 01/16/2014 10:21 AM, Jakub Jelinek wrote:
> So like this?  Tested on x86_64 with
> make -k check-gcc RUNTESTFLAGS='--target_board=unix\{-m32,-m64\} i386.exp=pr9771-1.c'
> 
> 2014-01-16  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR debug/54694
> 	* gcc.target/i386/pr9771-1.c (main): Rename to...
> 	(real_main): ... this.  Add __asm name "main".
> 	(ASMNAME, ASMNAME2, STRING): Define.

Looks good.


r~

Patch

--- gcc/testsuite/gcc.target/i386/pr9771-1.c.jj	2013-08-13 12:20:13.000000000 +0200
+++ gcc/testsuite/gcc.target/i386/pr9771-1.c	2014-01-16 19:17:24.807903910 +0100
@@ -45,7 +45,17 @@  void test(void)
   exit(0);
 }
 
-int main()
+/* main usually performs dynamic realignment of the stack in case
+   _start would fail to properly align the stack, but for dynamic
+   stack realignment we need frame pointer which is incompatible
+   with -ffixed-ebp and the global register var.  So, cheat here
+   and hide from the compiler that main is really main.  */
+#define ASMNAME(cname)  ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+#define ASMNAME2(prefix, cname) STRING (prefix) cname
+#define STRING(x)    #x
+int real_main() __asm (ASMNAME ("main"));
+
+int real_main()
 {
   test();
   return 0;