[Bug c/34001] New: Incorrect __attribute__ fastcall behavior
zia at aracnet dot com
gcc-bugzilla@gcc.gnu.org
Mon Nov 5 23:40:00 GMT 2007
4byte structures that are passed as parameters to a fastcall routine will get
passed as registers. This does not match the original fastcall convention,
which passes such structures on the stack.
Compiling this code:
#include <stdio.h>
typedef struct {
int a;
} my_struct;
int __attribute__((fastcall)) foo(my_struct s, int b)
{
return s.a + b;
}
main()
{
my_struct ss;
ss.a = 1;
printf("\nfoo = %d.\n",foo(ss,2));
}
Results in:
.
.
movl $1, -12(%ebp)
movl -12(%ebp), %ecx
movl $2, %edx
call _foo
.
.
and
.
.
.globl _foo
_foo:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl %ecx, -12(%ebp)
movl %edx, -16(%ebp)
movl -12(%ebp), %eax
addl -16(%ebp), %eax
leave
ret
With GCC.
Using other compilers that support fastcall will pass the struct value on the
stack.
--
Summary: Incorrect __attribute__ fastcall behavior
Product: gcc
Version: 4.0.1
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: zia at aracnet dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34001
More information about the Gcc-bugs
mailing list