- , ?
bl check_position PC+4 check_position PC-. bl ARM PC .
ldr r1,=check_position . Ref1 ,
ldr r1,[pc, #offset]
...
offset:
.long check_position # absolute address from assemble/link.
, R0 , R1 . . , , ; , , . Ref2 , R0 R1 . pseudo code bl.
mov lr,pc ; pc is actually two instruction ahead.
add pc,pc,#branch_offset-8
, bl PC, lr. mov R0,PC, , PC 8 . adr R0,check_position, .
check_position:
adr r0, check_position
ldr r1, =check_position
cmp r0, r1
beq relocated_entry
Ref1: Arm op-codes .ltorg gnu-
Ref2: , Linux head.S ARM.
: ARM ARM, , -, +8, , . , adr , -op adr , .