This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Reloc error reporting on elf64-ppc
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: binutils at sources dot redhat dot com
- Date: Fri, 17 May 2002 22:54:57 +0930
- Subject: 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