Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* store.exp failures
@ 2002-12-05 13:30 David Carlton
  2002-12-05 13:42 ` Daniel Jacobowitz
  0 siblings, 1 reply; 3+ messages in thread
From: David Carlton @ 2002-12-05 13:30 UTC (permalink / raw)
  To: gdb; +Cc: Andrew Cagney

When I run gdb.base/store.exp, (GCC 3.1, i686 Linux) I get tons and
tons of failures.  Looking into the log file, I see the following:

(gdb) break main
Breakpoint 1 at 0x80488f0: file gdb.base/store.c, line 233.
(gdb) run 
Starting program: /extra/gdb/mirror/src/gdb/testsuite/gdb.base/store 

Breakpoint 1, main () at gdb.base/store.c:233
233	  wack_struct_1 ();
(gdb) tbreak wack_char
Breakpoint 2 at 0x804849e: file gdb.base/store.c, line 46.
(gdb) PASS: gdb.base/store.exp: tbreak wack_char
continue
Continuing.

Program exited normally.

So, basically, it looks like some of the calls to the wack_XXX
functions are getting optimized out by the compiler, even though no
optimization flags are being passed.  Digging into the assembly
confirms this; the code for main starts off as follows:

main:
.LFB25:
	# store.c:215
	.loc 1 215 0
	# basic block 0
	pushl	%ebp
.LCFI67:
	movl	%esp, %ebp
.LCFI68:
	subl	$120, %esp
.LCFI69:
	andl	$-16, %esp
	movl	$0, %eax
	subl	%eax, %esp
	# store.c:233
	.loc 1 233 0
	leal	-10(%ebp), %eax
	movl	%eax, (%esp)
	call	wack_struct_1

I have no idea what to do about this.  The same thing happens with GCC
3.2.

For what it's worth, if I run it with GCC 2.95.3, I get FAILs on "new
up struct 1" and "new up struct 2", but everything else works.

(Incidentally, is 'wack' a typo for 'whack', or something else?)

David Carlton
carlton@math.stanford.edu


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

* Re: store.exp failures
  2002-12-05 13:30 store.exp failures David Carlton
@ 2002-12-05 13:42 ` Daniel Jacobowitz
  2002-12-05 13:51   ` David Carlton
  0 siblings, 1 reply; 3+ messages in thread
From: Daniel Jacobowitz @ 2002-12-05 13:42 UTC (permalink / raw)
  To: David Carlton; +Cc: gdb, Andrew Cagney

On Thu, Dec 05, 2002 at 01:30:54PM -0800, David Carlton wrote:
> When I run gdb.base/store.exp, (GCC 3.1, i686 Linux) I get tons and
> tons of failures.  Looking into the log file, I see the following:
> 
> (gdb) break main
> Breakpoint 1 at 0x80488f0: file gdb.base/store.c, line 233.
> (gdb) run 
> Starting program: /extra/gdb/mirror/src/gdb/testsuite/gdb.base/store 
> 
> Breakpoint 1, main () at gdb.base/store.c:233
> 233	  wack_struct_1 ();
> (gdb) tbreak wack_char
> Breakpoint 2 at 0x804849e: file gdb.base/store.c, line 46.
> (gdb) PASS: gdb.base/store.exp: tbreak wack_char
> continue
> Continuing.
> 
> Program exited normally.
> 
> So, basically, it looks like some of the calls to the wack_XXX
> functions are getting optimized out by the compiler, even though no
> optimization flags are being passed.  Digging into the assembly
> confirms this; the code for main starts off as follows:

Make the function non-static and it should work as expected...


-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


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

* Re: store.exp failures
  2002-12-05 13:42 ` Daniel Jacobowitz
@ 2002-12-05 13:51   ` David Carlton
  0 siblings, 0 replies; 3+ messages in thread
From: David Carlton @ 2002-12-05 13:51 UTC (permalink / raw)
  To: Daniel Jacobowitz; +Cc: gdb, Andrew Cagney, Fernando Nasser

On Thu, 5 Dec 2002 16:42:51 -0500, Daniel Jacobowitz <drow@mvista.com> said:
> On Thu, Dec 05, 2002 at 01:30:54PM -0800, David Carlton wrote:

>> So, basically, it looks like some of the calls to the wack_XXX
>> functions are getting optimized out by the compiler, even though no
>> optimization flags are being passed.

> Make the function non-static and it should work as expected...

Good call.  Here's a patch, which cures my GCC 3.x problems (though
the two GCC 2.95 failures remain; I have no idea if they're our fault
or GCC's).  Is it okay to commit?

David Carlton
carlton@math.stanford.edu

2002-12-05  David Carlton  <carlton@math.stanford.edu>

	* gdb.base/store.c: Don't declare functions static.

Index: store.c
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/store.c,v
retrieving revision 1.1
diff -u -p -r1.1 store.c
--- store.c	5 Dec 2002 01:48:19 -0000	1.1
+++ store.c	5 Dec 2002 21:48:24 -0000
@@ -2,37 +2,42 @@
    in the target.  This pretty much relies on the compiler taking heed
    of requests for values to be stored in registers.  */
 
-static char
+/* NOTE: carlton/2002-12-05: These functions were all static, but for
+   whatever reason that caused GCC 3.1 to optimize away some of the
+   function calls within main even when no optimization flags were
+   passed.  */
+
+char
 add_char (register char u, register char v)
 {
   return u + v;
 }
 
-static short
+short
 add_short (register short u, register short v)
 {
   return u + v;
 }
 
-static int
+int
 add_int (register int u, register int v)
 {
   return u + v;
 }
 
-static long
+long
 add_long (register long u, register long v)
 {
   return u + v;
 }
 
-static float
+float
 add_float (register float u, register float v)
 {
   return u + v;
 }
 
-static double
+double
 add_double (register double u, register double v)
 {
   return u + v;
@@ -40,7 +45,7 @@ add_double (register double u, register 
 
 /* */
 
-static char
+char
 wack_char (register char u, register char v)
 {
   register char l = u;
@@ -48,7 +53,7 @@ wack_char (register char u, register cha
   return l;
 }
 
-static short
+short
 wack_short (register short u, register short v)
 {
   register short l = u;
@@ -56,7 +61,7 @@ wack_short (register short u, register s
   return l;
 }
 
-static int
+int
 wack_int (register int u, register int v)
 {
   register int l = u;
@@ -64,7 +69,7 @@ wack_int (register int u, register int v
   return l;
 }
 
-static long
+long
 wack_long (register long u, register long v)
 {
   register long l = u;
@@ -72,7 +77,7 @@ wack_long (register long u, register lon
   return l;
 }
 
-static float
+float
 wack_float (register float u, register float v)
 {
   register float l = u;
@@ -80,7 +85,7 @@ wack_float (register float u, register f
   return l;
 }
 
-static double
+double
 wack_double (register double u, register double v)
 {
   register double l = u;
@@ -93,7 +98,7 @@ struct s_2 { short s[2]; } z_2, s_2;
 struct s_3 { short s[3]; } z_3, s_3;
 struct s_4 { short s[4]; } z_4, s_4;
 
-static struct s_1
+struct s_1
 add_struct_1 (struct s_1 s)
 {
   int i;
@@ -104,7 +109,7 @@ add_struct_1 (struct s_1 s)
   return s;
 }
 
-static struct s_2
+struct s_2
 add_struct_2 (struct s_2 s)
 {
   int i;
@@ -115,7 +120,7 @@ add_struct_2 (struct s_2 s)
   return s;
 }
 
-static struct s_3
+struct s_3
 add_struct_3 (struct s_3 s)
 {
   int i;
@@ -126,7 +131,7 @@ add_struct_3 (struct s_3 s)
   return s;
 }
 
-static struct s_4
+struct s_4
 add_struct_4 (struct s_4 s)
 {
   int i;
@@ -137,7 +142,7 @@ add_struct_4 (struct s_4 s)
   return s;
 }
 
-static struct s_1
+struct s_1
 wack_struct_1 (void)
 {
   int i; register struct s_1 u = z_1;
@@ -146,7 +151,7 @@ wack_struct_1 (void)
   return u;
 }
 
-static struct s_2
+struct s_2
 wack_struct_2 (void)
 {
   int i; register struct s_2 u = z_2;
@@ -155,7 +160,7 @@ wack_struct_2 (void)
   return u;
 }
 
-static struct s_3
+struct s_3
 wack_struct_3 (void)
 {
   int i; register struct s_3 u = z_3;
@@ -164,7 +169,7 @@ wack_struct_3 (void)
   return u;
 }
 
-static struct s_4
+struct s_4
 wack_struct_4 (void)
 {
   int i; register struct s_4 u = z_4;
@@ -180,28 +185,28 @@ struct f_2 {unsigned i:2;unsigned j:2;un
 struct f_3 {unsigned i:3;unsigned j:3;unsigned k:3; } f_3 = {1,1,1}, F_3;
 struct f_4 {unsigned i:4;unsigned j:4;unsigned k:4; } f_4 = {1,1,1}, F_4;
 
-static struct f_1
+struct f_1
 wack_field_1 (void)
 {
   register struct f_1 u = f_1;
   return u;
 }
 
-static struct f_2
+struct f_2
 wack_field_2 (void)
 {
   register struct f_2 u = f_2;
   return u;
 }
 
-static struct f_3
+struct f_3
 wack_field_3 (void)
 {
   register struct f_3 u = f_3;
   return u;
 }
 
-static struct f_4
+struct f_4
 wack_field_4 (void)
 {
   register struct f_4 u = f_4;


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

end of thread, other threads:[~2002-12-05 21:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-12-05 13:30 store.exp failures David Carlton
2002-12-05 13:42 ` Daniel Jacobowitz
2002-12-05 13:51   ` David Carlton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox