Re: Purpose of GCC Stack Padding?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> you are generating alignment compatible with the use of SSE parallel
> instructions. The stack, then, must be 16-byte aligned before entry and
> at exit, and also a buffer of 16 bytes or more must be 16-byte aligned.

Your assertion is that the padding is for 16-byte alignment, however
it appears to be more than that.  Let's take a specific example:

When the below function is compiled we see that the 19 bytes between
-53(%ebp) and (%esp == -72(%ebp)) is unused.

Why is 19 bytes of unused space stack space needed to pad something to
16-byte alignment?  One should never need more than 15 bytes, correct?

$ cat test.c

void function()
{
        char buffer[49];

        buffer[0]++; // to see where buffer is allocated
}

$ gcc -S test.c

$ cat test.s

        .file   "test.c"
        .text
.globl function
        .type   function, @function

function:

        // setup stack
        pushl   %ebp
        movl    %esp, %ebp
        subl    $72, %esp

        // setup stack check at -4(%ebp) .. (%ebp)
        movl    %gs:20, %eax
        movl    %eax, -4(%ebp)
        xorl    %eax, %eax

        // buffer is allocated at -53(%ebp) .. -4(%ebp)
        movzbl  -53(%ebp), %eax
        addl    $1, %eax
        movb    %al, -53(%ebp)

        // 19 BYTES BETWEEN -72(%esp) .. -53(%ebp) UNUSED ?

        // execute stack check
        movl    -4(%ebp), %eax
        xorl    %gs:20, %eax
        je      .L3
        call    __stack_chk_fail
.L3:

        // return
        leave
        ret

        .size   function, .-function
        .ident  "GCC: (GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu3)"
        .section        .note.GNU-stack,"",@progbits

$

Regards,
Andrew.

-- 
Andrew Tomazos <andrew@xxxxxxxxxxx> <http://www.tomazos.com>

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux