* emultempl/elf32.em (output_prev_sec_find): New.
(place_orphan): Use it.
This commit is contained in:
parent
6ef7fa21cf
commit
95500e1ca4
2 changed files with 44 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
|||
2001-07-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* emultempl/elf32.em (output_prev_sec_find): New.
|
||||
(place_orphan): Use it.
|
||||
|
||||
2001-07-11 H.J. Lu <hjl@gnu.org>
|
||||
|
||||
* ldmain.c (main): Fix typos in the last change.
|
||||
|
|
|
@ -1006,6 +1006,35 @@ EOF
|
|||
if test x"$LDEMUL_PLACE_ORPHAN" != xgld"$EMULATION_NAME"_place_orphan; then
|
||||
cat >>e${EMULATION_NAME}.c <<EOF
|
||||
|
||||
/* Find the last output section before given output statement.
|
||||
Used by place_orphan. */
|
||||
|
||||
static asection *
|
||||
output_prev_sec_find (os)
|
||||
lang_output_section_statement_type *os;
|
||||
{
|
||||
asection *s = (asection *) NULL;
|
||||
lang_statement_union_type *u;
|
||||
lang_output_section_statement_type *lookup;
|
||||
|
||||
for (u = lang_output_section_statement.head;
|
||||
u != (lang_statement_union_type *) NULL;
|
||||
u = lookup->next)
|
||||
{
|
||||
lookup = &u->output_section_statement;
|
||||
if (lookup == os)
|
||||
break;
|
||||
if (lookup->bfd_section != NULL)
|
||||
s = lookup->bfd_section;
|
||||
}
|
||||
|
||||
if (u == NULL)
|
||||
return NULL;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
/* Place an orphan section. We use this to put random SHF_ALLOC
|
||||
sections in the right segment. */
|
||||
|
||||
|
@ -1192,12 +1221,16 @@ gld${EMULATION_NAME}_place_orphan (file, s)
|
|||
|
||||
if (place != NULL)
|
||||
{
|
||||
asection *snew, **pps;
|
||||
asection *snew, **pps, *bfd_section;
|
||||
|
||||
snew = os->bfd_section;
|
||||
bfd_section = place->os->bfd_section;
|
||||
if (place->section == NULL && bfd_section == NULL)
|
||||
bfd_section = output_prev_sec_find (place->os);
|
||||
|
||||
if (place->section != NULL
|
||||
|| (place->os->bfd_section != NULL
|
||||
&& place->os->bfd_section != snew))
|
||||
|| (bfd_section != NULL
|
||||
&& bfd_section != snew))
|
||||
{
|
||||
/* Shuffle the section to make the output file look neater.
|
||||
This is really only cosmetic. */
|
||||
|
@ -1206,15 +1239,15 @@ gld${EMULATION_NAME}_place_orphan (file, s)
|
|||
#if 0
|
||||
/* Finding the end of the list is a little tricky. We
|
||||
make a wild stab at it by comparing section flags. */
|
||||
flagword first_flags = place->os->bfd_section->flags;
|
||||
for (pps = &place->os->bfd_section->next;
|
||||
flagword first_flags = bfd_section->flags;
|
||||
for (pps = &bfd_section->next;
|
||||
*pps != NULL && (*pps)->flags == first_flags;
|
||||
pps = &(*pps)->next)
|
||||
;
|
||||
place->section = pps;
|
||||
#else
|
||||
/* Put orphans after the first section on the list. */
|
||||
place->section = &place->os->bfd_section->next;
|
||||
place->section = &bfd_section->next;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue