x86: Add COPY_INPUT_RELOC_P
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 6 Oct 2017 07:43:31 +0000 (00:43 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 6 Oct 2017 07:44:38 +0000 (00:44 -0700)
Add COPY_INPUT_RELOC_P which returns TRUE if input relocation should
be copied to output.

* elfxx-x86.h (COPY_INPUT_RELOC_P): New.
* elf32-i386.c (elf_i386_relocate_section): Use it.
* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.

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

index 0f066026d416fd21a870f8894cf50aa5e32d5f83..6f2f9a268bed8ab1a1ef54cdbe426ea162aac2f9 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elfxx-x86.h (COPY_INPUT_RELOC_P): New.
+       * elf32-i386.c (elf_i386_relocate_section): Use it.
+       * elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+
 2017-10-06  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf32-i386.c (X86_SIZE_TYPE_P): New.
index 0c63d267448e94abc6040cdd8b1e9b1629757502..4adb70a0c5c153ef176a6e87541666a223d1c9d2 100644 (file)
@@ -2778,12 +2778,7 @@ disallow_got32:
 
              if (skip)
                memset (&outrel, 0, sizeof outrel);
-             else if (h != NULL
-                      && h->dynindx != -1
-                      && (r_type == R_386_PC32
-                          || !(bfd_link_executable (info)
-                               || SYMBOLIC_BIND (info, h))
-                          || !h->def_regular))
+             else if (COPY_INPUT_RELOC_P (info, h, r_type))
                outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
              else
                {
index b27d4c5761fc7fd0ae52fd844458bba3ae57ea1b..fcc7f5574ea7f28ce69032574a832611562d43b3 100644 (file)
@@ -3126,14 +3126,7 @@ direct:
              if (skip)
                memset (&outrel, 0, sizeof outrel);
 
-             /* h->dynindx may be -1 if this symbol was marked to
-                become local.  */
-             else if (h != NULL
-                      && h->dynindx != -1
-                      && (X86_PCREL_TYPE_P (r_type)
-                          || !(bfd_link_executable (info)
-                               || SYMBOLIC_BIND (info, h))
-                          || ! h->def_regular))
+             else if (COPY_INPUT_RELOC_P (info, h, r_type))
                {
                  outrel.r_info = htab->r_info (h->dynindx, r_type);
                  outrel.r_addend = rel->r_addend;
index cef2eba30e3dd2ee69292dd0c5f8c249f39b4483..be438c08a38951baff624939c2f46b171b676d3b 100644 (file)
               && (((EH)->elf.def_dynamic && !(EH)->elf.def_regular) \
                   || (EH)->elf.root.type == bfd_link_hash_undefined)))
 
+/* TRUE if this input relocation should be copied to output.  H->dynindx
+   may be -1 if this symbol was marked to become local.  */
+#define COPY_INPUT_RELOC_P(INFO, H, R_TYPE) \
+  ((H) != NULL \
+   && (H)->dynindx != -1 \
+   && (X86_PCREL_TYPE_P (R_TYPE) \
+       || !(bfd_link_executable (INFO) || SYMBOLIC_BIND ((INFO), (H))) \
+       || !(H)->def_regular))
+
 /* TRUE if this is actually a static link, or it is a -Bsymbolic link
    and the symbol is defined locally, or the symbol was forced to be
    local because of a version file.  */