# Kconfig - debug configuration options

#
# Copyright (c) 2015 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#


menu "Safe memory access"

config MEM_SAFE
	bool
	prompt "Enable safe memory access"
	default n
	help
	Add the routines available in mem_safe.h to the system. This is added
	as a kconfig option instead of simply linking against the library
	because some implementations might require initialization.

choice
prompt "Safe memory access implementation"
depends on MEM_SAFE
default MEM_SAFE_CHECK_BOUNDARIES

config MEM_SAFE_CHECK_BOUNDARIES
	bool
	prompt "Software validation of memory access within memory regions"
	help
	This implementation checks the application image's text/rodata
	boundaries for its read-only region and the data/bss/noinit boundaries
	for its read-write region, in software.

	Other regions can be added as needed by using the
	sys_mem_safe_region_add() API. The number of regions that can be added
	is controlled via the MEM_SAFE_NUM_REGIONS kconfig option.

	This implementation requires initialization and thus consumes some boot
	time.

endchoice

config MEM_SAFE_NUM_EXTRA_REGIONS
	int
	prompt "Number of safe memory access regions to be added at runtime"
	depends on MEM_SAFE_CHECK_BOUNDARIES
	default 0
	help
	The functions available in mem_safe.h check if memory is within
	read-only or read-write regions before accessing it instead of crashing.
	The kernel image is added as a valid region automatically, but other
	regions can be added if the application makes access to additional
	memory outside of the image's boundaries.

endmenu

#
# Generic Debugging Options
#
config DEBUG_INFO
	bool "Enable system debugging information"
	default n
	depends on X86 && !X86_IAMCU
	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.

#
# GDB Server options
#

config GDB_SERVER
	bool
	prompt "Enable GDB Server [EXPERIMENTAL]"
	default n
	select CACHE_FLUSHING
	select REBOOT
	select MEM_SAFE
	select DEBUG_INFO
	select UART_CONSOLE_DEBUG_SERVER_HOOKS
	help
	This option enables the GDB Server support.

config GDB_SERVER_MAX_SW_BP
	int "Maximum number of GDB Server Software breakpoints"
	default 100
	depends on GDB_SERVER
	help
	This option specifies the maximum number of Software breakpoints

config GDB_SERVER_INTERRUPT_DRIVEN
	bool
	prompt "Enable GDB interrupt mode"
	default y
	depends on GDB_SERVER
	select CONSOLE_HANDLER
	help
	This option enables interrupt support for GDB Server.

config GDB_REMOTE_SERIAL_EXT_NOTIF_PREFIX_STR
	string
	prompt "Trigger string for remote serial ext. via notifi. packets"
	default "WrCons"
	depends on GDB_SERVER
	help
	The value of this option depends on the string the GDB client use to
	prefix the notification packets.

config GDB_SERVER_BOOTLOADER
	bool
	prompt "Enable the bootloader mode"
	default n
	depends on GDB_SERVER
	help
	This option enables the bootloader mode of the GDB Server.

#
# Miscellaneous debugging options
#

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.)
