mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 19:14:52 +08:00
* ldlang.c (lang_add_section): Don't twidlle SEC_EXCLUDE here.
(output_section_callback): Nor SEC_KEEP here. (gc_section_callback): Twiddle SEC_EXCLUDE here. (lang_gc_wild): Delete. Fold into.. (lang_gc_sections_1): ..here. Only call bfd_gc_sections when garbage collecting. (lang_process): Always call lang_gc_sections. (lang_place_orphans): Handle SEC_EXCLUDE sections. * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Remove SEC_EXCLUDE code.
This commit is contained in:
parent
652ca075fb
commit
164e712d71
13
ld/ChangeLog
13
ld/ChangeLog
@ -1,3 +1,16 @@
|
||||
2004-05-28 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* ldlang.c (lang_add_section): Don't twidlle SEC_EXCLUDE here.
|
||||
(output_section_callback): Nor SEC_KEEP here.
|
||||
(gc_section_callback): Twiddle SEC_EXCLUDE here.
|
||||
(lang_gc_wild): Delete. Fold into..
|
||||
(lang_gc_sections_1): ..here. Only call bfd_gc_sections when garbage
|
||||
collecting.
|
||||
(lang_process): Always call lang_gc_sections.
|
||||
(lang_place_orphans): Handle SEC_EXCLUDE sections.
|
||||
* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Remove
|
||||
SEC_EXCLUDE code.
|
||||
|
||||
2004-05-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Clear
|
||||
|
@ -1182,16 +1182,6 @@ gld${EMULATION_NAME}_place_orphan (lang_input_statement_type *file, asection *s)
|
||||
#define HAVE_SECTION(hold, name) \
|
||||
(hold.os != NULL || (hold.os = lang_output_section_find (name)) != NULL)
|
||||
|
||||
if (link_info.relocatable && (s->flags & SEC_DEBUGGING) == 0)
|
||||
s->flags &= ~SEC_EXCLUDE;
|
||||
|
||||
if ((s->flags & SEC_EXCLUDE) != 0)
|
||||
{
|
||||
if (s->output_section == NULL)
|
||||
s->output_section = bfd_abs_section_ptr;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
place = NULL;
|
||||
if ((s->flags & SEC_ALLOC) == 0)
|
||||
;
|
||||
|
55
ld/ldlang.c
55
ld/ldlang.c
@ -1089,23 +1089,9 @@ lang_add_section (lang_statement_list_type *ptr,
|
||||
lang_output_section_statement_type *output,
|
||||
lang_input_statement_type *file)
|
||||
{
|
||||
flagword flags;
|
||||
flagword flags = section->flags;
|
||||
bfd_boolean discard;
|
||||
|
||||
flags = bfd_get_section_flags (section->owner, section);
|
||||
|
||||
/* SEC_EXCLUDE is ignored when doing a relocatable link, except in
|
||||
the special case of debug info. (See bfd/stabs.c) */
|
||||
if (link_info.relocatable && (flags & SEC_DEBUGGING) == 0)
|
||||
{
|
||||
flags &= ~SEC_EXCLUDE;
|
||||
|
||||
/* Write the modified flag back, to simplify later linker
|
||||
code. */
|
||||
if (section->owner != NULL)
|
||||
bfd_set_section_flags (section->owner, section, flags);
|
||||
}
|
||||
|
||||
/* Discard sections marked with SEC_EXCLUDE. */
|
||||
discard = (flags & SEC_EXCLUDE) != 0;
|
||||
|
||||
@ -1349,11 +1335,6 @@ output_section_callback (lang_wild_statement_type *ptr,
|
||||
if (unique_section_p (section))
|
||||
return;
|
||||
|
||||
/* If the wild pattern was marked KEEP, the member sections
|
||||
should be as well. */
|
||||
if (ptr->keep_sections)
|
||||
section->flags |= SEC_KEEP;
|
||||
|
||||
before = wild_sort (ptr, sec, file, section);
|
||||
|
||||
/* Here BEFORE points to the lang_input_section which
|
||||
@ -4029,9 +4010,10 @@ lang_place_orphans (void)
|
||||
around for a sensible place for it to go. */
|
||||
|
||||
if (file->just_syms_flag)
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
abort ();
|
||||
|
||||
if ((s->flags & SEC_EXCLUDE) != 0)
|
||||
s->output_section = bfd_abs_section_ptr;
|
||||
else if (strcmp (s->name, "COMMON") == 0)
|
||||
{
|
||||
/* This is a lonely common section which must have
|
||||
@ -4271,8 +4253,7 @@ lang_reset_memory_regions (void)
|
||||
o->_raw_size = 0;
|
||||
}
|
||||
|
||||
/* If the wild pattern was marked KEEP, the member sections
|
||||
should be as well. */
|
||||
/* Worker for lang_gc_sections_1. */
|
||||
|
||||
static void
|
||||
gc_section_callback (lang_wild_statement_type *ptr,
|
||||
@ -4281,18 +4262,18 @@ 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)
|
||||
section->flags |= SEC_KEEP;
|
||||
}
|
||||
|
||||
/* Handle a wild statement, marking it against GC. */
|
||||
|
||||
static void
|
||||
lang_gc_wild (lang_wild_statement_type *s)
|
||||
{
|
||||
walk_wild (s, gc_section_callback, NULL);
|
||||
}
|
||||
|
||||
/* Iterate over sections marking them against GC. */
|
||||
|
||||
static void
|
||||
@ -4303,7 +4284,7 @@ lang_gc_sections_1 (lang_statement_union_type *s)
|
||||
switch (s->header.type)
|
||||
{
|
||||
case lang_wild_statement_enum:
|
||||
lang_gc_wild (&s->wild_statement);
|
||||
walk_wild (&s->wild_statement, gc_section_callback, NULL);
|
||||
break;
|
||||
case lang_constructors_statement_enum:
|
||||
lang_gc_sections_1 (constructor_list.head);
|
||||
@ -4347,7 +4328,8 @@ lang_gc_sections (void)
|
||||
}
|
||||
}
|
||||
|
||||
bfd_gc_sections (output_bfd, &link_info);
|
||||
if (command_line.gc_sections)
|
||||
bfd_gc_sections (output_bfd, &link_info);
|
||||
}
|
||||
|
||||
void
|
||||
@ -4395,8 +4377,7 @@ lang_process (void)
|
||||
ldctor_build_sets ();
|
||||
|
||||
/* Remove unreferenced sections if asked to. */
|
||||
if (command_line.gc_sections)
|
||||
lang_gc_sections ();
|
||||
lang_gc_sections ();
|
||||
|
||||
/* Size up the common data. */
|
||||
lang_common ();
|
||||
|
Loading…
Reference in New Issue
Block a user