This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Add SORT_NONE to .init and .fini sections in linker sripts


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]