x86: Call rtype_to_howto to get reloc_howto_type pointer
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 20 Dec 2018 21:25:41 +0000 (13:25 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 20 Dec 2018 21:25:41 +0000 (13:25 -0800)
* elf32-i386.c (elf_i386_relocate_section): Call
elf_i386_rtype_to_howto to get reloc_howto_type pointer.
* elf64-x86-64.c (elf_x86_64_relocate_section): Call
elf_x86_64_rtype_to_howto to get reloc_howto_type pointer.

bfd/ChangeLog
bfd/elf32-i386.c
bfd/elf64-x86-64.c

index 348559306fb8a089f6864f29ab134238ac326039..70d1abf1428c13d5e8862f3c4b7e3f1e1c618907 100644 (file)
@@ -1,3 +1,10 @@
+2018-12-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf32-i386.c (elf_i386_relocate_section): Call
+       elf_i386_rtype_to_howto to get reloc_howto_type pointer.
+       * elf64-x86-64.c (elf_x86_64_relocate_section): Call
+       elf_x86_64_rtype_to_howto to get reloc_howto_type pointer.
+
 2018-12-18  Alan Modra  <amodra@gmail.com>
 
        * Makefile.am (bfdinclude_HEADERS): Add bfd_stdint.h.
index 7fe6afb8cfc5a8c8d1bd67f71aef2a008a9318fd..f470b824d35bd49c2a509b4b8932561c66611a83 100644 (file)
@@ -2080,15 +2080,10 @@ elf_i386_relocate_section (bfd *output_bfd,
          continue;
        }
 
-      if ((indx = r_type) >= R_386_standard
-         && ((indx = r_type - R_386_ext_offset) - R_386_standard
-             >= R_386_ext - R_386_standard)
-         && ((indx = r_type - R_386_tls_offset) - R_386_ext
-             >= R_386_ext2 - R_386_ext))
+      howto = elf_i386_rtype_to_howto (input_bfd, r_type);
+      if (howto == NULL)
        return _bfd_unrecognized_reloc (input_bfd, input_section, r_type);
 
-      howto = elf_howto_table + indx;
-
       r_symndx = ELF32_R_SYM (rel->r_info);
       h = NULL;
       sym = NULL;
index 8e886b00c4853978892cc26354002b022afa8097..204067cb7336bb217a4c1ee75f40e35c4f1134c7 100644 (file)
@@ -2443,15 +2443,10 @@ elf_x86_64_relocate_section (bfd *output_bfd,
          rel->r_info = htab->r_info (r_symndx, r_type);
        }
 
-      if (r_type >= (int) R_X86_64_standard)
+      howto = elf_x86_64_rtype_to_howto (input_bfd, r_type);
+      if (howto == NULL)
        return _bfd_unrecognized_reloc (input_bfd, input_section, r_type);
 
-      if (r_type != (int) R_X86_64_32
-         || ABI_64_P (output_bfd))
-       howto = x86_64_elf_howto_table + r_type;
-      else
-       howto = (x86_64_elf_howto_table
-                + ARRAY_SIZE (x86_64_elf_howto_table) - 1);
       h = NULL;
       sym = NULL;
       sec = NULL;