# Copyright (c) 2020 Intel Corporation.
# SPDX-License-Identifier: Apache-2.0

menuconfig DEBUG_COREDUMP
	bool "Enable Core Dump"
	depends on ARCH_SUPPORTS_COREDUMP
	help
	  Enable core dump so it can be used for offline debugging.

if DEBUG_COREDUMP

choice
	prompt "Coredump backend"
	default DEBUG_COREDUMP_BACKEND_LOGGING if LOG

config DEBUG_COREDUMP_BACKEND_LOGGING
	bool "Use Logging subsystem for coredump"
	depends on LOG
	help
	  Core dump is done via logging subsystem.

config DEBUG_COREDUMP_BACKEND_FLASH_PARTITION
	bool "Use flash partition for coredump"
	depends on FLASH
	select FLASH_MAP
	select STREAM_FLASH
	help
	  Core dump is saved to a flash partition with DTS alias
	  "coredump-partition".

endchoice

choice
	prompt "Memory dump"
	default DEBUG_COREDUMP_MEMORY_DUMP_LINKER_RAM

config DEBUG_COREDUMP_MEMORY_DUMP_MIN
	bool "Minimal"
	select THREAD_STACK_INFO
	help
	  Only dumps the bare minimum memory content.
	  For example, the thread struct and stack of
	  the exception thread will be dumped.

	  Don't use this unless you want absolutely
	  minimum core dump.

config DEBUG_COREDUMP_MEMORY_DUMP_LINKER_RAM
	bool "RAM defined by linker section"
	help
	  Dumps the memory region between _image_ram_start[]
	  and _image_ram_end[]. This includes at least data,
	  noinit, and BSS sections.

	  This is the default.

endchoice

config DEBUG_COREDUMP_SHELL
	bool "Enable Coredump shell"
	default y
	depends on SHELL
	help
	  This shell provides access to coredump and its backends.

endif # DEBUG_COREDUMP
