PATCH: Add SORT_NONE to .init and .fini sections in linker sripts
H.J. Lu
hjl.tools@gmail.com
Thu Aug 2 13:52:00 GMT 2012
On Tue, Jul 31, 2012 at 6:09 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Tue, Jul 31, 2012 at 3:56 PM, Alan Modra <amodra@gmail.com> wrote:
>> On Tue, Jul 31, 2012 at 02:00:30PM -0700, H.J. Lu wrote:
>>> Some linker sripts put .init and .fini sections in .text section. Those
>>> targets fail PR ld/14156 tests. This set of patches adds SORT_NONE to
>>> .init and .fini sections in linker sripts. Tested for xtensa-elf, d30v-elf,
>>> d10v-elf and msp430-elf. OK to install?
>>
>> OK, but please add SORT_NONE to elf.sc too.
>>
> Here is the additional patch I checked in. I'd like to backport
> it to 2.23 since SORT_NONE isn't handled properly.
>
> --
> H.J.
> ---
> PR ld/14156
> * ldlang.c (wild_sort): Properly handle by_none.
>
> * scripttempl/elf.sc: Add SORT_NONE to .init and .fini sections.
>
> diff --git a/ld/ldlang.c b/ld/ldlang.c
> index 5a4eef7..5327e12 100644
> --- a/ld/ldlang.c
> +++ b/ld/ldlang.c
> @@ -2462,7 +246@@ -3512,8 +3512,6 @@ update_wild_statements (lang_statement_u
> if (sort_section == by_name)
> sec->spec.sorted = by_alignment_name;
> break;
> - case by_none:
> - sec->spec.sorted = none;
> default:
> break;
> }
> 2,9 @@ wild_sort (lang_wild_statement_type *wild,
> /* Here either the files are not sorted by name, or we are
> looking at the sections for this file. */
>
> - if (sec != NULL && sec->spec.sorted != none)
> + if (sec != NULL
> + && sec->spec.sorted != none
> + && sec->spec.sorted != by_none)
> if (compare_section (sec->spec.sorted, section, ls->section) < 0)
> break;
> }
> diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc
> index 17c2cf1..51a655e 100644
> --- a/ld/scripttempl/elf.sc
> +++ b/ld/scripttempl/elf.sc
> @@ -462,7 +462,7 @@ cat <<EOF
> .init ${RELOCATING-0} :
> {
> ${RELOCATING+${INIT_START}}
> - KEEP (*(.init))
> + KEEP (*(SORT_NONE(.init)))
> ${RELOCATING+${INIT_END}}
> } ${FILL}
>
> @@ -483,7 +483,7 @@ cat <<EOF
> .fini ${RELOCATING-0} :
> {
> ${RELOCATING+${FINI_START}}
> - KEEP (*(.fini))
> + KEEP (*(SORT_NONE(.fini)))
> ${RELOCATING+${FINI_END}}
> } ${FILL}
> ${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
I am checking this into 2.23 branch.
--
H.J.
More information about the Binutils
mailing list