PPC gold doesn't check for overflow properly
authorAlan Modra <amodra@gmail.com>
Thu, 20 Nov 2014 21:45:04 +0000 (08:15 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 20 Nov 2014 21:48:41 +0000 (08:18 +1030)
* powerpc.cc (Target_powerpc::Relocate::relocate): Correct test
for undefined weaks.

gold/ChangeLog
gold/powerpc.cc

index 9bb57c0..ff5d5af 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-21  Alan Modra  <amodra@gmail.com>
+
+       * powerpc.cc (Target_powerpc::Relocate::relocate): Correct test
+       for undefined weaks.
+
 2014-11-20  Alan Modra  <amodra@gmail.com>
 
        * powerpc.cc (Stub_control::Stub_control): Init stub14_group_size_
index 0442e56..4c90e38 100644 (file)
@@ -7672,10 +7672,10 @@ Target_powerpc<size, big_endian>::Relocate::relocate(
       break;
     }
   if (status != Powerpc_relocate_functions<size, big_endian>::STATUS_OK
-      && !has_stub_value
-      && !(gsym != NULL
-          && gsym->is_weak_undefined()
-          && is_branch_reloc(r_type)))
+      && (has_stub_value
+         || !(gsym != NULL
+              && gsym->is_weak_undefined()
+              && is_branch_reloc(r_type))))
     {
       gold_error_at_location(relinfo, relnum, rela.get_r_offset(),
                             _("relocation overflow"));