lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 093/340] MIPS: properly stop .eh_frame generation
    Date
    From: Alexander Lobakin <alobakin@pm.me>

    [ Upstream commit 894ef530012fb5078466efdfb2c15d8b2f1565cd ]

    Commit 866b6a89c6d1 ("MIPS: Add DWARF unwinding to assembly") added
    -fno-asynchronous-unwind-tables to KBUILD_CFLAGS to prevent compiler
    from emitting .eh_frame symbols.
    However, as MIPS heavily uses CFI, that's not enough. Use the
    approach taken for x86 (as it also uses CFI) and explicitly put CFI
    symbols into the .debug_frame section (except for VDSO).
    This allows us to drop .eh_frame from DISCARDS as it's no longer
    being generated.

    Fixes: 866b6a89c6d1 ("MIPS: Add DWARF unwinding to assembly")
    Suggested-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Alexander Lobakin <alobakin@pm.me>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/mips/include/asm/asm.h | 18 ++++++++++++++++++
    arch/mips/kernel/vmlinux.lds.S | 1 -
    2 files changed, 18 insertions(+), 1 deletion(-)

    diff --git a/arch/mips/include/asm/asm.h b/arch/mips/include/asm/asm.h
    index c23527ba65d09..64bffc1f75e0c 100644
    --- a/arch/mips/include/asm/asm.h
    +++ b/arch/mips/include/asm/asm.h
    @@ -20,10 +20,27 @@
    #include <asm/sgidefs.h>
    #include <asm/asm-eva.h>

    +#ifndef __VDSO__
    +/*
    + * Emit CFI data in .debug_frame sections, not .eh_frame sections.
    + * We don't do DWARF unwinding at runtime, so only the offline DWARF
    + * information is useful to anyone. Note we should change this if we
    + * ever decide to enable DWARF unwinding at runtime.
    + */
    +#define CFI_SECTIONS .cfi_sections .debug_frame
    +#else
    + /*
    + * For the vDSO, emit both runtime unwind information and debug
    + * symbols for the .dbg file.
    + */
    +#define CFI_SECTIONS
    +#endif
    +
    /*
    * LEAF - declare leaf routine
    */
    #define LEAF(symbol) \
    + CFI_SECTIONS; \
    .globl symbol; \
    .align 2; \
    .type symbol, @function; \
    @@ -36,6 +53,7 @@ symbol: .frame sp, 0, ra; \
    * NESTED - declare nested routine entry point
    */
    #define NESTED(symbol, framesize, rpc) \
    + CFI_SECTIONS; \
    .globl symbol; \
    .align 2; \
    .type symbol, @function; \
    diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
    index 09770a4d97846..faf98f209b3f4 100644
    --- a/arch/mips/kernel/vmlinux.lds.S
    +++ b/arch/mips/kernel/vmlinux.lds.S
    @@ -226,6 +226,5 @@ SECTIONS
    *(.options)
    *(.pdr)
    *(.reginfo)
    - *(.eh_frame)
    }
    }
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-01 23:16    [W:2.259 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site