x86: Properly check building shared library
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 13 Feb 2018 22:31:53 +0000 (14:31 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 13 Feb 2018 22:32:06 +0000 (14:32 -0800)
If a symbol is not defined in a regular file, and we are not generating
a shared library, then set the symbol to its location in the .plt.  This
is required to make function pointers compare as equal between the normal
executable and the shared library.

* elfxx-x86.c (elf_x86_allocate_dynrelocs): Check bfd_link_dll,
instead of bfd_link_pic, for building shared library.

bfd/ChangeLog
bfd/elfxx-x86.c

index 726225a..77cdfe8 100644 (file)
@@ -1,5 +1,10 @@
 2018-02-13  H.J. Lu  <hongjiu.lu@intel.com>
 
+       * elfxx-x86.c (elf_x86_allocate_dynrelocs): Check bfd_link_dll,
+       instead of bfd_link_pic, for building shared library.
+
+2018-02-13  H.J. Lu  <hongjiu.lu@intel.com>
+
        PR gas/22791
        * elf64-x86-64.c (is_32bit_relative_branch): Removed.
        (elf_x86_64_relocate_section): Check PIC relocations in PIE.
index fc08d1b..bd36707 100644 (file)
@@ -200,7 +200,7 @@ elf_x86_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
             location in the .plt.  This is required to make function
             pointers compare as equal between the normal executable and
             the shared library.  */
-         if (! bfd_link_pic (info)
+         if (! bfd_link_dll (info)
              && !h->def_regular)
            {
              if (use_plt_got)