diff options
Diffstat (limited to 'ld/testsuite/ld-riscv-elf/ifunc-plt-got-overwrite.s')
-rw-r--r-- | ld/testsuite/ld-riscv-elf/ifunc-plt-got-overwrite.s | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/ld/testsuite/ld-riscv-elf/ifunc-plt-got-overwrite.s b/ld/testsuite/ld-riscv-elf/ifunc-plt-got-overwrite.s new file mode 100644 index 0000000..6c2f8e8 --- /dev/null +++ b/ld/testsuite/ld-riscv-elf/ifunc-plt-got-overwrite.s @@ -0,0 +1,38 @@ + .text + + .type foo_resolver, @function +foo_resolver: + ret + .size foo_resolver, .-foo_resolver + + .globl foo1 + .type foo1, %gnu_indirect_function + .set foo1, foo_resolver + + .globl foo2 + .type foo2, %gnu_indirect_function + .set foo2, foo_resolver + + .globl bar + .type bar, @function +bar: +.L1: + auipc x1, %got_pcrel_hi (foo1) +.ifdef __64_bit__ + ld x1, %pcrel_lo (.L1) (x1) +.else + lw x1, %pcrel_lo (.L1) (x1) +.endif + + call foo1 + call foo1@plt + +.L2: + auipc x2, %got_pcrel_hi (foo2) +.ifdef __64_bit__ + ld x2, %pcrel_lo (.L2) (x2) +.else + lw x2, %pcrel_lo (.L2) (x2) +.endif + ret + .size bar, .-bar |