Re: [PATCH v2 mips-next 2/4] MIPS: vmlinux.lds.S: add ".gnu.attributes" to DISCARDS
From: Fāng-ruì Sòng <hidden>
Date: 2021-01-06 22:44:19
Also in:
linux-mips, lkml
On Wed, Jan 6, 2021 at 2:07 PM Kees Cook [off-list ref] wrote:
On Wed, Jan 06, 2021 at 08:08:19PM +0000, Alexander Lobakin wrote:quoted
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.
quoted
Signed-off-by: Alexander Lobakin <redacted> --- 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
-- 宋方睿