# 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".

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

endif # DEBUG_COREDUMP
