Re: [PATCH 3/6] Change the symbols order when --ffuntion-sections is enabled
From: H. Peter Anvin
Date: Tue Jul 30 2024 - 12:31:17 EST
On July 30, 2024 1:40:22 AM PDT, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>On Mon, Jul 29, 2024 at 11:48:54AM -0700, Rong Xu wrote:
>
>> > defined(CONFIG_LTO_CLANG)
>> > > +#define TEXT_TEXT \
>> > > + *(.text.asan.* .text.tsan.*) \
>> > > + *(.text.unknown .text.unknown.*) \
>> > > + *(.text.unlikely .text.unlikely.*) \
>> > > + ALIGN_FUNCTION(); \
>> >
>> > Why leave the above text sections unaligned?
>> >
>>
>> They are considered cold text. They are not aligned before the change. But
>> I have no objections to making it aligned.
>
>At least x86 has hard assumptions about function alignment always being
>respected -- see the most horrible games we play with
>CONFIG_CALL_THUNKS.
>
>Or is this only text parts and not actual functions in these sections?
>In which case we can probably get away with not respecting the function
>call alignment, although we should probably still respect the branch
>alignment -- but I forgot if we made use of that :/
>
>
>> >
>> > > + *(.text.hot .text.hot.*) \
>> > > + *(TEXT_MAIN .text.fixup) \
>> > > + NOINSTR_TEXT \
>> > > + *(.ref.text) \
>> > > + MEM_KEEP(init.text*)
>> > > +#else
>> > > #define TEXT_TEXT \
>> > > ALIGN_FUNCTION(); \
>> > > *(.text.hot .text.hot.*) \
>> > > @@ -594,7 +606,8 @@
>> > > NOINSTR_TEXT \
>> > > *(.ref.text) \
>> > > *(.text.asan.* .text.tsan.*) \
>> > > - MEM_KEEP(init.text*) \
>> > > + MEM_KEEP(init.text*)
>> > > +#endif
>> > >
>> > >
>> > > /* sched.text is aling to function alignment to secure we have same
>> > > --
>> > > 2.46.0.rc1.232.g9752f9e123-goog
>> > >
>> >
The linker should always enforce the alignment of any input section. If we don't have proper alignment either the linker is broken or we don't have the correct .balign directives in the code – which is the right way to fix this.