# 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 DEBUG_COREDUMP_BACKEND
	prompt "Coredump backend"
	default DEBUG_COREDUMP_BACKEND_LOGGING

config DEBUG_COREDUMP_BACKEND_LOGGING
	bool "Use Logging subsystem for coredump"
	select 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"
	depends on DT_HAS_INTEL_ADSP_MEM_WINDOW_ENABLED
	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 DEBUG_COREDUMP_MEMORY_DUMP
	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"
	depends on SHELL
	help
	  This shell provides access to coredump and its backends.

endif # DEBUG_COREDUMP
