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

menuconfig DEBUG_COREDUMP
	bool "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".

config DEBUG_COREDUMP_BACKEND_INTEL_ADSP_MEM_WINDOW
	bool "Use memory window for coredump on Intel ADSP"
	help
	  Core dump is done via memory window slot[1].
	  It is Intel ADSP memory region shared with xtensa DSP.
	  Window 2 slot [1] is reserved for debuging information.

config DEBUG_COREDUMP_BACKEND_OTHER
	bool "Backend subsystem for coredump defined out of tree"
	help
	  Core dump is done via custom mechanism defined out of tree

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 "Coredump shell"
	default y
	depends on SHELL
	help
	  This shell provides access to coredump and its backends.

endif # DEBUG_COREDUMP
