MIPS: properly stop .eh_frame generation
authorAlexander Lobakin <alobakin@pm.me>
Sun, 10 Jan 2021 11:56:28 +0000 (11:56 +0000)
committerThomas Bogendoerfer <tsbogend@alpha.franken.de>
Fri, 15 Jan 2021 14:27:54 +0000 (15:27 +0100)
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>
arch/mips/include/asm/asm.h
arch/mips/kernel/vmlinux.lds.S

index 3682d1a0bb80845a445e9507499a76e61766dcfd..ea4b62ece336675d750c6966a4b0b373faee9106 100644 (file)
 #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;              \
index 09669a8fddecf56b5947865afef3f4bc4415bcf3..10d8f0dcb76bd3347747f44a131a9cd64fa780f3 100644 (file)
@@ -224,6 +224,5 @@ SECTIONS
                *(.options)
                *(.pdr)
                *(.reginfo)
-               *(.eh_frame)
        }
 }