binutils 2.19 issue with kernel link
Kumar Gala
galak at kernel.crashing.org
Sat Jul 11 01:34:35 EST 2009
On Jul 9, 2009, at 11:11 PM, Alan Modra wrote:
> Hmm, having said all that, the following linker patch seems reasonable
> to me and probably won't break anything else (always some risk).
> Please test it for me.
>
> Index: ld/ldlang.c
> ===================================================================
> RCS file: /cvs/src/src/ld/ldlang.c,v
> retrieving revision 1.311
> diff -u -p -r1.311 ldlang.c
> --- ld/ldlang.c 25 Jun 2009 13:18:46 -0000 1.311
> +++ ld/ldlang.c 10 Jul 2009 04:04:57 -0000
> @@ -1615,10 +1615,12 @@ output_prev_sec_find (lang_output_sectio
> 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. 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. */
> + are assumed to belong to it, except in two cases; The first
> + assignment to dot, and assignments before non-alloc sections.
> + Otherwise we might put an orphan before . = . + SIZEOF_HEADERS or
> + 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 **
> insert_os_after (lang_output_section_statement_type *after)
> @@ -1662,7 +1664,12 @@ insert_os_after (lang_output_section_sta
> continue;
> case lang_output_section_statement_enum:
> if (assign != NULL)
> - where = assign;
> + {
> + asection *s = (*where)->output_section_statement.bfd_section;
> +
> + if (s == NULL || (s->flags & SEC_ALLOC) != 0)
> + where = assign;
> + }
> break;
> case lang_input_statement_enum:
> case lang_address_statement_enum:
>
> --
This patch seems to "fix" things.
- k
More information about the Linuxppc-dev
mailing list