• Nathan Chancellor's avatar
    arm/build: Always handle .ARM.exidx and .ARM.extab sections · c39866f2
    Nathan Chancellor authored
    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: 5a17850e ("arm/build: Warn on orphan section placement")
    Link: https://github.com/ClangBuiltLinux/linux/issues/1152Reported-by: default avatarkernel test robot <lkp@intel.com>
    Signed-off-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Review-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Tested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    [kees: Made the discard slightly more specific]
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20200928224854.3224862-1-natechancellor@gmail.com
    c39866f2
vmlinux.lds.S 3.39 KB