* emultempl/elf-generic.em (map_segments): Reorganise loop so that
layout happens before segment map. Don't do segment map on relocatable link.
This commit is contained in:
parent
a7f651f7f2
commit
00bb149b28
|
@ -1,3 +1,9 @@
|
||||||
|
2006-07-26 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* emultempl/elf-generic.em (map_segments): Reorganise loop so that
|
||||||
|
layout happens before segment map. Don't do segment map on
|
||||||
|
relocatable link.
|
||||||
|
|
||||||
2006-07-26 Alan Modra <amodra@bigpond.net.au>
|
2006-07-26 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* ldexp.c (fold_name <LOADADDR>): Use the lma.
|
* ldexp.c (fold_name <LOADADDR>): Use the lma.
|
||||||
|
|
|
@ -28,9 +28,26 @@ gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout)
|
||||||
{
|
{
|
||||||
int tries = 10;
|
int tries = 10;
|
||||||
|
|
||||||
while (tries)
|
do
|
||||||
{
|
{
|
||||||
if (output_bfd->xvec->flavour == bfd_target_elf_flavour)
|
if (need_layout)
|
||||||
|
{
|
||||||
|
lang_reset_memory_regions ();
|
||||||
|
|
||||||
|
/* Resize the sections. */
|
||||||
|
lang_size_sections (NULL, TRUE);
|
||||||
|
|
||||||
|
/* Redo special stuff. */
|
||||||
|
ldemul_after_allocation ();
|
||||||
|
|
||||||
|
/* Do the assignments again. */
|
||||||
|
lang_do_assignments ();
|
||||||
|
|
||||||
|
need_layout = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output_bfd->xvec->flavour == bfd_target_elf_flavour
|
||||||
|
&& !link_info.relocatable)
|
||||||
{
|
{
|
||||||
bfd_size_type phdr_size;
|
bfd_size_type phdr_size;
|
||||||
|
|
||||||
|
@ -45,24 +62,8 @@ gld${EMULATION_NAME}_map_segments (bfd_boolean need_layout)
|
||||||
if (phdr_size != elf_tdata (output_bfd)->program_header_size)
|
if (phdr_size != elf_tdata (output_bfd)->program_header_size)
|
||||||
need_layout = TRUE;
|
need_layout = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!need_layout)
|
|
||||||
break;
|
|
||||||
|
|
||||||
lang_reset_memory_regions ();
|
|
||||||
|
|
||||||
/* Resize the sections. */
|
|
||||||
lang_size_sections (NULL, TRUE);
|
|
||||||
|
|
||||||
/* Redo special stuff. */
|
|
||||||
ldemul_after_allocation ();
|
|
||||||
|
|
||||||
/* Do the assignments again. */
|
|
||||||
lang_do_assignments ();
|
|
||||||
|
|
||||||
need_layout = FALSE;
|
|
||||||
--tries;
|
|
||||||
}
|
}
|
||||||
|
while (need_layout && --tries);
|
||||||
|
|
||||||
if (tries == 0)
|
if (tries == 0)
|
||||||
einfo (_("%P%F: looping in map_segments"));
|
einfo (_("%P%F: looping in map_segments"));
|
||||||
|
|
Loading…
Reference in New Issue