This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Reloc error reporting on elf64-ppc


It seems silly to report follow-on errors after reporting an
undefined sym error, so this patch fixes that.  Also, we weren't
reporting the reloc addend on reloc overflow.

	* 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.

Index: bfd/elf64-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf64-ppc.c,v
retrieving revision 1.39
diff -u -p -r1.39 elf64-ppc.c
--- bfd/elf64-ppc.c	9 May 2002 11:40:16 -0000	1.39
+++ bfd/elf64-ppc.c	17 May 2002 13:14:19 -0000
@@ -1359,8 +1359,8 @@ ppc64_elf_info_to_howto (abfd, cache_ptr
 {
   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, 
       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, 
       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->no_undefined
 			       || ELF_ST_VISIBILITY (h->other)))))
 		return false;
+	      warned = true;
 	    }
 	}
 
@@ -5714,9 +5717,7 @@ ppc64_elf_relocate_section (output_bfd, 
 				    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, 
 		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;

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]