https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70223
--- Comment #2 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> --- The ARM port does not use frame pointers unless specified on the command line or an actual need in the program (read alloca). With 4.8.5 I get with the command line options suggested *and* -fno-omit-frame-pointer which seems to be missed in the options provided in the PR, a number of which are completely redundant : readStream: @ args = 0, pretend = 0, frame = 8 @ frame_needed = 1, uses_anonymous_args = 0 stmfd sp!, {fp, lr} add fp, sp, #4 sub sp, sp, #16 mov lr, #0 sub r1, fp, #4 mov r2, #22 movw ip, #:lower16:doStreamReadBlock ldr r3, [r0] movt ip, #:upper16:doStreamReadBlock strb lr, [r1, #-1]! str r2, [sp] mov r2, #1 blx ip ldrb r0, [fp, #-5] @ zero_extendqisi2 sub sp, fp, #4 @ sp needed ldmfd sp!, {fp, pc} Not sure what's going on yet, probably worth a bisect / search between versions of the compiler in the 4.8 tree ... Note also that I don't see the problem on the 4.9, 5.X and trunk with the testcase provided.