Skip to content
  • H.J. Lu's avatar
    x86; Allow IFUNC pointer defined in PDE · 4ec09950
    H.J. Lu authored
    If IFUNC symbol is defined in position-dependent executable, we should
    change it to the normal function and set its address to its PLT entry
    which should be resolved by R_*_IRELATIVE at run-time.  All external
    references should be resolved to its PLT in executable.
    
    bfd/
    
    	PR ld/23169
    	* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Don't issue
    	an error on IFUNC pointer defined in PDE.
    	* elf32-i386.c (elf_i386_finish_dynamic_symbol): Call
    	_bfd_x86_elf_link_fixup_ifunc_symbol.
    	* elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Likewise.
    	* elfxx-x86.c (_bfd_x86_elf_link_fixup_ifunc_symbol): New
    	function.
    	* elfxx-x86.h (_bfd_x86_elf_link_fixup_ifunc_symbol): New.
    
    ld/
    
    	PR ld/23169
    	* testsuite/ld-ifunc/ifunc-9-i386.d: New file.
    	* testsuite/ld-ifunc/ifunc-9-x86-64.d: Likewise.
    	* testsuite/ld-ifunc/pr23169a.c: Likewise.
    	* testsuite/ld-ifunc/pr23169a.rd: Likewise.
    	* testsuite/ld-ifunc/pr23169b.c: Likewise.
    	* testsuite/ld-ifunc/pr23169b.c: Likewise.
    	* testsuite/ld-ifunc/pr23169c.rd: Likewise.
    	* testsuite/ld-ifunc/pr23169c.rd: Likewise.
    	* testsuite/ld-ifunc/ifunc-9-x86.d: Removed.
    	* testsuite/ld-ifunc/ifunc.exp: Run PR ld/23169 tests.
    4ec09950