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