diff options
Diffstat (limited to 'ld/testsuite/ld-riscv-elf/ifunc-plt-02.s')
-rw-r--r-- | ld/testsuite/ld-riscv-elf/ifunc-plt-02.s | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/ld/testsuite/ld-riscv-elf/ifunc-plt-02.s b/ld/testsuite/ld-riscv-elf/ifunc-plt-02.s new file mode 100644 index 00000000000..c3022be0e08 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/ifunc-plt-02.s @@ -0,0 +1,46 @@ + .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 |