47 lines
640 B
ArmAsm
47 lines
640 B
ArmAsm
|
.text
|
||
|
|
||
|
.type foo_resolver, @function
|
||
|
foo_resolver:
|
||
|
ret
|
||
|
.size foo_resolver, .-foo_resolver
|
||
|
|
||
|
.globl foo
|
||
|
.type foo, %gnu_indirect_function
|
||
|
.set foo, foo_resolver
|
||
|
|
||
|
.globl bar
|
||
|
.type bar, @function
|
||
|
bar:
|
||
|
.L1:
|
||
|
auipc x1, %got_pcrel_hi (foo)
|
||
|
.ifdef __64_bit__
|
||
|
ld x1, %pcrel_lo (.L1) (x1)
|
||
|
.else
|
||
|
lw x1, %pcrel_lo (.L1) (x1)
|
||
|
.endif
|
||
|
|
||
|
.L2:
|
||
|
auipc x2, %pcrel_hi (foo_addr)
|
||
|
.ifdef __64_bit__
|
||
|
ld x2, %pcrel_lo (.L2) (x2)
|
||
|
.else
|
||
|
lw x2, %pcrel_lo (.L2) (x2)
|
||
|
.endif
|
||
|
|
||
|
.L3:
|
||
|
auipc x3, %pcrel_hi (foo)
|
||
|
addi x3, x3, %pcrel_lo (.L3)
|
||
|
|
||
|
call foo
|
||
|
call foo@plt
|
||
|
ret
|
||
|
.size bar, .-bar
|
||
|
|
||
|
.data
|
||
|
foo_addr:
|
||
|
.ifdef __64_bit__
|
||
|
.quad foo
|
||
|
.else
|
||
|
.long foo
|
||
|
.endif
|