lkml.org 
[lkml]   [2019]   [Sep]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 30/42] ARM: 8905/1: Emit __gnu_mcount_nc when using Clang 10.0.0 or newer
    Date
    From: Nathan Chancellor <natechancellor@gmail.com>

    [ Upstream commit b0fe66cf095016e0b238374c10ae366e1f087d11 ]

    Currently, multi_v7_defconfig + CONFIG_FUNCTION_TRACER fails to build
    with clang:

    arm-linux-gnueabi-ld: kernel/softirq.o: in function `_local_bh_enable':
    softirq.c:(.text+0x504): undefined reference to `mcount'
    arm-linux-gnueabi-ld: kernel/softirq.o: in function `__local_bh_enable_ip':
    softirq.c:(.text+0x58c): undefined reference to `mcount'
    arm-linux-gnueabi-ld: kernel/softirq.o: in function `do_softirq':
    softirq.c:(.text+0x6c8): undefined reference to `mcount'
    arm-linux-gnueabi-ld: kernel/softirq.o: in function `irq_enter':
    softirq.c:(.text+0x75c): undefined reference to `mcount'
    arm-linux-gnueabi-ld: kernel/softirq.o: in function `irq_exit':
    softirq.c:(.text+0x840): undefined reference to `mcount'
    arm-linux-gnueabi-ld: kernel/softirq.o:softirq.c:(.text+0xa50): more undefined references to `mcount' follow

    clang can emit a working mcount symbol, __gnu_mcount_nc, when
    '-meabi gnu' is passed to it. Until r369147 in LLVM, this was
    broken and caused the kernel not to boot with '-pg' because the
    calling convention was not correct. Always build with '-meabi gnu'
    when using clang but ensure that '-pg' (which is added with
    CONFIG_FUNCTION_TRACER and its prereq CONFIG_HAVE_FUNCTION_TRACER)
    cannot be added with it unless this is fixed (which means using
    clang 10.0.0 and newer).

    Link: https://github.com/ClangBuiltLinux/linux/issues/35
    Link: https://bugs.llvm.org/show_bug.cgi?id=33845
    Link: https://github.com/llvm/llvm-project/commit/16fa8b09702378bacfa3d07081afe6b353b99e60

    Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Reviewed-by: Stefan Agner <stefan@agner.ch>
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm/Kconfig | 2 +-
    arch/arm/Makefile | 4 ++++
    2 files changed, 5 insertions(+), 1 deletion(-)

    diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
    index 3539be8700558..6029d324911cf 100644
    --- a/arch/arm/Kconfig
    +++ b/arch/arm/Kconfig
    @@ -75,7 +75,7 @@ config ARM
    select HAVE_EXIT_THREAD
    select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
    select HAVE_FUNCTION_GRAPH_TRACER if !THUMB2_KERNEL && !CC_IS_CLANG
    - select HAVE_FUNCTION_TRACER if !XIP_KERNEL
    + select HAVE_FUNCTION_TRACER if !XIP_KERNEL && (CC_IS_GCC || CLANG_VERSION >= 100000)
    select HAVE_GCC_PLUGINS
    select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)
    select HAVE_IDE if PCI || ISA || PCMCIA
    diff --git a/arch/arm/Makefile b/arch/arm/Makefile
    index f863c6935d0e5..c0b2783583016 100644
    --- a/arch/arm/Makefile
    +++ b/arch/arm/Makefile
    @@ -112,6 +112,10 @@ ifeq ($(CONFIG_ARM_UNWIND),y)
    CFLAGS_ABI +=-funwind-tables
    endif

    +ifeq ($(CONFIG_CC_IS_CLANG),y)
    +CFLAGS_ABI += -meabi gnu
    +endif
    +
    # Accept old syntax despite ".syntax unified"
    AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)

    --
    2.20.1
    \
     
     \ /
      Last update: 2019-09-29 19:42    [W:3.606 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site