Section sizing + orphan placement bugs
Alan Modra
amodra@bigpond.net.au
Thu Nov 24 00:57:00 GMT 2005
On Thu, Nov 24, 2005 at 11:09:57AM +1030, Alan Modra wrote:
> On Wed, Nov 23, 2005 at 11:36:54AM -0500, Daniel Jacobowitz wrote:
> > I think the attached fix is right for that part of the bug but I'm open to
> > suggestions on how to handle SIZEOF_HEADERS.
>
> I'll fix that bit.
Like this.
* ldlang.c (lang_insert_orphan): Skip first assignment to dot
in script when looking for place to insert orphan statements.
Index: ld/ldlang.c
===================================================================
RCS file: /cvs/src/src/ld/ldlang.c,v
retrieving revision 1.208
diff -u -p -r1.208 ldlang.c
--- ld/ldlang.c 18 Nov 2005 04:12:27 -0000 1.208
+++ ld/ldlang.c 24 Nov 2005 00:54:47 -0000
@@ -1467,13 +1467,20 @@ lang_insert_orphan (asection *s,
{
lang_statement_union_type **where;
lang_statement_union_type **assign = NULL;
+ bfd_boolean ignore_first;
/* Look for a suitable place for the new statement list.
The idea is to skip over anything that might be inside
a SECTIONS {} statement in a script, before we find
another output_section_statement. Assignments to "dot"
before an output section statement are assumed to
- belong to it. */
+ belong to it. An exception to this rule is made for
+ the first assignment to dot, otherwise we might put an
+ orphan before . = . + SIZEOF_HEADERS or similar
+ assignments that set the initial address. */
+
+ ignore_first = after == (&lang_output_section_statement.head
+ ->output_section_statement);
for (where = &after->header.next;
*where != NULL;
where = &(*where)->header.next)
@@ -1487,9 +1494,11 @@ lang_insert_orphan (asection *s,
ass = &(*where)->assignment_statement;
if (ass->exp->type.node_class != etree_assert
&& ass->exp->assign.dst[0] == '.'
- && ass->exp->assign.dst[1] == 0)
+ && ass->exp->assign.dst[1] == 0
+ && !ignore_first)
assign = where;
}
+ ignore_first = FALSE;
continue;
case lang_wild_statement_enum:
case lang_input_section_enum:
--
Alan Modra
IBM OzLabs - Linux Technology Centre
More information about the Binutils
mailing list