Print this page
_locore_start needs to set up an 8-byte aligned stack
Sadly, during removal of special early-boot stacks
(027eb01d0ff8f66be55208b58ecd7cb2b7b27714) the stack passed into mlsetup
lost its 8-byte aligned-ness.

*** 121,137 **** orr r0, #0x1000 orr r0, #0x400000 mcr p15, 0, r0, c1, c0, 0 /* ! * mlsetup() takes the struct regs as an argument. main doesn't take any ! * and should never return. After the push below, we should have a ! * 8-byte aligned stack pointer. This is why we subtracted four earlier ! * on if we were 8-byte aligned. */ mov r9,#0 ! push { r9 } mov r0, sp bl mlsetup bl main /* NOTREACHED */ ldr r0,=__return_from_main --- 121,142 ---- orr r0, #0x1000 orr r0, #0x400000 mcr p15, 0, r0, c1, c0, 0 /* ! * mlsetup() takes the struct regs as an argument. main doesn't take ! * any and should never return. Currently, we have an 8-byte aligned ! * stack. We want to push a zero frame pointer to terminate any ! * stack walking, but that would cause us to end up with only a ! * 4-byte aligned stack. So, to keep things nice and correct, we ! * push a zero value twice - it's similar to a typical function ! * entry: ! * push { r9, lr } */ mov r9,#0 ! push { r9 } /* link register */ ! push { r9 } /* frame pointer */ mov r0, sp bl mlsetup bl main /* NOTREACHED */ ldr r0,=__return_from_main