2005-05-28 David Daney <ddaney@avtrex.com>
* elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Move calculation of DT_RELSZ to occur after all dynamic relocations are created.
This commit is contained in:
parent
01e94249b6
commit
3133ddbf1d
2 changed files with 55 additions and 12 deletions
|
@ -1,3 +1,9 @@
|
|||
2005-05-28 David Daney <ddaney@avtrex.com>
|
||||
|
||||
* elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Move
|
||||
calculation of DT_RELSZ to occur after all dynamic relocations
|
||||
are created.
|
||||
|
||||
2005-05-28 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* configure.in: Add snprintf and vsnprintf to AC_CHECK_DECLS.
|
||||
|
|
|
@ -7696,18 +7696,6 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
|
|||
dyn.d_un.d_ptr = s->vma;
|
||||
break;
|
||||
|
||||
case DT_RELSZ:
|
||||
/* Reduce DT_RELSZ to account for any relocations we
|
||||
decided not to make. This is for the n64 irix rld,
|
||||
which doesn't seem to apply any relocations if there
|
||||
are trailing null entries. */
|
||||
s = mips_elf_rel_dyn_section (dynobj, FALSE);
|
||||
dyn.d_un.d_val = (s->reloc_count
|
||||
* (ABI_64_P (output_bfd)
|
||||
? sizeof (Elf64_Mips_External_Rel)
|
||||
: sizeof (Elf32_External_Rel)));
|
||||
break;
|
||||
|
||||
default:
|
||||
swap_out_p = FALSE;
|
||||
break;
|
||||
|
@ -7769,6 +7757,55 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
|
|||
}
|
||||
}
|
||||
|
||||
/* The generation of dynamic relocations for the non-primary gots
|
||||
adds more dynamic relocations. We cannot count them until
|
||||
here. */
|
||||
|
||||
if (elf_hash_table (info)->dynamic_sections_created)
|
||||
{
|
||||
bfd_byte *b;
|
||||
bfd_boolean swap_out_p;
|
||||
|
||||
BFD_ASSERT (sdyn != NULL);
|
||||
|
||||
for (b = sdyn->contents;
|
||||
b < sdyn->contents + sdyn->size;
|
||||
b += MIPS_ELF_DYN_SIZE (dynobj))
|
||||
{
|
||||
Elf_Internal_Dyn dyn;
|
||||
asection *s;
|
||||
|
||||
/* Read in the current dynamic entry. */
|
||||
(*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
|
||||
|
||||
/* Assume that we're going to modify it and write it out. */
|
||||
swap_out_p = TRUE;
|
||||
|
||||
switch (dyn.d_tag)
|
||||
{
|
||||
case DT_RELSZ:
|
||||
/* Reduce DT_RELSZ to account for any relocations we
|
||||
decided not to make. This is for the n64 irix rld,
|
||||
which doesn't seem to apply any relocations if there
|
||||
are trailing null entries. */
|
||||
s = mips_elf_rel_dyn_section (dynobj, FALSE);
|
||||
dyn.d_un.d_val = (s->reloc_count
|
||||
* (ABI_64_P (output_bfd)
|
||||
? sizeof (Elf64_Mips_External_Rel)
|
||||
: sizeof (Elf32_External_Rel)));
|
||||
break;
|
||||
|
||||
default:
|
||||
swap_out_p = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (swap_out_p)
|
||||
(*get_elf_backend_data (dynobj)->s->swap_dyn_out)
|
||||
(dynobj, &dyn, b);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
asection *s;
|
||||
Elf32_compact_rel cpt;
|
||||
|
|
Loading…
Reference in a new issue