From 0e8082fef66c9c3935bf90f1ae8c3c3107ade67a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 13 Jul 2001 07:25:18 +0000 Subject: [PATCH] * emultempl/elf32.em (output_prev_sec_find): New. (place_orphan): Use it. --- ld/ChangeLog | 5 +++++ ld/emultempl/elf32.em | 45 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index 13bde3069b..d86e38351b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2001-07-13 Jakub Jelinek + + * emultempl/elf32.em (output_prev_sec_find): New. + (place_orphan): Use it. + 2001-07-11 H.J. Lu * ldmain.c (main): Fix typos in the last change. diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index a3e08c1198..67e0d250b2 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -1006,6 +1006,35 @@ EOF if test x"$LDEMUL_PLACE_ORPHAN" != xgld"$EMULATION_NAME"_place_orphan; then cat >>e${EMULATION_NAME}.c <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 } -- 2.11.0