]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[GOLD] Correct powerpc64 ifunc plt entry test
authorAlan Modra <amodra@gmail.com>
Thu, 22 Jan 2015 02:09:50 +0000 (12:39 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 11 Feb 2015 12:36:43 +0000 (23:06 +1030)
Found when attempting to build an ELFv2 Linux kernel.  We don't
generally need a plt entry for ELFv2 got relocs, only on ifunc, just
like ppc32.

* powerpc.cc (Target_powerpc::Scan::local <got relocs>): Correct
condition for need of ifunc plt entry.
(Target_powerpc::Scan::global <got relocs>): Likewise.

gold/ChangeLog
gold/powerpc.cc

index 5acec31ffa5468b92281866429e93967b404d61c..b7b2d9a78e66f8a0e35b29b87bf05054f84e6e44 100644 (file)
@@ -1,6 +1,11 @@
 2015-02-11  Alan Modra  <amodra@gmail.com>
 
        Apply from master
+       2015-01-22  Alan Modra  <amodra@gmail.com>
+       * powerpc.cc (Target_powerpc::Scan::local <got relocs>): Correct
+       condition for need of ifunc plt entry.
+       (Target_powerpc::Scan::global <got relocs>): Likewise.
+
        2014-12-22  Cary Coutant  <ccoutant@google.com>
        * powerpc.cc (Target_powerpc::relocate): Fix overflow check.
 
index d093c9df8984c9914afe684f4bfce89935dd6624..707acda8b671ce7e01d682d3a9112f5417449871 100644 (file)
@@ -5584,8 +5584,8 @@ Target_powerpc<size, big_endian>::Scan::local(
 
        if (!parameters->options().output_is_position_independent())
          {
-           if ((size == 32 && is_ifunc)
-               || (size == 64 && target->abiversion() >= 2))
+           if (is_ifunc
+               && (size == 32 || target->abiversion() >= 2))
              got->add_local_plt(object, r_sym, GOT_TYPE_STANDARD);
            else
              got->add_local(object, r_sym, GOT_TYPE_STANDARD);
@@ -6032,8 +6032,8 @@ Target_powerpc<size, big_endian>::Scan::global(
        got = target->got_section(symtab, layout);
        if (gsym->final_value_is_known())
          {
-           if ((size == 32 && is_ifunc)
-               || (size == 64 && target->abiversion() >= 2))
+           if (is_ifunc
+               && (size == 32 || target->abiversion() >= 2))
              got->add_global_plt(gsym, GOT_TYPE_STANDARD);
            else
              got->add_global(gsym, GOT_TYPE_STANDARD);