Blame SOURCES/binutils-aarch64-STO_AARCH64_VARIANT_PCS.patch

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