diff options
author | Alan Modra <amodra@gmail.com> | 2008-10-04 06:08:59 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2008-10-04 06:08:59 +0000 |
commit | 8a99a385a72553a657a1238d310f94bafad182be (patch) | |
tree | 900f06409b15b8c0b6a3fb6b6c1551c883b7e37f /ld/emultempl/pep.em | |
parent | 2605c5df34a43fcbd60dcb4d974938022baae1ce (diff) | |
download | gdb-8a99a385a72553a657a1238d310f94bafad182be.zip gdb-8a99a385a72553a657a1238d310f94bafad182be.tar.gz gdb-8a99a385a72553a657a1238d310f94bafad182be.tar.bz2 |
* ldemul.c (ldemul_place_orphan): Add "constraint" param.
* ldemul.h (ldemul_place_orphan): Update prototype.
(struct ld_emulation_xfer_struct <place_orphan>): Likewise add param.
* ldlang.c (unique_section_p): Make static.
(lang_output_section_statement_lookup): Optimise creation of SPECIAL
sections.
(lang_insert_orphan): Add "constraint" param. Pass to
lang_enter_output_section_statement.
(init_os): Don't use an existing bfd section for SPECIAL sections.
(lang_place_orphans): Don't rename unique output sections, instead
mark their output section statements SPECIAL.
* ldlang.h (lang_insert_orphan): Update prototype.
(unique_section_p): Delete.
* emultempl/beos.em (place_orphan): Add "constraint" param.
* emultempl/elf32.em (place_orphan): Likewise. Don't match existing
output sections if set.
* emultempl/pe.em (place_orphan): Likewise.
* emultempl/pep.em (place_orphan): Likewise.
* emultempl/mmo.em (mmo_place_orphan): Update.
* emultempl/spuelf.em (spu_place_special_section): Update.
Diffstat (limited to 'ld/emultempl/pep.em')
-rw-r--r-- | ld/emultempl/pep.em | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em index 4afac02..386c98f 100644 --- a/ld/emultempl/pep.em +++ b/ld/emultempl/pep.em @@ -1372,7 +1372,9 @@ gld_${EMULATION_NAME}_finish (void) sort_sections. */ static bfd_boolean -gld_${EMULATION_NAME}_place_orphan (asection *s, const char *secname) +gld_${EMULATION_NAME}_place_orphan (asection *s, + const char *secname, + int constraint) { const char *orig_secname = secname; char *dollar = NULL; @@ -1390,11 +1392,10 @@ gld_${EMULATION_NAME}_place_orphan (asection *s, const char *secname) secname = newname; } - os = lang_output_section_find (secname); - lang_list_init (&add_child); - if (os != NULL + if (constraint == 0 + && (os = lang_output_section_find (secname)) != NULL && os->bfd_section != NULL && (os->bfd_section->flags == 0 || ((s->flags ^ os->bfd_section->flags) @@ -1480,7 +1481,8 @@ gld_${EMULATION_NAME}_place_orphan (asection *s, const char *secname) /* All sections in an executable must be aligned to a page boundary. */ address = exp_unop (ALIGN_K, exp_nameop (NAME, "__section_alignment__")); - os = lang_insert_orphan (s, secname, after, place, address, &add_child); + os = lang_insert_orphan (s, secname, constraint, after, place, address, + &add_child); } { |