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

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
...@@ -45,30 +45,42 @@ config DEBUG_WX ...@@ -45,30 +45,42 @@ config DEBUG_WX
If in doubt, say "Y". If in doubt, say "Y".
# RMK wants arm kernels compiled with frame pointers or stack unwinding. choice
# If you know what you are doing and are willing to live without stack prompt "Choose kernel unwinder"
# traces, you can get a slightly smaller kernel by setting this option to default UNWINDER_ARM if AEABI && !FUNCTION_GRAPH_TRACER
# n, but then RMK will have to kill you ;). default UNWINDER_FRAME_POINTER if !AEABI || FUNCTION_GRAPH_TRACER
config FRAME_POINTER help
bool This determines which method will be used for unwinding kernel stack
depends on !THUMB2_KERNEL traces for panics, oopses, bugs, warnings, perf, /proc/<pid>/stack,
default y if !ARM_UNWIND || FUNCTION_GRAPH_TRACER livepatch, lockdep, and more.
config UNWINDER_FRAME_POINTER
bool "Frame pointer unwinder"
depends on !THUMB2_KERNEL && !CC_IS_CLANG
select ARCH_WANT_FRAME_POINTERS
select FRAME_POINTER
help help
If you say N here, the resulting kernel will be slightly smaller and This option enables the frame pointer unwinder for unwinding
faster. However, if neither FRAME_POINTER nor ARM_UNWIND are enabled, kernel stack traces.
when a problem occurs with the kernel, the information that is
reported is severely limited.
config ARM_UNWIND config UNWINDER_ARM
bool "Enable stack unwinding support (EXPERIMENTAL)" bool "ARM EABI stack unwinder"
depends on AEABI depends on AEABI
default y select ARM_UNWIND
help help
This option enables stack unwinding support in the kernel This option enables stack unwinding support in the kernel
using the information automatically generated by the using the information automatically generated by the
compiler. The resulting kernel image is slightly bigger but compiler. The resulting kernel image is slightly bigger but
the performance is not affected. Currently, this feature 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 config DEBUG_USER
bool "Verbose user fault messages" bool "Verbose user fault messages"
......
...@@ -1179,7 +1179,7 @@ config LOCKDEP ...@@ -1179,7 +1179,7 @@ config LOCKDEP
bool bool
depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
select STACKTRACE 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
select KALLSYMS_ALL select KALLSYMS_ALL
...@@ -1590,7 +1590,7 @@ config FAULT_INJECTION_STACKTRACE_FILTER ...@@ -1590,7 +1590,7 @@ config FAULT_INJECTION_STACKTRACE_FILTER
depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
depends on !X86_64 depends on !X86_64
select STACKTRACE 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 help
Provide stacktrace filter for fault-injection capabilities Provide stacktrace filter for fault-injection capabilities
...@@ -1599,7 +1599,7 @@ config LATENCYTOP ...@@ -1599,7 +1599,7 @@ config LATENCYTOP
depends on DEBUG_KERNEL depends on DEBUG_KERNEL
depends on STACKTRACE_SUPPORT depends on STACKTRACE_SUPPORT
depends on PROC_FS 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
select KALLSYMS_ALL select KALLSYMS_ALL
select STACKTRACE select STACKTRACE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment