This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Stack Alignment Bug



I've managed to come up with a trivial example of the stack alignment
problem Steve Johnson pointed out some time ago.  

With the following code:

______________________________________________
int main(void)
{
  double s;
  if((((unsigned long) &s) & 0x7L)) {
          printf("main (%u)\n",((unsigned long)&s)&0x7L);
  }
  return 0;
}
-------------------------------------------------

I compile on an i686-linux-gnu(2.1.3) box using this weeks snapshot
(gcc-2.97 20001106) using 

-O0 -mpreferred-stack-boundary=X with X=2,3,4

I get 

main (4)

In all cases.  Perhaps more interesting is the fact that when I add
-save-temps, the resulting assembly code is independant of which
alignment I request (note the .align 16 )

-----------------------------------------------------------
	.file	"stack4.i"
	.version	"01.01"
gcc2_compiled.:
	.section	.rodata
.LC0:
	.string	"main (%u)\n"
	.text
	.align 16
.globl main
	.type	main,@function
main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$8, %esp
	leal	-8(%ebp), %eax
	andl	$7, %eax
	testl	%eax, %eax
	je	.L3
	leal	-8(%ebp), %eax
	andl	$7, %eax
	pushl	%eax
	pushl	$.LC0
	call	printf
	addl	$8, %esp
.L3:
	movl	$0, %eax
	movl	%ebp, %esp
	popl	%ebp
	ret
.Lfe1:
	.size	main,.Lfe1-main
	.ident	"GCC: (GNU) 2.97 20001106 (experimental)"

--------------------------------------------------------------

Could someone explain what's going on?

David

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]