* [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections @ 2020-09-28 22:48 Nathan Chancellor 2020-10-12 21:10 ` Nick Desaulniers 0 siblings, 1 reply; 6+ messages in thread From: Nathan Chancellor @ 2020-09-28 22:48 UTC (permalink / raw) To: Kees Cook, Ingo Molnar Cc: Russell King, linux-arm-kernel, linux-kernel, clang-built-linux, Nathan Chancellor, kernel test robot After turning on warnings for orphan section placement, enabling CONFIG_UNWINDER_FRAME_POINTER instead of CONFIG_UNWINDER_ARM causes thousands of warnings when clang + ld.lld are used: $ scripts/config --file arch/arm/configs/multi_v7_defconfig \ -d CONFIG_UNWINDER_ARM \ -e CONFIG_UNWINDER_FRAME_POINTER $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LLVM=1 defconfig zImage ld.lld: warning: init/built-in.a(main.o):(.ARM.extab) is being placed in '.ARM.extab' ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.ref.text) is being placed in '.ARM.extab.ref.text' ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab) is being placed in '.ARM.extab' ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab) is being placed in '.ARM.extab' ld.lld: warning: init/built-in.a(do_mounts_initrd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab) is being placed in '.ARM.extab' ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab) is being placed in '.ARM.extab' These sections are handled by the ARM_UNWIND_SECTIONS define, which is only added to the list of sections when CONFIG_ARM_UNWIND is set. CONFIG_ARM_UNWIND is a hidden symbol that is only selected when CONFIG_UNWINDER_ARM is set so CONFIG_UNWINDER_FRAME_POINTER never handles these sections. According to the help text of CONFIG_UNWINDER_ARM, these sections should be discarded so that the kernel image size is not affected. Fixes: 5a17850e251a ("arm/build: Warn on orphan section placement") Link: https://github.com/ClangBuiltLinux/linux/issues/1152 Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> --- arch/arm/kernel/vmlinux.lds.S | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 5f4922e858d0..a2c0d96b0580 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S @@ -40,6 +40,10 @@ SECTIONS ARM_DISCARD #ifndef CONFIG_SMP_ON_UP *(.alt.smp.init) +#endif +#ifndef CONFIG_ARM_UNWIND + *(.ARM.exidx*) + *(.ARM.extab*) #endif } base-commit: 6e0bf0e0e55000742a53c5f3b58f8669e0091a11 -- 2.28.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections 2020-09-28 22:48 [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections Nathan Chancellor @ 2020-10-12 21:10 ` Nick Desaulniers 2020-10-12 21:22 ` Fāng-ruì Sòng 0 siblings, 1 reply; 6+ messages in thread From: Nick Desaulniers @ 2020-10-12 21:10 UTC (permalink / raw) To: Nathan Chancellor Cc: Kees Cook, Ingo Molnar, Russell King, Linux ARM, LKML, clang-built-linux, kernel test robot On Mon, Sep 28, 2020 at 3:49 PM Nathan Chancellor <natechancellor@gmail.com> wrote: > > After turning on warnings for orphan section placement, enabling > CONFIG_UNWINDER_FRAME_POINTER instead of CONFIG_UNWINDER_ARM causes > thousands of warnings when clang + ld.lld are used: > > $ scripts/config --file arch/arm/configs/multi_v7_defconfig \ > -d CONFIG_UNWINDER_ARM \ > -e CONFIG_UNWINDER_FRAME_POINTER > $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LLVM=1 defconfig zImage > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab) is being placed in '.ARM.extab' > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.ref.text) is being placed in '.ARM.extab.ref.text' > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab) is being placed in '.ARM.extab' > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab) is being placed in '.ARM.extab' > ld.lld: warning: init/built-in.a(do_mounts_initrd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab) is being placed in '.ARM.extab' > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab) is being placed in '.ARM.extab' > > These sections are handled by the ARM_UNWIND_SECTIONS define, which is > only added to the list of sections when CONFIG_ARM_UNWIND is set. > CONFIG_ARM_UNWIND is a hidden symbol that is only selected when > CONFIG_UNWINDER_ARM is set so CONFIG_UNWINDER_FRAME_POINTER never > handles these sections. According to the help text of > CONFIG_UNWINDER_ARM, these sections should be discarded so that the > kernel image size is not affected. My apologies for taking so long to review this. I have a suspicion that these come from forcing on configs that Kconfig/menuconfig would block, and aren't clang or lld specific, yet are exposed by the new linker warnings for orphan section placement (good). That said, we definitely have OEMs in Android land that still prefer the older unwinder. From https://developer.arm.com/documentation/ihi0038/b/ (click download in top left), section 4.4.1 "Sections" has a note: ``` Tables are not required for ABI compliance at the C/Assembler level but are required for C++. ``` Review-by: Nick Desaulniers <ndesaulniers@google.com> Tested-by: Nick Desaulniers <ndesaulniers@google.com> Please submit to: https://www.arm.linux.org.uk/developer/patches/add.php > > Fixes: 5a17850e251a ("arm/build: Warn on orphan section placement") > Link: https://github.com/ClangBuiltLinux/linux/issues/1152 > Reported-by: kernel test robot <lkp@intel.com> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > --- > arch/arm/kernel/vmlinux.lds.S | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S > index 5f4922e858d0..a2c0d96b0580 100644 > --- a/arch/arm/kernel/vmlinux.lds.S > +++ b/arch/arm/kernel/vmlinux.lds.S > @@ -40,6 +40,10 @@ SECTIONS > ARM_DISCARD > #ifndef CONFIG_SMP_ON_UP > *(.alt.smp.init) > +#endif > +#ifndef CONFIG_ARM_UNWIND > + *(.ARM.exidx*) I don't think we need the wildcard, as without this line, I see: ld.lld: warning: <internal>:(.ARM.exidx) is being placed in '.ARM.exidx' though I do see binutils linker scripts use precisely what you have. So I guess that's fine. I guess we can't reuse `ARM_UNWIND_SECTIONS` since the ALIGN and linker-script-defined-symbols would be weird in a DISCARD clause? > + *(.ARM.extab*) > #endif > } > > > base-commit: 6e0bf0e0e55000742a53c5f3b58f8669e0091a11 > -- -- Thanks, ~Nick Desaulniers ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections 2020-10-12 21:10 ` Nick Desaulniers @ 2020-10-12 21:22 ` Fāng-ruì Sòng 2020-10-12 21:26 ` Kees Cook 0 siblings, 1 reply; 6+ messages in thread From: Fāng-ruì Sòng @ 2020-10-12 21:22 UTC (permalink / raw) To: Nick Desaulniers Cc: Nathan Chancellor, Kees Cook, Ingo Molnar, Russell King, Linux ARM, LKML, clang-built-linux, kernel test robot On Mon, Oct 12, 2020 at 2:11 PM 'Nick Desaulniers' via Clang Built Linux <clang-built-linux@googlegroups.com> wrote: > > On Mon, Sep 28, 2020 at 3:49 PM Nathan Chancellor > <natechancellor@gmail.com> wrote: > > > > After turning on warnings for orphan section placement, enabling > > CONFIG_UNWINDER_FRAME_POINTER instead of CONFIG_UNWINDER_ARM causes > > thousands of warnings when clang + ld.lld are used: > > > > $ scripts/config --file arch/arm/configs/multi_v7_defconfig \ > > -d CONFIG_UNWINDER_ARM \ > > -e CONFIG_UNWINDER_FRAME_POINTER > > $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LLVM=1 defconfig zImage > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab) is being placed in '.ARM.extab' > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.ref.text) is being placed in '.ARM.extab.ref.text' > > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab) is being placed in '.ARM.extab' > > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab) is being placed in '.ARM.extab' > > ld.lld: warning: init/built-in.a(do_mounts_initrd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab) is being placed in '.ARM.extab' > > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab) is being placed in '.ARM.extab' > > > > These sections are handled by the ARM_UNWIND_SECTIONS define, which is > > only added to the list of sections when CONFIG_ARM_UNWIND is set. > > CONFIG_ARM_UNWIND is a hidden symbol that is only selected when > > CONFIG_UNWINDER_ARM is set so CONFIG_UNWINDER_FRAME_POINTER never > > handles these sections. According to the help text of > > CONFIG_UNWINDER_ARM, these sections should be discarded so that the > > kernel image size is not affected. > > My apologies for taking so long to review this. > > I have a suspicion that these come from forcing on configs that > Kconfig/menuconfig would block, and aren't clang or lld specific, yet > are exposed by the new linker warnings for orphan section placement > (good). That said, we definitely have OEMs in Android land that still > prefer the older unwinder. > > From https://developer.arm.com/documentation/ihi0038/b/ (click > download in top left), section 4.4.1 "Sections" has a note: > > ``` > Tables are not required for ABI compliance at the C/Assembler level > but are required for C++. > ``` > > Review-by: Nick Desaulniers <ndesaulniers@google.com> > Tested-by: Nick Desaulniers <ndesaulniers@google.com> > > Please submit to: > https://www.arm.linux.org.uk/developer/patches/add.php > > > > > Fixes: 5a17850e251a ("arm/build: Warn on orphan section placement") > > Link: https://github.com/ClangBuiltLinux/linux/issues/1152 > > Reported-by: kernel test robot <lkp@intel.com> > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > > --- > > arch/arm/kernel/vmlinux.lds.S | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S > > index 5f4922e858d0..a2c0d96b0580 100644 > > --- a/arch/arm/kernel/vmlinux.lds.S > > +++ b/arch/arm/kernel/vmlinux.lds.S > > @@ -40,6 +40,10 @@ SECTIONS > > ARM_DISCARD > > #ifndef CONFIG_SMP_ON_UP > > *(.alt.smp.init) > > +#endif > > +#ifndef CONFIG_ARM_UNWIND > > + *(.ARM.exidx*) > > I don't think we need the wildcard, as without this line, I see: > > ld.lld: warning: <internal>:(.ARM.exidx) is being placed in '.ARM.exidx' We may need the wildcard if there are -ffunction-sections builds. In clang, .ARM.exidx* cannot be removed even with -fno-unwind-tables -fno-exceptions. > though I do see binutils linker scripts use precisely what you have. > So I guess that's fine. > > I guess we can't reuse `ARM_UNWIND_SECTIONS` since the ALIGN and > linker-script-defined-symbols would be weird in a DISCARD clause? > > > > + *(.ARM.extab*) > > #endif > > } > > > > > > base-commit: 6e0bf0e0e55000742a53c5f3b58f8669e0091a11 > > -- > > > -- > Thanks, > ~Nick Desaulniers > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/CAKwvOd%3D%2B98r6F4JjrPEoWX88WQ%3DB-KMRP2eWojabLk6it3i5KA%40mail.gmail.com. -- 宋方睿 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections 2020-10-12 21:22 ` Fāng-ruì Sòng @ 2020-10-12 21:26 ` Kees Cook 2020-10-13 3:26 ` Nathan Chancellor 0 siblings, 1 reply; 6+ messages in thread From: Kees Cook @ 2020-10-12 21:26 UTC (permalink / raw) To: Fāng-ruì Sòng Cc: Nick Desaulniers, Nathan Chancellor, Ingo Molnar, Russell King, Linux ARM, LKML, clang-built-linux, kernel test robot On Mon, Oct 12, 2020 at 02:22:03PM -0700, Fāng-ruì Sòng wrote: > On Mon, Oct 12, 2020 at 2:11 PM 'Nick Desaulniers' via Clang Built > Linux <clang-built-linux@googlegroups.com> wrote: > > > > On Mon, Sep 28, 2020 at 3:49 PM Nathan Chancellor > > <natechancellor@gmail.com> wrote: > > > > > > After turning on warnings for orphan section placement, enabling > > > CONFIG_UNWINDER_FRAME_POINTER instead of CONFIG_UNWINDER_ARM causes > > > thousands of warnings when clang + ld.lld are used: > > > > > > $ scripts/config --file arch/arm/configs/multi_v7_defconfig \ > > > -d CONFIG_UNWINDER_ARM \ > > > -e CONFIG_UNWINDER_FRAME_POINTER > > > $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LLVM=1 defconfig zImage > > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab) is being placed in '.ARM.extab' > > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.ref.text) is being placed in '.ARM.extab.ref.text' > > > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab) is being placed in '.ARM.extab' > > > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab) is being placed in '.ARM.extab' > > > ld.lld: warning: init/built-in.a(do_mounts_initrd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab) is being placed in '.ARM.extab' > > > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab) is being placed in '.ARM.extab' > > > > > > These sections are handled by the ARM_UNWIND_SECTIONS define, which is > > > only added to the list of sections when CONFIG_ARM_UNWIND is set. > > > CONFIG_ARM_UNWIND is a hidden symbol that is only selected when > > > CONFIG_UNWINDER_ARM is set so CONFIG_UNWINDER_FRAME_POINTER never > > > handles these sections. According to the help text of > > > CONFIG_UNWINDER_ARM, these sections should be discarded so that the > > > kernel image size is not affected. > > > > My apologies for taking so long to review this. > > > > I have a suspicion that these come from forcing on configs that > > Kconfig/menuconfig would block, and aren't clang or lld specific, yet > > are exposed by the new linker warnings for orphan section placement > > (good). That said, we definitely have OEMs in Android land that still > > prefer the older unwinder. > > > > From https://developer.arm.com/documentation/ihi0038/b/ (click > > download in top left), section 4.4.1 "Sections" has a note: > > > > ``` > > Tables are not required for ABI compliance at the C/Assembler level > > but are required for C++. > > ``` > > > > Review-by: Nick Desaulniers <ndesaulniers@google.com> > > Tested-by: Nick Desaulniers <ndesaulniers@google.com> > > > > Please submit to: > > https://www.arm.linux.org.uk/developer/patches/add.php > > > > > > > > Fixes: 5a17850e251a ("arm/build: Warn on orphan section placement") > > > Link: https://github.com/ClangBuiltLinux/linux/issues/1152 > > > Reported-by: kernel test robot <lkp@intel.com> > > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > > > --- > > > arch/arm/kernel/vmlinux.lds.S | 4 ++++ > > > 1 file changed, 4 insertions(+) > > > > > > diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S > > > index 5f4922e858d0..a2c0d96b0580 100644 > > > --- a/arch/arm/kernel/vmlinux.lds.S > > > +++ b/arch/arm/kernel/vmlinux.lds.S > > > @@ -40,6 +40,10 @@ SECTIONS > > > ARM_DISCARD > > > #ifndef CONFIG_SMP_ON_UP > > > *(.alt.smp.init) > > > +#endif > > > +#ifndef CONFIG_ARM_UNWIND > > > + *(.ARM.exidx*) > > > > I don't think we need the wildcard, as without this line, I see: > > > > ld.lld: warning: <internal>:(.ARM.exidx) is being placed in '.ARM.exidx' > > We may need the wildcard if there are -ffunction-sections builds. > In clang, .ARM.exidx* cannot be removed even with -fno-unwind-tables > -fno-exceptions. Does it need to be: *(.ARM.exidx) *(.ARM.exidx.*) *(.ARM.extab) *(.ARM.extab.*) ? > > > though I do see binutils linker scripts use precisely what you have. > > So I guess that's fine. > > > > I guess we can't reuse `ARM_UNWIND_SECTIONS` since the ALIGN and > > linker-script-defined-symbols would be weird in a DISCARD clause? > > > > > > > + *(.ARM.extab*) > > > #endif > > > } > > > > > > > > > base-commit: 6e0bf0e0e55000742a53c5f3b58f8669e0091a11 > > > -- > > > > > > -- > > Thanks, > > ~Nick Desaulniers > > > > -- > > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. > > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/CAKwvOd%3D%2B98r6F4JjrPEoWX88WQ%3DB-KMRP2eWojabLk6it3i5KA%40mail.gmail.com. > > > > -- > 宋方睿 -- Kees Cook ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections 2020-10-12 21:26 ` Kees Cook @ 2020-10-13 3:26 ` Nathan Chancellor 2020-10-13 22:56 ` Nick Desaulniers 0 siblings, 1 reply; 6+ messages in thread From: Nathan Chancellor @ 2020-10-13 3:26 UTC (permalink / raw) To: Kees Cook Cc: Fāng-ruì Sòng, Nick Desaulniers, Ingo Molnar, Russell King, Linux ARM, LKML, clang-built-linux, kernel test robot On Mon, Oct 12, 2020 at 02:26:52PM -0700, Kees Cook wrote: > On Mon, Oct 12, 2020 at 02:22:03PM -0700, Fāng-ruì Sòng wrote: > > On Mon, Oct 12, 2020 at 2:11 PM 'Nick Desaulniers' via Clang Built > > Linux <clang-built-linux@googlegroups.com> wrote: > > > > > > On Mon, Sep 28, 2020 at 3:49 PM Nathan Chancellor > > > <natechancellor@gmail.com> wrote: > > > > > > > > After turning on warnings for orphan section placement, enabling > > > > CONFIG_UNWINDER_FRAME_POINTER instead of CONFIG_UNWINDER_ARM causes > > > > thousands of warnings when clang + ld.lld are used: > > > > > > > > $ scripts/config --file arch/arm/configs/multi_v7_defconfig \ > > > > -d CONFIG_UNWINDER_ARM \ > > > > -e CONFIG_UNWINDER_FRAME_POINTER > > > > $ make -skj"$(nproc)" ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LLVM=1 defconfig zImage > > > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab) is being placed in '.ARM.extab' > > > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > > ld.lld: warning: init/built-in.a(main.o):(.ARM.extab.ref.text) is being placed in '.ARM.extab.ref.text' > > > > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > > ld.lld: warning: init/built-in.a(do_mounts.o):(.ARM.extab) is being placed in '.ARM.extab' > > > > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > > ld.lld: warning: init/built-in.a(do_mounts_rd.o):(.ARM.extab) is being placed in '.ARM.extab' > > > > ld.lld: warning: init/built-in.a(do_mounts_initrd.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > > ld.lld: warning: init/built-in.a(initramfs.o):(.ARM.extab) is being placed in '.ARM.extab' > > > > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab.init.text) is being placed in '.ARM.extab.init.text' > > > > ld.lld: warning: init/built-in.a(calibrate.o):(.ARM.extab) is being placed in '.ARM.extab' > > > > > > > > These sections are handled by the ARM_UNWIND_SECTIONS define, which is > > > > only added to the list of sections when CONFIG_ARM_UNWIND is set. > > > > CONFIG_ARM_UNWIND is a hidden symbol that is only selected when > > > > CONFIG_UNWINDER_ARM is set so CONFIG_UNWINDER_FRAME_POINTER never > > > > handles these sections. According to the help text of > > > > CONFIG_UNWINDER_ARM, these sections should be discarded so that the > > > > kernel image size is not affected. > > > > > > My apologies for taking so long to review this. > > > > > > I have a suspicion that these come from forcing on configs that > > > Kconfig/menuconfig would block, and aren't clang or lld specific, yet > > > are exposed by the new linker warnings for orphan section placement > > > (good). That said, we definitely have OEMs in Android land that still > > > prefer the older unwinder. > > > > > > From https://developer.arm.com/documentation/ihi0038/b/ (click > > > download in top left), section 4.4.1 "Sections" has a note: > > > > > > ``` > > > Tables are not required for ABI compliance at the C/Assembler level > > > but are required for C++. > > > ``` > > > > > > Review-by: Nick Desaulniers <ndesaulniers@google.com> > > > Tested-by: Nick Desaulniers <ndesaulniers@google.com> > > > > > > Please submit to: > > > https://www.arm.linux.org.uk/developer/patches/add.php This should go through the tip tree (hence sending it straight to Ingo) since the patch that this fixes was there. I guess it does not necessarily matter now that the breakage is in mainline but basing a set of patches on a non -rc tag is a little taboo I thought so not sure it is appropriate to go through Russell for now. It is up to the maintainers though, I will submit it wherever it needs to go. > > > > > > > > Fixes: 5a17850e251a ("arm/build: Warn on orphan section placement") > > > > Link: https://github.com/ClangBuiltLinux/linux/issues/1152 > > > > Reported-by: kernel test robot <lkp@intel.com> > > > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > > > > --- > > > > arch/arm/kernel/vmlinux.lds.S | 4 ++++ > > > > 1 file changed, 4 insertions(+) > > > > > > > > diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S > > > > index 5f4922e858d0..a2c0d96b0580 100644 > > > > --- a/arch/arm/kernel/vmlinux.lds.S > > > > +++ b/arch/arm/kernel/vmlinux.lds.S > > > > @@ -40,6 +40,10 @@ SECTIONS > > > > ARM_DISCARD > > > > #ifndef CONFIG_SMP_ON_UP > > > > *(.alt.smp.init) > > > > +#endif > > > > +#ifndef CONFIG_ARM_UNWIND > > > > + *(.ARM.exidx*) > > > > > > I don't think we need the wildcard, as without this line, I see: > > > > > > ld.lld: warning: <internal>:(.ARM.exidx) is being placed in '.ARM.exidx' > > > > We may need the wildcard if there are -ffunction-sections builds. > > In clang, .ARM.exidx* cannot be removed even with -fno-unwind-tables > > -fno-exceptions. > > Does it need to be: > > *(.ARM.exidx) *(.ARM.exidx.*) > *(.ARM.extab) *(.ARM.extab.*) > > ? I tested the patch and saw no warnings with what I sent. I can change it to that if it is more proper though! > > > > > though I do see binutils linker scripts use precisely what you have. > > > So I guess that's fine. > > > > > > I guess we can't reuse `ARM_UNWIND_SECTIONS` since the ALIGN and > > > linker-script-defined-symbols would be weird in a DISCARD clause? > > > > > > > > > > + *(.ARM.extab*) > > > > #endif > > > > } > > > > > > > > > > > > base-commit: 6e0bf0e0e55000742a53c5f3b58f8669e0091a11 > > > > -- > > > > > > > > > -- > > > Thanks, > > > ~Nick Desaulniers > > > > > > -- > > > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > > > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. > > > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/CAKwvOd%3D%2B98r6F4JjrPEoWX88WQ%3DB-KMRP2eWojabLk6it3i5KA%40mail.gmail.com. > > > > > > > > -- > > 宋方睿 > > -- > Kees Cook Cheers, Nathan ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections 2020-10-13 3:26 ` Nathan Chancellor @ 2020-10-13 22:56 ` Nick Desaulniers 0 siblings, 0 replies; 6+ messages in thread From: Nick Desaulniers @ 2020-10-13 22:56 UTC (permalink / raw) To: Nathan Chancellor Cc: Kees Cook, Fāng-ruì Sòng, Ingo Molnar, Russell King, Linux ARM, LKML, clang-built-linux, kernel test robot On Mon, Oct 12, 2020 at 8:26 PM Nathan Chancellor <natechancellor@gmail.com> wrote: > > On Mon, Oct 12, 2020 at 02:26:52PM -0700, Kees Cook wrote: > > On Mon, Oct 12, 2020 at 02:22:03PM -0700, Fāng-ruì Sòng wrote: > > > On Mon, Oct 12, 2020 at 2:11 PM 'Nick Desaulniers' via Clang Built > > > Linux <clang-built-linux@googlegroups.com> wrote: > > > > > > > > Please submit to: > > > > https://www.arm.linux.org.uk/developer/patches/add.php > > This should go through the tip tree (hence sending it straight to Ingo) > since the patch that this fixes was there. I guess it does not > necessarily matter now that the breakage is in mainline but basing a > set of patches on a non -rc tag is a little taboo I thought so not sure > it is appropriate to go through Russell for now. It is up to the > maintainers though, I will submit it wherever it needs to go. Ah got it, yeah I don't really care which tree this goes up in. > > > > > > > > > > > Fixes: 5a17850e251a ("arm/build: Warn on orphan section placement") > > > > > Link: https://github.com/ClangBuiltLinux/linux/issues/1152 > > > > > Reported-by: kernel test robot <lkp@intel.com> > > > > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > > > > > --- > > > > > arch/arm/kernel/vmlinux.lds.S | 4 ++++ > > > > > 1 file changed, 4 insertions(+) > > > > > > > > > > diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S > > > > > index 5f4922e858d0..a2c0d96b0580 100644 > > > > > --- a/arch/arm/kernel/vmlinux.lds.S > > > > > +++ b/arch/arm/kernel/vmlinux.lds.S > > > > > @@ -40,6 +40,10 @@ SECTIONS > > > > > ARM_DISCARD > > > > > #ifndef CONFIG_SMP_ON_UP > > > > > *(.alt.smp.init) > > > > > +#endif > > > > > +#ifndef CONFIG_ARM_UNWIND > > > > > + *(.ARM.exidx*) > > > > > > > > I don't think we need the wildcard, as without this line, I see: > > > > > > > > ld.lld: warning: <internal>:(.ARM.exidx) is being placed in '.ARM.exidx' > > > > > > We may need the wildcard if there are -ffunction-sections builds. > > > In clang, .ARM.exidx* cannot be removed even with -fno-unwind-tables > > > -fno-exceptions. > > > > Does it need to be: > > > > *(.ARM.exidx) *(.ARM.exidx.*) > > *(.ARM.extab) *(.ARM.extab.*) > > > > ? > > I tested the patch and saw no warnings with what I sent. I can change it > to that if it is more proper though! We don't have LTO working on 32b ARM yet, so I'm not worried about -ffunction-sections for this (yet). The ld.bfd linker scripts didn't seem to use the non-wildcard and wildcard suggestion; just the wildcarded. (Maybe they have the same "bug?") I'm happy to revisit though if we plan to get LTO up and running on 32b ARM. -- Thanks, ~Nick Desaulniers ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-10-14 9:24 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-09-28 22:48 [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections Nathan Chancellor 2020-10-12 21:10 ` Nick Desaulniers 2020-10-12 21:22 ` Fāng-ruì Sòng 2020-10-12 21:26 ` Kees Cook 2020-10-13 3:26 ` Nathan Chancellor 2020-10-13 22:56 ` Nick Desaulniers
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).