* elf64-ppc.c (ppc64_elf_info_to_howto): Formatting.
authorAlan Modra <amodra@gmail.com>
Fri, 17 May 2002 13:25:04 +0000 (13:25 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 17 May 2002 13:25:04 +0000 (13:25 +0000)
(ppc64_elf_relocate_section): Don't warn about reloc overflow when
we've already warned about an undefined symbol.  Report more
detail on reloc errors.

bfd/ChangeLog
bfd/elf64-ppc.c

index 33998d657031ede80dcfb0997f13fa444285cece..4f10647b9e3862ef4498a8d02f8b355eed622212 100644 (file)
@@ -1,3 +1,10 @@
+2002-05-17  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf64-ppc.c (ppc64_elf_info_to_howto): Formatting.
+       (ppc64_elf_relocate_section): Don't warn about reloc overflow when
+       we've already warned about an undefined symbol.  Report more
+       detail on reloc errors.
+
 2002-05-17  Alan Modra  <amodra@bigpond.net.au>
 
        * acinclude.m4 (AM_INSTALL_LIBBFD): New.
index 5ae3aefd7670c02e2ccebc90cf6983f3144e8d46..cd6fe7b0b25a4a73af8d8e7d5a77c28e13cc3495 100644 (file)
@@ -1359,8 +1359,8 @@ ppc64_elf_info_to_howto (abfd, cache_ptr, dst)
 {
   unsigned int type;
 
+  /* Initialize howto table if needed.  */
   if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
-    /* Initialize howto table if needed.  */
     ppc_howto_init ();
 
   type = ELF64_R_TYPE (dst->r_info);
@@ -5075,6 +5075,7 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
       unsigned long r_symndx;
       bfd_vma relocation;
       boolean unresolved_reloc;
+      boolean warned;
       long insn;
       struct ppc_stub_hash_entry *stub_entry;
       bfd_vma max_br_offset;
@@ -5090,6 +5091,7 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
       h = (struct elf_link_hash_entry *) 0;
       sym_name = (const char *) 0;
       unresolved_reloc = false;
+      warned = false;
 
       if (r_type == R_PPC64_TOC)
        {
@@ -5146,6 +5148,7 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                               || info->no_undefined
                               || ELF_ST_VISIBILITY (h->other)))))
                return false;
+             warned = true;
            }
        }
 
@@ -5714,9 +5717,7 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                                    relocation,
                                    addend);
 
-      if (r == bfd_reloc_ok)
-       ;
-      else if (r == bfd_reloc_overflow)
+      if (r != bfd_reloc_ok)
        {
          const char *name;
 
@@ -5747,13 +5748,25 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                name = bfd_section_name (input_bfd, sec);
            }
 
-         if (! ((*info->callbacks->reloc_overflow)
-                (info, name, ppc64_elf_howto_table[(int) r_type]->name,
-                 (bfd_vma) 0, input_bfd, input_section, offset)))
-           return false;
+         if (r == bfd_reloc_overflow)
+           {
+             if (warned)
+               continue;
+             if (!((*info->callbacks->reloc_overflow)
+                   (info, name, ppc64_elf_howto_table[(int) r_type]->name,
+                    rel->r_addend, input_bfd, input_section, offset)))
+               return false;
+           }
+         else
+           {
+             (*_bfd_error_handler)
+               (_("%s(%s+0x%lx): reloc against `%s': error %d"),
+                bfd_archive_filename (input_bfd),
+                bfd_get_section_name (input_bfd, input_section),
+                (long) rel->r_offset, name, (int) r);
+             ret = false;
+           }
        }
-      else
-       ret = false;
     }
 
   return ret;