mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
74437ea28f
On i386, IFUNC function must be called via PLT. Since PLT in PIC object uses EBX register, R_386_PLT32 relocation must be used to call IFUNC function even when IFUNC function is defined locally. Linker should issue an error when R_386_PC32 relocation is used to call IFUNC function. Since PR ld/19784 tests doesn't use PLT relocation to local IFUNC function, they are moved to the x86-64 test directory. bfd/ PR ld/14961 PR ld/20515 * elf32-i386.c (elf_i386_check_relocs): Issue an error when R_386_PC32 relocation is used to call IFUNC function in PIC object. ld/ PR ld/14961 PR ld/20515 * testsuite/ld-i386/i386.exp: Run pr20515. * testsuite/ld-i386/pr20515.d: New file. * testsuite/ld-i386/pr20515.s: Likewise. * testsuite/ld-ifunc/ifunc-14a.s: Use R_386_PLT32 to call IFUNC function. * testsuite/ld-ifunc/ifunc-14c.s: Likewise. * testsuite/ld-ifunc/ifunc-2-i386.s: Likewise. * testsuite/ld-ifunc/ifunc-2-local-i386.s: Likewise. * testsuite/ld-ifunc/ifunc.exp: Move PR ld/19784 tests to ... * testsuite/ld-x86-64/x86-64.exp: Here. * testsuite/ld-ifunc/pr19784a.c: Moved to ... * testsuite/ld-x86-64/pr19784a.c: Here. * testsuite/ld-ifunc/pr19784b.c: Moved to ... * testsuite/ld-x86-64/pr19784b.c: Here. * testsuite/ld-ifunc/pr19784c.c: Moved to ... * testsuite/ld-x86-64/pr19784c.c: Here.
22 lines
342 B
ArmAsm
22 lines
342 B
ArmAsm
.type foo, %gnu_indirect_function
|
|
.global __GI_foo
|
|
.hidden __GI_foo
|
|
.set __GI_foo, foo
|
|
.text
|
|
.globl foo
|
|
.type foo, @function
|
|
foo:
|
|
ret
|
|
.size foo, .-foo
|
|
.globl bar
|
|
.type bar, @function
|
|
bar:
|
|
call .L6
|
|
.L6:
|
|
popl %ebx
|
|
addl $_GLOBAL_OFFSET_TABLE_+[.-.L6], %ebx
|
|
call __GI_foo@PLT
|
|
leal __GI_foo@GOTOFF(%ebx), %eax
|
|
ret
|
|
.size bar, .-bar
|