Link Register & Return
ARM Function Calls
BL Call Flow
Step 1: caller
main: BL add
Step 2: hardware saves LR
LR = return addr
Step 3: run function
add: ADD r0, r1
Step 4: return to caller
BX LR (jump back)
Key Concepts
BL instruction
Branch with Link
Saves return addr
in LR (r14)
BX LR
Branch to addr
stored in LR
Returns to caller
Nested Calls
Must PUSH LR first
PUSH {r3, lr}
POP {r3, pc}
POP into PC = return
r14 = LR
Always check LR in GDB