2017-07-31 19:17:45 +02:00
|
|
|
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
|
2017-10-02 10:55:36 +02:00
|
|
|
index 417ed273ab..8f8117dcb4 100644
|
2017-07-31 19:17:45 +02:00
|
|
|
--- a/bfd/ChangeLog
|
|
|
|
+++ b/bfd/ChangeLog
|
2017-10-02 10:55:36 +02:00
|
|
|
@@ -1,3 +1,37 @@
|
|
|
|
+2017-09-28 Alan Modra <amodra@gmail.com>
|
|
|
|
+
|
|
|
|
+ PR 22220
|
|
|
|
+ * elflink.c (_bfd_elf_merge_symbol): Set non_ir_ref_dynamic in
|
|
|
|
+ a case where plugin_notice isn't called.
|
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+2017-09-26 H.J. Lu <hongjiu.lu@intel.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ PR ld/22199
|
|
|
|
+ * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Don't pass
|
|
|
|
+ output_bfd to info->callbacks->minfo.
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+2017-09-22 H.J. Lu <hongjiu.lu@intel.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ PR binutils/22170
|
|
|
|
+ * elf32-i386.c (elf_i386_get_synthetic_symtab): Guard against
|
|
|
|
+ corrupted PLT.
|
|
|
|
+ * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise.
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+2017-09-22 H.J. Lu <hongjiu.lu@intel.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ PR binutils/22163
|
|
|
|
+ * elf32-i386.c (elf_i386_get_synthetic_symtab): Also return -1
|
|
|
|
+ if bfd_canonicalize_dynamic_reloc returns 0.
|
|
|
|
+ * elf64-x86-64.c (elf_x86_64_get_synthetic_symtab): Likewise.
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+2017-09-21 Nick Clifton <nickc@redhat.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ * development.sh (development): Revert previous delta.
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+2017-09-20 Nick Clifton <nickc@redhat.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ * development.sh (development): Set to false.
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
2017-09-19 Nick Clifton <nickc@redhat.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
|
2017-09-28 10:29:20 +02:00
|
|
|
2.29.1 Release
|
2017-08-11 16:01:07 +02:00
|
|
|
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
|
2017-09-28 10:29:20 +02:00
|
|
|
index 5c1c3ff790..ba50c93f33 100644
|
2017-08-11 16:01:07 +02:00
|
|
|
--- a/bfd/elf32-i386.c
|
|
|
|
+++ b/bfd/elf32-i386.c
|
2017-09-28 10:29:20 +02:00
|
|
|
@@ -6342,7 +6342,7 @@ elf_i386_get_synthetic_symtab (bfd *abfd,
|
|
|
|
|
|
|
|
dynrelcount = bfd_canonicalize_dynamic_reloc (abfd, dynrelbuf,
|
|
|
|
dynsyms);
|
|
|
|
- if (dynrelcount < 0)
|
|
|
|
+ if (dynrelcount <= 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
/* Sort the relocs by address. */
|
|
|
|
@@ -6616,6 +6616,10 @@ bad_return:
|
|
|
|
size += sizeof ("+0x") - 1 + 8;
|
|
|
|
n++;
|
|
|
|
s++;
|
|
|
|
+ /* There should be only one entry in PLT for a given
|
|
|
|
+ symbol. Set howto to NULL after processing a PLT
|
|
|
|
+ entry to guard against corrupted PLT. */
|
|
|
|
+ p->howto = NULL;
|
|
|
|
}
|
|
|
|
offset += plt_entry_size;
|
|
|
|
}
|
|
|
|
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
|
|
|
|
index 80dd791d25..1f6dfb89bf 100644
|
|
|
|
--- a/bfd/elf64-x86-64.c
|
|
|
|
+++ b/bfd/elf64-x86-64.c
|
|
|
|
@@ -6133,7 +6133,6 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
|
|
|
|
if (SYMBOL_REFERENCES_LOCAL (info, h))
|
|
|
|
{
|
|
|
|
info->callbacks->minfo (_("Local IFUNC function `%s' in %B\n"),
|
|
|
|
- output_bfd,
|
|
|
|
h->root.root.string,
|
|
|
|
h->root.u.def.section->owner);
|
|
|
|
|
|
|
|
@@ -6717,7 +6716,7 @@ elf_x86_64_get_synthetic_symtab (bfd *abfd,
|
|
|
|
|
|
|
|
dynrelcount = bfd_canonicalize_dynamic_reloc (abfd, dynrelbuf,
|
|
|
|
dynsyms);
|
|
|
|
- if (dynrelcount < 0)
|
|
|
|
+ if (dynrelcount <= 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
/* Sort the relocs by address. */
|
|
|
|
@@ -6970,6 +6969,10 @@ bad_return:
|
|
|
|
size += sizeof ("+0x") - 1 + 8 + 8 * ABI_64_P (abfd);
|
|
|
|
n++;
|
|
|
|
s++;
|
|
|
|
+ /* There should be only one entry in PLT for a given
|
|
|
|
+ symbol. Set howto to NULL after processing a PLT
|
|
|
|
+ entry to guard against corrupted PLT. */
|
|
|
|
+ p->howto = NULL;
|
|
|
|
}
|
|
|
|
offset += plt_entry_size;
|
|
|
|
}
|
2017-10-02 10:55:36 +02:00
|
|
|
diff --git a/bfd/elflink.c b/bfd/elflink.c
|
|
|
|
index 02713a5956..ee3cc6b8b4 100644
|
|
|
|
--- a/bfd/elflink.c
|
|
|
|
+++ b/bfd/elflink.c
|
|
|
|
@@ -1234,6 +1234,16 @@ _bfd_elf_merge_symbol (bfd *abfd,
|
|
|
|
olddyn = (oldsec->symbol->flags & BSF_DYNAMIC) != 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ /* Handle a case where plugin_notice won't be called and thus won't
|
|
|
|
+ set the non_ir_ref flags on the first pass over symbols. */
|
|
|
|
+ if (oldbfd != NULL
|
|
|
|
+ && (oldbfd->flags & BFD_PLUGIN) != (abfd->flags & BFD_PLUGIN)
|
|
|
|
+ && newdyn != olddyn)
|
|
|
|
+ {
|
|
|
|
+ h->root.non_ir_ref_dynamic = TRUE;
|
|
|
|
+ hi->root.non_ir_ref_dynamic = TRUE;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
/* NEWDEF and OLDDEF indicate whether the new or old symbol,
|
|
|
|
respectively, appear to be a definition rather than reference. */
|
|
|
|
|
2017-09-28 10:29:20 +02:00
|
|
|
diff --git a/bfd/version.h b/bfd/version.h
|
|
|
|
index 3405e424f4..bc0fbb7648 100644
|
|
|
|
--- a/bfd/version.h
|
|
|
|
+++ b/bfd/version.h
|
|
|
|
@@ -1,4 +1,4 @@
|
|
|
|
-#define BFD_VERSION_DATE 20170919
|
|
|
|
+#define BFD_VERSION_DATE 20170928
|
|
|
|
#define BFD_VERSION @bfd_version@
|
|
|
|
#define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@
|
|
|
|
#define REPORT_BUGS_TO @report_bugs_to@
|
|
|
|
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
|
|
|
|
index 84d3d7c1c4..ffb34fbb78 100644
|
|
|
|
--- a/binutils/ChangeLog
|
|
|
|
+++ b/binutils/ChangeLog
|
|
|
|
@@ -1,3 +1,7 @@
|
|
|
|
+2017-09-21 Maciej W. Rozycki <macro@imgtec.com>
|
2017-08-11 16:01:07 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ * readelf.c (get_machine_flags) <E_MIPS_MACH_5900>: New case.
|
2017-08-10 16:50:48 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
2017-09-15 Nick Clifton <nickc@redhat.com>
|
2017-08-10 16:50:48 +02:00
|
|
|
|
2017-09-28 10:29:20 +02:00
|
|
|
2.29.1 Release
|
|
|
|
diff --git a/binutils/readelf.c b/binutils/readelf.c
|
|
|
|
index fb16df8e2a..41f128ed23 100644
|
|
|
|
--- a/binutils/readelf.c
|
|
|
|
+++ b/binutils/readelf.c
|
|
|
|
@@ -3325,6 +3325,7 @@ get_machine_flags (unsigned e_flags, unsigned e_machine)
|
|
|
|
case E_MIPS_MACH_4650: strcat (buf, ", 4650"); break;
|
|
|
|
case E_MIPS_MACH_5400: strcat (buf, ", 5400"); break;
|
|
|
|
case E_MIPS_MACH_5500: strcat (buf, ", 5500"); break;
|
|
|
|
+ case E_MIPS_MACH_5900: strcat (buf, ", 5900"); break;
|
|
|
|
case E_MIPS_MACH_SB1: strcat (buf, ", sb1"); break;
|
|
|
|
case E_MIPS_MACH_9000: strcat (buf, ", 9000"); break;
|
|
|
|
case E_MIPS_MACH_LS2E: strcat (buf, ", loongson-2e"); break;
|
|
|
|
diff --git a/gas/ChangeLog b/gas/ChangeLog
|
|
|
|
index 42a676f598..9aa3dbca3a 100644
|
|
|
|
--- a/gas/ChangeLog
|
|
|
|
+++ b/gas/ChangeLog
|
|
|
|
@@ -1,3 +1,8 @@
|
|
|
|
+2017-09-21 Maciej W. Rozycki <macro@imgtec.com>
|
2017-08-10 16:50:48 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ * testsuite/gas/mips/elf_mach_5900.d: New test.
|
|
|
|
+ * testsuite/gas/mips/mips.exp: Run it.
|
2017-07-31 19:17:45 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
2017-09-15 Nick Clifton <nickc@redhat.com>
|
2017-07-31 19:17:45 +02:00
|
|
|
|
2017-09-28 10:29:20 +02:00
|
|
|
2.29.1 Release
|
|
|
|
diff --git a/gas/testsuite/gas/mips/elf_mach_5900.d b/gas/testsuite/gas/mips/elf_mach_5900.d
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000000..1df668e7e5
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/gas/testsuite/gas/mips/elf_mach_5900.d
|
|
|
|
@@ -0,0 +1,22 @@
|
|
|
|
+#readelf: -Ah
|
|
|
|
+#name: ELF R5900 markings
|
|
|
|
+#as: -32 -march=r5900
|
|
|
|
+#source: empty.s
|
|
|
|
+
|
|
|
|
+ELF Header:
|
|
|
|
+#...
|
|
|
|
+ Flags: +0x..92...., .*5900.*
|
|
|
|
+#...
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+MIPS ABI Flags Version: 0
|
|
|
|
+
|
|
|
|
+ISA: MIPS3
|
|
|
|
+GPR size: 32
|
|
|
|
+CPR1 size: 32
|
|
|
|
+CPR2 size: 0
|
|
|
|
+FP ABI: .*
|
|
|
|
+ISA Extension: Toshiba R5900
|
|
|
|
+ASEs:
|
|
|
|
+ None
|
|
|
|
+FLAGS 1: .*
|
|
|
|
+FLAGS 2: .*
|
|
|
|
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
|
|
|
|
index c71dca4351..25221ae2af 100644
|
|
|
|
--- a/gas/testsuite/gas/mips/mips.exp
|
|
|
|
+++ b/gas/testsuite/gas/mips/mips.exp
|
|
|
|
@@ -1149,6 +1149,7 @@ if { [istarget mips*-*-vxworks*] } {
|
|
|
|
run_dump_test "elf_ase_micromips-2"
|
|
|
|
|
|
|
|
# Verify that machine markings are handled properly.
|
|
|
|
+ run_dump_test "elf_mach_5900"
|
|
|
|
run_dump_test "elf_mach_interaptiv-mr2"
|
|
|
|
|
|
|
|
run_dump_test "mips-gp32-fp32-pic"
|
|
|
|
diff --git a/gold/ChangeLog b/gold/ChangeLog
|
2017-10-02 10:55:36 +02:00
|
|
|
index 6071f8977a..32c0e21f54 100644
|
2017-09-28 10:29:20 +02:00
|
|
|
--- a/gold/ChangeLog
|
|
|
|
+++ b/gold/ChangeLog
|
2017-10-02 10:55:36 +02:00
|
|
|
@@ -1,3 +1,19 @@
|
|
|
|
+2017-09-28 Alan Modra <amodra@gmail.com>
|
|
|
|
+
|
|
|
|
+ * powerpc.cc (Target_powerpc<64,*>::powerpc_info): Set
|
|
|
|
+ is_default_stack_executable false.
|
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+2017-08-03 James Clarke <jrtc27@jrtc27.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ * options.h (General_options): Set a non-NULL second help string
|
|
|
|
+ argument for relax to allow --no-relax.
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+2017-09-20 Alan Modra <amodra@gmail.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
+ * powerpc.cc (Target_powerpc::Branch_info::make_stub): Put
|
|
|
|
+ stubs for ppc32 non-branch relocs in first stub table.
|
|
|
|
+ (Target_powerpc::Relocate::relocate): Resolve similarly.
|
2017-08-30 15:08:30 +02:00
|
|
|
+
|
2017-09-28 10:29:20 +02:00
|
|
|
2017-09-19 Alan Modra <amodra@gmail.com>
|
2017-08-30 15:08:30 +02:00
|
|
|
|
2017-09-28 10:29:20 +02:00
|
|
|
* options.h (stub-group-multi): Default to true. Add
|
|
|
|
diff --git a/gold/options.h b/gold/options.h
|
|
|
|
index 576b2a3c53..4a802cf41f 100644
|
|
|
|
--- a/gold/options.h
|
|
|
|
+++ b/gold/options.h
|
|
|
|
@@ -1164,7 +1164,8 @@ class General_options
|
|
|
|
N_("Generate relocatable output"), NULL);
|
2017-08-30 15:08:30 +02:00
|
|
|
|
2017-09-28 10:29:20 +02:00
|
|
|
DEFINE_bool(relax, options::TWO_DASHES, '\0', false,
|
|
|
|
- N_("Relax branches on certain targets"), NULL);
|
|
|
|
+ N_("Relax branches on certain targets"),
|
|
|
|
+ N_("Do not relax branches"));
|
2017-08-30 15:08:30 +02:00
|
|
|
|
2017-09-28 10:29:20 +02:00
|
|
|
DEFINE_string(retain_symbols_file, options::TWO_DASHES, '\0', NULL,
|
|
|
|
N_("keep only symbols listed in this file"), N_("FILE"));
|
|
|
|
diff --git a/gold/powerpc.cc b/gold/powerpc.cc
|
2017-10-02 10:55:36 +02:00
|
|
|
index 629da4f8a1..22590c1e43 100644
|
2017-09-28 10:29:20 +02:00
|
|
|
--- a/gold/powerpc.cc
|
|
|
|
+++ b/gold/powerpc.cc
|
2017-10-02 10:55:36 +02:00
|
|
|
@@ -1618,7 +1618,7 @@ Target::Target_info Target_powerpc<64, true>::powerpc_info =
|
|
|
|
false, // has_make_symbol
|
|
|
|
true, // has_resolve
|
|
|
|
false, // has_code_fill
|
|
|
|
- true, // is_default_stack_executable
|
|
|
|
+ false, // is_default_stack_executable
|
|
|
|
false, // can_icf_inline_merge_sections
|
|
|
|
'\0', // wrap_char
|
|
|
|
"/usr/lib/ld.so.1", // dynamic_linker
|
|
|
|
@@ -1646,7 +1646,7 @@ Target::Target_info Target_powerpc<64, false>::powerpc_info =
|
|
|
|
false, // has_make_symbol
|
|
|
|
true, // has_resolve
|
|
|
|
false, // has_code_fill
|
|
|
|
- true, // is_default_stack_executable
|
|
|
|
+ false, // is_default_stack_executable
|
|
|
|
false, // can_icf_inline_merge_sections
|
|
|
|
'\0', // wrap_char
|
|
|
|
"/usr/lib/ld.so.1", // dynamic_linker
|
2017-09-28 10:29:20 +02:00
|
|
|
@@ -3065,11 +3065,17 @@ Target_powerpc<size, big_endian>::Branch_info::make_stub(
|
|
|
|
target->glink_section()->add_global_entry(gsym);
|
|
|
|
else
|
2017-08-30 15:08:30 +02:00
|
|
|
{
|
2017-09-28 10:29:20 +02:00
|
|
|
- if (stub_table == NULL)
|
|
|
|
+ if (stub_table == NULL
|
|
|
|
+ && !(size == 32
|
|
|
|
+ && gsym != NULL
|
|
|
|
+ && !parameters->options().output_is_position_independent()
|
|
|
|
+ && !is_branch_reloc(this->r_type_)))
|
|
|
|
stub_table = this->object_->stub_table(this->shndx_);
|
|
|
|
if (stub_table == NULL)
|
2017-08-30 15:08:30 +02:00
|
|
|
{
|
2017-09-28 10:29:20 +02:00
|
|
|
- // This is a ref from a data section to an ifunc symbol.
|
|
|
|
+ // This is a ref from a data section to an ifunc symbol,
|
|
|
|
+ // or a non-branch reloc for which we always want to use
|
|
|
|
+ // one set of stubs for resolving function addresses.
|
|
|
|
stub_table = ifunc_stub_table;
|
2017-08-30 15:08:30 +02:00
|
|
|
}
|
2017-09-28 10:29:20 +02:00
|
|
|
gold_assert(stub_table != NULL);
|
|
|
|
@@ -8052,11 +8058,20 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
|
2017-08-30 15:08:30 +02:00
|
|
|
}
|
2017-09-28 10:29:20 +02:00
|
|
|
else
|
2017-08-30 15:08:30 +02:00
|
|
|
{
|
2017-09-28 10:29:20 +02:00
|
|
|
- Stub_table<size, big_endian>* stub_table
|
|
|
|
- = object->stub_table(relinfo->data_shndx);
|
|
|
|
+ Stub_table<size, big_endian>* stub_table = NULL;
|
|
|
|
+ if (target->stub_tables().size() == 1)
|
|
|
|
+ stub_table = target->stub_tables()[0];
|
|
|
|
+ if (stub_table == NULL
|
|
|
|
+ && !(size == 32
|
|
|
|
+ && gsym != NULL
|
|
|
|
+ && !parameters->options().output_is_position_independent()
|
|
|
|
+ && !is_branch_reloc(r_type)))
|
|
|
|
+ stub_table = object->stub_table(relinfo->data_shndx);
|
|
|
|
if (stub_table == NULL)
|
|
|
|
{
|
|
|
|
- // This is a ref from a data section to an ifunc symbol.
|
|
|
|
+ // This is a ref from a data section to an ifunc symbol,
|
|
|
|
+ // or a non-branch reloc for which we always want to use
|
|
|
|
+ // one set of stubs for resolving function addresses.
|
|
|
|
if (target->stub_tables().size() != 0)
|
|
|
|
stub_table = target->stub_tables()[0];
|
|
|
|
}
|
2017-10-02 10:55:36 +02:00
|
|
|
diff --git a/ld/ChangeLog b/ld/ChangeLog
|
|
|
|
index 73e05b618e..ba67e20bf9 100644
|
|
|
|
--- a/ld/ChangeLog
|
|
|
|
+++ b/ld/ChangeLog
|
|
|
|
@@ -1,3 +1,11 @@
|
|
|
|
+2017-09-28 Alan Modra <amodra@gmail.com>
|
|
|
|
+
|
|
|
|
+ * testsuite/ld-plugin/pr22220.h,
|
|
|
|
+ * testsuite/ld-plugin/pr22220lib.cc,
|
|
|
|
+ * testsuite/ld-plugin/pr22220lib.ver,
|
|
|
|
+ * testsuite/ld-plugin/pr22220main.cc: New test.
|
|
|
|
+ * testsuite/ld-plugin/lto.exp: Run it.
|
|
|
|
+
|
|
|
|
2017-09-19 Nick Clifton <nickc@redhat.com>
|
|
|
|
|
|
|
|
2.29.1 Release
|
|
|
|
diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp
|
|
|
|
index f0bc345f2c..6b7ad536fb 100644
|
|
|
|
--- a/ld/testsuite/ld-plugin/lto.exp
|
|
|
|
+++ b/ld/testsuite/ld-plugin/lto.exp
|
|
|
|
@@ -295,6 +295,12 @@ set lto_link_elf_tests [list \
|
|
|
|
[list "Build pr21382.so" \
|
|
|
|
"-shared" "-O2 -fpic" \
|
|
|
|
{pr21382b.c} {} "pr21382.so" "c"] \
|
|
|
|
+ [list {Build pr22220lib.so} \
|
|
|
|
+ {-shared -Wl,--version-script=pr22220lib.ver} {-fPIC} \
|
|
|
|
+ {pr22220lib.cc} {} {pr22220lib.so} {c++}] \
|
|
|
|
+ [list {Build pr22220main.o} \
|
|
|
|
+ {} {-flto} \
|
|
|
|
+ {pr22220main.cc} {} {} {c++}] \
|
|
|
|
]
|
|
|
|
|
|
|
|
# Check final symbols in executables.
|
|
|
|
@@ -396,6 +402,12 @@ set lto_run_elf_shared_tests [list \
|
|
|
|
[list "Run pr21382" \
|
|
|
|
"-O2 -flto -fuse-linker-plugin -Wl,--as-needed tmpdir/pr21382a.o tmpdir/pr21382.so" "" \
|
|
|
|
{dummy.c} "pr21382.exe" "pass.out" "" "c"] \
|
|
|
|
+ [list {pr22220a} \
|
|
|
|
+ {-flto -fuse-linker-plugin tmpdir/pr22220main.o tmpdir/pr22220lib.so} {} \
|
|
|
|
+ {dummy.c} {pr22220a.exe} {pass.out} {} {c++}] \
|
|
|
|
+ [list {pr22220b} \
|
|
|
|
+ {-flto -fuse-linker-plugin -Wl,--no-as-needed tmpdir/pr22220lib.so tmpdir/pr22220main.o} {} \
|
|
|
|
+ {dummy.c} {pr22220b.exe} {pass.out} {} {c++}] \
|
|
|
|
]
|
|
|
|
|
|
|
|
# LTO run-time tests for ELF
|
|
|
|
diff --git a/ld/testsuite/ld-plugin/pr22220.h b/ld/testsuite/ld-plugin/pr22220.h
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000000..b15b45c08d
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/ld/testsuite/ld-plugin/pr22220.h
|
|
|
|
@@ -0,0 +1,8 @@
|
|
|
|
+extern int doo();
|
|
|
|
+
|
|
|
|
+inline int *goo() {
|
|
|
|
+ static int xyz;
|
|
|
|
+ return &xyz;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+int *boo();
|
|
|
|
diff --git a/ld/testsuite/ld-plugin/pr22220lib.cc b/ld/testsuite/ld-plugin/pr22220lib.cc
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000000..771f44f7f3
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/ld/testsuite/ld-plugin/pr22220lib.cc
|
|
|
|
@@ -0,0 +1,6 @@
|
|
|
|
+#include "pr22220.h"
|
|
|
|
+
|
|
|
|
+int* boo()
|
|
|
|
+{
|
|
|
|
+ return goo ();
|
|
|
|
+}
|
|
|
|
diff --git a/ld/testsuite/ld-plugin/pr22220lib.ver b/ld/testsuite/ld-plugin/pr22220lib.ver
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000000..6da7e1a2bd
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/ld/testsuite/ld-plugin/pr22220lib.ver
|
|
|
|
@@ -0,0 +1 @@
|
|
|
|
+BAR { global: *; };
|
|
|
|
diff --git a/ld/testsuite/ld-plugin/pr22220main.cc b/ld/testsuite/ld-plugin/pr22220main.cc
|
|
|
|
new file mode 100644
|
|
|
|
index 0000000000..38c206f7a2
|
|
|
|
--- /dev/null
|
|
|
|
+++ b/ld/testsuite/ld-plugin/pr22220main.cc
|
|
|
|
@@ -0,0 +1,12 @@
|
|
|
|
+#include <stdio.h>
|
|
|
|
+#include "pr22220.h"
|
|
|
|
+
|
|
|
|
+int main()
|
|
|
|
+{
|
|
|
|
+ if (boo() == goo())
|
|
|
|
+ {
|
|
|
|
+ printf ("PASS\n");
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ return 1;
|
|
|
|
+}
|