diff -rup binutils.orig/bfd/elfnn-aarch64.c binutils-2.32/bfd/elfnn-aarch64.c --- binutils.orig/bfd/elfnn-aarch64.c 2019-07-02 17:30:19.407892712 +0100 +++ binutils-2.32/bfd/elfnn-aarch64.c 2019-07-02 17:35:21.874749884 +0100 @@ -2579,6 +2579,9 @@ struct elf_aarch64_link_hash_table unsigned int top_index; asection **input_list; + /* JUMP_SLOT relocs for variant PCS symbols may be present. */ + int variant_pcs; + /* The offset into splt of the PLT entry for the TLS descriptor resolver. Special values are 0, if not necessary (or not found to be necessary yet), and -1 if needed but not determined @@ -2790,6 +2793,31 @@ elfNN_aarch64_copy_indirect_symbol (stru _bfd_elf_link_hash_copy_indirect (info, dir, ind); } +/* Merge non-visibility st_other attributes. */ + +static void +elfNN_aarch64_merge_symbol_attribute (struct elf_link_hash_entry *h, + const Elf_Internal_Sym *isym, + bfd_boolean definition ATTRIBUTE_UNUSED, + bfd_boolean dynamic ATTRIBUTE_UNUSED) +{ + unsigned int isym_sto = isym->st_other & ~ELF_ST_VISIBILITY (-1); + unsigned int h_sto = h->other & ~ELF_ST_VISIBILITY (-1); + + if (isym_sto == h_sto) + return; + + if (isym_sto & ~STO_AARCH64_VARIANT_PCS) + /* Not fatal, this callback cannot fail. */ + _bfd_error_handler (_("unknown attribute for symbol `%s': 0x%02x"), + h->root.root.string, isym_sto); + + /* Note: Ideally we would warn about any attribute mismatch, but + this api does not allow that without substantial changes. */ + if (isym_sto & STO_AARCH64_VARIANT_PCS) + h->other |= STO_AARCH64_VARIANT_PCS; +} + /* Destroy an AArch64 elf linker hash table. */ static void @@ -8370,6 +8398,12 @@ elfNN_aarch64_allocate_dynrelocs (struct updated. */ htab->root.srelplt->reloc_count++; + + /* Mark the DSO in case R__JUMP_SLOT relocs against + variant PCS symbols are present. */ + if (h->other & STO_AARCH64_VARIANT_PCS) + htab->variant_pcs = 1; + } else { @@ -8958,6 +8992,10 @@ elfNN_aarch64_size_dynamic_sections (bfd || !add_dynamic_entry (DT_JMPREL, 0)) return FALSE; + if (htab->variant_pcs + && !add_dynamic_entry (DT_AARCH64_VARIANT_PCS, 0)) + return FALSE; + if (htab->tlsdesc_plt && (!add_dynamic_entry (DT_TLSDESC_PLT, 0) || !add_dynamic_entry (DT_TLSDESC_GOT, 0))) @@ -9708,6 +9746,9 @@ const struct elf_size_info elfNN_aarch64 #define elf_backend_copy_indirect_symbol \ elfNN_aarch64_copy_indirect_symbol +#define elf_backend_merge_symbol_attribute \ + elfNN_aarch64_merge_symbol_attribute + /* Create .dynbss, and .rela.bss sections in DYNOBJ, and set up shortcuts to them in our hash. */ #define elf_backend_create_dynamic_sections \ diff -rup binutils.orig/binutils/readelf.c binutils-2.32/binutils/readelf.c --- binutils.orig/binutils/readelf.c 2019-07-02 17:30:18.890896375 +0100 +++ binutils-2.32/binutils/readelf.c 2019-07-02 17:32:25.008002901 +0100 @@ -1797,6 +1797,19 @@ dump_relocations (Filedata * fi } static const char * +get_aarch64_dynamic_type (unsigned long type) +{ + switch (type) + { + case DT_AARCH64_BTI_PLT: return "AARCH64_BTI_PLT"; + case DT_AARCH64_PAC_PLT: return "AARCH64_PAC_PLT"; + case DT_AARCH64_VARIANT_PCS: return "AARCH64_VARIANT_PCS"; + default: + return NULL; + } +} + +static const char * get_mips_dynamic_type (unsigned long type) { switch (type) @@ -2169,6 +2182,9 @@ get_dynamic_type (Filedata * filedata, u switch (filedata->file_header.e_machine) { + case EM_AARCH64: + result = get_aarch64_dynamic_type (type); + break; case EM_MIPS: case EM_MIPS_RS3_LE: result = get_mips_dynamic_type (type); @@ -11054,6 +11070,22 @@ get_solaris_symbol_visibility (unsigned } static const char * +get_aarch64_symbol_other (unsigned int other) +{ + static char buf[32]; + + if (other & STO_AARCH64_VARIANT_PCS) + { + other &= ~STO_AARCH64_VARIANT_PCS; + if (other == 0) + return "VARIANT_PCS"; + snprintf (buf, sizeof buf, "VARIANT_PCS | %x", other); + return buf; + } + return NULL; +} + +static const char * get_mips_symbol_other (unsigned int other) { switch (other) @@ -11164,6 +11196,9 @@ get_symbol_other (Filedata * filedata, u switch (filedata->file_header.e_machine) { + case EM_AARCH64: + result = get_aarch64_symbol_other (other); + break; case EM_MIPS: result = get_mips_symbol_other (other); break; diff -rup binutils.orig/gas/config/tc-aarch64.c binutils-2.32/gas/config/tc-aarch64.c --- binutils.orig/gas/config/tc-aarch64.c 2019-07-02 17:30:19.131894667 +0100 +++ binutils-2.32/gas/config/tc-aarch64.c 2019-07-02 17:35:45.202584620 +0100 @@ -1938,6 +1938,28 @@ s_aarch64_elf_cons (int nbytes) demand_empty_rest_of_line (); } +/* Mark symbol that it follows a variant PCS convention. */ + +static void +s_variant_pcs (int ignored ATTRIBUTE_UNUSED) +{ + char *name; + char c; + symbolS *sym; + asymbol *bfdsym; + elf_symbol_type *elfsym; + + c = get_symbol_name (&name); + if (!*name) + as_bad (_("Missing symbol name in directive")); + sym = symbol_find_or_make (name); + restore_line_pointer (c); + demand_empty_rest_of_line (); + bfdsym = symbol_get_bfdsym (sym); + elfsym = elf_symbol_from (bfd_asymbol_bfd (bfdsym), bfdsym); + gas_assert (elfsym); + elfsym->internal_elf_sym.st_other |= STO_AARCH64_VARIANT_PCS; +} #endif /* OBJ_ELF */ /* Output a 32-bit word, but mark as an instruction. */ @@ -2084,6 +2106,7 @@ const pseudo_typeS md_pseudo_table[] = { {"long", s_aarch64_elf_cons, 4}, {"xword", s_aarch64_elf_cons, 8}, {"dword", s_aarch64_elf_cons, 8}, + {"variant_pcs", s_variant_pcs, 0}, #endif {0, 0, 0} }; @@ -9320,3 +9343,35 @@ aarch64_copy_symbol_attributes (symbolS { AARCH64_GET_FLAG (dest) = AARCH64_GET_FLAG (src); } + +#ifdef OBJ_ELF +/* Same as elf_copy_symbol_attributes, but without copying st_other. + This is needed so AArch64 specific st_other values can be independently + specified for an IFUNC resolver (that is called by the dynamic linker) + and the symbol it resolves (aliased to the resolver). In particular, + if a function symbol has special st_other value set via directives, + then attaching an IFUNC resolver to that symbol should not override + the st_other setting. Requiring the directive on the IFUNC resolver + symbol would be unexpected and problematic in C code, where the two + symbols appear as two independent function declarations. */ + +void +aarch64_elf_copy_symbol_attributes (symbolS *dest, symbolS *src) +{ + struct elf_obj_sy *srcelf = symbol_get_obj (src); + struct elf_obj_sy *destelf = symbol_get_obj (dest); + if (srcelf->size) + { + if (destelf->size == NULL) + destelf->size = XNEW (expressionS); + *destelf->size = *srcelf->size; + } + else + { + if (destelf->size != NULL) + free (destelf->size); + destelf->size = NULL; + } + S_SET_SIZE (dest, S_GET_SIZE (src)); +} +#endif diff -rup binutils.orig/gas/config/tc-aarch64.h binutils-2.32/gas/config/tc-aarch64.h --- binutils.orig/gas/config/tc-aarch64.h 2019-07-02 17:30:19.136894632 +0100 +++ binutils-2.32/gas/config/tc-aarch64.h 2019-07-02 17:35:45.202584620 +0100 @@ -130,6 +130,12 @@ void aarch64_copy_symbol_attributes (sym (aarch64_copy_symbol_attributes (DEST, SRC)) #endif +#ifdef OBJ_ELF +void aarch64_elf_copy_symbol_attributes (symbolS *, symbolS *); +#define OBJ_COPY_SYMBOL_ATTRIBUTES(DEST, SRC) \ + aarch64_elf_copy_symbol_attributes (DEST, SRC) +#endif + #define TC_START_LABEL(STR, NUL_CHAR, NEXT_CHAR) \ (NEXT_CHAR == ':' || (NEXT_CHAR == '/' && aarch64_data_in_code ())) #define tc_canonicalize_symbol_name(str) aarch64_canonicalize_symbol_name (str); diff -rup binutils.orig/gas/doc/c-aarch64.texi binutils-2.32/gas/doc/c-aarch64.texi --- binutils.orig/gas/doc/c-aarch64.texi 2019-07-02 17:30:19.125894710 +0100 +++ binutils-2.32/gas/doc/c-aarch64.texi 2019-07-02 17:35:11.362824354 +0100 @@ -425,6 +425,12 @@ should only be done if it is really nece @c VVVVVVVVVVVVVVVVVVVVVVVVVV +@cindex @code{.variant_pcs} directive, AArch64 +@item .variant_pcs @var{symbol} +This directive marks @var{symbol} referencing a function that may +follow a variant procedure call standard with different register +usage convention from the base procedure call standard. + @c WWWWWWWWWWWWWWWWWWWWWWWWWW @c XXXXXXXXXXXXXXXXXXXXXXXXXX diff -rup binutils.orig/include/elf/aarch64.h binutils-2.32/include/elf/aarch64.h --- binutils.orig/include/elf/aarch64.h 2019-07-02 17:30:18.850896658 +0100 +++ binutils-2.32/include/elf/aarch64.h 2019-07-02 17:32:55.678785616 +0100 @@ -36,6 +36,15 @@ #define SHF_COMDEF 0x80000000 /* Section may be multiply defined in the input to a link step. */ +/* Processor specific dynamic array tags. */ +#define DT_AARCH64_BTI_PLT (DT_LOPROC + 1) +#define DT_AARCH64_PAC_PLT (DT_LOPROC + 3) +#define DT_AARCH64_VARIANT_PCS (DT_LOPROC + 5) + +/* AArch64-specific values for st_other. */ +#define STO_AARCH64_VARIANT_PCS 0x80 /* Symbol may follow different call + convention from the base PCS. */ + /* Relocation types. */ START_RELOC_NUMBERS (elf_aarch64_reloc_type) diff -rup binutils.orig/ld/testsuite/ld-aarch64/aarch64-elf.exp binutils-2.32/ld/testsuite/ld-aarch64/aarch64-elf.exp --- binutils.orig/ld/testsuite/ld-aarch64/aarch64-elf.exp 2019-07-02 17:30:18.922896148 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/aarch64-elf.exp 2019-07-02 17:35:21.875749878 +0100 @@ -371,6 +371,10 @@ run_dump_test_lp64 "rela-abs-relative-op run_dump_test_lp64 "pie-bind-locally" +run_dump_test_lp64 "variant_pcs-r" +run_dump_test_lp64 "variant_pcs-shared" +run_dump_test_lp64 "variant_pcs-now" + set aarch64elflinktests { {"ld-aarch64/so with global symbol" "-shared" "" "" {copy-reloc-so.s} {} "copy-reloc-so.so"} --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/gas/testsuite/gas/aarch64/symbol-variant_pcs-1.d 2019-07-02 17:35:11.362824354 +0100 @@ -0,0 +1,10 @@ +#objdump: -t + +.*: file format .* + +SYMBOL TABLE: +0+ l d \.text 0+ \.text +0+ l d \.data 0+ \.data +0+ l d \.bss 0+ \.bss +0+ l \.text 0+ func +0+ \*UND\* 0+ 0x80 foobar --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/gas/testsuite/gas/aarch64/symbol-variant_pcs-1.s 2019-07-02 17:35:11.362824354 +0100 @@ -0,0 +1,8 @@ +.text +.variant_pcs foobar +func: + bl foobar + b foobar + +.data +.xword foobar --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/gas/testsuite/gas/aarch64/symbol-variant_pcs-2.d 2019-07-02 17:35:11.362824354 +0100 @@ -0,0 +1,9 @@ +#objdump: -t + +.*: file format .* + +SYMBOL TABLE: +0+ l d \.text 0+ \.text +0+ l d \.data 0+ \.data +0+ l d \.bss 0+ \.bss +0+ l \.text 0+ 0x80 foo --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/gas/testsuite/gas/aarch64/symbol-variant_pcs-2.s 2019-07-02 17:35:11.362824354 +0100 @@ -0,0 +1,4 @@ +.text +.variant_pcs foo +foo: + ret --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/gas/testsuite/gas/aarch64/symbol-variant_pcs-3.s 2019-07-02 17:35:45.202584620 +0100 @@ -0,0 +1,20 @@ +.text +.global foo_vpcs +.global foo_base +.global alias_vpcs +.global alias_base + +.variant_pcs foo_vpcs +.variant_pcs alias_vpcs + +foo_vpcs: +foo_base: + bl foo_vpcs + bl foo_base + bl alias_vpcs + bl alias_base + +/* Check that the STO_AARCH64_VARIANT_PCS is not affected by .set. */ + +.set alias_base, foo_vpcs +.set alias_vpcs, foo_base --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/gas/testsuite/gas/aarch64/symbol-variant_pcs-3.d 2019-07-02 17:35:45.202584620 +0100 @@ -0,0 +1,12 @@ +#objdump: -t + +.*: file format .* + +SYMBOL TABLE: +0+ l d \.text 0+ \.text +0+ l d \.data 0+ \.data +0+ l d \.bss 0+ \.bss +0+ g \.text 0+ 0x80 foo_vpcs +0+ g \.text 0+ foo_base +0+ g \.text 0+ 0x80 alias_vpcs +0+ g \.text 0+ alias_base --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-1.s 2019-07-02 17:35:21.875749878 +0100 @@ -0,0 +1,59 @@ +.text + +.variant_pcs f_spec_global_default_def +.variant_pcs f_spec_global_default_undef +.variant_pcs f_spec_global_hidden_def +.variant_pcs f_spec_local +.variant_pcs f_spec_global_default_ifunc +.variant_pcs f_spec_global_hidden_ifunc +.variant_pcs f_spec_local_ifunc + +.global f_spec_global_default_def +.global f_spec_global_default_undef +.global f_spec_global_hidden_def +.global f_spec_global_default_ifunc +.global f_spec_global_hidden_ifunc +.global f_base_global_default_def +.global f_base_global_default_undef +.global f_base_global_hidden_def +.global f_base_global_default_ifunc +.global f_base_global_hidden_ifunc + +.hidden f_spec_global_hidden_def +.hidden f_spec_global_hidden_ifunc +.hidden f_base_global_hidden_def +.hidden f_base_global_hidden_ifunc + +.type f_spec_global_default_ifunc, %gnu_indirect_function +.type f_spec_global_hidden_ifunc, %gnu_indirect_function +.type f_spec_local_ifunc, %gnu_indirect_function +.type f_base_global_default_ifunc, %gnu_indirect_function +.type f_base_global_hidden_ifunc, %gnu_indirect_function +.type f_base_local_ifunc, %gnu_indirect_function + +f_spec_global_default_def: +f_spec_global_hidden_def: +f_spec_local: +f_base_global_default_def: +f_base_global_hidden_def: +f_base_local: +f_spec_global_default_ifunc: +f_spec_global_hidden_ifunc: +f_spec_local_ifunc: +f_base_global_default_ifunc: +f_base_global_hidden_ifunc: +f_base_local_ifunc: + bl f_spec_global_default_def + bl f_spec_global_default_undef + bl f_spec_global_hidden_def + bl f_spec_local + bl f_base_global_default_def + bl f_base_global_default_undef + bl f_base_global_hidden_def + bl f_base_local + bl f_spec_global_default_ifunc + bl f_spec_global_hidden_ifunc + bl f_spec_local_ifunc + bl f_base_global_default_ifunc + bl f_base_global_hidden_ifunc + bl f_base_local_ifunc --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-2.s 2019-07-02 17:35:21.875749878 +0100 @@ -0,0 +1,47 @@ +.text + +.variant_pcs f_spec_global_default_def +.variant_pcs f_spec_global_default_undef +.variant_pcs f_spec_global_hidden_def +.variant_pcs f_spec_local2 +.variant_pcs f_spec_global_default_ifunc +.variant_pcs f_spec_global_hidden_ifunc +.variant_pcs f_spec_local2_ifunc + +.global f_spec_global_default_def +.global f_spec_global_default_undef +.global f_spec_global_hidden_def +.global f_spec_global_default_ifunc +.global f_spec_global_hidden_ifunc +.global f_base_global_default_def +.global f_base_global_default_undef +.global f_base_global_hidden_def +.global f_base_global_default_ifunc +.global f_base_global_hidden_ifunc + +.hidden f_spec_global_hidden_def +.hidden f_spec_global_hidden_ifunc +.hidden f_base_global_hidden_def +.hidden f_base_global_hidden_ifunc + +.type f_spec_local2_ifunc, %gnu_indirect_function +.type f_base_local2_ifunc, %gnu_indirect_function + +f_spec_local2: +f_base_local2: +f_spec_local2_ifunc: +f_base_local2_ifunc: + bl f_spec_global_default_def + bl f_spec_global_default_undef + bl f_spec_global_hidden_def + bl f_spec_local2 + bl f_base_global_default_def + bl f_base_global_default_undef + bl f_base_global_hidden_def + bl f_base_local2 + bl f_spec_global_default_ifunc + bl f_spec_global_hidden_ifunc + bl f_spec_local2_ifunc + bl f_base_global_default_ifunc + bl f_base_global_hidden_ifunc + bl f_base_local2_ifunc --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs.ld 2019-07-02 17:35:37.100642017 +0100 @@ -0,0 +1,23 @@ +/* Script for .variant_pcs symbol tests. */ +OUTPUT_ARCH(aarch64) +ENTRY(_start) +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + PROVIDE (__executable_start = 0x8000); . = 0x8000; + .text : + { + *(.before) + *(.text) + *(.after) + } =0 + . = 0x9000; + .got : { *(.got) *(.got.plt)} + . = 0x10000; + .rela.dyn : { *(.rela.ifunc) } + . = 0x11000; + .rela.plt : { *(.rela.plt) *(.rela.iplt) } + . = 0x12340000; + .far : { *(.far) } + .ARM.attributes 0 : { *(.ARM.atttributes) } +} --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-now.d 2019-07-02 17:34:37.557063849 +0100 @@ -0,0 +1,67 @@ +#source: variant_pcs-1.s +#source: variant_pcs-2.s +#ld: -shared --hash-style=sysv -T variant_pcs.ld -z now +#readelf: -rsW + +Relocation section '\.rela\.plt' at offset 0x11000 contains 12 entries: + Offset Info Type Symbol's Value Symbol's Name \+ Addend +0000000000009020 0000000100000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_base_global_default_undef \+ 0 +0000000000009028 0000000200000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_spec_global_default_undef \+ 0 +0000000000009030 0000000400000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_base_global_default_def \+ 0 +0000000000009038 0000000500000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_spec_global_default_def \+ 0 +0000000000009040 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009048 0000000300000402 R_AARCH64_JUMP_SLOT f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 +0000000000009050 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009058 0000000600000402 R_AARCH64_JUMP_SLOT f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 +0000000000009060 0000000000000408 R_AARCH64_IRELATIVE 8038 +0000000000009068 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009070 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009078 0000000000000408 R_AARCH64_IRELATIVE 8038 + +Symbol table '\.dynsym' contains 7 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef + 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef + 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 4: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def + 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 6: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc + +Symbol table '\.symtab' contains 35 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000008000 0 SECTION LOCAL DEFAULT 1 + 2: 0000000000008070 0 SECTION LOCAL DEFAULT 2 + 3: 0000000000009000 0 SECTION LOCAL DEFAULT 3 + 4: 0000000000009080 0 SECTION LOCAL DEFAULT 4 + 5: 0000000000011000 0 SECTION LOCAL DEFAULT 5 + 6: 0000000000011120 0 SECTION LOCAL DEFAULT 6 + 7: 00000000000111c8 0 SECTION LOCAL DEFAULT 7 + 8: 0000000000011270 0 SECTION LOCAL DEFAULT 8 + 9: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o + 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local + 11: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc + 12: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc + 13: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_local + 14: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 \$x + 15: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o + 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 + 17: 0000000000008038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc + 18: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc + 19: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 + 20: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 \$x + 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS + 22: 0000000000009080 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC + 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_def + 24: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_global_hidden_ifunc + 25: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_global_hidden_def + 26: 0000000000009000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ + 27: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc + 28: 0000000000008070 0 NOTYPE LOCAL DEFAULT 2 \$x + 29: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef + 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef + 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 32: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def + 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 34: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-r.d 2019-07-02 17:35:35.244655166 +0100 @@ -0,0 +1,60 @@ +#source: variant_pcs-1.s +#source: variant_pcs-2.s +#ld: -r +#readelf: -rsW + +Relocation section '\.rela\.text' at offset .* contains 24 entries: + Offset Info Type Symbol's Value Symbol's Name \+ Addend +0000000000000000 000000180000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_default_def \+ 0 +0000000000000004 000000110000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_default_undef \+ 0 +0000000000000008 000000120000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_hidden_def \+ 0 +0000000000000010 000000170000011b R_AARCH64_CALL26 0000000000000000 f_base_global_default_def \+ 0 +0000000000000014 000000100000011b R_AARCH64_CALL26 0000000000000000 f_base_global_default_undef \+ 0 +0000000000000018 000000150000011b R_AARCH64_CALL26 0000000000000000 f_base_global_hidden_def \+ 0 +0000000000000020 000000140000011b R_AARCH64_CALL26 f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 +0000000000000024 000000160000011b R_AARCH64_CALL26 f_spec_global_hidden_ifunc\(\) f_spec_global_hidden_ifunc \+ 0 +0000000000000028 000000060000011b R_AARCH64_CALL26 f_spec_local_ifunc\(\) f_spec_local_ifunc \+ 0 +000000000000002c 000000190000011b R_AARCH64_CALL26 f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 +0000000000000030 000000130000011b R_AARCH64_CALL26 f_base_global_hidden_ifunc\(\) f_base_global_hidden_ifunc \+ 0 +0000000000000034 000000070000011b R_AARCH64_CALL26 f_base_local_ifunc\(\) f_base_local_ifunc \+ 0 +0000000000000038 000000180000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_default_def \+ 0 +000000000000003c 000000110000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_default_undef \+ 0 +0000000000000040 000000120000011b R_AARCH64_CALL26 0000000000000000 f_spec_global_hidden_def \+ 0 +0000000000000048 000000170000011b R_AARCH64_CALL26 0000000000000000 f_base_global_default_def \+ 0 +000000000000004c 000000100000011b R_AARCH64_CALL26 0000000000000000 f_base_global_default_undef \+ 0 +0000000000000050 000000150000011b R_AARCH64_CALL26 0000000000000000 f_base_global_hidden_def \+ 0 +0000000000000058 000000140000011b R_AARCH64_CALL26 f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 +000000000000005c 000000160000011b R_AARCH64_CALL26 f_spec_global_hidden_ifunc\(\) f_spec_global_hidden_ifunc \+ 0 +0000000000000060 0000000c0000011b R_AARCH64_CALL26 f_spec_local2_ifunc\(\) f_spec_local2_ifunc \+ 0 +0000000000000064 000000190000011b R_AARCH64_CALL26 f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 +0000000000000068 000000130000011b R_AARCH64_CALL26 f_base_global_hidden_ifunc\(\) f_base_global_hidden_ifunc \+ 0 +000000000000006c 0000000d0000011b R_AARCH64_CALL26 f_base_local2_ifunc\(\) f_base_local2_ifunc \+ 0 + +Symbol table '\.symtab' contains 26 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 SECTION LOCAL DEFAULT 1 + 2: 0000000000000000 0 SECTION LOCAL DEFAULT 3 + 3: 0000000000000000 0 SECTION LOCAL DEFAULT 4 + 4: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o + 5: 0000000000000000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local + 6: 0000000000000000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc + 7: 0000000000000000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc + 8: 0000000000000000 0 NOTYPE LOCAL DEFAULT 1 f_base_local + 9: 0000000000000000 0 NOTYPE LOCAL DEFAULT 1 \$x + 10: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o + 11: 0000000000000038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 + 12: 0000000000000038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc + 13: 0000000000000038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc + 14: 0000000000000038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 + 15: 0000000000000038 0 NOTYPE LOCAL DEFAULT 1 \$x + 16: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef + 17: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef + 18: 0000000000000000 0 NOTYPE GLOBAL HIDDEN \[VARIANT_PCS\] 1 f_spec_global_hidden_def + 19: 0000000000000000 0 IFUNC GLOBAL HIDDEN 1 f_base_global_hidden_ifunc + 20: 0000000000000000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 21: 0000000000000000 0 NOTYPE GLOBAL HIDDEN 1 f_base_global_hidden_def + 22: 0000000000000000 0 IFUNC GLOBAL HIDDEN \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc + 23: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def + 24: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 25: 0000000000000000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc --- /dev/null 2019-07-02 08:01:33.386842704 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-shared.d 2019-07-02 17:34:45.635006622 +0100 @@ -0,0 +1,67 @@ +#source: variant_pcs-1.s +#source: variant_pcs-2.s +#ld: -shared --hash-style=sysv -T variant_pcs.ld +#readelf: -rsW + +Relocation section '\.rela\.plt' at offset 0x11000 contains 12 entries: + Offset Info Type Symbol's Value Symbol's Name \+ Addend +0000000000009020 0000000100000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_base_global_default_undef \+ 0 +0000000000009028 0000000200000402 R_AARCH64_JUMP_SLOT 0000000000000000 f_spec_global_default_undef \+ 0 +0000000000009030 0000000400000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_base_global_default_def \+ 0 +0000000000009038 0000000500000402 R_AARCH64_JUMP_SLOT 0000000000008000 f_spec_global_default_def \+ 0 +0000000000009040 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009048 0000000300000402 R_AARCH64_JUMP_SLOT f_spec_global_default_ifunc\(\) f_spec_global_default_ifunc \+ 0 +0000000000009050 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009058 0000000600000402 R_AARCH64_JUMP_SLOT f_base_global_default_ifunc\(\) f_base_global_default_ifunc \+ 0 +0000000000009060 0000000000000408 R_AARCH64_IRELATIVE 8038 +0000000000009068 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009070 0000000000000408 R_AARCH64_IRELATIVE 8000 +0000000000009078 0000000000000408 R_AARCH64_IRELATIVE 8038 + +Symbol table '\.dynsym' contains 7 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef + 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef + 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 4: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def + 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 6: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc + +Symbol table '\.symtab' contains 35 entries: + Num: Value Size Type Bind Vis Ndx Name + 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND + 1: 0000000000008000 0 SECTION LOCAL DEFAULT 1 + 2: 0000000000008070 0 SECTION LOCAL DEFAULT 2 + 3: 0000000000009000 0 SECTION LOCAL DEFAULT 3 + 4: 0000000000009080 0 SECTION LOCAL DEFAULT 4 + 5: 0000000000011000 0 SECTION LOCAL DEFAULT 5 + 6: 0000000000011120 0 SECTION LOCAL DEFAULT 6 + 7: 00000000000111c8 0 SECTION LOCAL DEFAULT 7 + 8: 0000000000011270 0 SECTION LOCAL DEFAULT 8 + 9: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o + 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local + 11: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc + 12: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc + 13: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_local + 14: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 \$x + 15: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o + 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 + 17: 0000000000008038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc + 18: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc + 19: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 + 20: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 \$x + 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS + 22: 0000000000009080 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC + 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_def + 24: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_global_hidden_ifunc + 25: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_global_hidden_def + 26: 0000000000009000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ + 27: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc + 28: 0000000000008070 0 NOTYPE LOCAL DEFAULT 2 \$x + 29: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef + 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef + 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 32: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def + 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 34: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc diff -rup binutils.orig/ld/testsuite/ld-aarch64/variant_pcs-now.d binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-now.d --- binutils.orig/ld/testsuite/ld-aarch64/variant_pcs-now.d 2019-07-03 10:06:20.012412075 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-now.d 2019-07-03 10:20:51.959203582 +0100 @@ -22,10 +22,10 @@ Symbol table '\.dynsym' contains 7 entri Num: Value Size Type Bind Vis Ndx Name 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef - 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_spec_global_default_undef \[VARIANT_PCS\] + 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_spec_global_default_ifunc \[VARIANT_PCS\] 4: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_spec_global_default_def \[VARIANT_PCS\] 6: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc Symbol table '\.symtab' contains 35 entries: @@ -40,28 +40,28 @@ Symbol table '\.symtab' contains 35 entr 7: 00000000000111c8 0 SECTION LOCAL DEFAULT 7 8: 0000000000011270 0 SECTION LOCAL DEFAULT 8 9: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o - 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local - 11: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc + 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_spec_local \[VARIANT_PCS\] + 11: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_spec_local_ifunc \[VARIANT_PCS\] 12: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc 13: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_local 14: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 \$x 15: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o - 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 - 17: 0000000000008038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc + 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_spec_local2 \[VARIANT_PCS\] + 17: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_spec_local2_ifunc \[VARIANT_PCS\] 18: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc 19: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 20: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 \$x 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS 22: 0000000000009080 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC - 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_def + 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_spec_global_hidden_def \[VARIANT_PCS\] 24: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_global_hidden_ifunc 25: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_global_hidden_def 26: 0000000000009000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ - 27: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc + 27: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_spec_global_hidden_ifunc \[VARIANT_PCS\] 28: 0000000000008070 0 NOTYPE LOCAL DEFAULT 2 \$x 29: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef - 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_spec_global_default_undef \[VARIANT_PCS\] + 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_spec_global_default_ifunc \[VARIANT_PCS\] 32: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_spec_global_default_def \[VARIANT_PCS\] 34: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc diff -rup binutils.orig/ld/testsuite/ld-aarch64/variant_pcs-r.d binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-r.d --- binutils.orig/ld/testsuite/ld-aarch64/variant_pcs-r.d 2019-07-03 10:06:20.012412075 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-r.d 2019-07-03 10:14:28.152933189 +0100 @@ -37,24 +37,24 @@ Symbol table '\.symtab' contains 26 entr 2: 0000000000000000 0 SECTION LOCAL DEFAULT 3 3: 0000000000000000 0 SECTION LOCAL DEFAULT 4 4: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o - 5: 0000000000000000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local - 6: 0000000000000000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc + 5: 0000000000000000 0 NOTYPE LOCAL DEFAULT 1 f_spec_local \[VARIANT_PCS\] + 6: 0000000000000000 0 IFUNC LOCAL DEFAULT 1 f_spec_local_ifunc \[VARIANT_PCS\] 7: 0000000000000000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc 8: 0000000000000000 0 NOTYPE LOCAL DEFAULT 1 f_base_local 9: 0000000000000000 0 NOTYPE LOCAL DEFAULT 1 \$x 10: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o - 11: 0000000000000038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 - 12: 0000000000000038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc + 11: 0000000000000038 0 NOTYPE LOCAL DEFAULT 1 f_spec_local2 \[VARIANT_PCS\] + 12: 0000000000000038 0 IFUNC LOCAL DEFAULT 1 f_spec_local2_ifunc \[VARIANT_PCS\] 13: 0000000000000038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc 14: 0000000000000038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 15: 0000000000000038 0 NOTYPE LOCAL DEFAULT 1 \$x 16: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef - 17: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 18: 0000000000000000 0 NOTYPE GLOBAL HIDDEN \[VARIANT_PCS\] 1 f_spec_global_hidden_def + 17: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_spec_global_default_undef \[VARIANT_PCS\] + 18: 0000000000000000 0 NOTYPE GLOBAL HIDDEN 1 f_spec_global_hidden_def \[VARIANT_PCS\] 19: 0000000000000000 0 IFUNC GLOBAL HIDDEN 1 f_base_global_hidden_ifunc - 20: 0000000000000000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 20: 0000000000000000 0 IFUNC GLOBAL DEFAULT 1 f_spec_global_default_ifunc \[VARIANT_PCS\] 21: 0000000000000000 0 NOTYPE GLOBAL HIDDEN 1 f_base_global_hidden_def - 22: 0000000000000000 0 IFUNC GLOBAL HIDDEN \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc + 22: 0000000000000000 0 IFUNC GLOBAL HIDDEN 1 f_spec_global_hidden_ifunc \[VARIANT_PCS\] 23: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 24: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 24: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 1 f_spec_global_default_def \[VARIANT_PCS\] 25: 0000000000000000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc diff -rup binutils.orig/ld/testsuite/ld-aarch64/variant_pcs-shared.d binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-shared.d --- binutils.orig/ld/testsuite/ld-aarch64/variant_pcs-shared.d 2019-07-03 10:06:20.012412075 +0100 +++ binutils-2.32/ld/testsuite/ld-aarch64/variant_pcs-shared.d 2019-07-03 10:19:00.760994532 +0100 @@ -22,10 +22,10 @@ Symbol table '\.dynsym' contains 7 entri Num: Value Size Type Bind Vis Ndx Name 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef - 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 2: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_spec_global_default_undef \[VARIANT_PCS\] + 3: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_spec_global_default_ifunc \[VARIANT_PCS\] 4: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 5: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_spec_global_default_def \[VARIANT_PCS\] 6: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc Symbol table '\.symtab' contains 35 entries: @@ -40,28 +40,28 @@ Symbol table '\.symtab' contains 35 entr 7: 00000000000111c8 0 SECTION LOCAL DEFAULT 7 8: 0000000000011270 0 SECTION LOCAL DEFAULT 8 9: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-1\.o - 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local - 11: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local_ifunc + 10: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_spec_local \[VARIANT_PCS\] + 11: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_spec_local_ifunc \[VARIANT_PCS\] 12: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_local_ifunc 13: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_local 14: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 \$x 15: 0000000000000000 0 FILE LOCAL DEFAULT ABS .*variant_pcs-2\.o - 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2 - 17: 0000000000008038 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_local2_ifunc + 16: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_spec_local2 \[VARIANT_PCS\] + 17: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_spec_local2_ifunc \[VARIANT_PCS\] 18: 0000000000008038 0 IFUNC LOCAL DEFAULT 1 f_base_local2_ifunc 19: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 f_base_local2 20: 0000000000008038 0 NOTYPE LOCAL DEFAULT 1 \$x 21: 0000000000000000 0 FILE LOCAL DEFAULT ABS 22: 0000000000009080 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC - 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_def + 23: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_spec_global_hidden_def \[VARIANT_PCS\] 24: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_base_global_hidden_ifunc 25: 0000000000008000 0 NOTYPE LOCAL DEFAULT 1 f_base_global_hidden_def 26: 0000000000009000 0 OBJECT LOCAL DEFAULT ABS _GLOBAL_OFFSET_TABLE_ - 27: 0000000000008000 0 IFUNC LOCAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_hidden_ifunc + 27: 0000000000008000 0 IFUNC LOCAL DEFAULT 1 f_spec_global_hidden_ifunc \[VARIANT_PCS\] 28: 0000000000008070 0 NOTYPE LOCAL DEFAULT 2 \$x 29: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_base_global_default_undef - 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] UND f_spec_global_default_undef - 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_ifunc + 30: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND f_spec_global_default_undef \[VARIANT_PCS\] + 31: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_spec_global_default_ifunc \[VARIANT_PCS\] 32: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_base_global_default_def - 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT \[VARIANT_PCS\] 1 f_spec_global_default_def + 33: 0000000000008000 0 NOTYPE GLOBAL DEFAULT 1 f_spec_global_default_def \[VARIANT_PCS\] 34: 0000000000008000 0 IFUNC GLOBAL DEFAULT 1 f_base_global_default_ifunc