* elf64-mmix.c (_bfd_mmix_finalize_linker_allocated_gregs): Check
that base-plus-offset reloc accounting is consistent. (mmix_elf_relax_section): Keep base-plus-offset reloc accounting up to date for undefined symbols.
This commit is contained in:
parent
c99012716a
commit
7e79904489
@ -1,3 +1,10 @@
|
||||
2002-02-09 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* elf64-mmix.c (_bfd_mmix_finalize_linker_allocated_gregs): Check
|
||||
that base-plus-offset reloc accounting is consistent.
|
||||
(mmix_elf_relax_section): Keep base-plus-offset reloc accounting
|
||||
up to date for undefined symbols.
|
||||
|
||||
2002-02-08 Eric Christopher <echristo@redhat.com>
|
||||
|
||||
From Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
|
||||
|
@ -2177,6 +2177,21 @@ _bfd_mmix_finalize_linker_allocated_gregs (abfd, link_info)
|
||||
if (contents == NULL)
|
||||
return false;
|
||||
|
||||
/* Sanity check: If these numbers mismatch, some relocation has not been
|
||||
accounted for and the rest of gregdata is probably inconsistent.
|
||||
It's a bug, but it's more helpful to identify it than segfaulting
|
||||
below. */
|
||||
if (gregdata->n_remaining_bpo_relocs_this_relaxation_round
|
||||
!= gregdata->n_bpo_relocs)
|
||||
{
|
||||
(*_bfd_error_handler)
|
||||
(_("Internal inconsistency: remaining %u != max %u.\n\
|
||||
Please report this bug."),
|
||||
gregdata->n_remaining_bpo_relocs_this_relaxation_round,
|
||||
gregdata->n_bpo_relocs);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (lastreg = 255, i = 0, j = 0; j < n_gregs; i++)
|
||||
if (gregdata->reloc_request[i].regindex != lastreg)
|
||||
{
|
||||
@ -2287,7 +2302,6 @@ mmix_elf_relax_section (abfd, sec, link_info, again)
|
||||
struct bfd_link_info *link_info;
|
||||
boolean *again;
|
||||
{
|
||||
|
||||
Elf_Internal_Shdr *symtab_hdr;
|
||||
Elf_Internal_Shdr *shndx_hdr;
|
||||
Elf_Internal_Rela *internal_relocs;
|
||||
@ -2431,9 +2445,12 @@ mmix_elf_relax_section (abfd, sec, link_info, again)
|
||||
if (h->root.type != bfd_link_hash_defined
|
||||
&& h->root.type != bfd_link_hash_defweak)
|
||||
{
|
||||
/* This appears to be a reference to an undefined
|
||||
symbol. Just ignore it--it will be caught by the
|
||||
regular reloc processing. */
|
||||
/* This appears to be a reference to an undefined symbol.
|
||||
Just ignore it--it will be caught by the regular reloc
|
||||
processing. We need to keep BPO reloc accounting
|
||||
consistent, though. */
|
||||
gregdata->n_remaining_bpo_relocs_this_relaxation_round--;
|
||||
bpono++;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user