In functions utilising varargs gcc generates the below prologue, which unfortunately results in movaps operating on a non 16byte aligned memory address. In this particular case we should either be ensuring alignment on the stack variable, or using movups. I have reason to believe, from discussion on #gcc that this bug may be present in mainline.
Thanks, Zwane /usr/bin/gcc -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/3.4.2/include/ -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -march=nocona -mno-red-zone -mcmodel=kernel -pipe -fno-reorder-blocks -Wno-sign-compare -fno-asynchronous-unwind-tables -funit-at-a-time -DMODULE -O2 -c -o test.o test.c int z_printf(int fd, const char * fmt, ...) { __asm__ __volatile__("nop"); return 0; } 0000000000000000 <z_printf>: 0: 48 81 ec b8 00 00 00 sub $0xb8,%rsp 7: 48 89 54 24 10 mov %rdx,0x10(%rsp) c: 0f b6 d0 movzbl %al,%edx f: 48 89 4c 24 18 mov %rcx,0x18(%rsp) 14: 48 8d 04 95 00 00 00 lea 0x0(,%rdx,4),%rax 1b: 00 1c: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 23: 4c 89 44 24 20 mov %r8,0x20(%rsp) 28: 48 29 c2 sub %rax,%rdx 2b: 48 8d 84 24 af 00 00 lea 0xaf(%rsp),%rax 32: 00 33: 4c 89 4c 24 28 mov %r9,0x28(%rsp) 38: ff e2 jmpq *%edx 3a: 0f 29 78 f1 movaps %xmm7,0xfffffffffffffff1(%rax) 3e: 0f 29 70 e1 movaps %xmm6,0xffffffffffffffe1(%rax) 42: 0f 29 68 d1 movaps %xmm5,0xffffffffffffffd1(%rax) 46: 0f 29 60 c1 movaps %xmm4,0xffffffffffffffc1(%rax) 4a: 0f 29 58 b1 movaps %xmm3,0xffffffffffffffb1(%rax) 4e: 0f 29 50 a1 movaps %xmm2,0xffffffffffffffa1(%rax) 52: 0f 29 48 91 movaps %xmm1,0xffffffffffffff91(%rax) 56: 0f 29 40 81 movaps %xmm0,0xffffffffffffff81(%rax) 5a: 90 nop 5b: 31 c0 xor %eax,%eax 5d: 48 81 c4 b8 00 00 00 add $0xb8,%rsp 64: c3 retq Giving us; > -0xb8 + 0xa5 + -15 -34 [0xffffffde] -- Summary: gcc generated movaps instruction used on unaligned stack variable Product: gcc Version: 3.4.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: zwane at arm dot linux dot org dot uk CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: x86_64-redhat-linux GCC host triplet: x86_64-redhat-linux GCC target triplet: x86_64-redhat-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21114