aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2004-04-30 14:26:09 +0000
committerAlan Modra <amodra@gmail.com>2004-04-30 14:26:09 +0000
commitd0d6a25bf3db9eea811699671a0f218e75586ca0 (patch)
tree57170b63f32c81a1cf2629a78dab3d484b061c4f
parent72adc230457cc2885fe394ab4647dceab2d9d0aa (diff)
downloadfsf-binutils-gdb-d0d6a25bf3db9eea811699671a0f218e75586ca0.zip
fsf-binutils-gdb-d0d6a25bf3db9eea811699671a0f218e75586ca0.tar.gz
fsf-binutils-gdb-d0d6a25bf3db9eea811699671a0f218e75586ca0.tar.bz2
* ldlang.c (unique_section_p): Pass section parm, return true on
group sections. (output_section_callback): Adjust. * ldlang.h (unique_section_p): Update prototype. * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Adjust.
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/emultempl/elf32.em2
-rw-r--r--ld/ldlang.c11
-rw-r--r--ld/ldlang.h2
4 files changed, 19 insertions, 4 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 0d60bad..f77eb40 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2004-04-30 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (unique_section_p): Pass section parm, return true on
+ group sections.
+ (output_section_callback): Adjust.
+ * ldlang.h (unique_section_p): Update prototype.
+ * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Adjust.
+
2004-04-30 Eric Botcazou <ebotcazou@act-europe.fr>
* ld.texinfo (--gc-sections): Remove restriction for
diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em
index 92f502d..1a838f3 100644
--- a/ld/emultempl/elf32.em
+++ b/ld/emultempl/elf32.em
@@ -1142,7 +1142,7 @@ gld${EMULATION_NAME}_place_orphan (lang_input_statement_type *file, asection *s)
isdyn = 1;
}
- if (isdyn || (!config.unique_orphan_sections && !unique_section_p (secname)))
+ if (isdyn || (!config.unique_orphan_sections && !unique_section_p (s)))
{
/* Look through the script to see where to place this section. */
os = lang_output_section_find (secname);
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 6460c32..d2b5fed 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -121,10 +121,17 @@ stat_alloc (size_t size)
}
bfd_boolean
-unique_section_p (const char *secnam)
+unique_section_p (const asection *sec)
{
struct unique_sections *unam;
+ const char *secnam;
+ if (link_info.relocatable
+ && sec->owner != NULL
+ && bfd_is_group_section (sec->owner, sec))
+ return TRUE;
+
+ secnam = sec->name;
for (unam = unique_section_list; unam; unam = unam->next)
if (wildcardp (unam->name)
? fnmatch (unam->name, secnam, 0) == 0
@@ -1262,7 +1269,7 @@ output_section_callback (lang_wild_statement_type *ptr,
lang_statement_union_type *before;
/* Exclude sections that match UNIQUE_SECTION_LIST. */
- if (unique_section_p (bfd_get_section_name (file->the_bfd, section)))
+ if (unique_section_p (section))
return;
/* If the wild pattern was marked KEEP, the member sections
diff --git a/ld/ldlang.h b/ld/ldlang.h
index 649fea1..0ba31bb 100644
--- a/ld/ldlang.h
+++ b/ld/ldlang.h
@@ -556,7 +556,7 @@ extern struct bfd_elf_version_deps *lang_add_vers_depend
extern void lang_register_vers_node
(const char *, struct bfd_elf_version_tree *, struct bfd_elf_version_deps *);
bfd_boolean unique_section_p
- (const char *);
+ (const asection *);
extern void lang_add_unique
(const char *);
extern const char *lang_get_output_target