linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nick Desaulniers <ndesaulniers@google.com>
To: Nathan Chancellor <natechancellor@gmail.com>
Cc: Kees Cook <keescook@chromium.org>, Ingo Molnar <mingo@kernel.org>,
	Russell King <linux@armlinux.org.uk>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	clang-built-linux <clang-built-linux@googlegroups.com>,
	kernel test robot <lkp@intel.com>
Subject: Re: [PATCH] arm/build: Always handle .ARM.exidx and .ARM.extab sections
Date: Mon, 12 Oct 2020 14:10:50 -0700	[thread overview]
Message-ID: <CAKwvOd=+98r6F4JjrPEoWX88WQ=B-KMRP2eWojabLk6it3i5KA@mail.gmail.com> (raw)
In-Reply-To: <20200928224854.3224862-1-natechancellor@gmail.com>

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

  reply	other threads:[~2020-10-12 21:11 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKwvOd=+98r6F4JjrPEoWX88WQ=B-KMRP2eWojabLk6it3i5KA@mail.gmail.com' \
    --to=ndesaulniers@google.com \
    --cc=clang-built-linux@googlegroups.com \
    --cc=keescook@chromium.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=lkp@intel.com \
    --cc=mingo@kernel.org \
    --cc=natechancellor@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).