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.