This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] aarch64: Revert AArch64 ifunc changes.
- From: Marcus Shawcroft <marcus dot shawcroft at gmail dot com>
- To: Will Newton <will dot newton at linaro dot org>
- Cc: "binutils at sourceware dot org" <binutils at sourceware dot org>, patches at linaro dot org
- Date: Wed, 19 Jun 2013 10:56:03 +0100
- Subject: Re: [PATCH] aarch64: Revert AArch64 ifunc changes.
- References: <51C17647 dot 6090505 at linaro dot org>
Will, This is OK. Thanks Marcus
On 19 June 2013 10:13, Will Newton <will.newton@linaro.org> wrote:
>
> The AArch64 ifunc patch introduced a regression caused by incorrect
> PLT layout. Revert it until a fix is verified.
>
> bfd/ChangeLog:
>
> 2013-06-19 Will Newton <will.newton@linaro.org>
>
> * configure: Regenerated.
> * configure.in: Remove aarch64 dependency on elf-ifunc.c.
> * elf64-aarch64.c: Remove objalloc.h include.
> (elf64_aarch64_howto_dynrelocs): Remove R_AARCH64_IRELATIVE howto.
> (struct elf64_aarch64_link_hash_table): Remove ifunc related
> members. (elf_aarch64_local_htab_hash): Remove function.
> (elf_aarch64_local_htab_eq): Remove function.
> (elf_aarch64_get_local_sym_hash): Remove function.
> (elf64_aarch64_link_hash_table_create): Remove local hash
> table initialization.
> (elf64_aarch64_final_link_relocate): Remove sym argument and
> handling of ifunc symbols.
> (elf64_aarch64_relocate_section): Don't pass sym argument to
> elf64_aarch64_final_link_relocate.
> (elf64_aarch64_gc_sweep_hook): Remove handling of ifunc symbols.
> (elf64_aarch64_adjust_dynamic_symbol): Likewise.
> (elf64_aarch64_check_relocs): Likewise.
> (elf64_aarch64_post_process_headers): Remove call to
> _bfd_elf_set_osabi.
> (elf64_aarch64_is_function_type): New function.
> (elf64_aarch64_allocate_dynrelocs): Remove handling of ifunc
> symbols. (elf_aarch64_allocate_local_dynrelocs): Remove function.
> (elf64_aarch64_size_dynamic_sections): Remove call to
> elf_aarch64_allocate_local_dynrelocs.
> (elf64_aarch64_create_small_pltn_entry): Remove info argument.
> Remove creation of R_AARCH64_IRELATIVE dynamic relocs.
> (elf64_aarch64_finish_dynamic_symbol): Remove handling of ifunc
> symbols. (elf_aarch64_finish_local_dynamic_symbol): Remove
> function. (elf64_aarch64_finish_dynamic_sections): Remove call to
> elf_aarch64_finish_local_dynamic_symbol.
> (elf64_aarch64_add_symbol_hook): Remove function.
>
> include/elf/ChangeLog:
>
> 2013-06-19 Will Newton <will.newton@linaro.org>
>
> * aarch64.h: Remove R_AARCH64_IRELATIVE.
>
> ld/ChangeLog:
>
> 2013-06-19 Will Newton <will.newton@linaro.org>
>
> * emulparams/aarch64elf.sh: Remove IREL_IN_PLT.
>
> ld/testsuite/ChangeLog:
>
> 2013-06-19 Will Newton <will.newton@linaro.org>
>
> * ld-aarch64/aarch64-elf.exp: Remove ifunc tests.
> * ld-ifunc/ifunc.exp: Disable ifunc tests on AArch64.
> * ld-aarch64/ifunc-1-local.d: Remove.
> * ld-aarch64/ifunc-1-local.s: Likewise.
> * ld-aarch64/ifunc-1.d: Likewise.
> * ld-aarch64/ifunc-1.s: Likewise.
> * ld-aarch64/ifunc-10.d: Likewise.
> * ld-aarch64/ifunc-10.s: Likewise.
> * ld-aarch64/ifunc-11.d: Likewise.
> * ld-aarch64/ifunc-11.s: Likewise.
> * ld-aarch64/ifunc-12.d: Likewise.
> * ld-aarch64/ifunc-12.s: Likewise.
> * ld-aarch64/ifunc-13.d: Likewise.
> * ld-aarch64/ifunc-13a.s: Likewise.
> * ld-aarch64/ifunc-13b.s: Likewise.
> * ld-aarch64/ifunc-14a.d: Likewise.
> * ld-aarch64/ifunc-14a.s: Likewise.
> * ld-aarch64/ifunc-14b.d: Likewise.
> * ld-aarch64/ifunc-14b.s: Likewise.
> * ld-aarch64/ifunc-14c.d: Likewise.
> * ld-aarch64/ifunc-14c.s: Likewise.
> * ld-aarch64/ifunc-14d.d: Likewise.
> * ld-aarch64/ifunc-14e.d: Likewise.
> * ld-aarch64/ifunc-14f.d: Likewise.
> * ld-aarch64/ifunc-15.d: Likewise.
> * ld-aarch64/ifunc-15.s: Likewise.
> * ld-aarch64/ifunc-16.d: Likewise.
> * ld-aarch64/ifunc-16.s: Likewise.
> * ld-aarch64/ifunc-17a.d: Likewise.
> * ld-aarch64/ifunc-17a.s: Likewise.
> * ld-aarch64/ifunc-17b.d: Likewise.
> * ld-aarch64/ifunc-17b.s: Likewise.
> * ld-aarch64/ifunc-18a.d: Likewise.
> * ld-aarch64/ifunc-18a.s: Likewise.
> * ld-aarch64/ifunc-18b.d: Likewise.
> * ld-aarch64/ifunc-18b.s: Likewise.
> * ld-aarch64/ifunc-19a.d: Likewise.
> * ld-aarch64/ifunc-19a.s: Likewise.
> * ld-aarch64/ifunc-19b.d: Likewise.
> * ld-aarch64/ifunc-19b.s: Likewise.
> * ld-aarch64/ifunc-2-local.d: Likewise.
> * ld-aarch64/ifunc-2-local.s: Likewise.
> * ld-aarch64/ifunc-2.d: Likewise.
> * ld-aarch64/ifunc-2.s: Likewise.
> * ld-aarch64/ifunc-20.d: Likewise.
> * ld-aarch64/ifunc-20.s: Likewise.
> * ld-aarch64/ifunc-3.s: Likewise.
> * ld-aarch64/ifunc-3a.d: Likewise.
> * ld-aarch64/ifunc-3b.d: Likewise.
> * ld-aarch64/ifunc-4.d: Likewise.
> * ld-aarch64/ifunc-4.s: Likewise.
> * ld-aarch64/ifunc-4a.d: Likewise.
> * ld-aarch64/ifunc-5-local.s: Likewise.
> * ld-aarch64/ifunc-5.s: Likewise.
> * ld-aarch64/ifunc-5a-local.d: Likewise.
> * ld-aarch64/ifunc-5a.d: Likewise.
> * ld-aarch64/ifunc-5b-local.d: Likewise.
> * ld-aarch64/ifunc-5b.d: Likewise.
> * ld-aarch64/ifunc-5r-local.d: Likewise.
> * ld-aarch64/ifunc-6.s: Likewise.
> * ld-aarch64/ifunc-6a.d: Likewise.
> * ld-aarch64/ifunc-6b.d: Likewise.
> * ld-aarch64/ifunc-7.s: Likewise.
> * ld-aarch64/ifunc-7a.d: Likewise.
> * ld-aarch64/ifunc-7b.d: Likewise.
> * ld-aarch64/ifunc-7c.d: Likewise.
> * ld-aarch64/ifunc-8.d: Likewise.
> * ld-aarch64/ifunc-8a.s: Likewise.
> * ld-aarch64/ifunc-8b.s: Likewise.
> * ld-aarch64/ifunc-9.d: Likewise.
> * ld-aarch64/ifunc-9.s: Likewise.
> ---
> bfd/configure.in | 4 +-
> bfd/elf64-aarch64.c | 663 ++++---------------------------
> include/elf/aarch64.h | 3 +-
> ld/emulparams/aarch64elf.sh | 2 -
> ld/testsuite/ld-aarch64/aarch64-elf.exp | 41 --
> ld/testsuite/ld-aarch64/ifunc-1-local.d | 7 -
> ld/testsuite/ld-aarch64/ifunc-1-local.s | 13 -
> ld/testsuite/ld-aarch64/ifunc-1.d | 7 -
> ld/testsuite/ld-aarch64/ifunc-1.s | 16 -
> ld/testsuite/ld-aarch64/ifunc-10.d | 5 -
> ld/testsuite/ld-aarch64/ifunc-10.s | 25 --
> ld/testsuite/ld-aarch64/ifunc-11.d | 5 -
> ld/testsuite/ld-aarch64/ifunc-11.s | 26 --
> ld/testsuite/ld-aarch64/ifunc-12.d | 5 -
> ld/testsuite/ld-aarch64/ifunc-12.s | 24 --
> ld/testsuite/ld-aarch64/ifunc-13.d | 13 -
> ld/testsuite/ld-aarch64/ifunc-13a.s | 11 -
> ld/testsuite/ld-aarch64/ifunc-13b.s | 5 -
> ld/testsuite/ld-aarch64/ifunc-14a.d | 10 -
> ld/testsuite/ld-aarch64/ifunc-14a.s | 7 -
> ld/testsuite/ld-aarch64/ifunc-14b.d | 10 -
> ld/testsuite/ld-aarch64/ifunc-14b.s | 5 -
> ld/testsuite/ld-aarch64/ifunc-14c.d | 10 -
> ld/testsuite/ld-aarch64/ifunc-14c.s | 7 -
> ld/testsuite/ld-aarch64/ifunc-14d.d | 10 -
> ld/testsuite/ld-aarch64/ifunc-14e.d | 11 -
> ld/testsuite/ld-aarch64/ifunc-14f.d | 11 -
> ld/testsuite/ld-aarch64/ifunc-15.d | 12 -
> ld/testsuite/ld-aarch64/ifunc-15.s | 11 -
> ld/testsuite/ld-aarch64/ifunc-16.d | 9 -
> ld/testsuite/ld-aarch64/ifunc-16.s | 17 -
> ld/testsuite/ld-aarch64/ifunc-17a.d | 9 -
> ld/testsuite/ld-aarch64/ifunc-17a.s | 11 -
> ld/testsuite/ld-aarch64/ifunc-17b.d | 9 -
> ld/testsuite/ld-aarch64/ifunc-17b.s | 6 -
> ld/testsuite/ld-aarch64/ifunc-18a.d | 14 -
> ld/testsuite/ld-aarch64/ifunc-18a.s | 5 -
> ld/testsuite/ld-aarch64/ifunc-18b.d | 14 -
> ld/testsuite/ld-aarch64/ifunc-18b.s | 15 -
> ld/testsuite/ld-aarch64/ifunc-19a.d | 13 -
> ld/testsuite/ld-aarch64/ifunc-19a.s | 5 -
> ld/testsuite/ld-aarch64/ifunc-19b.d | 13 -
> ld/testsuite/ld-aarch64/ifunc-19b.s | 15 -
> ld/testsuite/ld-aarch64/ifunc-2-local.d | 9 -
> ld/testsuite/ld-aarch64/ifunc-2-local.s | 15 -
> ld/testsuite/ld-aarch64/ifunc-2.d | 9 -
> ld/testsuite/ld-aarch64/ifunc-2.s | 18 -
> ld/testsuite/ld-aarch64/ifunc-20.d | 12 -
> ld/testsuite/ld-aarch64/ifunc-20.s | 16 -
> ld/testsuite/ld-aarch64/ifunc-3.s | 16 -
> ld/testsuite/ld-aarch64/ifunc-3a.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-3b.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-4.d | 7 -
> ld/testsuite/ld-aarch64/ifunc-4.s | 18 -
> ld/testsuite/ld-aarch64/ifunc-4a.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-5-local.s | 19 -
> ld/testsuite/ld-aarch64/ifunc-5.s | 20 -
> ld/testsuite/ld-aarch64/ifunc-5a-local.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-5a.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-5b-local.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-5b.d | 12 -
> ld/testsuite/ld-aarch64/ifunc-5r-local.d | 10 -
> ld/testsuite/ld-aarch64/ifunc-6.s | 21 -
> ld/testsuite/ld-aarch64/ifunc-6a.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-6b.d | 12 -
> ld/testsuite/ld-aarch64/ifunc-7.s | 21 -
> ld/testsuite/ld-aarch64/ifunc-7a.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-7b.d | 8 -
> ld/testsuite/ld-aarch64/ifunc-7c.d | 19 -
> ld/testsuite/ld-aarch64/ifunc-8.d | 9 -
> ld/testsuite/ld-aarch64/ifunc-8a.s | 13 -
> ld/testsuite/ld-aarch64/ifunc-8b.s | 7 -
> ld/testsuite/ld-aarch64/ifunc-9.d | 3 -
> ld/testsuite/ld-aarch64/ifunc-9.s | 23 --
> ld/testsuite/ld-ifunc/ifunc.exp | 3 +-
> 75 files changed, 76 insertions(+), 1442 deletions(-)
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-1-local.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-1-local.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-1.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-1.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-10.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-10.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-11.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-11.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-12.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-12.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-13.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-13a.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-13b.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14a.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14b.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14c.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14c.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14d.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14e.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-14f.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-15.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-15.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-16.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-16.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-17a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-17a.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-17b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-17b.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-18a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-18a.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-18b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-18b.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-19a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-19a.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-19b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-19b.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-2-local.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-2-local.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-2.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-2.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-20.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-20.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-3.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-3a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-3b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-4.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-4.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-4a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-5-local.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-5.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-5a-local.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-5a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-5b-local.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-5b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-5r-local.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-6.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-6a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-6b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-7.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-7a.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-7b.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-7c.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-8.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-8a.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-8b.s
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-9.d
> delete mode 100644 ld/testsuite/ld-aarch64/ifunc-9.s
>
> diff --git a/bfd/configure.in b/bfd/configure.in
> index 89f68fd..ff14270 100644
> --- a/bfd/configure.in
> +++ b/bfd/configure.in
> @@ -859,7 +859,7 @@ do
> bfd_elf32_xtensa_be_vec) tb="$tb xtensa-isa.lo xtensa-modules.lo elf32-xtensa.lo elf32.lo $elf" ;;
> bfd_elf64_alpha_freebsd_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
> bfd_elf64_alpha_vec) tb="$tb elf64-alpha.lo elf64.lo $elf"; target_size=64 ;;
> - bfd_elf64_bigaarch64_vec) tb="$tb elf64-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
> + bfd_elf64_bigaarch64_vec) tb="$tb elf64-aarch64.lo elf64.lo $elf"; target_size=64 ;;
> bfd_elf64_big_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
> bfd_elf64_bigmips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
> bfd_elf64_hppa_linux_vec) tb="$tb elf64-hppa.lo elf64.lo $elf"; target_size=64 ;;
> @@ -868,7 +868,7 @@ do
> bfd_elf64_ia64_hpux_big_vec) tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
> bfd_elf64_ia64_little_vec) tb="$tb elf64-ia64.lo elfxx-ia64.lo elf64.lo $elf"; target_size=64 ;;
> bfd_elf64_ia64_vms_vec) tb="$tb elf64-ia64-vms.lo elf64-ia64.lo elfxx-ia64.lo elf64.lo vms-lib.lo vms-misc.lo $elf"; target_size=64 ;;
> - bfd_elf64_littleaarch64_vec)tb="$tb elf64-aarch64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;;
> + bfd_elf64_littleaarch64_vec)tb="$tb elf64-aarch64.lo elf64.lo $elf"; target_size=64 ;;
> bfd_elf64_little_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"; target_size=64 ;;
> bfd_elf64_littlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;;
> bfd_elf64_mmix_vec) tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;;
> diff --git a/bfd/elf64-aarch64.c b/bfd/elf64-aarch64.c
> index d6ecbb4..68f03fc 100644
> --- a/bfd/elf64-aarch64.c
> +++ b/bfd/elf64-aarch64.c
> @@ -142,7 +142,6 @@
> #include "bfd_stdint.h"
> #include "elf-bfd.h"
> #include "bfdlink.h"
> -#include "objalloc.h"
> #include "elf/aarch64.h"
>
> static bfd_reloc_status_type
> @@ -399,20 +398,6 @@ static reloc_howto_type elf64_aarch64_howto_dynrelocs[] =
> ALL_ONES, /* dst_mask */
> FALSE), /* pcrel_offset */
>
> - HOWTO (R_AARCH64_IRELATIVE, /* type */
> - 0, /* rightshift */
> - 2, /* size (0 = byte, 1 = short, 2 = long) */
> - 64, /* bitsize */
> - FALSE, /* pc_relative */
> - 0, /* bitpos */
> - complain_overflow_bitfield, /* complain_on_overflow */
> - bfd_elf_generic_reloc, /* special_function */
> - "R_AARCH64_IRELATIVE", /* name */
> - FALSE, /* partial_inplace */
> - 0, /* src_mask */
> - ALL_ONES, /* dst_mask */
> - FALSE), /* pcrel_offset */
> -
> };
>
> /* Note: code such as elf64_aarch64_reloc_type_lookup expect to use e.g.
> @@ -1879,15 +1864,6 @@ struct elf64_aarch64_link_hash_table
> loader via DT_TLSDESC_GOT. The magic value (bfd_vma) -1
> indicates an offset is not allocated. */
> bfd_vma dt_tlsdesc_got;
> -
> - /* Used by local STT_GNU_IFUNC symbols. */
> - htab_t loc_hash_table;
> - void * loc_hash_memory;
> -
> - /* The index of the next R_AARCH64_JUMP_SLOT entry in .rela.plt. */
> - bfd_vma next_jump_slot_index;
> - /* The index of the next R_AARCH64_IRELATIVE entry in .rela.plt. */
> - bfd_vma next_irelative_index;
> };
>
>
> @@ -1997,72 +1973,6 @@ stub_hash_newfunc (struct bfd_hash_entry *entry,
> return entry;
> }
>
> -/* Compute a hash of a local hash entry. We use elf_link_hash_entry
> - for local symbol so that we can handle local STT_GNU_IFUNC symbols
> - as global symbol. We reuse indx and dynstr_index for local symbol
> - hash since they aren't used by global symbols in this backend. */
> -
> -static hashval_t
> -elf_aarch64_local_htab_hash (const void *ptr)
> -{
> - struct elf_link_hash_entry *h
> - = (struct elf_link_hash_entry *) ptr;
> - return ELF_LOCAL_SYMBOL_HASH (h->indx, h->dynstr_index);
> -}
> -
> -/* Compare local hash entries. */
> -
> -static int
> -elf_aarch64_local_htab_eq (const void *ptr1, const void *ptr2)
> -{
> - struct elf_link_hash_entry *h1
> - = (struct elf_link_hash_entry *) ptr1;
> - struct elf_link_hash_entry *h2
> - = (struct elf_link_hash_entry *) ptr2;
> -
> - return h1->indx == h2->indx && h1->dynstr_index == h2->dynstr_index;
> -}
> -
> -/* Find and/or create a hash entry for local symbol. */
> -
> -static struct elf_link_hash_entry *
> -elf_aarch64_get_local_sym_hash (struct elf64_aarch64_link_hash_table *htab,
> - bfd *abfd, const Elf_Internal_Rela *rel,
> - bfd_boolean create)
> -{
> - struct elf64_aarch64_link_hash_entry e, *ret;
> - asection *sec = abfd->sections;
> - hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id,
> - ELF64_R_SYM (rel->r_info));
> - void **slot;
> -
> - e.root.indx = sec->id;
> - e.root.dynstr_index = ELF64_R_SYM (rel->r_info);
> - slot = htab_find_slot_with_hash (htab->loc_hash_table, &e, h,
> - create ? INSERT : NO_INSERT);
> -
> - if (!slot)
> - return NULL;
> -
> - if (*slot)
> - {
> - ret = (struct elf64_aarch64_link_hash_entry *) *slot;
> - return &ret->root;
> - }
> -
> - ret = (struct elf64_aarch64_link_hash_entry *)
> - objalloc_alloc ((struct objalloc *) htab->loc_hash_memory,
> - sizeof (struct elf64_aarch64_link_hash_entry));
> - if (ret)
> - {
> - memset (ret, 0, sizeof (*ret));
> - ret->root.indx = sec->id;
> - ret->root.dynstr_index = ELF64_R_SYM (rel->r_info);
> - ret->root.dynindx = -1;
> - *slot = ret;
> - }
> - return &ret->root;
> -}
>
> /* Copy the extra info we tack onto an elf_link_hash_entry. */
>
> @@ -2152,17 +2062,6 @@ elf64_aarch64_link_hash_table_create (bfd *abfd)
> return NULL;
> }
>
> - ret->loc_hash_table = htab_try_create (1024,
> - elf_aarch64_local_htab_hash,
> - elf_aarch64_local_htab_eq,
> - NULL);
> - ret->loc_hash_memory = objalloc_create ();
> - if (!ret->loc_hash_table || !ret->loc_hash_memory)
> - {
> - free (ret);
> - return NULL;
> - }
> -
> return &ret->root.root;
> }
>
> @@ -2174,11 +2073,6 @@ elf64_aarch64_hash_table_free (struct bfd_link_hash_table *hash)
> struct elf64_aarch64_link_hash_table *ret
> = (struct elf64_aarch64_link_hash_table *) hash;
>
> - if (ret->loc_hash_table)
> - htab_delete (ret->loc_hash_table);
> - if (ret->loc_hash_memory)
> - objalloc_free ((struct objalloc *) ret->loc_hash_memory);
> -
> bfd_hash_table_free (&ret->stub_hash_table);
> _bfd_elf_link_hash_table_free (hash);
> }
> @@ -3876,10 +3770,8 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto,
> struct elf_link_hash_entry *h,
> bfd_boolean *unresolved_reloc_p,
> bfd_boolean save_addend,
> - bfd_vma *saved_addend,
> - Elf_Internal_Sym *sym)
> + bfd_vma *saved_addend)
> {
> - Elf_Internal_Shdr *symtab_hdr;
> unsigned int r_type = howto->type;
> unsigned long r_symndx;
> bfd_byte *hit_data = contents + rel->r_offset;
> @@ -3890,8 +3782,6 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto,
>
> globals = elf64_aarch64_hash_table (info);
>
> - symtab_hdr = &elf_symtab_hdr (input_bfd);
> -
> BFD_ASSERT (is_aarch64_elf (input_bfd));
>
> r_symndx = ELF64_R_SYM (rel->r_info);
> @@ -3913,184 +3803,6 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto,
>
> weak_undef_p = (h ? h->root.type == bfd_link_hash_undefweak
> : bfd_is_und_section (sym_sec));
> -
> - /* Since STT_GNU_IFUNC symbol must go through PLT, we handle
> - it here if it is defined in a non-shared object. */
> - if (h != NULL
> - && h->type == STT_GNU_IFUNC
> - && h->def_regular)
> - {
> - asection *plt;
> - const char *name;
> - asection *base_got;
> - bfd_vma off;
> -
> - if ((input_section->flags & SEC_ALLOC) == 0
> - || h->plt.offset == (bfd_vma) -1)
> - abort ();
> -
> - /* STT_GNU_IFUNC symbol must go through PLT. */
> - plt = globals->root.splt ? globals->root.splt : globals->root.iplt;
> - value = (plt->output_section->vma + plt->output_offset + h->plt.offset);
> -
> - switch (r_type)
> - {
> - default:
> - if (h->root.root.string)
> - name = h->root.root.string;
> - else
> - name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
> - NULL);
> - (*_bfd_error_handler)
> - (_("%B: relocation %s against STT_GNU_IFUNC "
> - "symbol `%s' isn't handled by %s"), input_bfd,
> - howto->name, name, __FUNCTION__);
> - bfd_set_error (bfd_error_bad_value);
> - return FALSE;
> -
> - case R_AARCH64_ABS64:
> - if (rel->r_addend != 0)
> - {
> - if (h->root.root.string)
> - name = h->root.root.string;
> - else
> - name = bfd_elf_sym_name (input_bfd, symtab_hdr,
> - sym, NULL);
> - (*_bfd_error_handler)
> - (_("%B: relocation %s against STT_GNU_IFUNC "
> - "symbol `%s' has non-zero addend: %d"),
> - input_bfd, howto->name, name, rel->r_addend);
> - bfd_set_error (bfd_error_bad_value);
> - return FALSE;
> - }
> -
> - /* Generate dynamic relocation only when there is a
> - non-GOT reference in a shared object. */
> - if (info->shared && h->non_got_ref)
> - {
> - Elf_Internal_Rela outrel;
> - asection *sreloc;
> -
> - /* Need a dynamic relocation to get the real function
> - address. */
> - outrel.r_offset = _bfd_elf_section_offset (output_bfd,
> - info,
> - input_section,
> - rel->r_offset);
> - if (outrel.r_offset == (bfd_vma) -1
> - || outrel.r_offset == (bfd_vma) -2)
> - abort ();
> -
> - outrel.r_offset += (input_section->output_section->vma
> - + input_section->output_offset);
> -
> - if (h->dynindx == -1
> - || h->forced_local
> - || info->executable)
> - {
> - /* This symbol is resolved locally. */
> - outrel.r_info = ELF64_R_INFO (0, R_AARCH64_IRELATIVE);
> - outrel.r_addend = (h->root.u.def.value
> - + h->root.u.def.section->output_section->vma
> - + h->root.u.def.section->output_offset);
> - }
> - else
> - {
> - outrel.r_info = ELF64_R_INFO (h->dynindx, r_type);
> - outrel.r_addend = 0;
> - }
> -
> - sreloc = globals->root.irelifunc;
> - elf_append_rela (output_bfd, sreloc, &outrel);
> -
> - /* If this reloc is against an external symbol, we
> - do not want to fiddle with the addend. Otherwise,
> - we need to include the symbol value so that it
> - becomes an addend for the dynamic reloc. For an
> - internal symbol, we have updated addend. */
> - return bfd_reloc_ok;
> - }
> - return _bfd_final_link_relocate (howto, input_bfd, input_section,
> - contents, rel->r_offset, value,
> - signed_addend);
> -
> - case R_AARCH64_JUMP26:
> - case R_AARCH64_CALL26:
> - value = aarch64_resolve_relocation (r_type, place, value,
> - signed_addend, weak_undef_p);
> - return bfd_elf_aarch64_put_addend (input_bfd, hit_data, howto, value);
> -
> - case R_AARCH64_LD64_GOT_LO12_NC:
> - case R_AARCH64_ADR_GOT_PAGE:
> - case R_AARCH64_GOT_LD_PREL19:
> - base_got = globals->root.sgot;
> - off = h->got.offset;
> -
> - if (base_got == NULL)
> - abort ();
> -
> - if (off == (bfd_vma) -1)
> - {
> - bfd_vma plt_index;
> -
> - /* We can't use h->got.offset here to save state, or
> - even just remember the offset, as finish_dynamic_symbol
> - would use that as offset into .got. */
> -
> - if (globals->root.splt != NULL)
> - {
> - plt_index = h->plt.offset / globals->plt_entry_size - 1;
> - off = (plt_index + 3) * GOT_ENTRY_SIZE;
> - base_got = globals->root.sgotplt;
> - }
> - else
> - {
> - plt_index = h->plt.offset / globals->plt_entry_size;
> - off = plt_index * GOT_ENTRY_SIZE;
> - base_got = globals->root.igotplt;
> - }
> -
> - if (h->dynindx == -1
> - || h->forced_local
> - || info->symbolic)
> - {
> - /* This references the local defitionion. We must
> - initialize this entry in the global offset table.
> - Since the offset must always be a multiple of 8,
> - we use the least significant bit to record
> - whether we have initialized it already.
> -
> - When doing a dynamic link, we create a .rela.got
> - relocation entry to initialize the value. This
> - is done in the finish_dynamic_symbol routine. */
> - if ((off & 1) != 0)
> - off &= ~1;
> - else
> - {
> - bfd_put_64 (output_bfd, value,
> - base_got->contents + off);
> - /* Note that this is harmless for the GOTPLT64
> - case, as -1 | 1 still is -1. */
> - h->got.offset |= 1;
> - }
> - }
> - value = (base_got->output_section->vma
> - + base_got->output_offset + off);
> - }
> - else
> - value = aarch64_calculate_got_entry_vma (h, globals, info,
> - value, output_bfd,
> - unresolved_reloc_p);
> - value = aarch64_resolve_relocation (r_type, place, value,
> - 0, weak_undef_p);
> - return bfd_elf_aarch64_put_addend (input_bfd, hit_data, howto, value);
> -
> - case R_AARCH64_ADR_PREL_PG_HI21:
> - case R_AARCH64_ADD_ABS_LO12_NC:
> - break;
> - }
> - }
> -
> switch (r_type)
> {
> case R_AARCH64_NONE:
> @@ -4117,6 +3829,11 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto,
>
> *unresolved_reloc_p = FALSE;
>
> + sreloc = _bfd_elf_get_dynamic_reloc_section (input_bfd,
> + input_section, 1);
> + if (sreloc == NULL)
> + return bfd_reloc_notsupported;
> +
> skip = FALSE;
> relocate = FALSE;
>
> @@ -4153,14 +3870,10 @@ elf64_aarch64_final_link_relocate (reloc_howto_type *howto,
> outrel.r_addend += value;
> }
>
> - sreloc = elf_section_data (input_section)->sreloc;
> - if (sreloc == NULL || sreloc->contents == NULL)
> - return bfd_reloc_notsupported;
> -
> - loc = sreloc->contents + sreloc->reloc_count++ * RELOC_SIZE (globals);
> + loc = sreloc->contents + sreloc->reloc_count++ * RELOC_SIZE (htab);
> bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc);
>
> - if (sreloc->reloc_count * RELOC_SIZE (globals) > sreloc->size)
> + if (sreloc->reloc_count * RELOC_SIZE (htab) > sreloc->size)
> {
> /* Sanity to check that we have previously allocated
> sufficient space in the relocation section for the
> @@ -4571,20 +4284,6 @@ elf64_aarch64_relocate_section (bfd *output_bfd,
> }
>
> relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
> -
> - /* Relocate against local STT_GNU_IFUNC symbol. */
> - if (!info->relocatable
> - && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
> - {
> - h = elf_aarch64_get_local_sym_hash (globals, input_bfd,
> - rel, FALSE);
> - if (h == NULL)
> - abort ();
> -
> - /* Set STT_GNU_IFUNC symbol value. */
> - h->root.u.def.value = sym->st_value;
> - h->root.u.def.section = sec;
> - }
> }
> else
> {
> @@ -4674,7 +4373,7 @@ elf64_aarch64_relocate_section (bfd *output_bfd,
> input_section, contents, rel,
> relocation, info, sec,
> h, &unresolved_reloc,
> - save_addend, &addend, sym);
> + save_addend, &addend);
>
> switch (r_type)
> {
> @@ -5151,46 +4850,38 @@ elf64_aarch64_gc_sweep_hook (bfd *abfd,
> struct elf_link_hash_entry *h = NULL;
>
> r_symndx = ELF64_R_SYM (rel->r_info);
> +
> if (r_symndx >= symtab_hdr->sh_info)
> {
> + struct elf64_aarch64_link_hash_entry *eh;
> + struct elf_dyn_relocs **pp;
> + struct elf_dyn_relocs *p;
> +
> h = sym_hashes[r_symndx - symtab_hdr->sh_info];
> while (h->root.type == bfd_link_hash_indirect
> || h->root.type == bfd_link_hash_warning)
> h = (struct elf_link_hash_entry *) h->root.u.i.link;
> + eh = (struct elf64_aarch64_link_hash_entry *) h;
> +
> + for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
> + {
> + if (p->sec == sec)
> + {
> + /* Everything must go for SEC. */
> + *pp = p->next;
> + break;
> + }
> + }
> }
> else
> {
> - /* A local symbol. */
> Elf_Internal_Sym *isym;
>
> + /* A local symbol. */
> isym = bfd_sym_from_r_symndx (&htab->sym_cache,
> abfd, r_symndx);
> -
> - /* Check relocation against local STT_GNU_IFUNC symbol. */
> - if (isym != NULL
> - && ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
> - {
> - h = elf_aarch64_get_local_sym_hash (htab, abfd, rel, FALSE);
> - if (h == NULL)
> - abort ();
> - }
> - }
> -
> - if (h)
> - {
> - struct elf64_aarch64_link_hash_entry *eh;
> - struct elf_dyn_relocs **pp;
> - struct elf_dyn_relocs *p;
> -
> - eh = (struct elf64_aarch64_link_hash_entry *) h;
> -
> - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
> - if (p->sec == sec)
> - {
> - /* Everything must go for SEC. */
> - *pp = p->next;
> - break;
> - }
> + if (isym == NULL)
> + return FALSE;
> }
>
> r_type = ELF64_R_TYPE (rel->r_info);
> @@ -5219,12 +4910,6 @@ elf64_aarch64_gc_sweep_hook (bfd *abfd,
> {
> if (h->got.refcount > 0)
> h->got.refcount -= 1;
> -
> - if (h->type == STT_GNU_IFUNC)
> - {
> - if (h->plt.refcount > 0)
> - h->plt.refcount -= 1;
> - }
> }
> else if (locals != NULL)
> {
> @@ -5255,7 +4940,7 @@ elf64_aarch64_gc_sweep_hook (bfd *abfd,
> break;
>
> case R_AARCH64_ABS64:
> - if (h != NULL)
> + if (h != NULL && info->executable)
> {
> if (h->plt.refcount > 0)
> h->plt.refcount -= 1;
> @@ -5286,13 +4971,12 @@ elf64_aarch64_adjust_dynamic_symbol (struct bfd_link_info *info,
> /* If this is a function, put it in the procedure linkage table. We
> will fill in the contents of the procedure linkage table later,
> when we know the address of the .got section. */
> - if (h->type == STT_FUNC || h->type == STT_GNU_IFUNC || h->needs_plt)
> + if (h->type == STT_FUNC || h->needs_plt)
> {
> if (h->plt.refcount <= 0
> - || (h->type != STT_GNU_IFUNC
> - && (SYMBOL_CALLS_LOCAL (info, h)
> - || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
> - && h->root.type == bfd_link_hash_undefweak))))
> + || SYMBOL_CALLS_LOCAL (info, h)
> + || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
> + && h->root.type == bfd_link_hash_undefweak))
> {
> /* This case can occur if we saw a CALL26 reloc in
> an input file, but the symbol wasn't referred to
> @@ -5421,7 +5105,6 @@ elf64_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
> struct elf_link_hash_entry *h;
> unsigned long r_symndx;
> unsigned int r_type;
> - Elf_Internal_Sym *isym;
>
> r_symndx = ELF64_R_SYM (rel->r_info);
> r_type = ELF64_R_TYPE (rel->r_info);
> @@ -5434,31 +5117,7 @@ elf64_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
> }
>
> if (r_symndx < symtab_hdr->sh_info)
> - {
> - /* A local symbol. */
> - isym = bfd_sym_from_r_symndx (&htab->sym_cache,
> - abfd, r_symndx);
> - if (isym == NULL)
> - return FALSE;
> -
> - /* Check relocation against local STT_GNU_IFUNC symbol. */
> - if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
> - {
> - h = elf_aarch64_get_local_sym_hash (htab, abfd, rel,
> - TRUE);
> - if (h == NULL)
> - return FALSE;
> -
> - /* Fake a STT_GNU_IFUNC symbol. */
> - h->type = STT_GNU_IFUNC;
> - h->def_regular = 1;
> - h->ref_regular = 1;
> - h->forced_local = 1;
> - h->root.type = bfd_link_hash_defined;
> - }
> - else
> - h = NULL;
> - }
> + h = NULL;
> else
> {
> h = sym_hashes[r_symndx - symtab_hdr->sh_info];
> @@ -5471,37 +5130,6 @@ elf64_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
> h->root.non_ir_ref = 1;
> }
>
> - if (h != NULL)
> - {
> - /* Create the ifunc sections for static executables. If we
> - never see an indirect function symbol nor we are building
> - a static executable, those sections will be empty and
> - won't appear in output. */
> - switch (r_type)
> - {
> - default:
> - break;
> -
> - case R_AARCH64_ABS64:
> - case R_AARCH64_CALL26:
> - case R_AARCH64_JUMP26:
> - case R_AARCH64_LD64_GOT_LO12_NC:
> - case R_AARCH64_ADR_GOT_PAGE:
> - case R_AARCH64_GOT_LD_PREL19:
> - case R_AARCH64_ADR_PREL_PG_HI21:
> - case R_AARCH64_ADD_ABS_LO12_NC:
> - if (htab->root.dynobj == NULL)
> - htab->root.dynobj = abfd;
> - if (!_bfd_elf_create_ifunc_sections (htab->root.dynobj, info))
> - return FALSE;
> - break;
> - }
> -
> - /* It is referenced by a non-shared object. */
> - h->ref_regular = 1;
> - h->root.non_ir_ref = 1;
> - }
> -
> /* Could be done earlier, if h were already available. */
> r_type = aarch64_tls_transition (abfd, info, r_type, h, r_symndx);
>
> @@ -5563,6 +5191,7 @@ elf64_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
>
> asection *s;
> void **vpp;
> + Elf_Internal_Sym *isym;
>
> isym = bfd_sym_from_r_symndx (&htab->sym_cache,
> abfd, r_symndx);
> @@ -5712,10 +5341,7 @@ elf64_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info,
> continue;
>
> h->needs_plt = 1;
> - if (h->plt.refcount <= 0)
> - h->plt.refcount = 1;
> - else
> - h->plt.refcount += 1;
> + h->plt.refcount += 1;
> break;
> }
> }
> @@ -5859,14 +5485,14 @@ elf64_aarch64_find_inliner_info (bfd *abfd,
>
> static void
> elf64_aarch64_post_process_headers (bfd *abfd,
> - struct bfd_link_info *link_info)
> + struct bfd_link_info *link_info
> + ATTRIBUTE_UNUSED)
> {
> Elf_Internal_Ehdr *i_ehdrp; /* ELF file header, internal form. */
>
> i_ehdrp = elf_elfheader (abfd);
> + i_ehdrp->e_ident[EI_OSABI] = 0;
> i_ehdrp->e_ident[EI_ABIVERSION] = AARCH64_ELF_ABI_VERSION;
> -
> - _bfd_elf_set_osabi (abfd, link_info);
> }
>
> static enum elf_reloc_type_class
> @@ -6258,6 +5884,12 @@ elf64_aarch64_bfd_free_cached_info (bfd *abfd)
> return _bfd_free_cached_info (abfd);
> }
>
> +static bfd_boolean
> +elf64_aarch64_is_function_type (unsigned int type)
> +{
> + return type == STT_FUNC;
> +}
> +
> /* Create dynamic sections. This is different from the ARM backend in that
> the got, plt, gotplt and their relocation sections are all created in the
> standard part of the bfd elf backend. */
> @@ -6324,18 +5956,7 @@ elf64_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
> info = (struct bfd_link_info *) inf;
> htab = elf64_aarch64_hash_table (info);
>
> - eh = (struct elf64_aarch64_link_hash_entry *) h;
> -
> - /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
> - here if it is defined and referenced in a non-shared object. */
> - if (h->type == STT_GNU_IFUNC
> - && h->def_regular)
> - return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
> - &eh->dyn_relocs,
> - htab->plt_entry_size,
> - htab->plt_header_size,
> - GOT_ENTRY_SIZE);
> - else if (htab->root.dynamic_sections_created && h->plt.refcount > 0)
> + if (htab->root.dynamic_sections_created && h->plt.refcount > 0)
> {
> /* Make sure this symbol is output as a dynamic symbol.
> Undefined weak syms won't yet be marked as dynamic. */
> @@ -6406,6 +6027,7 @@ elf64_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
> h->needs_plt = 0;
> }
>
> + eh = (struct elf64_aarch64_link_hash_entry *) h;
> eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
>
> if (h->got.refcount > 0)
> @@ -6590,24 +6212,6 @@ elf64_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
> }
>
>
> -/* Allocate space in .plt, .got and associated reloc sections for
> - local dynamic relocs. */
> -
> -static bfd_boolean
> -elf_aarch64_allocate_local_dynrelocs (void **slot, void *inf)
> -{
> - struct elf_link_hash_entry *h
> - = (struct elf_link_hash_entry *) *slot;
> -
> - if (h->type != STT_GNU_IFUNC
> - || !h->def_regular
> - || !h->ref_regular
> - || !h->forced_local
> - || h->root.type != bfd_link_hash_defined)
> - abort ();
> -
> - return elf64_aarch64_allocate_dynrelocs (h, inf);
> -}
>
>
> /* This is the most important function of all . Innocuosly named
> @@ -6747,10 +6351,6 @@ elf64_aarch64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
> elf_link_hash_traverse (&htab->root, elf64_aarch64_allocate_dynrelocs,
> info);
>
> - /* Allocate .plt and .got entries, and space for local symbols. */
> - htab_traverse (htab->loc_hash_table,
> - elf_aarch64_allocate_local_dynrelocs,
> - info);
>
> /* For every jump slot reserved in the sgotplt, reloc_count is
> incremented. However, when we reserve space for TLS descriptors,
> @@ -6759,12 +6359,7 @@ elf64_aarch64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
> slot size. */
>
> if (htab->root.srelplt)
> - {
> - htab->sgotplt_jump_table_size = aarch64_compute_jump_table_size (htab);
> - htab->next_irelative_index = htab->root.srelplt->reloc_count - 1;
> - }
> - else if (htab->root.irelplt)
> - htab->next_irelative_index = htab->root.irelplt->reloc_count - 1;
> + htab->sgotplt_jump_table_size = aarch64_compute_jump_table_size (htab);
>
> if (htab->tlsdesc_plt)
> {
> @@ -6911,8 +6506,7 @@ elf64_aarch64_update_plt_entry (bfd *output_bfd,
> static void
> elf64_aarch64_create_small_pltn_entry (struct elf_link_hash_entry *h,
> struct elf64_aarch64_link_hash_table
> - *htab, bfd *output_bfd,
> - struct bfd_link_info *info)
> + *htab, bfd *output_bfd)
> {
> bfd_byte *plt_entry;
> bfd_vma plt_index;
> @@ -6921,50 +6515,17 @@ elf64_aarch64_create_small_pltn_entry (struct elf_link_hash_entry *h,
> bfd_vma plt_entry_address;
> Elf_Internal_Rela rela;
> bfd_byte *loc;
> - asection *plt, *gotplt, *relplt;
>
> - /* When building a static executable, use .iplt, .igot.plt and
> - .rela.iplt sections for STT_GNU_IFUNC symbols. */
> - if (htab->root.splt != NULL)
> - {
> - plt = htab->root.splt;
> - gotplt = htab->root.sgotplt;
> - relplt = htab->root.srelplt;
> - }
> - else
> - {
> - plt = htab->root.iplt;
> - gotplt = htab->root.igotplt;
> - relplt = htab->root.irelplt;
> - }
> -
> - /* Get the index in the procedure linkage table which
> - corresponds to this symbol. This is the index of this symbol
> - in all the symbols for which we are making plt entries. The
> - first entry in the procedure linkage table is reserved.
> + plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
>
> - Get the offset into the .got table of the entry that
> - corresponds to this function. Each .got entry is GOT_ENTRY_SIZE
> - bytes. The first three are reserved for the dynamic linker.
> -
> - For static executables, we don't reserve anything. */
> -
> - if (plt == htab->root.splt)
> - {
> - got_offset = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
> - got_offset = (got_offset + 3) * GOT_ENTRY_SIZE;
> - }
> - else
> - {
> - got_offset = h->plt.offset / htab->plt_entry_size;
> - got_offset = got_offset * GOT_ENTRY_SIZE;
> - }
> -
> - plt_entry = plt->contents + h->plt.offset;
> - plt_entry_address = plt->output_section->vma
> - + plt->output_section->output_offset + h->plt.offset;
> - gotplt_entry_address = gotplt->output_section->vma +
> - gotplt->output_offset + got_offset;
> + /* Offset in the GOT is PLT index plus got GOT headers(3)
> + times 8. */
> + got_offset = (plt_index + 3) * GOT_ENTRY_SIZE;
> + plt_entry = htab->root.splt->contents + h->plt.offset;
> + plt_entry_address = htab->root.splt->output_section->vma
> + + htab->root.splt->output_section->output_offset + h->plt.offset;
> + gotplt_entry_address = htab->root.sgotplt->output_section->vma +
> + htab->root.sgotplt->output_offset + got_offset;
>
> /* Copy in the boiler-plate for the PLTn entry. */
> memcpy (plt_entry, elf64_aarch64_small_plt_entry, PLT_SMALL_ENTRY_SIZE);
> @@ -6988,38 +6549,19 @@ elf64_aarch64_create_small_pltn_entry (struct elf_link_hash_entry *h,
>
> /* All the GOTPLT Entries are essentially initialized to PLT0. */
> bfd_put_64 (output_bfd,
> - plt->output_section->vma + plt->output_offset,
> - gotplt->contents + got_offset);
> + (htab->root.splt->output_section->vma
> + + htab->root.splt->output_offset),
> + htab->root.sgotplt->contents + got_offset);
>
> + /* Fill in the entry in the .rela.plt section. */
> rela.r_offset = gotplt_entry_address;
> -
> - if (h->dynindx == -1
> - || ((info->executable
> - || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
> - && h->def_regular
> - && h->type == STT_GNU_IFUNC))
> - {
> - /* If an STT_GNU_IFUNC symbol is locally defined, generate
> - R_AARCH64_IRELATIVE instead of R_AARCH64_JUMP_SLOT. */
> - rela.r_info = ELF64_R_INFO (0, R_AARCH64_IRELATIVE);
> - rela.r_addend = (h->root.u.def.value
> - + h->root.u.def.section->output_section->vma
> - + h->root.u.def.section->output_offset);
> - /* R_AARCH64_IRELATIVE comes last. */
> - plt_index = htab->next_irelative_index--;
> - }
> - else
> - {
> - /* Fill in the entry in the .rela.plt section. */
> - rela.r_info = ELF64_R_INFO (h->dynindx, R_AARCH64_JUMP_SLOT);
> - rela.r_addend = 0;
> - plt_index = htab->next_jump_slot_index++;
> - }
> + rela.r_info = ELF64_R_INFO (h->dynindx, R_AARCH64_JUMP_SLOT);
> + rela.r_addend = 0;
>
> /* Compute the relocation entry to used based on PLT index and do
> not adjust reloc_count. The reloc_count has already been adjusted
> to account for this entry. */
> - loc = relplt->contents + plt_index * RELOC_SIZE (htab);
> + loc = htab->root.srelplt->contents + plt_index * RELOC_SIZE (htab);
> bfd_elf64_swap_reloca_out (output_bfd, &rela, loc);
> }
>
> @@ -7079,38 +6621,15 @@ elf64_aarch64_finish_dynamic_symbol (bfd *output_bfd,
>
> if (h->plt.offset != (bfd_vma) - 1)
> {
> - asection *plt, *gotplt, *relplt;
> -
> /* This symbol has an entry in the procedure linkage table. Set
> it up. */
>
> - /* When building a static executable, use .iplt, .igot.plt and
> - .rela.iplt sections for STT_GNU_IFUNC symbols. */
> - if (htab->root.splt != NULL)
> - {
> - plt = htab->root.splt;
> - gotplt = htab->root.sgotplt;
> - relplt = htab->root.srelplt;
> - }
> - else
> - {
> - plt = htab->root.iplt;
> - gotplt = htab->root.igotplt;
> - relplt = htab->root.irelplt;
> - }
> -
> - /* This symbol has an entry in the procedure linkage table. Set
> - it up. */
> - if ((h->dynindx == -1
> - && !((h->forced_local || info->executable)
> - && h->def_regular
> - && h->type == STT_GNU_IFUNC))
> - || plt == NULL
> - || gotplt == NULL
> - || relplt == NULL)
> + if (h->dynindx == -1
> + || htab->root.splt == NULL
> + || htab->root.sgotplt == NULL || htab->root.srelplt == NULL)
> abort ();
>
> - elf64_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
> + elf64_aarch64_create_small_pltn_entry (h, htab, output_bfd);
> if (!h->def_regular)
> {
> /* Mark the symbol as undefined, rather than as defined in
> @@ -7195,21 +6714,6 @@ elf64_aarch64_finish_dynamic_symbol (bfd *output_bfd,
> return TRUE;
> }
>
> -/* Finish up local dynamic symbol handling. We set the contents of
> - various dynamic sections here. */
> -
> -static bfd_boolean
> -elf_aarch64_finish_local_dynamic_symbol (void **slot, void *inf)
> -{
> - struct elf_link_hash_entry *h
> - = (struct elf_link_hash_entry *) *slot;
> - struct bfd_link_info *info
> - = (struct bfd_link_info *) inf;
> -
> - return elf64_aarch64_finish_dynamic_symbol (info->output_bfd,
> - info, h, NULL);
> -}
> -
> static void
> elf64_aarch64_init_small_plt0_entry (bfd *output_bfd ATTRIBUTE_UNUSED,
> struct elf64_aarch64_link_hash_table
> @@ -7452,11 +6956,6 @@ elf64_aarch64_finish_dynamic_sections (bfd *output_bfd,
> elf_section_data (htab->root.sgot->output_section)->this_hdr.sh_entsize
> = GOT_ENTRY_SIZE;
>
> - /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols. */
> - htab_traverse (htab->loc_hash_table,
> - elf_aarch64_finish_local_dynamic_symbol,
> - info);
> -
> return TRUE;
> }
>
> @@ -7470,24 +6969,6 @@ elf64_aarch64_plt_sym_val (bfd_vma i, const asection *plt,
> return plt->vma + PLT_ENTRY_SIZE + i * PLT_SMALL_ENTRY_SIZE;
> }
>
> -/* Hook called by the linker routine which adds symbols from an object
> - file. */
> -
> -static bfd_boolean
> -elf64_aarch64_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
> - Elf_Internal_Sym *sym,
> - const char **namep ATTRIBUTE_UNUSED,
> - flagword *flagsp ATTRIBUTE_UNUSED,
> - asection **secp ATTRIBUTE_UNUSED,
> - bfd_vma *valp ATTRIBUTE_UNUSED)
> -{
> - if ((abfd->flags & DYNAMIC) == 0
> - && (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC
> - || ELF_ST_BIND (sym->st_info) == STB_GNU_UNIQUE))
> - elf_tdata (info->output_bfd)->has_gnu_symbols = TRUE;
> -
> - return TRUE;
> -}
>
> /* We use this so we can override certain functions
> (though currently we don't). */
> @@ -7594,6 +7075,9 @@ const struct elf_size_info elf64_aarch64_size_info =
> #define elf_backend_init_index_section \
> _bfd_elf_init_2_index_sections
>
> +#define elf_backend_is_function_type \
> + elf64_aarch64_is_function_type
> +
> #define elf_backend_finish_dynamic_sections \
> elf64_aarch64_finish_dynamic_sections
>
> @@ -7633,9 +7117,6 @@ const struct elf_size_info elf64_aarch64_size_info =
> #define elf_backend_size_info \
> elf64_aarch64_size_info
>
> -#define elf_backend_add_symbol_hook \
> - elf64_aarch64_add_symbol_hook
> -
> #define elf_backend_can_refcount 1
> #define elf_backend_can_gc_sections 1
> #define elf_backend_plt_readonly 1
> diff --git a/include/elf/aarch64.h b/include/elf/aarch64.h
> index ebbdf8c..a7b86c1 100644
> --- a/include/elf/aarch64.h
> +++ b/include/elf/aarch64.h
> @@ -208,8 +208,7 @@ RELOC_NUMBER (R_AARCH64_TLS_DTPMOD64, 1028)
> RELOC_NUMBER (R_AARCH64_TLS_DTPREL64, 1029)
> RELOC_NUMBER (R_AARCH64_TLS_TPREL64, 1030)
> RELOC_NUMBER (R_AARCH64_TLSDESC, 1031)
> -RELOC_NUMBER (R_AARCH64_IRELATIVE, 1032)
> -FAKE_RELOC (R_AARCH64_dyn_max, 1033)
> +FAKE_RELOC (R_AARCH64_dyn_max, 1032)
>
> END_RELOC_NUMBERS (R_AARCH64_end)
>
> diff --git a/ld/emulparams/aarch64elf.sh b/ld/emulparams/aarch64elf.sh
> index 99f4844..53ccd6a 100644
> --- a/ld/emulparams/aarch64elf.sh
> +++ b/ld/emulparams/aarch64elf.sh
> @@ -18,8 +18,6 @@ MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
> ENTRY=_start
> EMBEDDED=yes
> SEPARATE_GOTPLT=24
> -IREL_IN_PLT=
> -
> TEXT_START_ADDR=0x00400000
>
> DATA_START_SYMBOLS='__data_start = . ;';
> diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
> index 5c150dd..d687cc2 100644
> --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
> +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
> @@ -114,44 +114,3 @@ run_dump_test "gc-tls-relocs"
> run_dump_test "gc-plt-relocs"
> run_dump_test "gc-relocs-257-dyn"
> run_dump_test "gc-relocs-257"
> -
> -# ifunc tests
> -run_dump_test "ifunc-1"
> -run_dump_test "ifunc-1-local"
> -run_dump_test "ifunc-2"
> -run_dump_test "ifunc-2-local"
> -run_dump_test "ifunc-3a"
> -run_dump_test "ifunc-3b"
> -run_dump_test "ifunc-4"
> -run_dump_test "ifunc-4a"
> -run_dump_test "ifunc-5a"
> -run_dump_test "ifunc-5b"
> -run_dump_test "ifunc-5a-local"
> -run_dump_test "ifunc-5b-local"
> -run_dump_test "ifunc-5r-local"
> -run_dump_test "ifunc-6a"
> -run_dump_test "ifunc-6b"
> -run_dump_test "ifunc-7a"
> -run_dump_test "ifunc-7b"
> -run_dump_test "ifunc-7c"
> -run_dump_test "ifunc-8"
> -run_dump_test "ifunc-9"
> -run_dump_test "ifunc-10"
> -run_dump_test "ifunc-11"
> -run_dump_test "ifunc-12"
> -run_dump_test "ifunc-13"
> -run_dump_test "ifunc-14a"
> -run_dump_test "ifunc-14b"
> -run_dump_test "ifunc-14c"
> -run_dump_test "ifunc-14d"
> -run_dump_test "ifunc-14e"
> -run_dump_test "ifunc-14f"
> -run_dump_test "ifunc-15"
> -run_dump_test "ifunc-16"
> -run_dump_test "ifunc-17a"
> -run_dump_test "ifunc-17b"
> -run_dump_test "ifunc-18a"
> -run_dump_test "ifunc-18b"
> -run_dump_test "ifunc-19a"
> -run_dump_test "ifunc-19b"
> -run_dump_test "ifunc-20"
> diff --git a/ld/testsuite/ld-aarch64/ifunc-1-local.d b/ld/testsuite/ld-aarch64/ifunc-1-local.d
> deleted file mode 100644
> index a3054bd..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-1-local.d
> +++ /dev/null
> @@ -1,7 +0,0 @@
> -#ld: -shared
> -#objdump: -dw
> -#target: aarch64*-*-*
> -
> -#...
> -[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x[0-9a-f]+@plt>
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-1-local.s b/ld/testsuite/ld-aarch64/ifunc-1-local.s
> deleted file mode 100644
> index 7b9d117..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-1-local.s
> +++ /dev/null
> @@ -1,13 +0,0 @@
> - .type foo, %gnu_indirect_function
> - .set __GI_foo, foo
> - .text
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> -.globl bar
> - .type bar, @function
> -bar:
> - bl __GI_foo
> - ret
> - .size bar, .-bar
> diff --git a/ld/testsuite/ld-aarch64/ifunc-1.d b/ld/testsuite/ld-aarch64/ifunc-1.d
> deleted file mode 100644
> index a3054bd..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-1.d
> +++ /dev/null
> @@ -1,7 +0,0 @@
> -#ld: -shared
> -#objdump: -dw
> -#target: aarch64*-*-*
> -
> -#...
> -[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x[0-9a-f]+@plt>
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-1.s b/ld/testsuite/ld-aarch64/ifunc-1.s
> deleted file mode 100644
> index 6f86c8a..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-1.s
> +++ /dev/null
> @@ -1,16 +0,0 @@
> - .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:
> - bl __GI_foo
> - ret
> - .size bar, .-bar
> diff --git a/ld/testsuite/ld-aarch64/ifunc-10.d b/ld/testsuite/ld-aarch64/ifunc-10.d
> deleted file mode 100644
> index 782b078..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-10.d
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -#ld: -e bar --gc-sections
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -There are no relocations in this file.
> diff --git a/ld/testsuite/ld-aarch64/ifunc-10.s b/ld/testsuite/ld-aarch64/ifunc-10.s
> deleted file mode 100644
> index 10468c1..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-10.s
> +++ /dev/null
> @@ -1,25 +0,0 @@
> - .section .text.foo,"ax",@progbits
> - .type foo, @function
> -foo:
> - .global foo
> - adrp x0, :got:ifunc
> - ldr x0, [x0, #:got_lo12:ifunc]
> - bl ifunc
> - adrp x0, xxx
> - add x0, x0, :lo12:xxx
> - ret
> -
> - .section .text.bar,"ax",@progbits
> - .type bar, @function
> -bar:
> - .global bar
> - ret
> -
> - .section .text.ifunc,"ax",@progbits
> - .type ifunc, @gnu_indirect_function
> -ifunc:
> - ret
> -
> - .section .data.foo,"aw",@progbits
> -xxx:
> - .quad ifunc
> diff --git a/ld/testsuite/ld-aarch64/ifunc-11.d b/ld/testsuite/ld-aarch64/ifunc-11.d
> deleted file mode 100644
> index 782b078..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-11.d
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -#ld: -e bar --gc-sections
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -There are no relocations in this file.
> diff --git a/ld/testsuite/ld-aarch64/ifunc-11.s b/ld/testsuite/ld-aarch64/ifunc-11.s
> deleted file mode 100644
> index e1820de..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-11.s
> +++ /dev/null
> @@ -1,26 +0,0 @@
> - .section .text.foo,"ax",@progbits
> - .type foo, @function
> -foo:
> - .global foo
> - adrp x0, :got:ifunc
> - ldr x0, [x0, #:got_lo12:ifunc]
> - bl ifunc
> - adrp x0, xxx
> - add x0, x0, :lo12:xxx
> - ret
> -
> - .section .text.bar,"ax",@progbits
> - .type bar, @function
> -bar:
> - .global bar
> - ret
> -
> - .section .text.ifunc,"ax",@progbits
> - .type ifunc, @gnu_indirect_function
> - .global ifunc
> -ifunc:
> - ret
> -
> - .section .data.foo,"aw",@progbits
> -xxx:
> - .quad ifunc
> diff --git a/ld/testsuite/ld-aarch64/ifunc-12.d b/ld/testsuite/ld-aarch64/ifunc-12.d
> deleted file mode 100644
> index 8fa8ce0..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-12.d
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -#ld: -shared -e bar --gc-sections
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -There are no relocations in this file.
> diff --git a/ld/testsuite/ld-aarch64/ifunc-12.s b/ld/testsuite/ld-aarch64/ifunc-12.s
> deleted file mode 100644
> index aad30df..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-12.s
> +++ /dev/null
> @@ -1,24 +0,0 @@
> - .section .text.foo,"ax",@progbits
> - .type foo, @function
> -foo:
> - adrp x0, :got:ifunc
> - ldr x0, [x0, #:got_lo12:ifunc]
> - bl ifunc
> - adrp x0, xxx
> - add x0, x0, :lo12:xxx
> - ret
> -
> - .section .text.bar,"ax",@progbits
> - .type bar, @function
> -bar:
> - .global bar
> - ret
> -
> - .section .text.ifunc,"ax",@progbits
> - .type ifunc, @gnu_indirect_function
> -ifunc:
> - ret
> -
> - .section .data.foo,"aw",@progbits
> -xxx:
> - .quad ifunc
> diff --git a/ld/testsuite/ld-aarch64/ifunc-13.d b/ld/testsuite/ld-aarch64/ifunc-13.d
> deleted file mode 100644
> index e1b5c10..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-13.d
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -#source: ifunc-13a.s
> -#source: ifunc-13b.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.ifunc' at offset 0x[0-9a-f]+ contains 1 entries:
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_ABS64[ ]+ifunc\(\)[ ]+ifunc \+ 0
> -
> -Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_JUMP_SLOT[ ]+ifunc\(\)[ ]+ifunc \+ 0
> diff --git a/ld/testsuite/ld-aarch64/ifunc-13a.s b/ld/testsuite/ld-aarch64/ifunc-13a.s
> deleted file mode 100644
> index 873e06e..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-13a.s
> +++ /dev/null
> @@ -1,11 +0,0 @@
> - .text
> - .type foo, @function
> - .global foo
> -foo:
> - adrp x0, xxx
> - add x0, x0, :lo12:xxx
> - ret
> -
> - .data
> -xxx:
> - .quad ifunc
> diff --git a/ld/testsuite/ld-aarch64/ifunc-13b.s b/ld/testsuite/ld-aarch64/ifunc-13b.s
> deleted file mode 100644
> index 3560394..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-13b.s
> +++ /dev/null
> @@ -1,5 +0,0 @@
> - .text
> - .type ifunc, @gnu_indirect_function
> - .globl ifunc
> -ifunc:
> - ret
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14a.d b/ld/testsuite/ld-aarch64/ifunc-14a.d
> deleted file mode 100644
> index ff580d0..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14a.d
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -#source: ifunc-14a.s
> -#source: ifunc-14b.s
> -#ld: -shared -z nocombreloc
> -#readelf: -d
> -#target: aarch64*-*-*
> -
> -#failif
> -#...
> -.*\(TEXTREL\).*
> -#...
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14a.s b/ld/testsuite/ld-aarch64/ifunc-14a.s
> deleted file mode 100644
> index 7d6183c..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14a.s
> +++ /dev/null
> @@ -1,7 +0,0 @@
> - .text
> - .globl bar
> - .type bar, @function
> -bar:
> - bl foo
> - .size bar, .-bar
> - .hidden foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14b.d b/ld/testsuite/ld-aarch64/ifunc-14b.d
> deleted file mode 100644
> index 52ed2b4..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14b.d
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -#source: ifunc-14b.s
> -#source: ifunc-14a.s
> -#ld: -shared -z nocombreloc
> -#readelf: -d
> -#target: aarch64*-*-*
> -
> -#failif
> -#...
> -.*\(TEXTREL\).*
> -#...
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14b.s b/ld/testsuite/ld-aarch64/ifunc-14b.s
> deleted file mode 100644
> index bac22eb..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14b.s
> +++ /dev/null
> @@ -1,5 +0,0 @@
> - .type foo, %gnu_indirect_function
> - .globl foo
> -foo:
> - ret
> - .size foo, .-foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14c.d b/ld/testsuite/ld-aarch64/ifunc-14c.d
> deleted file mode 100644
> index a83126f..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14c.d
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -#source: ifunc-14a.s
> -#source: ifunc-14b.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -#failif
> -#...
> -.* +R_AARCH64_NONE +.*
> -#...
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14c.s b/ld/testsuite/ld-aarch64/ifunc-14c.s
> deleted file mode 100644
> index 7853280..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14c.s
> +++ /dev/null
> @@ -1,7 +0,0 @@
> - .text
> - .globl xxx
> - .type xxx, @function
> -xxx:
> - bl foo
> - .size xxx, .-xxx
> - .hidden foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14d.d b/ld/testsuite/ld-aarch64/ifunc-14d.d
> deleted file mode 100644
> index 4ae88d2..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14d.d
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -#source: ifunc-14b.s
> -#source: ifunc-14a.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -#failif
> -#...
> -.* +R_AARCH64_NONE +.*
> -#...
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14e.d b/ld/testsuite/ld-aarch64/ifunc-14e.d
> deleted file mode 100644
> index 62de35e..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14e.d
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -#source: ifunc-14a.s
> -#source: ifunc-14c.s
> -#source: ifunc-14b.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -#failif
> -#...
> -.* +R_AARCH64_NONE +.*
> -#...
> diff --git a/ld/testsuite/ld-aarch64/ifunc-14f.d b/ld/testsuite/ld-aarch64/ifunc-14f.d
> deleted file mode 100644
> index ab8bdbf..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-14f.d
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -#source: ifunc-14a.s
> -#source: ifunc-14b.s
> -#source: ifunc-14c.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -#failif
> -#...
> -.* +R_AARCH64_NONE +.*
> -#...
> diff --git a/ld/testsuite/ld-aarch64/ifunc-15.d b/ld/testsuite/ld-aarch64/ifunc-15.d
> deleted file mode 100644
> index 51d9242..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-15.d
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -#source: ifunc-15.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.got' at offset 0x[0-9a-f]+ contains 1 entries:
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_GLOB_DAT[ ]+ifunc\(\)[ ]+ifunc \+ 0
> -
> -Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_JUMP_SLOT[ ]+ifunc\(\)[ ]+ifunc \+ 0
> diff --git a/ld/testsuite/ld-aarch64/ifunc-15.s b/ld/testsuite/ld-aarch64/ifunc-15.s
> deleted file mode 100644
> index f94b4a6..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-15.s
> +++ /dev/null
> @@ -1,11 +0,0 @@
> - .text
> - .type foo, @function
> - .global foo
> -foo:
> - adrp x0, :got:ifunc
> - ldr x0, [x0, #:got_lo12:ifunc]
> - ret
> - .type ifunc, @gnu_indirect_function
> - .globl ifunc
> -ifunc:
> - ret
> diff --git a/ld/testsuite/ld-aarch64/ifunc-16.d b/ld/testsuite/ld-aarch64/ifunc-16.d
> deleted file mode 100644
> index 31ec162..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-16.d
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#source: ifunc-16.s
> -#ld: -shared
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_JUMP_SLOT[ ]+0+[ ]+ifunc \+ 0
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-16.s b/ld/testsuite/ld-aarch64/ifunc-16.s
> deleted file mode 100644
> index ded401a..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-16.s
> +++ /dev/null
> @@ -1,17 +0,0 @@
> - .text
> - .globl fct
> - .type fct, @gnu_indirect_function
> - .set fct,resolve
> - .hidden int_fct
> - .globl int_fct
> - .set int_fct,fct
> - .p2align 4,,15
> - .type resolve, @function
> -resolve:
> - bl ifunc
> - .size resolve, .-resolve
> - .globl g
> - .type g, @function
> -g:
> - bl int_fct
> - .size g, .-g
> diff --git a/ld/testsuite/ld-aarch64/ifunc-17a.d b/ld/testsuite/ld-aarch64/ifunc-17a.d
> deleted file mode 100644
> index a87de7c..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-17a.d
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#source: ifunc-17a.s
> -#source: ifunc-17b.s
> -#ld: -static
> -#readelf: -s --wide
> -#target: aarch64*-*-*
> -
> -#...
> - +[0-9]+: +[0-9a-f]+ +4 +OBJECT +GLOBAL +DEFAULT +[1-9] foo
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-17a.s b/ld/testsuite/ld-aarch64/ifunc-17a.s
> deleted file mode 100644
> index e0bde49..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-17a.s
> +++ /dev/null
> @@ -1,11 +0,0 @@
> - .globl main
> - .globl start
> - .globl _start
> - .globl __start
> - .text
> -main:
> -start:
> -_start:
> -__start:
> - .byte 0
> - .common foo,4,4
> diff --git a/ld/testsuite/ld-aarch64/ifunc-17b.d b/ld/testsuite/ld-aarch64/ifunc-17b.d
> deleted file mode 100644
> index 9286a9f..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-17b.d
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#source: ifunc-17b.s
> -#source: ifunc-17a.s
> -#ld: -static
> -#readelf: -s --wide
> -#target: aarch64*-*-*
> -
> -#...
> - +[0-9]+: +[0-9a-f]+ +4 +OBJECT +GLOBAL +DEFAULT +[1-9] foo
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-17b.s b/ld/testsuite/ld-aarch64/ifunc-17b.s
> deleted file mode 100644
> index 66abe04..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-17b.s
> +++ /dev/null
> @@ -1,6 +0,0 @@
> - .weak foo
> - .type foo, %gnu_indirect_function
> - .size foo,1
> - .text
> -foo:
> - .byte 1
> diff --git a/ld/testsuite/ld-aarch64/ifunc-18a.d b/ld/testsuite/ld-aarch64/ifunc-18a.d
> deleted file mode 100644
> index 3db91d3..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-18a.d
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -#source: ifunc-18a.s
> -#source: ifunc-18b.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.ifunc' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-18a.s b/ld/testsuite/ld-aarch64/ifunc-18a.s
> deleted file mode 100644
> index c29c121..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-18a.s
> +++ /dev/null
> @@ -1,5 +0,0 @@
> - .section .data.rel,"aw",@progbits
> - .globl foo_ptrt
> - .type foo_ptr, @object
> -foo_ptr:
> - .dc.a foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-18b.d b/ld/testsuite/ld-aarch64/ifunc-18b.d
> deleted file mode 100644
> index b27f526..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-18b.d
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -#source: ifunc-18b.s
> -#source: ifunc-18a.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.ifunc' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-18b.s b/ld/testsuite/ld-aarch64/ifunc-18b.s
> deleted file mode 100644
> index 2e46c1e..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-18b.s
> +++ /dev/null
> @@ -1,15 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> - .hidden foo
> - .globl foo
> -foo:
> - ret
> - .size foo, .-foo
> - .globl bar
> -bar:
> - bl foo1
> - ret
> - .size bar, .-bar
> - .hidden foo1
> - .globl foo1
> - foo1 = foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-19a.d b/ld/testsuite/ld-aarch64/ifunc-19a.d
> deleted file mode 100644
> index dd82b24..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-19a.d
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -#source: ifunc-19a.s
> -#source: ifunc-19b.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.ifunc' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-19a.s b/ld/testsuite/ld-aarch64/ifunc-19a.s
> deleted file mode 100644
> index 3a3d0cd..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-19a.s
> +++ /dev/null
> @@ -1,5 +0,0 @@
> - .section .data.rel,"aw",@progbits
> - .globl foo_ptrt
> - .type foo_ptr, @object
> -foo_ptr:
> - .dc.a foo1
> diff --git a/ld/testsuite/ld-aarch64/ifunc-19b.d b/ld/testsuite/ld-aarch64/ifunc-19b.d
> deleted file mode 100644
> index 1e0819c..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-19b.d
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -#source: ifunc-19b.s
> -#source: ifunc-19a.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.ifunc' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-19b.s b/ld/testsuite/ld-aarch64/ifunc-19b.s
> deleted file mode 100644
> index 2e46c1e..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-19b.s
> +++ /dev/null
> @@ -1,15 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> - .hidden foo
> - .globl foo
> -foo:
> - ret
> - .size foo, .-foo
> - .globl bar
> -bar:
> - bl foo1
> - ret
> - .size bar, .-bar
> - .hidden foo1
> - .globl foo1
> - foo1 = foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-2-local.d b/ld/testsuite/ld-aarch64/ifunc-2-local.d
> deleted file mode 100644
> index 0bdeb270..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-2-local.d
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#ld: -shared
> -#objdump: -dw
> -#target: aarch64*-*-*
> -
> -#...
> -[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x[0-9a-f]+@plt>
> -[ \t0-9a-f]+:[ \t0-9a-f]+adrp[ \t]+x0, 0 <_GLOBAL_OFFSET_TABLE_>
> -[ \t0-9a-f]+:[ \t0-9a-f]+add[ \t]+x0, x0, #0x[0-9a-f]+
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-2-local.s b/ld/testsuite/ld-aarch64/ifunc-2-local.s
> deleted file mode 100644
> index 632c31f..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-2-local.s
> +++ /dev/null
> @@ -1,15 +0,0 @@
> - .type foo, %gnu_indirect_function
> - .set __GI_foo, foo
> - .text
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> -.globl bar
> - .type bar, @function
> -bar:
> - bl __GI_foo
> - adrp x0, __GI_foo
> - add x0, x0, :lo12:__GI_foo
> - ret
> - .size bar, .-bar
> diff --git a/ld/testsuite/ld-aarch64/ifunc-2.d b/ld/testsuite/ld-aarch64/ifunc-2.d
> deleted file mode 100644
> index 0bdeb270..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-2.d
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#ld: -shared
> -#objdump: -dw
> -#target: aarch64*-*-*
> -
> -#...
> -[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x[0-9a-f]+@plt>
> -[ \t0-9a-f]+:[ \t0-9a-f]+adrp[ \t]+x0, 0 <_GLOBAL_OFFSET_TABLE_>
> -[ \t0-9a-f]+:[ \t0-9a-f]+add[ \t]+x0, x0, #0x[0-9a-f]+
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-2.s b/ld/testsuite/ld-aarch64/ifunc-2.s
> deleted file mode 100644
> index da350df..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-2.s
> +++ /dev/null
> @@ -1,18 +0,0 @@
> - .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:
> - bl __GI_foo
> - adrp x0, __GI_foo
> - add x0, x0, :lo12:__GI_foo
> - ret
> - .size bar, .-bar
> diff --git a/ld/testsuite/ld-aarch64/ifunc-20.d b/ld/testsuite/ld-aarch64/ifunc-20.d
> deleted file mode 100644
> index 3380479..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-20.d
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -#source: ifunc-20.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.ifunc' at offset 0x[0-9a-f]+ contains 1 entries:
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_ABS64[ ]+ifunc\(\)[ ]+ifunc \+ 0
> -
> -Relocation section '.rela.plt' at offset 0x[0-9a-f]+ contains 1 entries:
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_JUMP_SLOT[ ]+ifunc\(\)[ ]+ifunc \+ 0
> diff --git a/ld/testsuite/ld-aarch64/ifunc-20.s b/ld/testsuite/ld-aarch64/ifunc-20.s
> deleted file mode 100644
> index 17393cb..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-20.s
> +++ /dev/null
> @@ -1,16 +0,0 @@
> - .section .data.rel,"aw",@progbits
> - .globl ifunc_ptrt
> - .type ifunc_ptr, @object
> -ifunc_ptr:
> - .dc.a ifunc
> - .text
> - .type ifunc, @gnu_indirect_function
> - .globl ifunc
> -ifunc:
> - ret
> - .size ifunc, .-ifunc
> - .type bar, @function
> - .globl bar
> -bar:
> - bl ifunc
> - .size bar, .-bar
> diff --git a/ld/testsuite/ld-aarch64/ifunc-3.s b/ld/testsuite/ld-aarch64/ifunc-3.s
> deleted file mode 100644
> index c68b1b7..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-3.s
> +++ /dev/null
> @@ -1,16 +0,0 @@
> - .type foo, %gnu_indirect_function
> - .global __GI_foo
> - .protected __GI_foo
> - .set __GI_foo, foo
> - .text
> -.globl foo
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> -.globl bar
> - .type bar, @function
> -bar:
> - bl __GI_foo
> - ret
> - .size bar, .-bar
> diff --git a/ld/testsuite/ld-aarch64/ifunc-3a.d b/ld/testsuite/ld-aarch64/ifunc-3a.d
> deleted file mode 100644
> index e8cc8d3..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-3a.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-3.s
> -#ld: -shared
> -#objdump: -dw
> -#target: aarch64*-*-*
> -
> -#...
> -[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x[0-9a-f]+@plt>
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-3b.d b/ld/testsuite/ld-aarch64/ifunc-3b.d
> deleted file mode 100644
> index 7e177a6..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-3b.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-3.s
> -#ld: -shared
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -#...
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]*
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-4.d b/ld/testsuite/ld-aarch64/ifunc-4.d
> deleted file mode 100644
> index 5e69b05..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-4.d
> +++ /dev/null
> @@ -1,7 +0,0 @@
> -#ld:
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -#...
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]*
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-4.s b/ld/testsuite/ld-aarch64/ifunc-4.s
> deleted file mode 100644
> index c2b66f5..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-4.s
> +++ /dev/null
> @@ -1,18 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> -.globl foo
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> - .type start,"function"
> - .global start
> -start:
> - .type _start,"function"
> - .global _start
> -_start:
> - .type __start,"function"
> - .global __start
> -__start:
> - .type __start,"function"
> - bl foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-4a.d b/ld/testsuite/ld-aarch64/ifunc-4a.d
> deleted file mode 100644
> index 801e6cd..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-4a.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#ld: -s
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -#source: ifunc-4.s
> -
> -#...
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_[_0-9A-Z]+_IRELATIVE[ ]*[0-9a-f]*
> -#pass
> diff --git a/ld/testsuite/ld-aarch64/ifunc-5-local.s b/ld/testsuite/ld-aarch64/ifunc-5-local.s
> deleted file mode 100644
> index 8d23bab..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-5-local.s
> +++ /dev/null
> @@ -1,19 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> - .type start,"function"
> - .global start
> -start:
> - .type _start,"function"
> - .global _start
> -_start:
> - .type __start,"function"
> - .global __start
> -__start:
> - .type __start,"function"
> - bl foo
> - adrp x0, :got:foo
> - ldr x0, [x0, #:got_lo12:foo]
> diff --git a/ld/testsuite/ld-aarch64/ifunc-5.s b/ld/testsuite/ld-aarch64/ifunc-5.s
> deleted file mode 100644
> index b1bbf1a..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-5.s
> +++ /dev/null
> @@ -1,20 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> -.globl foo
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> - .type start,"function"
> - .global start
> -start:
> - .type _start,"function"
> - .global _start
> -_start:
> - .type __start,"function"
> - .global __start
> -__start:
> - .type __start,"function"
> - bl foo
> - adrp x0, :got:foo
> - ldr x0, [x0, #:got_lo12:foo]
> diff --git a/ld/testsuite/ld-aarch64/ifunc-5a-local.d b/ld/testsuite/ld-aarch64/ifunc-5a-local.d
> deleted file mode 100644
> index 9693585..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-5a-local.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-5-local.s
> -#ld:
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-5a.d b/ld/testsuite/ld-aarch64/ifunc-5a.d
> deleted file mode 100644
> index f0ee59f..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-5a.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-5.s
> -#ld:
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-5b-local.d b/ld/testsuite/ld-aarch64/ifunc-5b-local.d
> deleted file mode 100644
> index e8e620c..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-5b-local.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-5-local.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-5b.d b/ld/testsuite/ld-aarch64/ifunc-5b.d
> deleted file mode 100644
> index 0175982..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-5b.d
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -#source: ifunc-5.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.got' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_GLOB_DAT[ ]+foo\(\)[ ]+foo \+ 0
> -#...
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_JUMP_SLOT[ ]+foo\(\)[ ]+foo \+ 0
> diff --git a/ld/testsuite/ld-aarch64/ifunc-5r-local.d b/ld/testsuite/ld-aarch64/ifunc-5r-local.d
> deleted file mode 100644
> index 463cd25..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-5r-local.d
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -#source: ifunc-5-local.s
> -#ld: -r
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.text' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_CALL26[ ]+foo\(\)[ ]+foo \+ 0
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_ADR_GOT_PAGE[ ]+foo\(\)[ ]+foo \+ 0
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_LD64_GOT_LO1[ ]+foo\(\)[ ]+foo \+ 0
> diff --git a/ld/testsuite/ld-aarch64/ifunc-6.s b/ld/testsuite/ld-aarch64/ifunc-6.s
> deleted file mode 100644
> index 56486d6..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-6.s
> +++ /dev/null
> @@ -1,21 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> -.globl foo
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> - .protected foo
> - .type start,"function"
> - .global start
> -start:
> - .type _start,"function"
> - .global _start
> -_start:
> - .type __start,"function"
> - .global __start
> -__start:
> - .type __start,"function"
> - bl foo
> - adrp x0, :got:foo
> - ldr x0, [x0, #:got_lo12:foo]
> diff --git a/ld/testsuite/ld-aarch64/ifunc-6a.d b/ld/testsuite/ld-aarch64/ifunc-6a.d
> deleted file mode 100644
> index a50ad3a..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-6a.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-6.s
> -#ld:
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-6b.d b/ld/testsuite/ld-aarch64/ifunc-6b.d
> deleted file mode 100644
> index c415bc3..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-6b.d
> +++ /dev/null
> @@ -1,12 +0,0 @@
> -#source: ifunc-6.s
> -#ld: -shared -z nocombreloc
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.got' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_GLOB_DAT[ ]+foo\(\)[ ]+foo \+ 0
> -#...
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-7.s b/ld/testsuite/ld-aarch64/ifunc-7.s
> deleted file mode 100644
> index 51485af..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-7.s
> +++ /dev/null
> @@ -1,21 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> -.globl foo
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> - .hidden foo
> - .type start,"function"
> - .global start
> -start:
> - .type _start,"function"
> - .global _start
> -_start:
> - .type __start,"function"
> - .global __start
> -__start:
> - .type __start,"function"
> - bl foo
> - adrp x0, :got:foo
> - ldr x0, [x0, #:got_lo12:foo]
> diff --git a/ld/testsuite/ld-aarch64/ifunc-7a.d b/ld/testsuite/ld-aarch64/ifunc-7a.d
> deleted file mode 100644
> index c246c99..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-7a.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-7.s
> -#ld:
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-7b.d b/ld/testsuite/ld-aarch64/ifunc-7b.d
> deleted file mode 100644
> index efdd379..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-7b.d
> +++ /dev/null
> @@ -1,8 +0,0 @@
> -#source: ifunc-7.s
> -#ld: -shared
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-7c.d b/ld/testsuite/ld-aarch64/ifunc-7c.d
> deleted file mode 100644
> index 1967742..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-7c.d
> +++ /dev/null
> @@ -1,19 +0,0 @@
> -#source: ifunc-7.s
> -#ld: -shared
> -#objdump: -dr -j .text
> -#target: aarch64*-*-*
> -
> -# Check if adrp and ldr have been relocated correctly.
> -
> -.*: file format elf.+aarch64.*
> -
> -
> -Disassembly of section \.text:
> -
> -[0-9a-f]+ <foo>:
> - [0-9a-f]+: d65f03c0 ret
> -
> -[0-9a-f]+ <__start>:
> - [0-9a-f]+: [0-9a-f]+ bl [0-9a-f]+ <\*ABS\*\+0x[0-9a-f]+@plt>
> - [0-9a-f]+: [0-9a-f]+ adrp x0, [0-9]+ <__start\+0x[0-9a-f]+>
> - [0-9a-f]+: [0-9a-f]+ ldr x0, \[x0,.+\]
> diff --git a/ld/testsuite/ld-aarch64/ifunc-8.d b/ld/testsuite/ld-aarch64/ifunc-8.d
> deleted file mode 100644
> index 8aadc51..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-8.d
> +++ /dev/null
> @@ -1,9 +0,0 @@
> -#source: ifunc-8a.s
> -#source: ifunc-8b.s
> -#ld:
> -#readelf: -r --wide
> -#target: aarch64*-*-*
> -
> -Relocation section '.rela.plt' at .*
> -[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> -[0-9a-f]+[ ]+[0-9a-f]+[ ]+R_AARCH64_IRELATIVE[ ]+[0-9a-f]*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-8a.s b/ld/testsuite/ld-aarch64/ifunc-8a.s
> deleted file mode 100644
> index 94c073a..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-8a.s
> +++ /dev/null
> @@ -1,13 +0,0 @@
> - .text
> - .type start,"function"
> - .global start
> -start:
> - .type _start,"function"
> - .global _start
> -_start:
> - .type __start,"function"
> - .global __start
> -__start:
> - .type __start,"function"
> - adrp x0, :got:foo
> - ldr x0, [x0, #:got_lo12:foo]
> diff --git a/ld/testsuite/ld-aarch64/ifunc-8b.s b/ld/testsuite/ld-aarch64/ifunc-8b.s
> deleted file mode 100644
> index 1f108f8..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-8b.s
> +++ /dev/null
> @@ -1,7 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> -.globl foo
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> diff --git a/ld/testsuite/ld-aarch64/ifunc-9.d b/ld/testsuite/ld-aarch64/ifunc-9.d
> deleted file mode 100644
> index 3b4e995..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-9.d
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -#ld: --export-dynamic
> -#error: .*dynamic STT_GNU_IFUNC symbol `foo' with pointer equality in `.*.o' can not be used when making an executable; recompile with -fPIE and relink with -pie
> -#target: aarch64*-*-*
> diff --git a/ld/testsuite/ld-aarch64/ifunc-9.s b/ld/testsuite/ld-aarch64/ifunc-9.s
> deleted file mode 100644
> index 2e2f577..0000000
> --- a/ld/testsuite/ld-aarch64/ifunc-9.s
> +++ /dev/null
> @@ -1,23 +0,0 @@
> - .text
> - .type foo, %gnu_indirect_function
> -.globl foo
> - .type foo, @function
> -foo:
> - ret
> - .size foo, .-foo
> - .type start,"function"
> - .global start
> -start:
> - .type _start,"function"
> - .global _start
> -_start:
> - .type __start,"function"
> - .global __start
> -__start:
> - .type __start,"function"
> - adrp x0, .LANCHOR0
> - add x0, x0, :lo12:.LANCHOR0
> - .data
> - .align 3
> -.LANCHOR0 = . + 0
> - .xword foo
> diff --git a/ld/testsuite/ld-ifunc/ifunc.exp b/ld/testsuite/ld-ifunc/ifunc.exp
> index 1d64efc..df913d8 100644
> --- a/ld/testsuite/ld-ifunc/ifunc.exp
> +++ b/ld/testsuite/ld-ifunc/ifunc.exp
> @@ -24,11 +24,10 @@
>
>
> # IFUNC support has only been implemented for the ix86, x86_64, powerpc,
> -# aarch64 and sparc so far.
> +# and sparc so far.
> if {!(([istarget "i?86-*-*"]
> || [istarget "x86_64-*-*"]
> || [istarget "powerpc*-*-*"]
> - || [istarget "aarch64*-*-*"]
> || [istarget "sparc*-*-*"])
> && ([istarget "*-*-elf*"]
> || [istarget "*-*-nacl*"]
> --
> 1.8.1.4
>