Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9b58e8c authored by Stefan Agner's avatar Stefan Agner Committed by Russell King
Browse files

ARM: 8800/1: use choice for kernel unwinders



While in theory multiple unwinders could be compiled in, it does
not make sense in practise. Use a choice to make the unwinder
selection mutually exclusive and mandatory.

Already before this commit it has not been possible to deselect
FRAME_POINTER. Remove the obsolete comment.

Furthermore, to produce a meaningful backtrace with FRAME_POINTER
enabled the kernel needs a specific function prologue:
    mov    ip, sp
    stmfd    sp!, {fp, ip, lr, pc}
    sub    fp, ip, #4

To get to the required prologue gcc uses apcs and no-sched-prolog.
This compiler options are not available on clang, and clang is not
able to generate the required prologue. Make the FRAME_POINTER
config symbol depending on !clang.

Suggested-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarStefan Agner <stefan@agner.ch>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
parent 3f539501
Loading
Loading
Loading
Loading
+28 −16
Original line number Diff line number Diff line
@@ -45,30 +45,42 @@ config DEBUG_WX

		If in doubt, say "Y".

# RMK wants arm kernels compiled with frame pointers or stack unwinding.
# If you know what you are doing and are willing to live without stack
# traces, you can get a slightly smaller kernel by setting this option to
# n, but then RMK will have to kill you ;).
config FRAME_POINTER
	bool
	depends on !THUMB2_KERNEL
	default y if !ARM_UNWIND || FUNCTION_GRAPH_TRACER
choice
	prompt "Choose kernel unwinder"
	default UNWINDER_ARM if AEABI && !FUNCTION_GRAPH_TRACER
	default UNWINDER_FRAME_POINTER if !AEABI || FUNCTION_GRAPH_TRACER
	help
	  If you say N here, the resulting kernel will be slightly smaller and
	  faster. However, if neither FRAME_POINTER nor ARM_UNWIND are enabled,
	  when a problem occurs with the kernel, the information that is
	  reported is severely limited.
	  This determines which method will be used for unwinding kernel stack
	  traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
	  livepatch, lockdep, and more.

config ARM_UNWIND
	bool "Enable stack unwinding support (EXPERIMENTAL)"
config UNWINDER_FRAME_POINTER
	bool "Frame pointer unwinder"
	depends on !THUMB2_KERNEL && !CC_IS_CLANG
	select ARCH_WANT_FRAME_POINTERS
	select FRAME_POINTER
	help
	  This option enables the frame pointer unwinder for unwinding
	  kernel stack traces.

config UNWINDER_ARM
	bool "ARM EABI stack unwinder"
	depends on AEABI
	default y
	select ARM_UNWIND
	help
	  This option enables stack unwinding support in the kernel
	  using the information automatically generated by the
	  compiler. The resulting kernel image is slightly bigger but
	  the performance is not affected. Currently, this feature
	  only works with EABI compilers. If unsure say Y.
	  only works with EABI compilers.

endchoice

config ARM_UNWIND
	bool

config FRAME_POINTER
	bool

config DEBUG_USER
	bool "Verbose user fault messages"
+3 −3
Original line number Diff line number Diff line
@@ -1179,7 +1179,7 @@ config LOCKDEP
	bool
	depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
	select STACKTRACE
	select FRAME_POINTER if !MIPS && !PPC && !ARM_UNWIND && !S390 && !MICROBLAZE && !ARC && !X86
	select FRAME_POINTER if !MIPS && !PPC && !ARM && !S390 && !MICROBLAZE && !ARC && !X86
	select KALLSYMS
	select KALLSYMS_ALL

@@ -1590,7 +1590,7 @@ config FAULT_INJECTION_STACKTRACE_FILTER
	depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
	depends on !X86_64
	select STACKTRACE
	select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC && !X86
	select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86
	help
	  Provide stacktrace filter for fault-injection capabilities

@@ -1599,7 +1599,7 @@ config LATENCYTOP
	depends on DEBUG_KERNEL
	depends on STACKTRACE_SUPPORT
	depends on PROC_FS
	select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC && !X86
	select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86
	select KALLSYMS
	select KALLSYMS_ALL
	select STACKTRACE