* ldlang.c (insert_os_after): Don't tie assignments to non-alloc

output sections.
This commit is contained in:
Alan Modra 2009-07-11 00:10:29 +00:00
parent 43dd447d91
commit 0fa4d7cf2d
2 changed files with 17 additions and 5 deletions

View file

@ -1,3 +1,8 @@
2009-07-11 Alan Modra <amodra@bigpond.net.au>
* ldlang.c (insert_os_after): Don't tie assignments to non-alloc
output sections.
2009-07-10 Alan Modra <amodra@bigpond.net.au> 2009-07-10 Alan Modra <amodra@bigpond.net.au>
* emultempl/ppc32elf.em (ppc_before_allocation): Turn on * emultempl/ppc32elf.em (ppc_before_allocation): Turn on

View file

@ -1615,10 +1615,12 @@ output_prev_sec_find (lang_output_section_statement_type *os)
idea is to skip over anything that might be inside a SECTIONS {} idea is to skip over anything that might be inside a SECTIONS {}
statement in a script, before we find another output section statement in a script, before we find another output section
statement. Assignments to "dot" before an output section statement statement. Assignments to "dot" before an output section statement
are assumed to belong to it. An exception to this rule is made for are assumed to belong to it, except in two cases; The first
the first assignment to dot, otherwise we might put an orphan assignment to dot, and assignments before non-alloc sections.
before . = . + SIZEOF_HEADERS or similar assignments that set the Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
initial address. */ similar assignments that set the initial address, or we might
insert non-alloc note sections among assignments setting end of
image symbols. */
static lang_statement_union_type ** static lang_statement_union_type **
insert_os_after (lang_output_section_statement_type *after) insert_os_after (lang_output_section_statement_type *after)
@ -1662,7 +1664,12 @@ insert_os_after (lang_output_section_statement_type *after)
continue; continue;
case lang_output_section_statement_enum: case lang_output_section_statement_enum:
if (assign != NULL) if (assign != NULL)
where = assign; {
asection *s = (*where)->output_section_statement.bfd_section;
if (s == NULL || (s->flags & SEC_ALLOC) != 0)
where = assign;
}
break; break;
case lang_input_statement_enum: case lang_input_statement_enum:
case lang_address_statement_enum: case lang_address_statement_enum: