branch-updates
authorMatthias Klose <doko@debian.org>
Sat, 23 Sep 2017 12:00:50 +0000 (13:00 +0100)
committerMatthias Klose <doko@debian.org>
Sat, 23 Sep 2017 12:00:50 +0000 (13:00 +0100)
# DP: updates from the binutils-2.29 branch

# git diff d1a6e7195b9bb0255fa77588985b969ad8aaacf5 25aad9cca7232a36abeba318f21e8d19137ea15f

Gbp-Pq: Name branch-updates.diff

12 files changed:
bfd/ChangeLog
bfd/elf32-i386.c
bfd/elf64-x86-64.c
bfd/version.h
binutils/ChangeLog
binutils/readelf.c
gas/ChangeLog
gas/testsuite/gas/mips/elf_mach_5900.d [new file with mode: 0644]
gas/testsuite/gas/mips/mips.exp
gold/ChangeLog
gold/options.h
gold/powerpc.cc

index 417ed273ab8e72a5879920502b85a9358b5e508a..7091d7543ff0b819a8072b678f410680baae3b58 100644 (file)
@@ -1,3 +1,25 @@
+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
index 5c1c3ff7907e7ae79deacdbef76dd2540377538d..ba50c93f33e451638354eefb81f8f038bdcc6fd6 100644 (file)
@@ -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;
          }
index 80dd791d25ca9f9e8d86cbdfc6ef62021b843f23..d9225addddcfb258bb99b82a3a08c18e8b9624b2 100644 (file)
@@ -6717,7 +6717,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 +6970,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;
          }
index 3405e424f40811f79744f86af16480ccac1d94bc..11151288b8339416f84e6fd7087ce93a5c0ac721 100644 (file)
@@ -1,4 +1,4 @@
-#define BFD_VERSION_DATE 20170919
+#define BFD_VERSION_DATE 20170923
 #define BFD_VERSION @bfd_version@
 #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
 #define REPORT_BUGS_TO @report_bugs_to@
index 84d3d7c1c4fb8bf436bd31f17e7264d135cb0fcd..ffb34fbb78e3ee8408d0571f815b833857d16ab3 100644 (file)
@@ -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
index fb16df8e2a9bf609f52f8a0f1cc73f51dacbb51e..41f128ed2343146cfaa2fd33662ead57f15c5dd0 100644 (file)
@@ -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;
index 42a676f59827ee1c6ec53dc1b5e2b33aaca2714f..9aa3dbca3abd7b1668b77d34291ebfccc17f5feb 100644 (file)
@@ -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 (file)
index 0000000..1df668e
--- /dev/null
@@ -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: .*
index c71dca4351d75b7abd746d3a252dd955fbd0836c..25221ae2af2096c1b2898995418b71ccde597130 100644 (file)
@@ -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"
index 6071f8977a88c640b3e9c474b3cfa705a20f9e72..0fc54ddf71e92fdd5a770c1ef0e4e40a9e3f8e71 100644 (file)
@@ -1,3 +1,14 @@
+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
index 576b2a3c536ea17d7594d1253cfd07bb01b1cd99..4a802cf41fef376bcd7a047bd93f274a85ce1ca6 100644 (file)
@@ -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"));
index 629da4f8a12c905b4212211b3cac31d0c51a8088..ba20ef1ad725ed2a7ed820abeaa1464bf0a60dff 100644 (file)
@@ -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];
            }