| # Debug configuration options | |
| # Copyright (c) 2015 Wind River Systems, Inc. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| menu "System Monitoring Options" | |
| source "subsys/debug/thread_analyzer/Kconfig" | |
| endmenu | |
| menu "Debugging Options" | |
| config DEBUG | |
| bool "Build kernel with debugging enabled" | |
| 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 GPROF | |
| bool "Generate profiling information" | |
| depends on ARCH_POSIX | |
| help | |
| Generate call graph profile data for the application that can be | |
| analyzed with gprof | |
| config ASAN | |
| bool "Build with address sanitizer" | |
| depends on ARCH_POSIX | |
| help | |
| Builds Zephyr with Address Sanitizer enabled. This is currently | |
| only supported by boards based on the posix architecture, and requires a | |
| recent-ish compiler with the ``-fsanitize=address`` command line option, | |
| and the libasan library. | |
| Note that at exit leak detection is disabled for 64-bit boards when | |
| GCC is used due to potential risk of a deadlock in libasan. | |
| This behavior can be changes by adding leak_check_at_exit=1 to the | |
| environment variable ASAN_OPTIONS. | |
| config ASAN_RECOVER | |
| bool "Continue after sanitizer errors" | |
| depends on ASAN | |
| default y | |
| help | |
| The default behavior of compiler sanitizers is to exit after | |
| the first error. Set this to y to enable the code to | |
| continue, which can be useful if a code base has known | |
| unsuppressed errors. You will also need to set | |
| "halt_on_error=0" in your ASAN_OPTIONS environment variable | |
| at runtime. | |
| config ASAN_NOP_DLCLOSE | |
| bool "Override host OS dlclose() with a NOP" | |
| default y if HAS_SDL | |
| depends on ASAN | |
| help | |
| Override host OS dlclose() with a NOP. | |
| This NOP implementation is needed as workaround for a known limitation in | |
| LSAN (leak sanitizer) that if dlcose is called before performing the leak | |
| check, "<unknown module>" is reported in the stack traces during the leak | |
| check and these can not be suppressed, see | |
| https://github.com/google/sanitizers/issues/89 for more info. | |
| config UBSAN | |
| bool "Build with undefined behavior sanitizer" | |
| help | |
| Builds Zephyr with Undefined Behavior Sanitizer enabled. This | |
| requires a recent-ish compiler with the ``-fsanitize=undefined`` | |
| command line option. | |
| choice UBSAN_MODE | |
| prompt "Undefined behavior sanitizer mode" | |
| depends on UBSAN | |
| default UBSAN_LIBRARY | |
| config UBSAN_LIBRARY | |
| bool "Call ubsan routines" | |
| depends on ARCH_POSIX || PICOLIBC | |
| help | |
| Call ubsan library routines when undefined behavior is detected | |
| at runtime. This provides information about the faulting | |
| condition along with the source filename, line number, types and | |
| values involved. This is currently only supported by boards | |
| based on the posix architecture or when building with picolibc. | |
| config UBSAN_TRAP | |
| bool "Call __builtin_trap" | |
| help | |
| When undefined behavior is detected, invoke __builtin_trap to | |
| cause an exception to be raised. This can be used on any target, | |
| but the lack of information makes figuring out the triggering | |
| code difficult. | |
| endchoice | |
| config MSAN | |
| bool "Build with memory sanitizer" | |
| depends on ARCH_POSIX | |
| help | |
| Builds Zephyr with the LLVM MemorySanitizer enabled. Works | |
| only on the posix architecture currently, and only with host | |
| compilers recent enough to support the feature (currently | |
| clang on x86_64 only). It cannot be used in tandem with | |
| CONFIG_ASAN due to clang limitations. You must choose one | |
| or the other (but can combine it with CONFIG_UBSAN if you | |
| like) | |
| config STACK_USAGE | |
| bool "Generate stack usage information" | |
| help | |
| Generate an extra file that specifies the maximum amount of stack used, | |
| on a per-function basis. | |
| config STACK_SENTINEL | |
| bool "Stack sentinel" | |
| select THREAD_STACK_INFO | |
| depends on MULTITHREADING | |
| depends on !USERSPACE | |
| depends on !MPU_STACK_GUARD | |
| 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 "Send printk() to console" | |
| 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 "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 EARLY_CONSOLE | |
| bool "Send stdout at the earliest stage possible" | |
| 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 "__ASSERT() macro" | |
| default y if TEST | |
| help | |
| This enables the __ASSERT() macro in the kernel code. If an assertion | |
| fails, the policy for what to do is controlled by the implementation | |
| of the assert_post_action() function, which by default will trigger | |
| a fatal error. | |
| Disabling this option will cause assertions to compile to nothing, | |
| improving performance and system footprint. | |
| if ASSERT | |
| config ASSERT_LEVEL | |
| int "__ASSERT() level" | |
| default 2 | |
| range 0 2 | |
| 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 SPIN_VALIDATE | |
| bool "Spinlock validation" | |
| depends on MULTITHREADING | |
| depends on MP_MAX_NUM_CPUS <= 4 | |
| default y if !FLASH || FLASH_SIZE > 32 | |
| help | |
| There's a spinlock validation framework available when asserts are | |
| enabled. It adds a relatively hefty overhead (about 3k or so) to | |
| kernel code size, don't use on platforms known to be small. | |
| config SPIN_LOCK_TIME_LIMIT | |
| int "Spin lock holding time limit in cycles" | |
| default 0 | |
| depends on SPIN_VALIDATE | |
| depends on SYSTEM_CLOCK_LOCK_FREE_COUNT | |
| help | |
| Assert at the time of unlocking the number of system clock cycles | |
| the lock has been held is less than the configured value. Requires | |
| the timer driver sys_clock_get_cycles_32() be lock free. | |
| config ASSERT_CUSTOM_HEADER | |
| bool "Include Custom Assert Header [EXPERIMENTAL]" | |
| select EXPERIMENTAL | |
| help | |
| When enabled, a custom application provided header, named | |
| "zephyr_custom_assert.h", is included at the end of __assert.h. This enables | |
| extension of the assert APIs at the macro level. Please use cautiously! | |
| The internal assert API may change in future releases. | |
| endif # ASSERT | |
| config FORCE_NO_ASSERT | |
| bool "Force-disable no assertions" | |
| help | |
| This boolean option disables Zephyr assertion testing even | |
| in circumstances (twister) where it is enabled via | |
| CFLAGS and not Kconfig. Added solely to be able to work | |
| around compiler bugs for specific tests. | |
| config ASSERT_VERBOSE | |
| bool "Verbose assertions" | |
| default y | |
| depends on PRINTK | |
| help | |
| This option enables printing an assert message with information about | |
| the assertion that occurred. This includes printing the location, | |
| the conditional expression and additional message specific to the | |
| assert. | |
| config ASSERT_NO_FILE_INFO | |
| bool "Disable file info for asserts" | |
| help | |
| This option removes the name and the path of the source file | |
| in which the assertion occurred. Enabling this will save | |
| target code space, and thus may be necessary for tiny targets. | |
| config ASSERT_NO_COND_INFO | |
| bool "Disable condition info for asserts" | |
| help | |
| This option removes the assert condition from the printed assert | |
| message. Enabling this will save target code space, and thus may be | |
| necessary for tiny targets. It is recommended to disable condition | |
| info before disabling file info since the condition can be found in | |
| the source using file info. | |
| config ASSERT_NO_MSG_INFO | |
| bool "Disable message for asserts" | |
| help | |
| This option removes the additional message from the printed assert. | |
| Enabling this will save target code space, and thus may be | |
| necessary for tiny targets. It is recommended to disable message | |
| before disabling file info since the message can be found in the | |
| source using file info. | |
| config ASSERT_TEST | |
| bool "Assert test mode" | |
| help | |
| This option enables the assert test mode, which allows the assert | |
| post action handler to return (i.e. not abort) when the asserted | |
| condition is false. The tests that validate the assert feature may | |
| select this option to allow the test to proceed by implementing a | |
| custom assert post action hook. | |
| config OVERRIDE_FRAME_POINTER_DEFAULT | |
| bool "Override compiler defaults for -fomit-frame-pointer" | |
| 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 "Omit frame pointer" | |
| depends on !FRAME_POINTER | |
| 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 debuggability. | |
| 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 EXCEPTION_STACK_TRACE | |
| bool "Attempt to print stack traces upon exceptions" | |
| default y | |
| depends on ARCH_STACKWALK | |
| help | |
| If the architecture fatal handling code supports it, attempt to | |
| print a stack trace of function memory addresses when an | |
| exception is reported. | |
| # | |
| # Miscellaneous debugging options | |
| # | |
| config DEBUG_THREAD_INFO | |
| bool "Thread awareness support" | |
| depends on !SMP | |
| select THREAD_MONITOR | |
| select THREAD_NAME | |
| help | |
| This option exports an array of offsets to kernel structs to allow | |
| for debugger RTOS plugins to determine the state of running threads. | |
| rsource "coredump/Kconfig" | |
| rsource "symtab/Kconfig" | |
| endmenu | |
| rsource "gdbstub/Kconfig" | |
| config SEGGER_DEBUGMON | |
| bool "Use Segger's J-Link debug monitor implementation" | |
| depends on CORTEX_M_DEBUG_MONITOR_HOOK | |
| help | |
| This option will enable Segger's implementation of | |
| the debug monitor interrupt, overriding the | |
| default z_arm_debug_monitor symbol. | |
| config MIPI_STP_DECODER | |
| bool "MIPI STPv2 decoder" | |
| depends on !BIG_ENDIAN | |
| help | |
| Module decodes a stream of STPv2 data. | |
| config CS_TRACE_DEFMT | |
| bool "Coresight Trace Deformatter" | |
| help | |
| Module is decoding data which is formatted using Coresight | |
| Trace Formatter, e.g. when data is put into ETR (Embedded Trace Router). | |
| config CPU_LOAD | |
| select TRACING | |
| depends on CPU_CORTEX_M || RISCV || CPU_CORTEX_A | |
| depends on !SMP | |
| bool "CPU load measurement" | |
| # Workaround for not being able to have commas in macro arguments | |
| DT_CHOSEN_Z_CPU_LOAD_COUNTER := zephyr,cpu-load-counter | |
| config CPU_LOAD_USE_COUNTER | |
| bool "Use counter" | |
| depends on $(dt_chosen_enabled,$(DT_CHOSEN_Z_CPU_LOAD_COUNTER)) | |
| default y | |
| select COUNTER | |
| help | |
| Use counter for tracking CPU idle time. | |
| config CPU_LOAD_LOG_PERIODICALLY | |
| int "Report period (in milliseconds)" | |
| depends on LOG | |
| default 0 | |
| help | |
| Specifies how often CPU load shall be logged. 0 means that there is no logging. | |
| module = CPU_LOAD | |
| module-str = cpu_load | |
| source "subsys/logging/Kconfig.template.log_config" |