| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 | 
							- # Debug configuration options
 
- # Copyright (c) 2015 Wind River Systems, Inc.
 
- # SPDX-License-Identifier: Apache-2.0
 
- menu "System Monitoring Options"
 
- menuconfig THREAD_ANALYZER
 
- 	bool "Enable Thread analyzer"
 
- 	select INIT_STACKS
 
- 	select THREAD_MONITOR
 
- 	select THREAD_STACK_INFO
 
- 	select THREAD_RUNTIME_STATS
 
- 	help
 
- 	  Enable thread analyzer functionality and all the required modules.
 
- 	  This module may be used to debug thread configuration issues, e.g.
 
- 	  stack size configuration to find stack overflow or to find stacks
 
- 	  which may be optimized.
 
- if THREAD_ANALYZER
 
- module = THREAD_ANALYZER
 
- module-str = thread analyzer
 
- source "${ZEPHYR_BASE}/subsys/logging/Kconfig.template.log_config"
 
- choice
 
- 	prompt "Thread analysis print mode"
 
- config THREAD_ANALYZER_USE_LOG
 
- 	bool "Use logger output"
 
- 	select LOG
 
- 	help
 
- 	  Use logger output to print thread information.
 
- config THREAD_ANALYZER_USE_PRINTK
 
- 	bool "Use printk function"
 
- 	help
 
- 	  Use kernel printk function to print thread information.
 
- endchoice
 
- config THREAD_ANALYZER_RUN_UNLOCKED
 
- 	bool "Run analysis with interrupts unlocked"
 
- 	default y
 
- 	help
 
- 	  The thread analysis takes quite a long time.
 
- 	  Every thread it finds is analyzed word by word to find any that
 
- 	  does not match the magic number.
 
- 	  Normally while thread are analyzed the k_thread_foreach function
 
- 	  is used.
 
- 	  While this is a safe run from the thread list perspective it may lock
 
- 	  the interrupts for a long time - long enough to disconnect when
 
- 	  Bluetooth communication is used.
 
- 	  Setting this flag will force thread analyzer to use
 
- 	  the k_thread_foreach_unlocked function.
 
- 	  This will allow the interrupts to be processed while the thread is
 
- 	  analyzed.
 
- 	  For the limitation of such configuration see the k_thread_foreach
 
- 	  documentation.
 
- config THREAD_ANALYZER_AUTO
 
- 	bool "Run periodic thread analysis in a thread"
 
- 	help
 
- 	  Run the thread analyzer automatically, without the need to add
 
- 	  any code to the application.
 
- 	  Thread analysis would be called periodically.
 
- if THREAD_ANALYZER_AUTO
 
- config THREAD_ANALYZER_AUTO_INTERVAL
 
- 	int "Thread analysis interval"
 
- 	default 60
 
- 	range 5 3600
 
- 	help
 
- 	  The time in seconds to call thread analyzer periodic printing function.
 
- config THREAD_ANALYZER_AUTO_STACK_SIZE
 
- 	int "Stack size for the periodic thread analysis thread"
 
- 	default 1024
 
- endif # THREAD_ANALYZER_AUTO
 
- endif # THREAD_ANALYZER
 
- 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 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_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"
 
- 	depends on ARCH_POSIX
 
- 	help
 
- 	  Builds Zephyr with Undefined Behavior Sanitizer enabled.
 
- 	  This is currently only supported by boards based on the posix
 
- 	  architecture, and requires a recent-ish compiler with the
 
- 	  ``-fsanitize=undefined`` command line option.
 
- 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 "Enable stack sentinel"
 
- 	select THREAD_STACK_INFO
 
- 	depends on MULTITHREADING
 
- 	depends on !USERSPACE
 
- 	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 "Enable __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.
 
- config ASSERT_LEVEL
 
- 	int "__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 SPIN_VALIDATE
 
- 	bool "Enable spinlock validation"
 
- 	depends on ASSERT
 
- 	depends on MULTITHREADING
 
- 	depends on MP_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 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 "Enable verbose assertions"
 
- 	default y
 
- 	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 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 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"
 
- 	help
 
- 	  This option enables the addition of various information that can be
 
- 	  used by debuggers in debugging the system, or enable additional
 
- 	  debugging information to be reported at runtime.
 
- config EXCEPTION_STACK_TRACE
 
- 	bool "Attempt to print stack traces upon exceptions"
 
- 	default y
 
- 	depends on PRINTK
 
- 	depends on DEBUG_INFO
 
- 	depends on !OMIT_FRAME_POINTER
 
- 	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 OPENOCD_SUPPORT
 
- 	bool "OpenOCD support (DEPRECATED)"
 
- 	select DEBUG_THREAD_INFO
 
- 	help
 
- 	  This is deprecated, please use DEBUG_THREAD_INFO instead.
 
- 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.
 
- config MAGIC_SYSRQ
 
- 	bool "Magic SysRq key"
 
- 	default y if ARM
 
- 	depends on SHELL_BACKEND_SERIAL
 
- 	help
 
- 	  If you say Y here, you will have some control over the system even
 
- 	  if the system crashes for example during kernel debugging. Don't
 
- 	  say Y unless you really know what this hack does.
 
- rsource "coredump/Kconfig"
 
- endmenu
 
- config GDBSTUB
 
- 	bool "GDB remote serial protocol support [EXPERIMENTAL]"
 
- 	depends on ARCH_HAS_GDBSTUB
 
- 	help
 
- 	  This option enable support the target using GDB, or any other
 
- 	  application that supports GDB protocol.
 
- if GDBSTUB
 
- choice
 
- 	prompt "GDB backend"
 
- config GDBSTUB_SERIAL_BACKEND
 
- 	bool "Use serial backend"
 
- 	depends on SERIAL
 
- 	help
 
- 	  Use serial as backenf for GDB
 
- endchoice
 
- config GDBSTUB_SERIAL_BACKEND_NAME
 
- 	string "Serial Name"
 
- 	depends on GDBSTUB_SERIAL_BACKEND
 
- 	default "UART_0"
 
- 	help
 
- 	  Use serial as backenf for GDB
 
- endif
 
 
  |