From e601d38b7cc222345d4128f45db18529b9fb477b Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 25 Oct 2017 15:32:52 +1030 Subject: [PATCH] Allow for __gnu_lto_slim prefixed with extra "_" Some targets prefix global symbols with "_". bfd/ * archive.c (_bfd_compute_and_write_armap): Match "__gnu_lto_slim" optionally prefixed with "_". * linker.c (_bfd_generic_link_add_one_symbol): Likewise. binutils/ * nm.c (filter_symbols): Match "__gnu_lto_slim" optionally prefixed with "_". gold/ * symtab.cc (Symbol_table::add_from_relobj): Match "__gnu_lto_slim" optionally prefixed with "_". ld/ * testsuite/ld-plugin/lto-3r.d: Match "__gnu_lto_v" optionally prefixed with "_". * testsuite/ld-plugin/lto-5r.d: Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/archive.c | 6 +++++- bfd/linker.c | 4 +++- binutils/ChangeLog | 5 +++++ binutils/nm.c | 4 +++- gold/ChangeLog | 5 +++++ gold/symtab.cc | 4 +++- ld/ChangeLog | 6 ++++++ ld/testsuite/ld-plugin/lto-3r.d | 2 +- ld/testsuite/ld-plugin/lto-5r.d | 2 +- 10 files changed, 38 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 6f2f5e3f168..ca780aaadd9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2017-10-25 Alan Modra + + * archive.c (_bfd_compute_and_write_armap): Match "__gnu_lto_slim" + optionally prefixed with "_". + * linker.c (_bfd_generic_link_add_one_symbol): Likewise. + 2017-10-24 Andrew Waterman * elfnn-riscv.c (_bfd_riscv_relax_lui): Don't relax to c.lui diff --git a/bfd/archive.c b/bfd/archive.c index 1e876856430..0b98df34430 100644 --- a/bfd/archive.c +++ b/bfd/archive.c @@ -2411,7 +2411,11 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength) map = new_map; } - if (strcmp (syms[src_count]->name, "__gnu_lto_slim") == 0) + if (syms[src_count]->name[0] == '_' + && syms[src_count]->name[1] == '_' + && strcmp (syms[src_count]->name + + (syms[src_count]->name[2] == '_'), + "__gnu_lto_slim") == 0) _bfd_error_handler (_("%B: plugin needed to handle lto object"), current); diff --git a/bfd/linker.c b/bfd/linker.c index 72d5705e639..a96c6ed1dd0 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -1403,7 +1403,9 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, { row = COMMON_ROW; if (!bfd_link_relocatable (info) - && strcmp (name, "__gnu_lto_slim") == 0) + && name[0] == '_' + && name[1] == '_' + && strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0) _bfd_error_handler (_("%B: plugin needed to handle lto object"), abfd); } diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ee0b81eb5a8..ad9d33bb992 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2017-10-25 Alan Modra + + * nm.c (filter_symbols): Match "__gnu_lto_slim" optionally prefixed + with "_". + 2017-10-18 Eric Botcazou * MAINTAINERS: Add myself as Visium maintainer. diff --git a/binutils/nm.c b/binutils/nm.c index 3328812656f..5b421785e5e 100644 --- a/binutils/nm.c +++ b/binutils/nm.c @@ -478,7 +478,9 @@ filter_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms, if (sym == NULL) bfd_fatal (bfd_get_filename (abfd)); - if (strcmp (sym->name, "__gnu_lto_slim") == 0) + if (sym->name[0] == '_' + && sym->name[1] == '_' + && strcmp (sym->name + (sym->name[2] == '_'), "__gnu_lto_slim") == 0) non_fatal (_("%s: plugin needed to handle lto object"), bfd_get_filename (abfd)); diff --git a/gold/ChangeLog b/gold/ChangeLog index 2184e9ac333..4ab533d5775 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2017-10-25 Alan Modra + + * symtab.cc (Symbol_table::add_from_relobj): Match "__gnu_lto_slim" + optionally prefixed with "_". + 2017-10-20 Sriraman Tallam * options.h (-z,text_unlikely_segment): New option. diff --git a/gold/symtab.cc b/gold/symtab.cc index 1555de6e5b3..7ebcd6b5682 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -1185,7 +1185,9 @@ Symbol_table::add_from_relobj( const char* name = sym_names + st_name; if (!parameters->options().relocatable() - && strcmp (name, "__gnu_lto_slim") == 0) + && name[0] == '_' + && name[1] == '_' + && strcmp (name + (name[2] == '_'), "__gnu_lto_slim") == 0) gold_info(_("%s: plugin needed to handle lto object"), relobj->name().c_str()); diff --git a/ld/ChangeLog b/ld/ChangeLog index 368a496fdef..27024b60fff 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2017-10-25 Alan Modra + + * testsuite/ld-plugin/lto-3r.d: Match "__gnu_lto_v" optionally + prefixed with "_". + * testsuite/ld-plugin/lto-5r.d: Likewise. + 2017-10-25 Hans-Peter Nilsson * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Fix typo for istarget. diff --git a/ld/testsuite/ld-plugin/lto-3r.d b/ld/testsuite/ld-plugin/lto-3r.d index 1d1befe90f6..3726718f2a0 100644 --- a/ld/testsuite/ld-plugin/lto-3r.d +++ b/ld/testsuite/ld-plugin/lto-3r.d @@ -3,5 +3,5 @@ #nm: -p #... -[0-9a-f]+ C __gnu_lto_v.* +[0-9a-f]+ C _?__gnu_lto_v.* #pass diff --git a/ld/testsuite/ld-plugin/lto-5r.d b/ld/testsuite/ld-plugin/lto-5r.d index 43e9a5c5a3c..ad1da7047b9 100644 --- a/ld/testsuite/ld-plugin/lto-5r.d +++ b/ld/testsuite/ld-plugin/lto-5r.d @@ -3,5 +3,5 @@ #nm: -p #... -[0-9a-f]+ C __gnu_lto_v.* +[0-9a-f]+ C _?__gnu_lto_v.* #pass -- 2.30.2