Re: [PATCH v2 mips-next 2/4] MIPS: vmlinux.lds.S: add ".gnu.attributes" to DISCARDS

From: Fāng-ruì Sòng
Date: Wed Jan 06 2021 - 17:44:20 EST


On Wed, Jan 6, 2021 at 2:07 PM Kees Cook <keescook@xxxxxxxxxxxx> wrote:
>
> On Wed, Jan 06, 2021 at 08:08:19PM +0000, Alexander Lobakin wrote:
> > Discard GNU attributes at link time as kernel doesn't use it at all.
> > Solves a dozen of the following ld warnings (one per every file):
> >
> > mips-alpine-linux-musl-ld: warning: orphan section `.gnu.attributes'
> > from `arch/mips/kernel/head.o' being placed in section
> > `.gnu.attributes'
> > mips-alpine-linux-musl-ld: warning: orphan section `.gnu.attributes'
> > from `init/main.o' being placed in section `.gnu.attributes'
> >
> > Misc: sort DISCARDS section entries alphabetically.
>
> Hmm, I wonder what is causing the appearance of .eh_frame? With help I
> tracked down all the causes of this on x86, arm, and arm64, so that's
> why it's not in the asm-generic DISCARDS section. I suspect this could
> be cleaned up for mips too?

On x86, 003602ad5516e59940de42e44c8d8033387bb363 "x86/*/Makefile: Use
-fno-asynchronous-unwind-tables to suppress .eh_frame sections"
noticed that some Makefiles
redefined KBUILD_CFLAGS and dropped -fno-asynchronous-unwind-tables.
Maybe mips has similar issues.

> Similarly for .gnu.attributes. What is generating that? (Or, more
> specifically, why is it both being generated AND discarded?)
>
> -Kees

gcc/config/mips/mips.c
https://github.com/gcc-mirror/gcc/blob/master/gcc/config/mips/mips.c#L9965
.gnu_attribute 4, 0 does not produce .gnu.attributes
(SHT_GNU_ATTRIBUTES) but there are likely code paths that
a non-zero value is used... So .gnu_attributes is likely needed to be excluded.

> >
> > Signed-off-by: Alexander Lobakin <alobakin@xxxxx>
> > ---
> > arch/mips/kernel/vmlinux.lds.S | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
> > index 83e27a181206..5d6563970ab2 100644
> > --- a/arch/mips/kernel/vmlinux.lds.S
> > +++ b/arch/mips/kernel/vmlinux.lds.S
> > @@ -221,9 +221,10 @@ SECTIONS
> > /* ABI crap starts here */
> > *(.MIPS.abiflags)
> > *(.MIPS.options)
> > + *(.eh_frame)
> > + *(.gnu.attributes)
> > *(.options)
> > *(.pdr)
> > *(.reginfo)
> > - *(.eh_frame)
> > }
> > }
> > --
> > 2.30.0
> >
> >
>
> --
> Kees Cook



--
宋方睿