blob: 73af1703cd7779653be18dc18f3f4e4fe332c870 [file] [log] [blame]
# Kconfig - debug configuration options
#
# Copyright (c) 2015 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
menu "Debugging Options"
config DEBUG
bool "Build kernel with debugging enabled"
default n
help
Build a kernel suitable for debugging. Right now, this option
only disables optimization, more debugging variants can be selected
from here to allow more debugging.
config STACK_USAGE
bool "Generate stack usage information"
default n
help
Generate an extra file that specifies the maximum amount of stack used,
on a per-function basis.
config STACK_SENTINEL
bool "Enable stack sentinel"
select THREAD_STACK_INFO
default n
help
Store a magic value at the lowest addresses of a thread's stack.
Periodically check that this value is still present and kill the
thread gracefully if it isn't. This is currently checked in four
places:
1) Upon any context switch for the outgoing thread
2) Any hardware interrupt that doesn't context switch, the check is
performed for the interrupted thread
3) When a thread returns from its entry point
4) When a thread calls k_yield() but doesn't context switch
This feature doesn't prevent corruption and the system may be
in an unusable state. However, given the bizarre behavior associated
with stack overflows, knowledge that this is happening is very
useful.
This feature is intended for those systems which lack hardware support
for stack overflow protection, or have insufficient system resources
to use that hardware support.
config PRINTK
bool
prompt "Send printk() to console"
depends on CONSOLE_HAS_DRIVER
default y
help
This option directs printk() debugging output to the supported
console device, rather than suppressing the generation
of printk() output entirely. Output is sent immediately, without
any mutual exclusion or buffering.
config PRINTK_BUFFER_SIZE
int
prompt "printk() buffer size"
depends on PRINTK
depends on USERSPACE
default 32
help
If userspace is enabled, printk() calls are buffered so that we do
not have to make a system call for every character emitted. Specify
the size of this buffer.
config STDOUT_CONSOLE
bool
prompt "Send stdout to console"
depends on CONSOLE_HAS_DRIVER
default n
help
This option directs standard output (e.g. printf) to the console
device, rather than suppressing it entirely.
config EARLY_CONSOLE
bool
prompt "Send stdout at the earliest stage possible"
default n
help
This option will enable stdout as early as possible, for debugging
purpose. For instance, in case of STDOUT_CONSOLE being set it will
initialize its driver earlier than normal, in order to get the stdout
sent through the console at the earliest stage possible.
config ASSERT
bool
prompt "Enable __ASSERT() macro"
default n
help
This enables the __ASSERT() macro in the kernel code. If an assertion
fails, the calling thread is put on an infinite tight loop. Since
enabling this adds a significant footprint, it should only be enabled
in a non-production system.
config ASSERT_LEVEL
int
prompt "__ASSERT() level"
default 2
range 0 2
depends on ASSERT
help
This option specifies the assertion level used by the __ASSERT()
macro. It can be set to one of three possible values:
Level 0: off
Level 1: on + warning in every file that includes __assert.h
Level 2: on + no warning
config OBJECT_TRACING
bool
prompt "Kernel object tracing"
default n
help
This option enable the feature for tracing kernel objects. This option
is for debug purposes and increases the memory footprint of the kernel.
config OVERRIDE_FRAME_POINTER_DEFAULT
bool
prompt "Override compiler defaults for -fomit-frame-pointer"
default n
help
Omitting the frame pointer prevents the compiler from putting the stack
frame pointer into a register. Saves a few instructions in function
prologues/epilogues and frees up a register for general-purpose use,
which can provide good performance improvements on register-constrained
architectures like x86. On some architectures (including x86) omitting
frame pointers impedes debugging as local variables are harder to
locate. At -O1 and above gcc will enable -fomit-frame-pointer
automatically but only if the architecture does not require if for
effective debugging.
Choose Y if you want to override the default frame pointer behavior
of your compiler, otherwise choose N.
config OMIT_FRAME_POINTER
bool
prompt "Omit frame pointer"
default n
depends on OVERRIDE_FRAME_POINTER_DEFAULT
help
Choose Y for best performance. On some architectures (including x86)
this will favor code size and performance over debugability.
Choose N in you wish to retain the frame pointer. This option may
be useful if your application uses runtime backtracing and does not
support parsing unwind tables.
If unsure, disable OVERRIDE_FRAME_POINTER_DEFAULT to allow the compiler
to adopt sensible defaults for your architecture.
#
# Generic Debugging Options
#
config DEBUG_INFO
bool "Enable system debugging information"
default n
depends on X86
help
This option enables the addition of various information that can be used
by debuggers in debugging the system.
NOTE: Does not currently work with the x86 IAMCU ABI.
#
# Miscellaneous debugging options
#
config GDB_INFO
bool
prompt "Thread-aware debugging with GDB"
default n
help
This option enables the kernel to collect additional information
during interrupts, exceptions, and context switches. This information
is required for thread-aware debugging with GDB.
config OPENOCD_SUPPORT
bool
prompt "OpenOCD support [EXPERIMENTAL]"
default n
select THREAD_MONITOR
help
This option exports an array of offsets to kernel structs, used by
OpenOCD to determine the state of running threads. (This option
selects CONFIG_THREAD_MONITOR, so all of its caveats are implied.)
endmenu