https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66547

Richard Earnshaw <rearnsha at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #2 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
I presume you are talking about the function performance_suite_thread (the only
mention of a stack adjustment by 116 bytes).

By my calculations this function does not misalign the stack.

The sub sp, sp, #116 has to be read in context with the initial push
instruction.  116 is 29 words, the push instruction pushes 9 registers (36
bytes), making for a total of 38 words (152 bytes) of data: that's an even
multiple of 8 bytes, so if SP was aligned on entry to that function it will
still be aligned once the prologue code has completed.

Note that the code reads:

performance_suite_thread:
        // ABI Assertion: SP % 8 = 0

.LFB66:
        .loc 1 86 0
        .cfi_startproc
        @ args = 0, pretend = 0, frame = 72
        @ frame_needed = 0, uses_anonymous_args = 0
.LVL4:
        push    {r4, r5, r6, r7, r8, r9, r10, fp, lr}  // 9 words
        .cfi_def_cfa_offset 36
        .cfi_offset 4, -36
        .cfi_offset 5, -32
        .cfi_offset 6, -28
        .cfi_offset 7, -24
        .cfi_offset 8, -20
        .cfi_offset 9, -16
        .cfi_offset 10, -12
        .cfi_offset 11, -8
        .cfi_offset 14, -4
        .loc 1 115 0
        ldr     r3, .L37
        .loc 1 86 0
        sub     sp, sp, #116                         // + 29 words = 38 total
        .cfi_def_cfa_offset 152
        // ABI Assertion: SP % 8 = 0 if calls are made from this function.

Note that the .cfi_def_cfa_offset of 152 would appear to confirm this analysis:
the total change in the frame offsets is 152 bytes.

Reply via email to