public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym.
@ 2022-06-23 15:13 Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 1/6] elf: Add definition for SHT_LLVM_ADDRSIG Tatsuyuki Ishi
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-23 15:13 UTC (permalink / raw)
  To: binutils

LLVM's addrsig extension [1] allows the compiler to pass on information
about whether a symbol's address is taken to the linker, which in turns
use this info to perform (safe) Identical Code Folding optimization at
link-time.

This patch adds support for the relevant LLVM assembler directives,
which is a prerequisite for GCC support of the feature.

v2 includes patch to objcopy and ld -r to discard the .llvm_addrsig
section, in order to prevent linkers to get corrupted input now that
the SH_LINK heuristic they use is supplied with the proper value.

Thanks Alan Modra, Fangrui Song and Jan Beulich for reviewing the last
revision of the patch.

[1]: https://llvm.org/docs/Extensions.html#sht-llvm-addrsig-section-address-significance-table




^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 1/6] elf: Add definition for SHT_LLVM_ADDRSIG.
  2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
@ 2022-06-23 15:13 ` Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 2/6] bfd: Output SH_LINK to .symtab " Tatsuyuki Ishi
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-23 15:13 UTC (permalink / raw)
  To: binutils; +Cc: amodra, jbeulich, i, Tatsuyuki Ishi

---
 include/elf/common.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/include/elf/common.h b/include/elf/common.h
index e4bc53e35b4..fd31eb0c001 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -534,6 +534,9 @@
 #define SHT_LOOS	0x60000000	/* First of OS specific semantics */
 #define SHT_HIOS	0x6fffffff	/* Last of OS specific semantics */
 
+/* LLVM extension */
+#define SHT_LLVM_ADDRSIG  0x6fff4c03    /* Address significance table */
+
 #define SHT_GNU_INCREMENTAL_INPUTS 0x6fff4700   /* incremental build data */
 #define SHT_GNU_ATTRIBUTES 0x6ffffff5	/* Object attributes */
 #define SHT_GNU_HASH	0x6ffffff6	/* GNU style symbol hash table */
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 2/6] bfd: Output SH_LINK to .symtab for SHT_LLVM_ADDRSIG.
  2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 1/6] elf: Add definition for SHT_LLVM_ADDRSIG Tatsuyuki Ishi
@ 2022-06-23 15:13 ` Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 3/6] objcopy: Remove SHT_LLVM_ADDRSIG sections by default Tatsuyuki Ishi
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-23 15:13 UTC (permalink / raw)
  To: binutils; +Cc: amodra, jbeulich, i, Tatsuyuki Ishi

To mimick LLVM behavior.
---
 bfd/elf.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/bfd/elf.c b/bfd/elf.c
index 468d37f5028..a702bff636e 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -3988,6 +3988,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
 	  break;
 
 	case SHT_GROUP:
+	case SHT_LLVM_ADDRSIG:
 	  d->this_hdr.sh_link = elf_onesymtab (abfd);
 	}
     }
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 3/6] objcopy: Remove SHT_LLVM_ADDRSIG sections by default.
  2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 1/6] elf: Add definition for SHT_LLVM_ADDRSIG Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 2/6] bfd: Output SH_LINK to .symtab " Tatsuyuki Ishi
@ 2022-06-23 15:13 ` Tatsuyuki Ishi
  2022-06-23 15:40   ` Jan Beulich
  2022-06-23 15:13 ` [PATCH v2 4/6] ld: Discard LLVM_ADDRSIG sections Tatsuyuki Ishi
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-23 15:13 UTC (permalink / raw)
  To: binutils; +Cc: amodra, jbeulich, i, Tatsuyuki Ishi

addrsig entries copied by objcopy has historically been ignored by lld [1],
due to known caveats in case the symbol table is modified without updating
the addrsig section as well.

Now that bfd is able to insert the respective sh_link entry for the
section, the heuristic for broken addrsig section in [1] no longer works
and we need to explicitly remove the section to prevent silent corruption.
We also warn the user about this, so they will be aware of the caveat.

[1]: https://github.com/llvm/llvm-project/blob/09c2b7c35af8c4bad39f03e9f60df8bd07323028/lld/ELF/InputFiles.cpp#L540-L554
---
 binutils/objcopy.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index df87712df98..57d39558099 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -1316,10 +1316,20 @@ is_mergeable_note_section (bfd * abfd, asection * sec)
   return false;
 }
 
+static bool
+is_addrsig_section (bfd *abfd, asection *sec)
+{
+  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+      && elf_section_data (sec)->this_hdr.sh_type == SHT_LLVM_ADDRSIG)
+    return true;
+
+  return false;
+}
+
 /* See if a non-group section is being removed.  */
 
 static bool
-is_strip_section_1 (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
+is_strip_section_1 (bfd *abfd, asection *sec)
 {
   if (find_section_list (bfd_section_name (sec), false, SECTION_CONTEXT_KEEP)
       != NULL)
@@ -1348,6 +1358,20 @@ is_strip_section_1 (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
 	return true;
     }
 
+  /* addrsig needs to be updated if the symtab is altered, but we don't know
+     how to read nor write it, so just throw it away to not confuse
+     downstream tools.  */
+  if (is_addrsig_section (abfd, sec))
+    {
+      non_fatal (_ ("warning: removing section %s to prevent corrupt addrsig "
+                    "information"),
+                 bfd_section_name (sec));
+      non_fatal (_ ("pass --remove-section=%1$s to suppress warning, or "
+                    "--keep-section=%1$s to override"),
+                 bfd_section_name (sec));
+      return true;
+    }
+
   if ((bfd_section_flags (sec) & SEC_DEBUGGING) != 0)
     {
       if (strip_symbols == STRIP_DEBUG
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 4/6] ld: Discard LLVM_ADDRSIG sections.
  2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
                   ` (2 preceding siblings ...)
  2022-06-23 15:13 ` [PATCH v2 3/6] objcopy: Remove SHT_LLVM_ADDRSIG sections by default Tatsuyuki Ishi
@ 2022-06-23 15:13 ` Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 5/6] gas: Add support for LLVM addrsig and addrsig_sym directives on ELF Tatsuyuki Ishi
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-23 15:13 UTC (permalink / raw)
  To: binutils; +Cc: amodra, jbeulich, i, Tatsuyuki Ishi

The symbol indices in addrsig sections requires update in the case of a
partial link, which we currently cannot do. Now that bfd is able to insert
a correct sh_link entry for the addrsig section, this will break the final
linker's heuristic [1] that discards such corrupt section.

As such, strip this section explicitly for ld -r.

[1]: https://github.com/llvm/llvm-project/blob/09c2b7c35af8c4bad39f03e9f60df8bd07323028/lld/ELF/InputFiles.cpp#L540-L554
---
 ld/ldlang.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/ld/ldlang.c b/ld/ldlang.c
index 839535bdb73..ba2d350bbd9 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -2516,6 +2516,13 @@ lang_discard_section_p (asection *section)
       && link_info.resolve_section_groups)
     discard = true;
 
+  /* Discard .llvm_addrsig sections. We don't do the additional processing
+     to keep the symbol indices correct, and when doing a partial link this
+     will end up getting the wrong information to the final linker.  */
+  if (bfd_get_flavour (section->owner) == bfd_target_elf_flavour
+      && elf_section_type (section) == SHT_LLVM_ADDRSIG)
+    discard = true;
+
   /* Discard debugging sections if we are stripping debugging
      information.  */
   if ((link_info.strip == strip_debugger || link_info.strip == strip_all)
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 5/6] gas: Add support for LLVM addrsig and addrsig_sym directives on ELF.
  2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
                   ` (3 preceding siblings ...)
  2022-06-23 15:13 ` [PATCH v2 4/6] ld: Discard LLVM_ADDRSIG sections Tatsuyuki Ishi
@ 2022-06-23 15:13 ` Tatsuyuki Ishi
  2022-06-23 15:13 ` [PATCH v2 6/6] gas: Add basic test for addrsig Tatsuyuki Ishi
  2022-06-28  9:20 ` [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Alan Modra
  6 siblings, 0 replies; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-23 15:13 UTC (permalink / raw)
  To: binutils; +Cc: amodra, jbeulich, i, Tatsuyuki Ishi

These are LLVM extensions for specifying address significance, i.e.
if the symbols have their address taken, which is in turn used for
the Identical Code Folding link-time optimization.

For now, it's only implemented for the ELF platform; LLVM also supports
COFF, but the format is not well documented and usage is not widespread.

The addrsig directive signifies the assembler to emit the .llvm_addrsig
section, which signals the linker that it's possible to do (safe) ICF on
this object file.

The addrsig_sym directive marks a symbol as address significant. In this
patch, it's recorded with a boolean flag on the symbol. Later when the
symtab is ready, we loop over the symbols and construct the addrsig
section with indices of those symbols.
---
 gas/config/obj-elf.c | 62 ++++++++++++++++++++++++++++++++++++++++++++
 gas/symbols.c        | 23 +++++++++++++++-
 gas/symbols.h        |  2 ++
 3 files changed, 86 insertions(+), 1 deletion(-)

diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index e5ab8514de7..7f2f28ed9ee 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -75,6 +75,8 @@ static void obj_elf_symver (int);
 static void obj_elf_subsection (int);
 static void obj_elf_popsection (int);
 static void obj_elf_gnu_attribute (int);
+static void obj_elf_llvm_addrsig (int);
+static void obj_elf_llvm_addrsig_sym (int);
 static void obj_elf_tls_common (int);
 static void obj_elf_lcomm (int);
 static void obj_elf_struct (int);
@@ -121,6 +123,9 @@ static const pseudo_typeS elf_pseudo_table[] =
   /* A GNU extension for object attributes.  */
   {"gnu_attribute", obj_elf_gnu_attribute, 0},
 
+  {"addrsig", obj_elf_llvm_addrsig, 0},
+  {"addrsig_sym", obj_elf_llvm_addrsig_sym, 0},
+
   /* These are used for dwarf2.  */
   { "file", dwarf2_directive_file, 0 },
   { "loc",  dwarf2_directive_loc,  0 },
@@ -191,6 +196,7 @@ static const pseudo_typeS ecoff_debug_pseudo_table[] =
 /* This is called when the assembler starts.  */
 
 asection *elf_com_section_ptr;
+static bool addrsig_enabled;
 
 void
 elf_begin (void)
@@ -205,6 +211,8 @@ elf_begin (void)
   s = bfd_get_section_by_name (stdoutput, BSS_SECTION_NAME);
   symbol_table_insert (section_symbol (s));
   elf_com_section_ptr = bfd_com_section_ptr;
+
+  addrsig_enabled = false;
 }
 
 void
@@ -2108,6 +2116,58 @@ obj_elf_gnu_attribute (int ignored ATTRIBUTE_UNUSED)
   obj_elf_vendor_attribute (OBJ_ATTR_GNU);
 }
 
+static void obj_elf_llvm_addrsig (int ignored ATTRIBUTE_UNUSED)
+{
+  demand_empty_rest_of_line ();
+  addrsig_enabled = true;
+}
+
+static void obj_elf_llvm_addrsig_sym (int ignored ATTRIBUTE_UNUSED)
+{
+  char *name;
+  symbolS *sym;
+
+  get_symbol_name (&name);
+  demand_empty_rest_of_line ();
+
+  sym = symbol_find_or_make (name);
+  S_SET_ADDRSIG (sym);
+  symbol_mark_used_in_reloc (sym);
+}
+
+/* Emit an unsigned "little-endian base 128" number.  */
+
+static unsigned int
+out_uleb128 (valueT value)
+{
+  return output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
+}
+
+static void
+obj_elf_out_llvm_addrsig (void)
+{
+  segT addrsig_seg;
+  symbolS *symp;
+  int symtab_index;
+  unsigned int len = 0;
+
+  if (!addrsig_enabled)
+    return;
+
+  addrsig_seg = subseg_new (".llvm_addrsig", 0);
+  elf_section_type (addrsig_seg) = SHT_LLVM_ADDRSIG;
+  bfd_set_section_flags (addrsig_seg, SEC_HAS_CONTENTS | SEC_EXCLUDE);
+  for (symtab_index = 0, symp = symbol_rootP; symp; symp = symbol_next (symp))
+    if (symbol_written_p (symp))
+      {
+        if (S_GET_ADDRSIG (symp))
+          len += out_uleb128 (symtab_index);
+        symtab_index++;
+      }
+  frag_now->fr_fix = frag_now_fix_octets ();
+  bfd_set_section_size(addrsig_seg, len);
+}
+
 void
 elf_obj_read_begin_hook (void)
 {
@@ -2903,6 +2963,8 @@ elf_frob_file (void)
 {
   bfd_map_over_sections (stdoutput, adjust_stab_sections, NULL);
 
+  obj_elf_out_llvm_addrsig();
+
 #ifdef elf_tc_final_processing
   elf_tc_final_processing ();
 #endif
diff --git a/gas/symbols.c b/gas/symbols.c
index e3fddee8c79..881d6d08851 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -88,6 +88,10 @@ struct symbol_flags
   /* Set when a warning about the symbol containing multibyte characters
      is generated.  */
   unsigned int multibyte_warned : 1;
+
+  /* Set when a symbol is marked as address significant, i.e. its address
+     is taken.  */
+  unsigned int addr_sig : 1;
 };
 
 /* A pointer in the symbol may point to either a complete symbol
@@ -204,7 +208,7 @@ static void *
 symbol_entry_find (htab_t table, const char *name)
 {
   hashval_t hash = htab_hash_string (name);
-  symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
+  symbol_entry_t needle = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
 			      hash, name, 0, 0, 0 } };
   return htab_find_with_hash (table, &needle, hash);
 }
@@ -2578,6 +2582,23 @@ S_SET_FORWARD_REF (symbolS *s)
   s->flags.forward_ref = 1;
 }
 
+bool
+S_GET_ADDRSIG (symbolS *s)
+{
+  if (s->flags.local_symbol)
+    return false;
+  return s->flags.addr_sig;
+}
+
+
+void
+S_SET_ADDRSIG (symbolS *s)
+{
+  if (s->flags.local_symbol)
+    s = local_symbol_convert (s);
+  s->flags.addr_sig = 1;
+}
+
 /* Return the previous symbol in a chain.  */
 
 symbolS *
diff --git a/gas/symbols.h b/gas/symbols.h
index 19eb658ca68..e7802ba8734 100644
--- a/gas/symbols.h
+++ b/gas/symbols.h
@@ -115,6 +115,8 @@ extern void S_SET_THREAD_LOCAL (symbolS *);
 extern void S_SET_VOLATILE (symbolS *);
 extern void S_CLEAR_VOLATILE (symbolS *);
 extern void S_SET_FORWARD_REF (symbolS *);
+extern bool S_GET_ADDRSIG (symbolS *s);
+extern void S_SET_ADDRSIG (symbolS *);
 
 #ifndef WORKING_DOT_WORD
 struct broken_word
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 6/6] gas: Add basic test for addrsig.
  2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
                   ` (4 preceding siblings ...)
  2022-06-23 15:13 ` [PATCH v2 5/6] gas: Add support for LLVM addrsig and addrsig_sym directives on ELF Tatsuyuki Ishi
@ 2022-06-23 15:13 ` Tatsuyuki Ishi
  2022-06-28  9:20 ` [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Alan Modra
  6 siblings, 0 replies; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-23 15:13 UTC (permalink / raw)
  To: binutils; +Cc: amodra, jbeulich, i, Tatsuyuki Ishi

These are very basic tests to ensure that the addrsig directives are
correctly parsed and something is emitted.
---
 gas/testsuite/gas/elf/addrsig.d | 7 +++++++
 gas/testsuite/gas/elf/addrsig.s | 9 +++++++++
 gas/testsuite/gas/elf/elf.exp   | 1 +
 3 files changed, 17 insertions(+)
 create mode 100644 gas/testsuite/gas/elf/addrsig.d
 create mode 100644 gas/testsuite/gas/elf/addrsig.s

diff --git a/gas/testsuite/gas/elf/addrsig.d b/gas/testsuite/gas/elf/addrsig.d
new file mode 100644
index 00000000000..0c1f7dcf440
--- /dev/null
+++ b/gas/testsuite/gas/elf/addrsig.d
@@ -0,0 +1,7 @@
+# name: .llvm_addrsig
+# objdump: -sj .llvm_addrsig
+
+.*: +file format .*
+
+Contents of section \.llvm_addrsig:
+ 0000 00020304                             .*
diff --git a/gas/testsuite/gas/elf/addrsig.s b/gas/testsuite/gas/elf/addrsig.s
new file mode 100644
index 00000000000..c390ff52805
--- /dev/null
+++ b/gas/testsuite/gas/elf/addrsig.s
@@ -0,0 +1,9 @@
+	.addrsig
+	.addrsig_sym g1
+	.globl g2
+	.addrsig_sym g3
+	.addrsig_sym local
+	.addrsig_sym .Llocal
+local:
+.Llocal:
+.Llocal_hidden:
diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp
index 07f08a00a28..369fed64fa8 100644
--- a/gas/testsuite/gas/elf/elf.exp
+++ b/gas/testsuite/gas/elf/elf.exp
@@ -355,4 +355,5 @@ if { [is_elf_format] } then {
     run_dump_test "bignums"
     run_dump_test "section-symbol-redef"
     run_dump_test "pr27228"
+    run_dump_test "addrsig"
 }
-- 
2.36.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/6] objcopy: Remove SHT_LLVM_ADDRSIG sections by default.
  2022-06-23 15:13 ` [PATCH v2 3/6] objcopy: Remove SHT_LLVM_ADDRSIG sections by default Tatsuyuki Ishi
@ 2022-06-23 15:40   ` Jan Beulich
  2022-06-24  5:28     ` Tatsuyuki Ishi
  0 siblings, 1 reply; 13+ messages in thread
From: Jan Beulich @ 2022-06-23 15:40 UTC (permalink / raw)
  To: Tatsuyuki Ishi; +Cc: amodra, i, binutils

On 23.06.2022 17:13, Tatsuyuki Ishi wrote:
> --- a/binutils/objcopy.c
> +++ b/binutils/objcopy.c
> @@ -1316,10 +1316,20 @@ is_mergeable_note_section (bfd * abfd, asection * sec)
>    return false;
>  }
>  
> +static bool
> +is_addrsig_section (bfd *abfd, asection *sec)
> +{
> +  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
> +      && elf_section_data (sec)->this_hdr.sh_type == SHT_LLVM_ADDRSIG)
> +    return true;
> +
> +  return false;
> +}

Not sure if this would conflict with unwritten style expectations,
but when I see such I always wonder: Why not a simple return
statement, without explicit use of true/false (or 1/0)?

> @@ -1348,6 +1358,20 @@ is_strip_section_1 (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
>  	return true;
>      }
>  
> +  /* addrsig needs to be updated if the symtab is altered, but we don't know
> +     how to read nor write it, so just throw it away to not confuse
> +     downstream tools.  */
> +  if (is_addrsig_section (abfd, sec))
> +    {
> +      non_fatal (_ ("warning: removing section %s to prevent corrupt addrsig "
> +                    "information"),
> +                 bfd_section_name (sec));
> +      non_fatal (_ ("pass --remove-section=%1$s to suppress warning, or "
> +                    "--keep-section=%1$s to override"),
> +                 bfd_section_name (sec));
> +      return true;
> +    }

Isn't this too aggressive? The comment says "if the symtab is altered",
but the code looks to request stripping unconditionally.

Jan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/6] objcopy: Remove SHT_LLVM_ADDRSIG sections by default.
  2022-06-23 15:40   ` Jan Beulich
@ 2022-06-24  5:28     ` Tatsuyuki Ishi
  0 siblings, 0 replies; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-24  5:28 UTC (permalink / raw)
  To: Jan Beulich; +Cc: binutils

Hi Jan, thanks again for your review.

> > --- a/binutils/objcopy.c
> > +++ b/binutils/objcopy.c
> > @@ -1316,10 +1316,20 @@ is_mergeable_note_section (bfd * abfd, asection * sec)
> >    return false;
> >  }
> >
> > +static bool
> > +is_addrsig_section (bfd *abfd, asection *sec)
> > +{
> > +  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
> > +      && elf_section_data (sec)->this_hdr.sh_type == SHT_LLVM_ADDRSIG)
> > +    return true;
> > +
> > +  return false;
> > +}
>
> Not sure if this would conflict with unwritten style expectations,
> but when I see such I always wonder: Why not a simple return
> statement, without explicit use of true/false (or 1/0)?

I just blindly copied the style of is_mergeable_note_section above,
but I think your suggestion also makes sense. If there's no objections
I will turn that into a direct return in the next revision.

> > @@ -1348,6 +1358,20 @@ is_strip_section_1 (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
> >       return true;
> >      }
> >
> > +  /* addrsig needs to be updated if the symtab is altered, but we don't know
> > +     how to read nor write it, so just throw it away to not confuse
> > +     downstream tools.  */
> > +  if (is_addrsig_section (abfd, sec))
> > +    {
> > +      non_fatal (_ ("warning: removing section %s to prevent corrupt addrsig "
> > +                    "information"),
> > +                 bfd_section_name (sec));
> > +      non_fatal (_ ("pass --remove-section=%1$s to suppress warning, or "
> > +                    "--keep-section=%1$s to override"),
> > +                 bfd_section_name (sec));
> > +      return true;
> > +    }
>
> Isn't this too aggressive? The comment says "if the symtab is altered",
> but the code looks to request stripping unconditionally.

Sorry, the way the comment is written is indeed quite confusing, so I
can update that. But there's probably not too much value in checking
whether symtab is altered here, since it has been thrown away
(unconditionally) by LLD from the sh_link heuristic in prior versions
of binutils anyway.

Tatsuyuki

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym.
  2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
                   ` (5 preceding siblings ...)
  2022-06-23 15:13 ` [PATCH v2 6/6] gas: Add basic test for addrsig Tatsuyuki Ishi
@ 2022-06-28  9:20 ` Alan Modra
  2022-06-29  1:27   ` Tatsuyuki Ishi
  6 siblings, 1 reply; 13+ messages in thread
From: Alan Modra @ 2022-06-28  9:20 UTC (permalink / raw)
  To: Tatsuyuki Ishi; +Cc: binutils, jbeulich, i

On Fri, Jun 24, 2022 at 12:13:48AM +0900, Tatsuyuki Ishi wrote:
> v2 includes patch to objcopy and ld -r to discard the .llvm_addrsig
> section, in order to prevent linkers to get corrupted input now that
> the SH_LINK heuristic they use is supplied with the proper value.

This patchset wasn't tested, was it?

aarch64_be-linux-gnu_ilp32  +FAIL: strip --strip-unneeded on common symbol
aarch64_be-linux-gnu_ilp32  +FAIL: --localize-hidden test 1
aarch64_be-linux-gnu_ilp32  +FAIL: binutils-all/remove-relocs-05
aarch64_be-linux-gnu_ilp32  +FAIL: binutils-all/remove-relocs-08
aarch64_be-linux-gnu_ilp32  +FAIL: --localize-hidden test 2
aarch64_be-linux-gnu_ilp32  +FAIL: .llvm_addrsig
aarch64_be-linux-gnu_ilp32  +FAIL: ld-elf/note-2
aarch64-elf  +FAIL: strip --strip-unneeded on common symbol
aarch64-elf  +FAIL: binutils-all/strip-15
aarch64-elf  +FAIL: --localize-hidden test 1
aarch64-elf  +FAIL: binutils-all/remove-relocs-05
aarch64-elf  +FAIL: binutils-all/remove-relocs-08
aarch64-elf  +FAIL: --localize-hidden test 2
aarch64-elf  +FAIL: .llvm_addrsig
aarch64-elf  +FAIL: ld-elf/note-2
aarch64-linux  +FAIL: gnu-debuglink (strip)
aarch64-linux  +FAIL: strip
aarch64-linux  +FAIL: keep only debug data
aarch64-linux  +FAIL: NOBITS sections retain sh_link field
aarch64-linux  +FAIL: --only-keep-debug for ELF relocatables
aarch64-linux  +FAIL: strip --strip-unneeded on common symbol
aarch64-linux  +FAIL: binutils-all/strip-15
aarch64-linux  +FAIL: --localize-hidden test 1
aarch64-linux  +FAIL: binutils-all/remove-relocs-05
aarch64-linux  +FAIL: binutils-all/remove-relocs-08
aarch64-linux  +FAIL: --localize-hidden test 2
aarch64-linux  +FAIL: remove-section relocation sections
aarch64-linux  +FAIL: build-id-debuglink (strip debug info)
aarch64-linux  +FAIL: .llvm_addrsig
aarch64-linux  +FAIL: ld-elf/note-2
alpha-linux  +FAIL: gnu-debuglink (strip)
alpha-linux  +FAIL: strip
alpha-linux  +FAIL: keep only debug data
alpha-linux  +FAIL: NOBITS sections retain sh_link field
alpha-linux  +FAIL: --only-keep-debug for ELF relocatables
alpha-linux  +FAIL: strip --strip-unneeded on common symbol
alpha-linux  +FAIL: binutils-all/strip-15
alpha-linux  +FAIL: --localize-hidden test 1
alpha-linux  +FAIL: binutils-all/remove-relocs-05
alpha-linux  +FAIL: binutils-all/remove-relocs-08
alpha-linux  +FAIL: --localize-hidden test 2
alpha-linux  +FAIL: remove-section relocation sections
alpha-linux  +FAIL: build-id-debuglink (strip debug info)
alpha-linux  +FAIL: .llvm_addrsig
alpha-linux  +FAIL: ld-elf/note-2
alpha-netbsd  +FAIL: strip --strip-unneeded on common symbol
alpha-netbsd  +FAIL: binutils-all/strip-15
alpha-netbsd  +FAIL: --localize-hidden test 1
alpha-netbsd  +FAIL: binutils-all/remove-relocs-05
alpha-netbsd  +FAIL: binutils-all/remove-relocs-08
alpha-netbsd  +FAIL: --localize-hidden test 2
alpha-netbsd  +FAIL: .llvm_addrsig
alpha-netbsd  +FAIL: ld-elf/note-2
alpha-unknown-freebsd4.7  +FAIL: strip --strip-unneeded on common symbol
alpha-unknown-freebsd4.7  +FAIL: binutils-all/strip-15
alpha-unknown-freebsd4.7  +FAIL: --localize-hidden test 1
alpha-unknown-freebsd4.7  +FAIL: binutils-all/remove-relocs-05
alpha-unknown-freebsd4.7  +FAIL: binutils-all/remove-relocs-08
alpha-unknown-freebsd4.7  +FAIL: --localize-hidden test 2
alpha-unknown-freebsd4.7  +FAIL: .llvm_addrsig
alpha-unknown-freebsd4.7  +FAIL: ld-elf/note-2
am33_2.0-linux  +FAIL: strip --strip-unneeded on common symbol
am33_2.0-linux  +FAIL: binutils-all/strip-15
am33_2.0-linux  +FAIL: --localize-hidden test 1
am33_2.0-linux  +FAIL: binutils-all/remove-relocs-05
am33_2.0-linux  +FAIL: binutils-all/remove-relocs-08
am33_2.0-linux  +FAIL: --localize-hidden test 2
am33_2.0-linux  +FAIL: .llvm_addrsig
am33_2.0-linux  +FAIL: ld-elf/note-2
arc-elf  +FAIL: strip --strip-unneeded on common symbol
arc-elf  +FAIL: binutils-all/strip-15
arc-elf  +FAIL: --localize-hidden test 1
arc-elf  +FAIL: binutils-all/remove-relocs-05
arc-elf  +FAIL: binutils-all/remove-relocs-08
arc-elf  +FAIL: --localize-hidden test 2
arc-elf  +FAIL: .llvm_addrsig
arc-elf  +FAIL: ld-elf/note-2
arc-linux-uclibc  +FAIL: strip --strip-unneeded on common symbol
arc-linux-uclibc  +FAIL: binutils-all/strip-15
arc-linux-uclibc  +FAIL: --localize-hidden test 1
arc-linux-uclibc  +FAIL: binutils-all/remove-relocs-05
arc-linux-uclibc  +FAIL: binutils-all/remove-relocs-08
arc-linux-uclibc  +FAIL: --localize-hidden test 2
arc-linux-uclibc  +FAIL: .llvm_addrsig
arc-linux-uclibc  +FAIL: ld-elf/note-2
armeb-linuxeabi  +FAIL: strip --strip-unneeded on common symbol
armeb-linuxeabi  +FAIL: binutils-all/strip-15
armeb-linuxeabi  +FAIL: --localize-hidden test 1
armeb-linuxeabi  +FAIL: binutils-all/remove-relocs-05
armeb-linuxeabi  +FAIL: binutils-all/remove-relocs-08
armeb-linuxeabi  +FAIL: --localize-hidden test 2
armeb-linuxeabi  +FAIL: .llvm_addrsig
armeb-linuxeabi  +FAIL: ld-elf/note-2
arm-elf  +FAIL: strip --strip-unneeded on common symbol
arm-elf  +FAIL: binutils-all/strip-15
arm-elf  +FAIL: --localize-hidden test 1
arm-elf  +FAIL: binutils-all/remove-relocs-05
arm-elf  +FAIL: binutils-all/remove-relocs-08
arm-elf  +FAIL: --localize-hidden test 2
arm-elf  +FAIL: .llvm_addrsig
arm-elf  +FAIL: ld-elf/note-2
arm-linuxeabi  +FAIL: gnu-debuglink (strip)
arm-linuxeabi  +FAIL: strip
arm-linuxeabi  +FAIL: keep only debug data
arm-linuxeabi  +FAIL: NOBITS sections retain sh_link field
arm-linuxeabi  +FAIL: --only-keep-debug for ELF relocatables
arm-linuxeabi  +FAIL: strip --strip-unneeded on common symbol
arm-linuxeabi  +FAIL: binutils-all/strip-15
arm-linuxeabi  +FAIL: --localize-hidden test 1
arm-linuxeabi  +FAIL: binutils-all/remove-relocs-05
arm-linuxeabi  +FAIL: binutils-all/remove-relocs-08
arm-linuxeabi  +FAIL: --localize-hidden test 2
arm-linuxeabi  +FAIL: remove-section relocation sections
arm-linuxeabi  +FAIL: build-id-debuglink (strip debug info)
arm-linuxeabi  +FAIL: .llvm_addrsig
arm-linuxeabi  +FAIL: ld-elf/note-2
arm-nacl  +FAIL: strip --strip-unneeded on common symbol
arm-nacl  +FAIL: binutils-all/strip-15
arm-nacl  +FAIL: --localize-hidden test 1
arm-nacl  +FAIL: binutils-all/remove-relocs-05
arm-nacl  +FAIL: binutils-all/remove-relocs-08
arm-nacl  +FAIL: --localize-hidden test 2
arm-nacl  +FAIL: .llvm_addrsig
arm-nacl  +FAIL: ld-elf/note-2
arm-netbsdelf  +FAIL: strip --strip-unneeded on common symbol
arm-netbsdelf  +FAIL: binutils-all/strip-15
arm-netbsdelf  +FAIL: --localize-hidden test 1
arm-netbsdelf  +FAIL: binutils-all/remove-relocs-05
arm-netbsdelf  +FAIL: binutils-all/remove-relocs-08
arm-netbsdelf  +FAIL: --localize-hidden test 2
arm-netbsdelf  +FAIL: .llvm_addrsig
arm-netbsdelf  +FAIL: ld-elf/note-2
arm-nto  +FAIL: strip --strip-unneeded on common symbol
arm-nto  +FAIL: binutils-all/strip-15
arm-nto  +FAIL: --localize-hidden test 1
arm-nto  +FAIL: binutils-all/remove-relocs-05
arm-nto  +FAIL: binutils-all/remove-relocs-08
arm-nto  +FAIL: --localize-hidden test 2
arm-nto  +FAIL: .llvm_addrsig
arm-nto  +FAIL: ld-elf/note-2
arm-vxworks  +FAIL: strip --strip-unneeded on common symbol
arm-vxworks  +FAIL: --localize-hidden test 2
avr-elf  +FAIL: strip --strip-unneeded on common symbol
avr-elf  +FAIL: binutils-all/strip-15
avr-elf  +FAIL: --localize-hidden test 1
avr-elf  +FAIL: binutils-all/remove-relocs-05
avr-elf  +FAIL: binutils-all/remove-relocs-08
avr-elf  +FAIL: --localize-hidden test 2
avr-elf  +FAIL: .llvm_addrsig
avr-elf  +FAIL: ld-elf/note-2
bfin-elf  +FAIL: strip --strip-unneeded on common symbol
bfin-elf  +FAIL: binutils-all/strip-15
bfin-elf  +FAIL: --localize-hidden test 1
bfin-elf  +FAIL: binutils-all/remove-relocs-05
bfin-elf  +FAIL: binutils-all/remove-relocs-08
bfin-elf  +FAIL: --localize-hidden test 2
bfin-elf  +FAIL: .llvm_addrsig
bfin-elf  +FAIL: ld-elf/note-2
bfin-linux-uclibc  +FAIL: strip --strip-unneeded on common symbol
bfin-linux-uclibc  +FAIL: binutils-all/strip-15
bfin-linux-uclibc  +FAIL: --localize-hidden test 1
bfin-linux-uclibc  +FAIL: binutils-all/remove-relocs-05
bfin-linux-uclibc  +FAIL: binutils-all/remove-relocs-08
bfin-linux-uclibc  +FAIL: --localize-hidden test 2
bfin-linux-uclibc  +FAIL: .llvm_addrsig
bfin-linux-uclibc  +FAIL: ld-elf/note-2
bpf-none  +FAIL: strip --strip-unneeded on common symbol
bpf-none  +FAIL: --localize-hidden test 2
cr16-elf  +FAIL: strip --strip-unneeded on common symbol
cr16-elf  +FAIL: binutils-all/strip-15
cr16-elf  +FAIL: --localize-hidden test 1
cr16-elf  +FAIL: binutils-all/remove-relocs-05
cr16-elf  +FAIL: binutils-all/remove-relocs-08
cr16-elf  +FAIL: --localize-hidden test 2
cr16-elf  +FAIL: .llvm_addrsig
cr16-elf  +FAIL: ld-elf/note-2
cris-elf  +FAIL: strip --strip-unneeded on common symbol
cris-elf  +FAIL: binutils-all/strip-15
cris-elf  +FAIL: --localize-hidden test 1
cris-elf  +FAIL: binutils-all/remove-relocs-05
cris-elf  +FAIL: binutils-all/remove-relocs-08
cris-elf  +FAIL: --localize-hidden test 2
cris-elf  +FAIL: .llvm_addrsig
cris-elf  +FAIL: ld-elf/note-2
cris-linux  +FAIL: strip --strip-unneeded on common symbol
cris-linux  +FAIL: binutils-all/strip-15
cris-linux  +FAIL: --localize-hidden test 1
cris-linux  +FAIL: binutils-all/remove-relocs-05
cris-linux  +FAIL: binutils-all/remove-relocs-08
cris-linux  +FAIL: --localize-hidden test 2
cris-linux  +FAIL: .llvm_addrsig
cris-linux  +FAIL: ld-elf/note-2
crisv32-linux  +FAIL: strip --strip-unneeded on common symbol
crisv32-linux  +FAIL: binutils-all/strip-15
crisv32-linux  +FAIL: --localize-hidden test 1
crisv32-linux  +FAIL: binutils-all/remove-relocs-05
crisv32-linux  +FAIL: binutils-all/remove-relocs-08
crisv32-linux  +FAIL: --localize-hidden test 2
crisv32-linux  +FAIL: .llvm_addrsig
crisv32-linux  +FAIL: ld-elf/note-2
crx-elf  +FAIL: strip --strip-unneeded on common symbol
crx-elf  +FAIL: binutils-all/strip-15
crx-elf  +FAIL: --localize-hidden test 1
crx-elf  +FAIL: binutils-all/remove-relocs-05
crx-elf  +FAIL: binutils-all/remove-relocs-08
crx-elf  +FAIL: --localize-hidden test 2
crx-elf  +FAIL: .llvm_addrsig
crx-elf  +FAIL: ld-elf/note-2
csky-elf  +FAIL: strip --strip-unneeded on common symbol
csky-elf  +FAIL: binutils-all/strip-15
csky-elf  +FAIL: --localize-hidden test 1
csky-elf  +FAIL: binutils-all/remove-relocs-05
csky-elf  +FAIL: binutils-all/remove-relocs-08
csky-elf  +FAIL: --localize-hidden test 2
csky-elf  +FAIL: .llvm_addrsig
csky-elf  +FAIL: ld-elf/note-2
csky-linux  +FAIL: strip --strip-unneeded on common symbol
csky-linux  +FAIL: binutils-all/strip-15
csky-linux  +FAIL: --localize-hidden test 1
csky-linux  +FAIL: binutils-all/remove-relocs-05
csky-linux  +FAIL: binutils-all/remove-relocs-08
csky-linux  +FAIL: --localize-hidden test 2
csky-linux  +FAIL: .llvm_addrsig
csky-linux  +FAIL: ld-elf/note-2
d10v-elf  +FAIL: strip --strip-unneeded on common symbol
d10v-elf  +FAIL: binutils-all/strip-15
d10v-elf  +FAIL: --localize-hidden test 1
d10v-elf  +FAIL: binutils-all/remove-relocs-05
d10v-elf  +FAIL: binutils-all/remove-relocs-08
d10v-elf  +FAIL: --localize-hidden test 2
d10v-elf  +FAIL: .llvm_addrsig
d10v-elf  +FAIL: ld-elf/note-2
d30v-elf  +FAIL: strip --strip-unneeded on common symbol
d30v-elf  +FAIL: binutils-all/strip-15
d30v-elf  +FAIL: --localize-hidden test 1
d30v-elf  +FAIL: binutils-all/remove-relocs-05
d30v-elf  +FAIL: binutils-all/remove-relocs-08
d30v-elf  +FAIL: --localize-hidden test 2
d30v-elf  +FAIL: .llvm_addrsig
d30v-elf  +FAIL: ld-elf/note-2
dlx-elf  +FAIL: strip --strip-unneeded on common symbol
dlx-elf  +FAIL: binutils-all/strip-15
dlx-elf  +FAIL: --localize-hidden test 1
dlx-elf  +FAIL: binutils-all/remove-relocs-05
dlx-elf  +FAIL: binutils-all/remove-relocs-08
dlx-elf  +FAIL: --localize-hidden test 2
dlx-elf  +FAIL: .llvm_addrsig
dlx-elf  +FAIL: ld-elf/note-2
epiphany-elf  +FAIL: strip --strip-unneeded on common symbol
epiphany-elf  +FAIL: binutils-all/strip-15
epiphany-elf  +FAIL: --localize-hidden test 1
epiphany-elf  +FAIL: binutils-all/remove-relocs-05
epiphany-elf  +FAIL: binutils-all/remove-relocs-08
epiphany-elf  +FAIL: --localize-hidden test 2
epiphany-elf  +FAIL: .llvm_addrsig
epiphany-elf  +FAIL: ld-elf/note-2
fr30-elf  +FAIL: strip --strip-unneeded on common symbol
fr30-elf  +FAIL: binutils-all/strip-15
fr30-elf  +FAIL: --localize-hidden test 1
fr30-elf  +FAIL: binutils-all/remove-relocs-05
fr30-elf  +FAIL: binutils-all/remove-relocs-08
fr30-elf  +FAIL: --localize-hidden test 2
fr30-elf  +FAIL: .llvm_addrsig
fr30-elf  +FAIL: ld-elf/note-2
frv-elf  +FAIL: strip --strip-unneeded on common symbol
frv-elf  +FAIL: binutils-all/strip-15
frv-elf  +FAIL: --localize-hidden test 1
frv-elf  +FAIL: binutils-all/remove-relocs-05
frv-elf  +FAIL: binutils-all/remove-relocs-08
frv-elf  +FAIL: --localize-hidden test 2
frv-elf  +FAIL: .llvm_addrsig
frv-elf  +FAIL: ld-elf/note-2
frv-linux  +FAIL: strip --strip-unneeded on common symbol
frv-linux  +FAIL: binutils-all/strip-15
frv-linux  +FAIL: --localize-hidden test 1
frv-linux  +FAIL: binutils-all/remove-relocs-05
frv-linux  +FAIL: binutils-all/remove-relocs-08
frv-linux  +FAIL: --localize-hidden test 2
frv-linux  +FAIL: .llvm_addrsig
frv-linux  +FAIL: ld-elf/note-2
ft32-elf  +FAIL: strip --strip-unneeded on common symbol
ft32-elf  +FAIL: binutils-all/strip-15
ft32-elf  +FAIL: --localize-hidden test 1
ft32-elf  +FAIL: binutils-all/remove-relocs-05
ft32-elf  +FAIL: binutils-all/remove-relocs-08
ft32-elf  +FAIL: --localize-hidden test 2
ft32-elf  +FAIL: .llvm_addrsig
ft32-elf  +FAIL: ld-elf/note-2
h8300-elf  +FAIL: strip --strip-unneeded on common symbol
h8300-elf  +FAIL: binutils-all/strip-15
h8300-elf  +FAIL: --localize-hidden test 1
h8300-elf  +FAIL: binutils-all/remove-relocs-05
h8300-elf  +FAIL: binutils-all/remove-relocs-08
h8300-elf  +FAIL: --localize-hidden test 2
h8300-elf  +FAIL: .llvm_addrsig
h8300-elf  +FAIL: ld-elf/note-2
h8300-linux  +FAIL: strip --strip-unneeded on common symbol
h8300-linux  +FAIL: binutils-all/strip-15
h8300-linux  +FAIL: --localize-hidden test 1
h8300-linux  +FAIL: binutils-all/remove-relocs-05
h8300-linux  +FAIL: binutils-all/remove-relocs-08
h8300-linux  +FAIL: --localize-hidden test 2
h8300-linux  +FAIL: .llvm_addrsig
h8300-linux  +FAIL: ld-elf/note-2
hppa64-hp-hpux11.23  +FAIL: strip --strip-unneeded on common symbol
hppa64-hp-hpux11.23  +FAIL: binutils-all/strip-15
hppa64-hp-hpux11.23  +FAIL: --localize-hidden test 1
hppa64-hp-hpux11.23  +FAIL: binutils-all/remove-relocs-05
hppa64-hp-hpux11.23  +FAIL: binutils-all/remove-relocs-08
hppa64-hp-hpux11.23  +FAIL: --localize-hidden test 2
hppa64-hp-hpux11.23  +FAIL: .llvm_addrsig
hppa64-hp-hpux11.23  +FAIL: ld-elf/note-2
hppa64-linux  +FAIL: strip --strip-unneeded on common symbol
hppa64-linux  +FAIL: binutils-all/strip-15
hppa64-linux  +FAIL: --localize-hidden test 1
hppa64-linux  +FAIL: binutils-all/remove-relocs-05
hppa64-linux  +FAIL: binutils-all/remove-relocs-08
hppa64-linux  +FAIL: --localize-hidden test 2
hppa64-linux  +FAIL: .llvm_addrsig
hppa64-linux  +FAIL: ld-elf/note-2
hppa-linux  +FAIL: gnu-debuglink (strip)
hppa-linux  +FAIL: strip
hppa-linux  +FAIL: keep only debug data
hppa-linux  +FAIL: NOBITS sections retain sh_link field
hppa-linux  +FAIL: --only-keep-debug for ELF relocatables
hppa-linux  +FAIL: strip --strip-unneeded on common symbol
hppa-linux  +FAIL: binutils-all/strip-15
hppa-linux  +FAIL: --localize-hidden test 1
hppa-linux  +FAIL: binutils-all/remove-relocs-05
hppa-linux  +FAIL: binutils-all/remove-relocs-08
hppa-linux  +FAIL: --localize-hidden test 2
hppa-linux  +FAIL: remove-section relocation sections
hppa-linux  +FAIL: build-id-debuglink (strip debug info)
hppa-linux  +FAIL: .llvm_addrsig
hppa-linux  +FAIL: ld-elf/note-2
i386-lynxos  +FAIL: strip --strip-unneeded on common symbol
i386-lynxos  +FAIL: binutils-all/strip-15
i386-lynxos  +FAIL: --localize-hidden test 1
i386-lynxos  +FAIL: binutils-all/remove-relocs-05
i386-lynxos  +FAIL: binutils-all/remove-relocs-08
i386-lynxos  +FAIL: --localize-hidden test 2
i386-lynxos  +FAIL: ld-elf/linkinfo1b
i386-lynxos  +FAIL: ld-elf/note-2
i586-linux  +FAIL: strip --strip-unneeded on common symbol
i586-linux  +FAIL: binutils-all/strip-15
i586-linux  +FAIL: --localize-hidden test 1
i586-linux  +FAIL: binutils-all/remove-relocs-05
i586-linux  +FAIL: binutils-all/remove-relocs-08
i586-linux  +FAIL: --localize-hidden test 2
i586-linux  +FAIL: ld-elf/linkinfo1b
i586-linux  +FAIL: ld-elf/maxpage5
i586-linux  +FAIL: ld-elf/note-2
i686-nto  +FAIL: strip --strip-unneeded on common symbol
i686-nto  +FAIL: binutils-all/strip-15
i686-nto  +FAIL: --localize-hidden test 1
i686-nto  +FAIL: binutils-all/remove-relocs-05
i686-nto  +FAIL: binutils-all/remove-relocs-08
i686-nto  +FAIL: --localize-hidden test 2
i686-nto  +FAIL: ld-elf/linkinfo1b
i686-nto  +FAIL: ld-elf/note-2
i686-pc-beos  +FAIL: strip --strip-unneeded on common symbol
i686-pc-beos  +FAIL: binutils-all/strip-15
i686-pc-beos  +FAIL: --localize-hidden test 1
i686-pc-beos  +FAIL: binutils-all/remove-relocs-05
i686-pc-beos  +FAIL: binutils-all/remove-relocs-08
i686-pc-beos  +FAIL: --localize-hidden test 2
i686-pc-beos  +FAIL: ld-elf/linkinfo1b
i686-pc-beos  +FAIL: ld-elf/note-2
i686-pc-elf  +FAIL: strip --strip-unneeded on common symbol
i686-pc-elf  +FAIL: binutils-all/strip-15
i686-pc-elf  +FAIL: --localize-hidden test 1
i686-pc-elf  +FAIL: binutils-all/remove-relocs-05
i686-pc-elf  +FAIL: binutils-all/remove-relocs-08
i686-pc-elf  +FAIL: --localize-hidden test 2
i686-pc-elf  +FAIL: ld-elf/linkinfo1b
i686-pc-elf  +FAIL: ld-elf/note-2
i686-vxworks  +FAIL: strip --strip-unneeded on common symbol
i686-vxworks  +FAIL: --localize-hidden test 2
ia64-elf  +FAIL: strip --strip-unneeded on common symbol
ia64-elf  +FAIL: binutils-all/strip-15
ia64-elf  +FAIL: --localize-hidden test 1
ia64-elf  +FAIL: binutils-all/remove-relocs-05
ia64-elf  +FAIL: binutils-all/remove-relocs-08
ia64-elf  +FAIL: --localize-hidden test 2
ia64-elf  +FAIL: .llvm_addrsig
ia64-elf  +FAIL: ld-elf/note-2
ia64-freebsd5  +FAIL: strip --strip-unneeded on common symbol
ia64-freebsd5  +FAIL: binutils-all/strip-15
ia64-freebsd5  +FAIL: --localize-hidden test 1
ia64-freebsd5  +FAIL: binutils-all/remove-relocs-05
ia64-freebsd5  +FAIL: binutils-all/remove-relocs-08
ia64-freebsd5  +FAIL: --localize-hidden test 2
ia64-freebsd5  +FAIL: .llvm_addrsig
ia64-freebsd5  +FAIL: ld-elf/note-2
ia64-hpux  +FAIL: strip --strip-unneeded on common symbol
ia64-hpux  +FAIL: binutils-all/remove-relocs-05
ia64-hpux  +FAIL: binutils-all/remove-relocs-08
ia64-hpux  +FAIL: --localize-hidden test 2
ia64-hpux  +FAIL: .llvm_addrsig
ia64-linux  +FAIL: gnu-debuglink (strip)
ia64-linux  +FAIL: strip
ia64-linux  +FAIL: keep only debug data
ia64-linux  +FAIL: NOBITS sections retain sh_link field
ia64-linux  +FAIL: --only-keep-debug for ELF relocatables
ia64-linux  +FAIL: strip --strip-unneeded on common symbol
ia64-linux  +FAIL: binutils-all/strip-15
ia64-linux  +FAIL: --localize-hidden test 1
ia64-linux  +FAIL: binutils-all/remove-relocs-05
ia64-linux  +FAIL: binutils-all/remove-relocs-08
ia64-linux  +FAIL: --localize-hidden test 2
ia64-linux  +FAIL: remove-section relocation sections
ia64-linux  +FAIL: build-id-debuglink (strip debug info)
ia64-linux  +FAIL: .llvm_addrsig
ia64-linux  +FAIL: ld-elf/note-2
ia64-netbsd  +FAIL: strip --strip-unneeded on common symbol
ia64-netbsd  +FAIL: binutils-all/strip-15
ia64-netbsd  +FAIL: --localize-hidden test 1
ia64-netbsd  +FAIL: binutils-all/remove-relocs-05
ia64-netbsd  +FAIL: binutils-all/remove-relocs-08
ia64-netbsd  +FAIL: --localize-hidden test 2
ia64-netbsd  +FAIL: .llvm_addrsig
ia64-netbsd  +FAIL: ld-elf/note-2
ia64-vms  +FAIL: strip --strip-unneeded on common symbol
ia64-vms  +FAIL: --localize-hidden test 2
ip2k-elf  +FAIL: strip --strip-unneeded on common symbol
ip2k-elf  +FAIL: binutils-all/strip-15
ip2k-elf  +FAIL: --localize-hidden test 1
ip2k-elf  +FAIL: binutils-all/remove-relocs-05
ip2k-elf  +FAIL: binutils-all/remove-relocs-08
ip2k-elf  +FAIL: --localize-hidden test 2
ip2k-elf  +FAIL: .llvm_addrsig
ip2k-elf  +FAIL: ld-elf/note-2
iq2000-elf  +FAIL: strip --strip-unneeded on common symbol
iq2000-elf  +FAIL: binutils-all/strip-15
iq2000-elf  +FAIL: --localize-hidden test 1
iq2000-elf  +FAIL: binutils-all/remove-relocs-05
iq2000-elf  +FAIL: binutils-all/remove-relocs-08
iq2000-elf  +FAIL: --localize-hidden test 2
iq2000-elf  +FAIL: .llvm_addrsig
iq2000-elf  +FAIL: ld-elf/note-2
lm32-elf  +FAIL: strip --strip-unneeded on common symbol
lm32-elf  +FAIL: binutils-all/strip-15
lm32-elf  +FAIL: --localize-hidden test 1
lm32-elf  +FAIL: binutils-all/remove-relocs-05
lm32-elf  +FAIL: binutils-all/remove-relocs-08
lm32-elf  +FAIL: --localize-hidden test 2
lm32-elf  +FAIL: .llvm_addrsig
lm32-elf  +FAIL: ld-elf/note-2
lm32-linux  +FAIL: strip --strip-unneeded on common symbol
lm32-linux  +FAIL: binutils-all/strip-15
lm32-linux  +FAIL: --localize-hidden test 1
lm32-linux  +FAIL: binutils-all/remove-relocs-05
lm32-linux  +FAIL: binutils-all/remove-relocs-08
lm32-linux  +FAIL: --localize-hidden test 2
lm32-linux  +FAIL: .llvm_addrsig
lm32-linux  +FAIL: ld-elf/note-2
loongarch32-elf  +FAIL: strip --strip-unneeded on common symbol
loongarch32-elf  +FAIL: binutils-all/strip-15
loongarch32-elf  +FAIL: --localize-hidden test 1
loongarch32-elf  +FAIL: binutils-all/remove-relocs-05
loongarch32-elf  +FAIL: binutils-all/remove-relocs-08
loongarch32-elf  +FAIL: --localize-hidden test 2
loongarch32-elf  +FAIL: .llvm_addrsig
loongarch32-elf  +FAIL: ld-elf/note-2
loongarch64-linux  +FAIL: strip --strip-unneeded on common symbol
loongarch64-linux  +FAIL: binutils-all/strip-15
loongarch64-linux  +FAIL: --localize-hidden test 1
loongarch64-linux  +FAIL: binutils-all/remove-relocs-05
loongarch64-linux  +FAIL: binutils-all/remove-relocs-08
loongarch64-linux  +FAIL: --localize-hidden test 2
loongarch64-linux  +FAIL: .llvm_addrsig
loongarch64-linux  +FAIL: ld-elf/note-2
m32c-elf  +FAIL: strip --strip-unneeded on common symbol
m32c-elf  +FAIL: binutils-all/strip-15
m32c-elf  +FAIL: --localize-hidden test 1
m32c-elf  +FAIL: binutils-all/remove-relocs-05
m32c-elf  +FAIL: binutils-all/remove-relocs-08
m32c-elf  +FAIL: --localize-hidden test 2
m32c-elf  +FAIL: .llvm_addrsig
m32c-elf  +FAIL: ld-elf/note-2
m32r-elf  +FAIL: strip --strip-unneeded on common symbol
m32r-elf  +FAIL: binutils-all/strip-15
m32r-elf  +FAIL: --localize-hidden test 1
m32r-elf  +FAIL: binutils-all/remove-relocs-05
m32r-elf  +FAIL: binutils-all/remove-relocs-08
m32r-elf  +FAIL: --localize-hidden test 2
m32r-elf  +FAIL: .llvm_addrsig
m32r-elf  +FAIL: ld-elf/note-2
m32r-linux  +FAIL: strip --strip-unneeded on common symbol
m32r-linux  +FAIL: binutils-all/strip-15
m32r-linux  +FAIL: --localize-hidden test 1
m32r-linux  +FAIL: binutils-all/remove-relocs-05
m32r-linux  +FAIL: binutils-all/remove-relocs-08
m32r-linux  +FAIL: --localize-hidden test 2
m32r-linux  +FAIL: .llvm_addrsig
m32r-linux  +FAIL: ld-elf/note-2
m68hc11-elf  +FAIL: strip --strip-unneeded on common symbol
m68hc11-elf  +FAIL: binutils-all/strip-15
m68hc11-elf  +FAIL: --localize-hidden test 1
m68hc11-elf  +FAIL: binutils-all/remove-relocs-05
m68hc11-elf  +FAIL: binutils-all/remove-relocs-08
m68hc11-elf  +FAIL: --localize-hidden test 2
m68hc11-elf  +FAIL: .llvm_addrsig
m68hc11-elf  +FAIL: ld-elf/note-2
m68hc12-elf  +FAIL: strip --strip-unneeded on common symbol
m68hc12-elf  +FAIL: binutils-all/strip-15
m68hc12-elf  +FAIL: --localize-hidden test 1
m68hc12-elf  +FAIL: binutils-all/remove-relocs-05
m68hc12-elf  +FAIL: binutils-all/remove-relocs-08
m68hc12-elf  +FAIL: --localize-hidden test 2
m68hc12-elf  +FAIL: .llvm_addrsig
m68hc12-elf  +FAIL: ld-elf/note-2
m68k-elf  +FAIL: strip --strip-unneeded on common symbol
m68k-elf  +FAIL: binutils-all/strip-15
m68k-elf  +FAIL: --localize-hidden test 1
m68k-elf  +FAIL: binutils-all/remove-relocs-05
m68k-elf  +FAIL: binutils-all/remove-relocs-08
m68k-elf  +FAIL: --localize-hidden test 2
m68k-elf  +FAIL: .llvm_addrsig
m68k-elf  +FAIL: ld-elf/note-2
m68k-linux  +FAIL: gnu-debuglink (strip)
m68k-linux  +FAIL: strip
m68k-linux  +FAIL: keep only debug data
m68k-linux  +FAIL: NOBITS sections retain sh_link field
m68k-linux  +FAIL: --only-keep-debug for ELF relocatables
m68k-linux  +FAIL: strip --strip-unneeded on common symbol
m68k-linux  +FAIL: binutils-all/strip-15
m68k-linux  +FAIL: --localize-hidden test 1
m68k-linux  +FAIL: binutils-all/remove-relocs-05
m68k-linux  +FAIL: binutils-all/remove-relocs-08
m68k-linux  +FAIL: --localize-hidden test 2
m68k-linux  +FAIL: remove-section relocation sections
m68k-linux  +FAIL: build-id-debuglink (strip debug info)
m68k-linux  +FAIL: .llvm_addrsig
m68k-linux  +FAIL: ld-elf/note-2
mcore-elf  +FAIL: strip --strip-unneeded on common symbol
mcore-elf  +FAIL: binutils-all/strip-15
mcore-elf  +FAIL: --localize-hidden test 1
mcore-elf  +FAIL: binutils-all/remove-relocs-05
mcore-elf  +FAIL: binutils-all/remove-relocs-08
mcore-elf  +FAIL: --localize-hidden test 2
mcore-elf  +FAIL: .llvm_addrsig
mcore-elf  +FAIL: ld-elf/note-2
mep-elf  +FAIL: strip --strip-unneeded on common symbol
mep-elf  +FAIL: binutils-all/strip-15
mep-elf  +FAIL: --localize-hidden test 1
mep-elf  +FAIL: binutils-all/remove-relocs-05
mep-elf  +FAIL: binutils-all/remove-relocs-08
mep-elf  +FAIL: --localize-hidden test 2
mep-elf  +FAIL: .llvm_addrsig
mep-elf  +FAIL: ld-elf/note-2
metag-linux  +FAIL: strip --strip-unneeded on common symbol
metag-linux  +FAIL: binutils-all/strip-15
metag-linux  +FAIL: --localize-hidden test 1
metag-linux  +FAIL: binutils-all/remove-relocs-05
metag-linux  +FAIL: binutils-all/remove-relocs-08
metag-linux  +FAIL: --localize-hidden test 2
metag-linux  +FAIL: .llvm_addrsig
metag-linux  +FAIL: ld-elf/note-2
microblaze-elf  +FAIL: strip --strip-unneeded on common symbol
microblaze-elf  +FAIL: binutils-all/strip-15
microblaze-elf  +FAIL: --localize-hidden test 1
microblaze-elf  +FAIL: binutils-all/remove-relocs-05
microblaze-elf  +FAIL: binutils-all/remove-relocs-08
microblaze-elf  +FAIL: --localize-hidden test 2
microblaze-elf  +FAIL: .llvm_addrsig
microblaze-elf  +FAIL: ld-elf/note-2
microblaze-linux  +FAIL: gnu-debuglink (strip)
microblaze-linux  +FAIL: strip
microblaze-linux  +FAIL: keep only debug data
microblaze-linux  +FAIL: NOBITS sections retain sh_link field
microblaze-linux  +FAIL: --only-keep-debug for ELF relocatables
microblaze-linux  +FAIL: strip --strip-unneeded on common symbol
microblaze-linux  +FAIL: binutils-all/strip-15
microblaze-linux  +FAIL: --localize-hidden test 1
microblaze-linux  +FAIL: binutils-all/remove-relocs-05
microblaze-linux  +FAIL: binutils-all/remove-relocs-08
microblaze-linux  +FAIL: --localize-hidden test 2
microblaze-linux  +FAIL: remove-section relocation sections
microblaze-linux  +FAIL: build-id-debuglink (strip debug info)
microblaze-linux  +FAIL: .llvm_addrsig
microblaze-linux  +FAIL: ld-elf/note-2
mips64el-openbsd  +FAIL: strip --strip-unneeded on common symbol
mips64el-openbsd  +FAIL: binutils-all/strip-15
mips64el-openbsd  +FAIL: --localize-hidden test 1
mips64el-openbsd  +FAIL: binutils-all/remove-relocs-08
mips64el-openbsd  +FAIL: --localize-hidden test 2
mips64el-openbsd  +FAIL: .llvm_addrsig
mips64el-openbsd  +FAIL: MIPS align maximum
mips64el-openbsd  +FAIL: ld-elf/note-2
mips64-linux  +FAIL: gnu-debuglink (strip)
mips64-linux  +FAIL: strip
mips64-linux  +FAIL: keep only debug data
mips64-linux  +FAIL: NOBITS sections retain sh_link field
mips64-linux  +FAIL: --only-keep-debug for ELF relocatables
mips64-linux  +FAIL: strip --strip-unneeded on common symbol
mips64-linux  +FAIL: binutils-all/strip-15
mips64-linux  +FAIL: --localize-hidden test 1
mips64-linux  +FAIL: binutils-all/remove-relocs-05
mips64-linux  +FAIL: binutils-all/remove-relocs-08
mips64-linux  +FAIL: --localize-hidden test 2
mips64-linux  +FAIL: remove-section relocation sections
mips64-linux  +FAIL: build-id-debuglink (strip debug info)
mips64-linux  +FAIL: .llvm_addrsig
mips64-linux  +FAIL: MIPS align maximum
mips64-linux  +FAIL: ld-elf/note-2
mips64-openbsd  +FAIL: strip --strip-unneeded on common symbol
mips64-openbsd  +FAIL: binutils-all/strip-15
mips64-openbsd  +FAIL: --localize-hidden test 1
mips64-openbsd  +FAIL: binutils-all/remove-relocs-08
mips64-openbsd  +FAIL: --localize-hidden test 2
mips64-openbsd  +FAIL: .llvm_addrsig
mips64-openbsd  +FAIL: MIPS align maximum
mips64-openbsd  +FAIL: ld-elf/note-2
mipsel-linux-gnu  +FAIL: strip --strip-unneeded on common symbol
mipsel-linux-gnu  +FAIL: binutils-all/strip-15
mipsel-linux-gnu  +FAIL: --localize-hidden test 1
mipsel-linux-gnu  +FAIL: binutils-all/remove-relocs-05
mipsel-linux-gnu  +FAIL: binutils-all/remove-relocs-08
mipsel-linux-gnu  +FAIL: --localize-hidden test 2
mipsel-linux-gnu  +FAIL: .llvm_addrsig
mipsel-linux-gnu  +FAIL: MIPS align maximum
mipsel-linux-gnu  +FAIL: ld-elf/note-2
mipsisa32el-linux  +FAIL: strip --strip-unneeded on common symbol
mipsisa32el-linux  +FAIL: binutils-all/strip-15
mipsisa32el-linux  +FAIL: --localize-hidden test 1
mipsisa32el-linux  +FAIL: binutils-all/remove-relocs-05
mipsisa32el-linux  +FAIL: binutils-all/remove-relocs-08
mipsisa32el-linux  +FAIL: --localize-hidden test 2
mipsisa32el-linux  +FAIL: .llvm_addrsig
mipsisa32el-linux  +FAIL: MIPS align maximum
mipsisa32el-linux  +FAIL: ld-elf/note-2
mipsisa32r2el-elf  +FAIL: strip --strip-unneeded on common symbol
mipsisa32r2el-elf  +FAIL: binutils-all/strip-15
mipsisa32r2el-elf  +FAIL: binutils-all/remove-relocs-05
mipsisa32r2el-elf  +FAIL: binutils-all/remove-relocs-08
mipsisa32r2el-elf  +FAIL: --localize-hidden test 2
mipsisa32r2el-elf  +FAIL: .llvm_addrsig
mipsisa32r2el-elf  +FAIL: MIPS align maximum
mipsisa32r2el-elf  +FAIL: ld-elf/note-2
mips-linux  +FAIL: gnu-debuglink (strip)
mips-linux  +FAIL: strip
mips-linux  +FAIL: keep only debug data
mips-linux  +FAIL: NOBITS sections retain sh_link field
mips-linux  +FAIL: --only-keep-debug for ELF relocatables
mips-linux  +FAIL: strip --strip-unneeded on common symbol
mips-linux  +FAIL: binutils-all/strip-15
mips-linux  +FAIL: --localize-hidden test 1
mips-linux  +FAIL: binutils-all/remove-relocs-05
mips-linux  +FAIL: binutils-all/remove-relocs-08
mips-linux  +FAIL: --localize-hidden test 2
mips-linux  +FAIL: remove-section relocation sections
mips-linux  +FAIL: build-id-debuglink (strip debug info)
mips-linux  +FAIL: .llvm_addrsig
mips-linux  +FAIL: MIPS align maximum
mips-linux  +FAIL: ld-elf/note-2
mips-sgi-irix6  +FAIL: strip --strip-unneeded on common symbol
mips-sgi-irix6  +FAIL: binutils-all/strip-15
mips-sgi-irix6  +FAIL: binutils-all/remove-relocs-05
mips-sgi-irix6  +FAIL: binutils-all/remove-relocs-08
mips-sgi-irix6  +FAIL: --localize-hidden test 2
mips-sgi-irix6  +FAIL: .llvm_addrsig
mips-sgi-irix6  +FAIL: MIPS align maximum
mips-sgi-irix6  +FAIL: ld-elf/note-2
mipstx39-elf  +FAIL: strip --strip-unneeded on common symbol
mipstx39-elf  +FAIL: binutils-all/strip-15
mipstx39-elf  +FAIL: binutils-all/remove-relocs-05
mipstx39-elf  +FAIL: binutils-all/remove-relocs-08
mipstx39-elf  +FAIL: --localize-hidden test 2
mipstx39-elf  +FAIL: .llvm_addrsig
mipstx39-elf  +FAIL: MIPS align maximum
mipstx39-elf  +FAIL: ld-elf/note-2
mips-vxworks  +FAIL: strip --strip-unneeded on common symbol
mips-vxworks  +FAIL: --localize-hidden test 2
mmix  +FAIL: strip --strip-unneeded on common symbol
mmix  +FAIL: --localize-hidden test 2
mn10200-elf  +FAIL: strip --strip-unneeded on common symbol
mn10200-elf  +FAIL: binutils-all/strip-15
mn10200-elf  +FAIL: --localize-hidden test 1
mn10200-elf  +FAIL: binutils-all/remove-relocs-05
mn10200-elf  +FAIL: binutils-all/remove-relocs-08
mn10200-elf  +FAIL: --localize-hidden test 2
mn10200-elf  +FAIL: .llvm_addrsig
mn10200-elf  +FAIL: ld-elf/note-2
mn10300-elf  +FAIL: strip --strip-unneeded on common symbol
mn10300-elf  +FAIL: binutils-all/strip-15
mn10300-elf  +FAIL: --localize-hidden test 1
mn10300-elf  +FAIL: binutils-all/remove-relocs-05
mn10300-elf  +FAIL: binutils-all/remove-relocs-08
mn10300-elf  +FAIL: --localize-hidden test 2
mn10300-elf  +FAIL: .llvm_addrsig
mn10300-elf  +FAIL: ld-elf/note-2
moxie-elf  +FAIL: strip --strip-unneeded on common symbol
moxie-elf  +FAIL: binutils-all/strip-15
moxie-elf  +FAIL: --localize-hidden test 1
moxie-elf  +FAIL: binutils-all/remove-relocs-05
moxie-elf  +FAIL: binutils-all/remove-relocs-08
moxie-elf  +FAIL: --localize-hidden test 2
moxie-elf  +FAIL: .llvm_addrsig
moxie-elf  +FAIL: ld-elf/note-2
msp430-elf  +FAIL: localize 'fo*' but not 'foo'
msp430-elf  +FAIL: weaken 'fo*' but not 'foo'
msp430-elf  +FAIL: weaken 'fo*' but not 'foo', localize foo.
msp430-elf  +FAIL: weaken '*' but not 'foo' or 'bar'
msp430-elf  +FAIL: copy removing group member
msp430-elf  +FAIL: copy removing reloc group member
msp430-elf  +FAIL: copy removing non-reloc group member
msp430-elf  +FAIL: copy removing reloc and non-reloc group member
msp430-elf  +FAIL: strip --strip-unneeded on common symbol
msp430-elf  +FAIL: binutils-all/strip-15
msp430-elf  +FAIL: --localize-hidden test 1
msp430-elf  +FAIL: objcopy add-symbol
msp430-elf  +FAIL: binutils-all/remove-section-01
msp430-elf  +FAIL: binutils-all/keep-section-1
msp430-elf  +FAIL: binutils-all/keep-section-2
msp430-elf  +FAIL: binutils-all/remove-relocs-05
msp430-elf  +FAIL: binutils-all/remove-relocs-08
msp430-elf  +FAIL: --localize-hidden test 2
msp430-elf  +FAIL: .llvm_addrsig
msp430-elf  +FAIL: ld-elf/note-2
mt-elf  +FAIL: strip --strip-unneeded on common symbol
mt-elf  +FAIL: binutils-all/strip-15
mt-elf  +FAIL: --localize-hidden test 1
mt-elf  +FAIL: binutils-all/remove-relocs-05
mt-elf  +FAIL: binutils-all/remove-relocs-08
mt-elf  +FAIL: --localize-hidden test 2
mt-elf  +FAIL: .llvm_addrsig
mt-elf  +FAIL: ld-elf/note-2
nds32be-elf  +FAIL: strip --strip-unneeded on common symbol
nds32be-elf  +FAIL: binutils-all/strip-15
nds32be-elf  +FAIL: --localize-hidden test 1
nds32be-elf  +FAIL: binutils-all/remove-relocs-05
nds32be-elf  +FAIL: binutils-all/remove-relocs-08
nds32be-elf  +FAIL: --localize-hidden test 2
nds32be-elf  +FAIL: .llvm_addrsig
nds32be-elf  +FAIL: ld-elf/note-2
nds32le-linux  +FAIL: strip --strip-unneeded on common symbol
nds32le-linux  +FAIL: binutils-all/strip-15
nds32le-linux  +FAIL: --localize-hidden test 1
nds32le-linux  +FAIL: binutils-all/remove-relocs-05
nds32le-linux  +FAIL: binutils-all/remove-relocs-08
nds32le-linux  +FAIL: --localize-hidden test 2
nds32le-linux  +FAIL: .llvm_addrsig
nds32le-linux  +FAIL: ld-elf/note-2
nios2-linux  +FAIL: strip --strip-unneeded on common symbol
nios2-linux  +FAIL: binutils-all/strip-15
nios2-linux  +FAIL: --localize-hidden test 1
nios2-linux  +FAIL: binutils-all/remove-relocs-05
nios2-linux  +FAIL: binutils-all/remove-relocs-08
nios2-linux  +FAIL: --localize-hidden test 2
nios2-linux  +FAIL: .llvm_addrsig
nios2-linux  +FAIL: ld-elf/note-2
or1k-elf  +FAIL: strip --strip-unneeded on common symbol
or1k-elf  +FAIL: binutils-all/strip-15
or1k-elf  +FAIL: --localize-hidden test 1
or1k-elf  +FAIL: binutils-all/remove-relocs-05
or1k-elf  +FAIL: binutils-all/remove-relocs-08
or1k-elf  +FAIL: --localize-hidden test 2
or1k-elf  +FAIL: .llvm_addrsig
or1k-elf  +FAIL: ld-elf/note-2
or1k-linux  +FAIL: strip --strip-unneeded on common symbol
or1k-linux  +FAIL: binutils-all/strip-15
or1k-linux  +FAIL: --localize-hidden test 1
or1k-linux  +FAIL: binutils-all/remove-relocs-05
or1k-linux  +FAIL: binutils-all/remove-relocs-08
or1k-linux  +FAIL: --localize-hidden test 2
or1k-linux  +FAIL: .llvm_addrsig
or1k-linux  +FAIL: ld-elf/note-2
pj-elf  +FAIL: strip --strip-unneeded on common symbol
pj-elf  +FAIL: binutils-all/strip-15
pj-elf  +FAIL: --localize-hidden test 1
pj-elf  +FAIL: binutils-all/remove-relocs-05
pj-elf  +FAIL: binutils-all/remove-relocs-08
pj-elf  +FAIL: --localize-hidden test 2
pj-elf  +FAIL: .llvm_addrsig
pj-elf  +FAIL: ld-elf/note-2
powerpc64-freebsd  +FAIL: strip --strip-unneeded on common symbol
powerpc64-freebsd  +FAIL: binutils-all/strip-15
powerpc64-freebsd  +FAIL: --localize-hidden test 1
powerpc64-freebsd  +FAIL: binutils-all/remove-relocs-05
powerpc64-freebsd  +FAIL: binutils-all/remove-relocs-08
powerpc64-freebsd  +FAIL: --localize-hidden test 2
powerpc64-freebsd  +FAIL: .llvm_addrsig
powerpc64-freebsd  +FAIL: ld-elf/note-2
powerpc64le-linux  +FAIL: gnu-debuglink (strip)
powerpc64le-linux  +FAIL: strip
powerpc64le-linux  +FAIL: keep only debug data
powerpc64le-linux  +FAIL: NOBITS sections retain sh_link field
powerpc64le-linux  +FAIL: --only-keep-debug for ELF relocatables
powerpc64le-linux  +FAIL: strip --strip-unneeded on common symbol
powerpc64le-linux  +FAIL: binutils-all/strip-15
powerpc64le-linux  +FAIL: --localize-hidden test 1
powerpc64le-linux  +FAIL: binutils-all/remove-relocs-05
powerpc64le-linux  +FAIL: binutils-all/remove-relocs-08
powerpc64le-linux  +FAIL: --localize-hidden test 2
powerpc64le-linux  +FAIL: remove-section relocation sections
powerpc64le-linux  +FAIL: build-id-debuglink (strip debug info)
powerpc64le-linux  +FAIL: .llvm_addrsig
powerpc64le-linux  +FAIL: ld-elf/note-2
powerpc64-linux  +FAIL: gnu-debuglink (strip)
powerpc64-linux  +FAIL: strip
powerpc64-linux  +FAIL: keep only debug data
powerpc64-linux  +FAIL: NOBITS sections retain sh_link field
powerpc64-linux  +FAIL: --only-keep-debug for ELF relocatables
powerpc64-linux  +FAIL: strip --strip-unneeded on common symbol
powerpc64-linux  +FAIL: binutils-all/strip-15
powerpc64-linux  +FAIL: --localize-hidden test 1
powerpc64-linux  +FAIL: binutils-all/remove-relocs-05
powerpc64-linux  +FAIL: binutils-all/remove-relocs-08
powerpc64-linux  +FAIL: --localize-hidden test 2
powerpc64-linux  +FAIL: remove-section relocation sections
powerpc64-linux  +FAIL: build-id-debuglink (strip debug info)
powerpc64-linux  +FAIL: .llvm_addrsig
powerpc64-linux  +FAIL: ld-elf/note-2
powerpc-eabisim  +FAIL: strip --strip-unneeded on common symbol
powerpc-eabisim  +FAIL: binutils-all/strip-15
powerpc-eabisim  +FAIL: --localize-hidden test 1
powerpc-eabisim  +FAIL: binutils-all/remove-relocs-05
powerpc-eabisim  +FAIL: binutils-all/remove-relocs-08
powerpc-eabisim  +FAIL: --localize-hidden test 2
powerpc-eabisim  +FAIL: .llvm_addrsig
powerpc-eabisim  +FAIL: ld-elf/note-2
powerpc-eabivle  +FAIL: strip --strip-unneeded on common symbol
powerpc-eabivle  +FAIL: binutils-all/strip-15
powerpc-eabivle  +FAIL: --localize-hidden test 1
powerpc-eabivle  +FAIL: binutils-all/remove-relocs-05
powerpc-eabivle  +FAIL: binutils-all/remove-relocs-08
powerpc-eabivle  +FAIL: --localize-hidden test 2
powerpc-eabivle  +FAIL: .llvm_addrsig
powerpc-eabivle  +FAIL: ld-elf/note-2
powerpc-freebsd  +FAIL: strip --strip-unneeded on common symbol
powerpc-freebsd  +FAIL: binutils-all/strip-15
powerpc-freebsd  +FAIL: --localize-hidden test 1
powerpc-freebsd  +FAIL: binutils-all/remove-relocs-05
powerpc-freebsd  +FAIL: binutils-all/remove-relocs-08
powerpc-freebsd  +FAIL: --localize-hidden test 2
powerpc-freebsd  +FAIL: .llvm_addrsig
powerpc-freebsd  +FAIL: ld-elf/note-2
powerpcle-elf  +FAIL: strip --strip-unneeded on common symbol
powerpcle-elf  +FAIL: binutils-all/strip-15
powerpcle-elf  +FAIL: --localize-hidden test 1
powerpcle-elf  +FAIL: binutils-all/remove-relocs-05
powerpcle-elf  +FAIL: binutils-all/remove-relocs-08
powerpcle-elf  +FAIL: --localize-hidden test 2
powerpcle-elf  +FAIL: .llvm_addrsig
powerpcle-elf  +FAIL: ld-elf/note-2
powerpc-linux  +FAIL: gnu-debuglink (strip)
powerpc-linux  +FAIL: strip
powerpc-linux  +FAIL: keep only debug data
powerpc-linux  +FAIL: NOBITS sections retain sh_link field
powerpc-linux  +FAIL: --only-keep-debug for ELF relocatables
powerpc-linux  +FAIL: strip --strip-unneeded on common symbol
powerpc-linux  +FAIL: binutils-all/strip-15
powerpc-linux  +FAIL: --localize-hidden test 1
powerpc-linux  +FAIL: binutils-all/remove-relocs-05
powerpc-linux  +FAIL: binutils-all/remove-relocs-08
powerpc-linux  +FAIL: --localize-hidden test 2
powerpc-linux  +FAIL: remove-section relocation sections
powerpc-linux  +FAIL: build-id-debuglink (strip debug info)
powerpc-linux  +FAIL: .llvm_addrsig
powerpc-linux  +FAIL: ld-elf/note-2
powerpc-nto  +FAIL: strip --strip-unneeded on common symbol
powerpc-nto  +FAIL: binutils-all/strip-15
powerpc-nto  +FAIL: --localize-hidden test 1
powerpc-nto  +FAIL: binutils-all/remove-relocs-05
powerpc-nto  +FAIL: binutils-all/remove-relocs-08
powerpc-nto  +FAIL: --localize-hidden test 2
powerpc-nto  +FAIL: .llvm_addrsig
powerpc-nto  +FAIL: ld-elf/note-2
powerpc-wrs-vxworks  +FAIL: strip --strip-unneeded on common symbol
powerpc-wrs-vxworks  +FAIL: --localize-hidden test 2
pru-elf  +FAIL: strip --strip-unneeded on common symbol
pru-elf  +FAIL: binutils-all/strip-15
pru-elf  +FAIL: --localize-hidden test 1
pru-elf  +FAIL: binutils-all/remove-relocs-05
pru-elf  +FAIL: binutils-all/remove-relocs-08
pru-elf  +FAIL: --localize-hidden test 2
pru-elf  +FAIL: .llvm_addrsig
pru-elf  +FAIL: ld-elf/note-2
riscv32-elf  +FAIL: strip --strip-unneeded on common symbol
riscv32-elf  +FAIL: binutils-all/strip-15
riscv32-elf  +FAIL: --localize-hidden test 1
riscv32-elf  +FAIL: binutils-all/remove-relocs-05
riscv32-elf  +FAIL: binutils-all/remove-relocs-08
riscv32-elf  +FAIL: --localize-hidden test 2
riscv32-elf  +FAIL: .llvm_addrsig
riscv32-elf  +FAIL: ld-elf/note-2
riscv64-linux  +FAIL: gnu-debuglink (strip)
riscv64-linux  +FAIL: strip
riscv64-linux  +FAIL: keep only debug data
riscv64-linux  +FAIL: NOBITS sections retain sh_link field
riscv64-linux  +FAIL: --only-keep-debug for ELF relocatables
riscv64-linux  +FAIL: strip --strip-unneeded on common symbol
riscv64-linux  +FAIL: binutils-all/strip-15
riscv64-linux  +FAIL: --localize-hidden test 1
riscv64-linux  +FAIL: binutils-all/remove-relocs-05
riscv64-linux  +FAIL: binutils-all/remove-relocs-08
riscv64-linux  +FAIL: --localize-hidden test 2
riscv64-linux  +FAIL: remove-section relocation sections
riscv64-linux  +FAIL: build-id-debuglink (strip debug info)
riscv64-linux  +FAIL: .llvm_addrsig
riscv64-linux  +FAIL: ld-elf/note-2
rl78-elf  +FAIL: localize 'fo*' but not 'foo'
rl78-elf  +FAIL: weaken 'fo*' but not 'foo'
rl78-elf  +FAIL: weaken 'fo*' but not 'foo', localize foo.
rl78-elf  +FAIL: weaken '*' but not 'foo' or 'bar'
rl78-elf  +FAIL: weaken STB_GNU_UNIQUE symbols
rl78-elf  +FAIL: copy removing group member
rl78-elf  +FAIL: copy removing all group member
rl78-elf  +FAIL: copy removing reloc group member
rl78-elf  +FAIL: copy removing non-reloc group member
rl78-elf  +FAIL: copy removing reloc and non-reloc group member
rl78-elf  +FAIL: strip --strip-unneeded on common symbol
rl78-elf  +FAIL: binutils-all/strip-15
rl78-elf  +FAIL: strip on STB_GNU_UNIQUE
rl78-elf  +FAIL: --localize-hidden test 1
rl78-elf  +FAIL: objcopy add-symbol
rl78-elf  +FAIL: binutils-all/remove-section-01
rl78-elf  +FAIL: binutils-all/keep-section-1
rl78-elf  +FAIL: binutils-all/keep-section-2
rl78-elf  +FAIL: binutils-all/remove-relocs-05
rl78-elf  +FAIL: binutils-all/remove-relocs-08
rl78-elf  +FAIL: --localize-hidden test 2
rl78-elf  +FAIL: objcopy (compare update-1.o update-4.o)
rl78-elf  +FAIL: .llvm_addrsig
rl78-elf  +FAIL: ld-elf/note-2
rx-elf  +FAIL: strip --strip-unneeded on common symbol
rx-elf  +FAIL: binutils-all/strip-15
rx-elf  +FAIL: --localize-hidden test 1
rx-elf  +FAIL: binutils-all/remove-relocs-05
rx-elf  +FAIL: binutils-all/remove-relocs-08
rx-elf  +FAIL: --localize-hidden test 2
rx-elf  +FAIL: .llvm_addrsig
rx-elf  +FAIL: ld-elf/note-2
s12z-elf  +FAIL: strip --strip-unneeded on common symbol
s12z-elf  +FAIL: binutils-all/strip-15
s12z-elf  +FAIL: --localize-hidden test 1
s12z-elf  +FAIL: binutils-all/remove-relocs-05
s12z-elf  +FAIL: binutils-all/remove-relocs-08
s12z-elf  +FAIL: --localize-hidden test 2
s12z-elf  +FAIL: .llvm_addrsig
s12z-elf  +FAIL: ld-elf/note-2
s390-linux  +FAIL: gnu-debuglink (strip)
s390-linux  +FAIL: strip
s390-linux  +FAIL: keep only debug data
s390-linux  +FAIL: NOBITS sections retain sh_link field
s390-linux  +FAIL: --only-keep-debug for ELF relocatables
s390-linux  +FAIL: strip --strip-unneeded on common symbol
s390-linux  +FAIL: binutils-all/strip-15
s390-linux  +FAIL: --localize-hidden test 1
s390-linux  +FAIL: binutils-all/remove-relocs-05
s390-linux  +FAIL: binutils-all/remove-relocs-08
s390-linux  +FAIL: --localize-hidden test 2
s390-linux  +FAIL: remove-section relocation sections
s390-linux  +FAIL: build-id-debuglink (strip debug info)
s390-linux  +FAIL: .llvm_addrsig
s390-linux  +FAIL: ld-elf/note-2
s390x-linux  +FAIL: gnu-debuglink (strip)
s390x-linux  +FAIL: strip
s390x-linux  +FAIL: keep only debug data
s390x-linux  +FAIL: NOBITS sections retain sh_link field
s390x-linux  +FAIL: --only-keep-debug for ELF relocatables
s390x-linux  +FAIL: strip --strip-unneeded on common symbol
s390x-linux  +FAIL: binutils-all/strip-15
s390x-linux  +FAIL: --localize-hidden test 1
s390x-linux  +FAIL: binutils-all/remove-relocs-05
s390x-linux  +FAIL: binutils-all/remove-relocs-08
s390x-linux  +FAIL: --localize-hidden test 2
s390x-linux  +FAIL: remove-section relocation sections
s390x-linux  +FAIL: build-id-debuglink (strip debug info)
s390x-linux  +FAIL: .llvm_addrsig
s390x-linux  +FAIL: ld-elf/note-2
score-elf  +FAIL: strip --strip-unneeded on common symbol
score-elf  +FAIL: binutils-all/strip-15
score-elf  +FAIL: --localize-hidden test 1
score-elf  +FAIL: binutils-all/remove-relocs-05
score-elf  +FAIL: binutils-all/remove-relocs-08
score-elf  +FAIL: --localize-hidden test 2
score-elf  +FAIL: .llvm_addrsig
score-elf  +FAIL: ld-elf/note-2
shle-unknown-netbsdelf  +FAIL: strip --strip-unneeded on common symbol
shle-unknown-netbsdelf  +FAIL: binutils-all/strip-15
shle-unknown-netbsdelf  +FAIL: --localize-hidden test 1
shle-unknown-netbsdelf  +FAIL: binutils-all/remove-relocs-05
shle-unknown-netbsdelf  +FAIL: binutils-all/remove-relocs-08
shle-unknown-netbsdelf  +FAIL: --localize-hidden test 2
shle-unknown-netbsdelf  +FAIL: .llvm_addrsig
shle-unknown-netbsdelf  +FAIL: ld-elf/note-2
sh-linux  +FAIL: strip --strip-unneeded on common symbol
sh-linux  +FAIL: binutils-all/strip-15
sh-linux  +FAIL: --localize-hidden test 1
sh-linux  +FAIL: binutils-all/remove-relocs-05
sh-linux  +FAIL: binutils-all/remove-relocs-08
sh-linux  +FAIL: --localize-hidden test 2
sh-linux  +FAIL: .llvm_addrsig
sh-linux  +FAIL: ld-elf/note-2
sh-nto  +FAIL: strip --strip-unneeded on common symbol
sh-nto  +FAIL: binutils-all/strip-15
sh-nto  +FAIL: --localize-hidden test 1
sh-nto  +FAIL: binutils-all/remove-relocs-05
sh-nto  +FAIL: binutils-all/remove-relocs-08
sh-nto  +FAIL: --localize-hidden test 2
sh-nto  +FAIL: .llvm_addrsig
sh-nto  +FAIL: ld-elf/note-2
sh-rtems  +FAIL: strip --strip-unneeded on common symbol
sh-rtems  +FAIL: binutils-all/strip-15
sh-rtems  +FAIL: --localize-hidden test 1
sh-rtems  +FAIL: binutils-all/remove-relocs-05
sh-rtems  +FAIL: binutils-all/remove-relocs-08
sh-rtems  +FAIL: --localize-hidden test 2
sh-rtems  +FAIL: .llvm_addrsig
sh-rtems  +FAIL: ld-elf/note-2
sh-vxworks  +FAIL: strip --strip-unneeded on common symbol
sh-vxworks  +FAIL: --localize-hidden test 2
sparc64-linux  +FAIL: gnu-debuglink (strip)
sparc64-linux  +FAIL: strip
sparc64-linux  +FAIL: keep only debug data
sparc64-linux  +FAIL: NOBITS sections retain sh_link field
sparc64-linux  +FAIL: --only-keep-debug for ELF relocatables
sparc64-linux  +FAIL: strip --strip-unneeded on common symbol
sparc64-linux  +FAIL: binutils-all/strip-15
sparc64-linux  +FAIL: --localize-hidden test 1
sparc64-linux  +FAIL: binutils-all/remove-relocs-05
sparc64-linux  +FAIL: binutils-all/remove-relocs-08
sparc64-linux  +FAIL: --localize-hidden test 2
sparc64-linux  +FAIL: remove-section relocation sections
sparc64-linux  +FAIL: build-id-debuglink (strip debug info)
sparc64-linux  +FAIL: .llvm_addrsig
sparc64-linux  +FAIL: ld-elf/note-2
sparc-elf  +FAIL: strip --strip-unneeded on common symbol
sparc-elf  +FAIL: binutils-all/strip-15
sparc-elf  +FAIL: --localize-hidden test 1
sparc-elf  +FAIL: binutils-all/remove-relocs-05
sparc-elf  +FAIL: binutils-all/remove-relocs-08
sparc-elf  +FAIL: --localize-hidden test 2
sparc-elf  +FAIL: .llvm_addrsig
sparc-elf  +FAIL: ld-elf/note-2
sparc-linux  +FAIL: strip --strip-unneeded on common symbol
sparc-linux  +FAIL: binutils-all/strip-15
sparc-linux  +FAIL: --localize-hidden test 1
sparc-linux  +FAIL: binutils-all/remove-relocs-05
sparc-linux  +FAIL: binutils-all/remove-relocs-08
sparc-linux  +FAIL: --localize-hidden test 2
sparc-linux  +FAIL: .llvm_addrsig
sparc-linux  +FAIL: ld-elf/note-2
sparc-sun-solaris2  +FAIL: strip --strip-unneeded on common symbol
sparc-sun-solaris2  +FAIL: binutils-all/strip-15
sparc-sun-solaris2  +FAIL: --localize-hidden test 1
sparc-sun-solaris2  +FAIL: binutils-all/remove-relocs-05
sparc-sun-solaris2  +FAIL: binutils-all/remove-relocs-08
sparc-sun-solaris2  +FAIL: --localize-hidden test 2
sparc-sun-solaris2  +FAIL: .llvm_addrsig
sparc-sun-solaris2  +FAIL: ld-elf/note-2
sparc-vxworks  +FAIL: strip --strip-unneeded on common symbol
sparc-vxworks  +FAIL: --localize-hidden test 2
spu-elf  +FAIL: strip --strip-unneeded on common symbol
spu-elf  +FAIL: binutils-all/strip-15
spu-elf  +FAIL: --localize-hidden test 1
spu-elf  +FAIL: binutils-all/remove-relocs-05
spu-elf  +FAIL: binutils-all/remove-relocs-08
spu-elf  +FAIL: --localize-hidden test 2
spu-elf  +FAIL: .llvm_addrsig
spu-elf  +FAIL: ld-elf/note-2
tic6x-elf  +FAIL: strip --strip-unneeded on common symbol
tic6x-elf  +FAIL: binutils-all/strip-15
tic6x-elf  +FAIL: --localize-hidden test 1
tic6x-elf  +FAIL: binutils-all/remove-relocs-05
tic6x-elf  +FAIL: binutils-all/remove-relocs-08
tic6x-elf  +FAIL: --localize-hidden test 2
tic6x-elf  +FAIL: .llvm_addrsig
tic6x-elf  +FAIL: ld-elf/note-2
tilegx-linux  +FAIL: strip --strip-unneeded on common symbol
tilegx-linux  +FAIL: binutils-all/strip-15
tilegx-linux  +FAIL: --localize-hidden test 1
tilegx-linux  +FAIL: binutils-all/remove-relocs-05
tilegx-linux  +FAIL: binutils-all/remove-relocs-08
tilegx-linux  +FAIL: --localize-hidden test 2
tilegx-linux  +FAIL: .llvm_addrsig
tilegx-linux  +FAIL: ld-elf/note-2
tilepro-linux  +FAIL: gnu-debuglink (strip)
tilepro-linux  +FAIL: strip
tilepro-linux  +FAIL: keep only debug data
tilepro-linux  +FAIL: NOBITS sections retain sh_link field
tilepro-linux  +FAIL: --only-keep-debug for ELF relocatables
tilepro-linux  +FAIL: strip --strip-unneeded on common symbol
tilepro-linux  +FAIL: binutils-all/strip-15
tilepro-linux  +FAIL: --localize-hidden test 1
tilepro-linux  +FAIL: binutils-all/remove-relocs-05
tilepro-linux  +FAIL: binutils-all/remove-relocs-08
tilepro-linux  +FAIL: --localize-hidden test 2
tilepro-linux  +FAIL: remove-section relocation sections
tilepro-linux  +FAIL: build-id-debuglink (strip debug info)
tilepro-linux  +FAIL: .llvm_addrsig
tilepro-linux  +FAIL: ld-elf/note-2
v850-elf  +FAIL: strip --strip-unneeded on common symbol
v850-elf  +FAIL: binutils-all/strip-15
v850-elf  +FAIL: --localize-hidden test 1
v850-elf  +FAIL: binutils-all/remove-relocs-05
v850-elf  +FAIL: binutils-all/remove-relocs-08
v850-elf  +FAIL: --localize-hidden test 2
v850-elf  +FAIL: .llvm_addrsig
v850-elf  +FAIL: ld-elf/note-2
vax-netbsdelf  +FAIL: strip --strip-unneeded on common symbol
vax-netbsdelf  +FAIL: binutils-all/strip-15
vax-netbsdelf  +FAIL: --localize-hidden test 1
vax-netbsdelf  +FAIL: binutils-all/remove-relocs-05
vax-netbsdelf  +FAIL: binutils-all/remove-relocs-08
vax-netbsdelf  +FAIL: --localize-hidden test 2
vax-netbsdelf  +FAIL: .llvm_addrsig
vax-netbsdelf  +FAIL: ld-elf/note-2
visium-elf  +FAIL: strip --strip-unneeded on common symbol
visium-elf  +FAIL: binutils-all/strip-15
visium-elf  +FAIL: --localize-hidden test 1
visium-elf  +FAIL: binutils-all/remove-relocs-05
visium-elf  +FAIL: binutils-all/remove-relocs-08
visium-elf  +FAIL: --localize-hidden test 2
visium-elf  +FAIL: .llvm_addrsig
visium-elf  +FAIL: ld-elf/note-2
wasm32  +FAIL: strip --strip-unneeded on common symbol
wasm32  +FAIL: --localize-hidden test 2
x86_64-cloudabi  +FAIL: strip --strip-unneeded on common symbol
x86_64-cloudabi  +FAIL: binutils-all/strip-15
x86_64-cloudabi  +FAIL: --localize-hidden test 1
x86_64-cloudabi  +FAIL: binutils-all/remove-relocs-05
x86_64-cloudabi  +FAIL: binutils-all/remove-relocs-08
x86_64-cloudabi  +FAIL: --localize-hidden test 2
x86_64-cloudabi  +FAIL: ld-elf/linkinfo1b
x86_64-cloudabi  +FAIL: ld-elf/note-2
x86_64-linux  +FAIL: gnu-debuglink (strip)
x86_64-linux  +FAIL: debuginfod (create separate debug info file)
x86_64-linux  +FAIL: strip
x86_64-linux  +FAIL: keep only debug data
x86_64-linux  +FAIL: NOBITS sections retain sh_link field
x86_64-linux  +FAIL: --only-keep-debug for ELF relocatables
x86_64-linux  +FAIL: strip --strip-unneeded on common symbol
x86_64-linux  +FAIL: binutils-all/strip-15
x86_64-linux  +FAIL: --localize-hidden test 1
x86_64-linux  +FAIL: binutils-all/remove-relocs-05
x86_64-linux  +FAIL: binutils-all/remove-relocs-08
x86_64-linux  +FAIL: --localize-hidden test 2
x86_64-linux  +FAIL: remove-section relocation sections
x86_64-linux  +FAIL: build-id-debuglink (strip debug info)
x86_64-linux  +FAIL: binutils-all/x86-64/pr23494b
x86_64-linux  +FAIL: ld-elf/linkinfo1b
x86_64-linux  +FAIL: ld-elf/maxpage5
x86_64-linux  +FAIL: ld-elf/note-2
x86_64-pc-linux-gnux32  +FAIL: strip --strip-unneeded on common symbol
x86_64-pc-linux-gnux32  +FAIL: binutils-all/strip-15
x86_64-pc-linux-gnux32  +FAIL: --localize-hidden test 1
x86_64-pc-linux-gnux32  +FAIL: binutils-all/remove-relocs-05
x86_64-pc-linux-gnux32  +FAIL: binutils-all/remove-relocs-08
x86_64-pc-linux-gnux32  +FAIL: --localize-hidden test 2
x86_64-pc-linux-gnux32  +FAIL: binutils-all/x86-64/pr23494b
x86_64-pc-linux-gnux32  +FAIL: ld-elf/linkinfo1b
x86_64-pc-linux-gnux32  +FAIL: ld-elf/maxpage5
x86_64-pc-linux-gnux32  +FAIL: ld-elf/note-2
x86_64-rdos  +FAIL: strip --strip-unneeded on common symbol
x86_64-rdos  +FAIL: --localize-hidden test 2
xgate-elf  +FAIL: strip --strip-unneeded on common symbol
xgate-elf  +FAIL: binutils-all/strip-15
xgate-elf  +FAIL: --localize-hidden test 1
xgate-elf  +FAIL: binutils-all/remove-relocs-05
xgate-elf  +FAIL: binutils-all/remove-relocs-08
xgate-elf  +FAIL: --localize-hidden test 2
xgate-elf  +FAIL: .llvm_addrsig
xgate-elf  +FAIL: ld-elf/note-2
xstormy16-elf  +FAIL: strip --strip-unneeded on common symbol
xstormy16-elf  +FAIL: binutils-all/strip-15
xstormy16-elf  +FAIL: --localize-hidden test 1
xstormy16-elf  +FAIL: binutils-all/remove-relocs-05
xstormy16-elf  +FAIL: binutils-all/remove-relocs-08
xstormy16-elf  +FAIL: --localize-hidden test 2
xstormy16-elf  +FAIL: .llvm_addrsig
xstormy16-elf  +FAIL: ld-elf/note-2
xtensa-elf  +FAIL: strip --strip-unneeded on common symbol
xtensa-elf  +FAIL: binutils-all/strip-15
xtensa-elf  +FAIL: --localize-hidden test 1
xtensa-elf  +FAIL: binutils-all/remove-relocs-05
xtensa-elf  +FAIL: binutils-all/remove-relocs-08
xtensa-elf  +FAIL: --localize-hidden test 2
xtensa-elf  +FAIL: .llvm_addrsig
xtensa-elf  +FAIL: ld-elf/note-2
z80-elf  +FAIL: strip --strip-unneeded on common symbol
z80-elf  +FAIL: binutils-all/strip-15
z80-elf  +FAIL: --localize-hidden test 1
z80-elf  +FAIL: binutils-all/remove-relocs-05
z80-elf  +FAIL: binutils-all/remove-relocs-08
z80-elf  +FAIL: --localize-hidden test 2
z80-elf  +FAIL: .llvm_addrsig
z80-elf  +FAIL: ld-elf/note-2

After fixing the segfault with

diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index 57d39558099..c696e6b05ed 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -1320,6 +1320,7 @@ static bool
 is_addrsig_section (bfd *abfd, asection *sec)
 {
   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
+      && elf_section_data (sec) != NULL
       && elf_section_data (sec)->this_hdr.sh_type == SHT_LLVM_ADDRSIG)
     return true;

I still see a lot of targets failing the new .addrsig test:
aarch64_be-linux-gnu_ilp32, aarch64-elf, aarch64-linux, alpha-linux,
alpha-netbsd, alpha-unknown-freebsd4.7, am33_2.0-linux, arc-elf,
arc-linux-uclibc, armeb-linuxeabi, arm-elf, arm-linuxeabi, arm-nacl,
arm-netbsdelf, arm-nto, avr-elf, bfin-elf, bfin-linux-uclibc,
cr16-elf, cris-elf, cris-linux, crisv32-linux, crx-elf, csky-elf,
csky-linux, d10v-elf, d30v-elf, dlx-elf, epiphany-elf, fr30-elf,
frv-elf, frv-linux, ft32-elf, h8300-elf, h8300-linux,
hppa64-hp-hpux11.23, hppa64-linux, hppa-linux, ia64-elf,
ia64-freebsd5, ia64-hpux, ia64-linux, ia64-netbsd, ip2k-elf,
iq2000-elf, lm32-elf, lm32-linux, loongarch32-elf, loongarch64-linux,
m32c-elf, m32r-elf, m32r-linux, m68hc11-elf, m68hc12-elf, m68k-elf,
m68k-linux, mcore-elf, mep-elf, metag-linux, microblaze-elf,
microblaze-linux, mips64el-openbsd, mips64-linux, mips64-openbsd,
mipsel-linux-gnu, mipsisa32el-linux, mipsisa32r2el-elf, mips-linux,
mips-sgi-irix6, mipstx39-elf, mn10200-elf, mn10300-elf, moxie-elf,
msp430-elf, mt-elf, nds32be-elf, nds32le-linux, nios2-linux, or1k-elf,
or1k-linux, pj-elf, powerpc64-freebsd, powerpc64le-linux,
powerpc64-linux, powerpc-eabisim, powerpc-eabivle, powerpc-freebsd,
powerpcle-elf, powerpc-linux, powerpc-nto, pru-elf, riscv32-elf,
riscv64-linux, rl78-elf, rx-elf, s12z-elf, s390-linux, s390x-linux,
score-elf, shle-unknown-netbsdelf, sh-linux, sh-nto, sh-rtems,
sparc64-linux, sparc-elf, sparc-linux, sparc-sun-solaris2, spu-elf,
tic6x-elf, tilegx-linux, tilepro-linux, v850-elf, vax-netbsdelf,
visium-elf, xgate-elf, xstormy16-elf, xtensa-elf, z80-elf

It's not hard to see why.  Targets add their own symbols, some emit
section symbols, some don't.  x86_64-linux addrsig.o symbol table is:
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    1 local
     2: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    1 .Llocal
     3: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND g1
     4: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND g2
     5: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND g3
arm-linuxeabi is
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 SECTION LOCAL  DEFAULT    1 .text
     2: 00000000     0 SECTION LOCAL  DEFAULT    2 .data
     3: 00000000     0 SECTION LOCAL  DEFAULT    3 .bss
     4: 00000000     0 NOTYPE  LOCAL  DEFAULT    1 local
     5: 00000000     0 NOTYPE  LOCAL  DEFAULT    1 .Llocal
     6: 00000000     0 SECTION LOCAL  DEFAULT    4 .ARM.attributes
     7: 00000000     0 SECTION LOCAL  DEFAULT    5 .llvm_addrsig
     8: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND g1
     9: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND g2
    10: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND g3
powerpc64le-linux is
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 SECTION LOCAL  DEFAULT    1 .text
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    2 .data
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    3 .bss
     4: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    1 local
     5: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    1 .Llocal
     6: 0000000000000000     0 SECTION LOCAL  DEFAULT    4 .llvm_addrsig
     7: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND g1
     8: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND g2
     9: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND g3

Even more embarrassing is that the expected output you put in
addrsig.d is not correct for x86_64.  You ought to be generating
a .llvm_addrsig section of 01020305 on x86_64, I think.

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym.
  2022-06-28  9:20 ` [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Alan Modra
@ 2022-06-29  1:27   ` Tatsuyuki Ishi
  2022-06-29  2:56     ` Alan Modra
  0 siblings, 1 reply; 13+ messages in thread
From: Tatsuyuki Ishi @ 2022-06-29  1:27 UTC (permalink / raw)
  To: Alan Modra; +Cc: binutils, Jan Beulich, Fangrui Song

On Tue, Jun 28, 2022 at 6:20 PM Alan Modra <amodra@gmail.com> wrote:
>
> On Fri, Jun 24, 2022 at 12:13:48AM +0900, Tatsuyuki Ishi wrote:
> > v2 includes patch to objcopy and ld -r to discard the .llvm_addrsig
> > section, in order to prevent linkers to get corrupted input now that
> > the SH_LINK heuristic they use is supplied with the proper value.
>
> This patchset wasn't tested, was it?

I did not run the testsuite, and I'm deeply sorry for that. I'll make
sure to run the full test suite on all platforms for any following
revisions as well as any patches I send from now on.

> It's not hard to see why.  Targets add their own symbols, some emit
> section symbols, some don't.

Let me know if there is a way to test this that works across architectures.
I suppose I can provide the expected output for each target by
duplicating this test in each target's folder?
Otherwise, the only thing I can think of right now is to teach readelf
to parse addrsig, but that adds new code which also needs to be tested
somehow.

> Even more embarrassing is that the expected output you put in
> addrsig.d is not correct for x86_64.  You ought to be generating
> a .llvm_addrsig section of 01020305 on x86_64, I think.

You're right. It seems that the way I numbered the symbols wasn't
quite right. I'll get it fixed by the next revision.

---
Tatsuyuki

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym.
  2022-06-29  1:27   ` Tatsuyuki Ishi
@ 2022-06-29  2:56     ` Alan Modra
  2022-06-30 20:59       ` Fangrui Song
  0 siblings, 1 reply; 13+ messages in thread
From: Alan Modra @ 2022-06-29  2:56 UTC (permalink / raw)
  To: Tatsuyuki Ishi; +Cc: binutils, Jan Beulich, Fangrui Song

On Wed, Jun 29, 2022 at 10:27:17AM +0900, Tatsuyuki Ishi wrote:
> You're right. It seems that the way I numbered the symbols wasn't
> quite right. I'll get it fixed by the next revision.

It isn't going to be easy.  The problem is that elf symbol ordering is
done by bfd/elf.c:elf_map_symbols, which isn't called until there is
some file output triggering _bfd_elf_compute_section_file_positions.
So you can't fill out .llvm_addrsig until quite late, but you need its
size earlier for layout.  Exact sizing isn't going to be possible due
to uleb128 ecoding of symbol index.  You can likely get a reasonable
upper bound.

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym.
  2022-06-29  2:56     ` Alan Modra
@ 2022-06-30 20:59       ` Fangrui Song
  0 siblings, 0 replies; 13+ messages in thread
From: Fangrui Song @ 2022-06-30 20:59 UTC (permalink / raw)
  To: Alan Modra; +Cc: Tatsuyuki Ishi, binutils, Jan Beulich

On Tue, Jun 28, 2022 at 7:56 PM Alan Modra <amodra@gmail.com> wrote:
>
> On Wed, Jun 29, 2022 at 10:27:17AM +0900, Tatsuyuki Ishi wrote:
> > You're right. It seems that the way I numbered the symbols wasn't
> > quite right. I'll get it fixed by the next revision.
>
> It isn't going to be easy.  The problem is that elf symbol ordering is
> done by bfd/elf.c:elf_map_symbols, which isn't called until there is
> some file output triggering _bfd_elf_compute_section_file_positions.
> So you can't fill out .llvm_addrsig until quite late, but you need its
> size earlier for layout.  Exact sizing isn't going to be possible due
> to uleb128 ecoding of symbol index.  You can likely get a reasonable
> upper bound.

There has been some discussion on .llvm_addrsig recently:
https://discourse.llvm.org/t/problems-with-mach-o-address-significance-table-generation/63392

Will switching to the relocation-based encoding look like a good idea
for objcopy and ld -r operability?
We can consider replacing the current uleb128 encoding (usually one
byte for one symbol) with a SHT_REL relocation (16 bytes for
Elf64_Rel)

r_offset = 0
r_info = ELF64_R_INFO(sym_idx, R_*_NONE)

I'll do some experiments.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2022-06-30 21:00 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-23 15:13 [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Tatsuyuki Ishi
2022-06-23 15:13 ` [PATCH v2 1/6] elf: Add definition for SHT_LLVM_ADDRSIG Tatsuyuki Ishi
2022-06-23 15:13 ` [PATCH v2 2/6] bfd: Output SH_LINK to .symtab " Tatsuyuki Ishi
2022-06-23 15:13 ` [PATCH v2 3/6] objcopy: Remove SHT_LLVM_ADDRSIG sections by default Tatsuyuki Ishi
2022-06-23 15:40   ` Jan Beulich
2022-06-24  5:28     ` Tatsuyuki Ishi
2022-06-23 15:13 ` [PATCH v2 4/6] ld: Discard LLVM_ADDRSIG sections Tatsuyuki Ishi
2022-06-23 15:13 ` [PATCH v2 5/6] gas: Add support for LLVM addrsig and addrsig_sym directives on ELF Tatsuyuki Ishi
2022-06-23 15:13 ` [PATCH v2 6/6] gas: Add basic test for addrsig Tatsuyuki Ishi
2022-06-28  9:20 ` [PATCH v2 0/6] gas: Add support for LLVM addrsig and addrsig_sym Alan Modra
2022-06-29  1:27   ` Tatsuyuki Ishi
2022-06-29  2:56     ` Alan Modra
2022-06-30 20:59       ` Fangrui Song

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).