Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Alexander_Naumov:SLE-12:Update
cross-ppc64-binutils.5836
binutils-2.29-branch.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File binutils-2.29-branch.diff of Package cross-ppc64-binutils.5836
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 417ed273ab..8f8117dcb4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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-26 H.J. Lu <hongjiu.lu@intel.com> + + PR ld/22199 + * elf64-x86-64.c (elf_x86_64_finish_dynamic_symbol): Don't pass + output_bfd to info->callbacks->minfo. + +2017-09-22 H.J. Lu <hongjiu.lu@intel.com> + + 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-09-22 H.J. Lu <hongjiu.lu@intel.com> + + 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-09-21 Nick Clifton <nickc@redhat.com> + + * development.sh (development): Revert previous delta. + +2017-09-20 Nick Clifton <nickc@redhat.com> + + * development.sh (development): Set to false. + 2017-09-19 Nick Clifton <nickc@redhat.com> 2.29.1 Release diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 5c1c3ff790..ba50c93f33 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -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; } 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. */ 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> + + * readelf.c (get_machine_flags) <E_MIPS_MACH_5900>: New case. + 2017-09-15 Nick Clifton <nickc@redhat.com> 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> + + * testsuite/gas/mips/elf_mach_5900.d: New test. + * testsuite/gas/mips/mips.exp: Run it. + 2017-09-15 Nick Clifton <nickc@redhat.com> 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.* +#... + +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 index 6071f8977a..32c0e21f54 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -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-08-03 James Clarke <jrtc27@jrtc27.com> + + * options.h (General_options): Set a non-NULL second help string + argument for relax to allow --no-relax. + +2017-09-20 Alan Modra <amodra@gmail.com> + + * 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-09-19 Alan Modra <amodra@gmail.com> * 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); 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")); 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 index 629da4f8a1..22590c1e43 100644 --- a/gold/powerpc.cc +++ b/gold/powerpc.cc @@ -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 @@ -3065,11 +3065,17 @@ Target_powerpc<size, big_endian>::Branch_info::make_stub( target->glink_section()->add_global_entry(gsym); else { - 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) { - // 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; } gold_assert(stub_table != NULL); @@ -8052,11 +8058,20 @@ Target_powerpc<size, big_endian>::Relocate::relocate( } else { - 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]; } 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; +}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor