aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/ldlang.c20
2 files changed, 19 insertions, 6 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 9ce5744..00318f3 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,8 @@
+2004-05-29 Alan Modra <amodra@bigpond.net.au>
+
+ * ldlang.c (gc_section_callback): Move SEC_EXCLUDE twiddles..
+ (lang_gc_sections): .. to a LANG_FOR_EACH_INPUT_STATEMENT loop here.
+
2004-05-28 Andrew Stubbs <andrew.stubbs@superh.com>
* testsuite/ld-sh/arch/arch.exp: New test script.
diff --git a/ld/ldlang.c b/ld/ldlang.c
index b471b5b..7ff8be0 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -4272,12 +4272,6 @@ gc_section_callback (lang_wild_statement_type *ptr,
lang_input_statement_type *file ATTRIBUTE_UNUSED,
void *data ATTRIBUTE_UNUSED)
{
- /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
- the special case of debug info. (See bfd/stabs.c)
- Twiddle the flag here, to simplify later linker code. */
- if (link_info.relocatable && (section->flags & SEC_DEBUGGING) == 0)
- section->flags &= ~SEC_EXCLUDE;
-
/* If the wild pattern was marked KEEP, the member sections
should be as well. */
if (ptr->keep_sections)
@@ -4338,6 +4332,20 @@ lang_gc_sections (void)
}
}
+ /* SEC_EXCLUDE is ignored when doing a relocatable link, except in
+ the special case of debug info. (See bfd/stabs.c)
+ Twiddle the flag here, to simplify later linker code. */
+ if (link_info.relocatable)
+ {
+ LANG_FOR_EACH_INPUT_STATEMENT (f)
+ {
+ asection *sec;
+ for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
+ if ((sec->flags & SEC_DEBUGGING) == 0)
+ sec->flags &= ~SEC_EXCLUDE;
+ }
+ }
+
if (command_line.gc_sections)
bfd_gc_sections (output_bfd, &link_info);
}