# SPDX-License-Identifier: GPL-2.0-only

config HAVE_ARCH_KGDB
	bool

# set if architecture has the its kgdb_arch_handle_qxfer_pkt
# function to enable gdb stub to address XML packet sent from GDB.
config HAVE_ARCH_KGDB_QXFER_PKT
	bool

menuconfig KGDB
	bool "KGDB: kernel debugger"
	depends on HAVE_ARCH_KGDB
	depends on DEBUG_KERNEL
	help
	  If you say Y here, it will be possible to remotely debug the
	  kernel using gdb.  It is recommended but not required, that
	  you also turn on the kernel config option
	  CONFIG_FRAME_POINTER to aid in producing more reliable stack
	  backtraces in the external debugger.  Documentation of
	  kernel debugger is available at http://kgdb.sourceforge.net
	  as well as in Documentation/dev-tools/kgdb.rst.  If
	  unsure, say N.

if KGDB

config KGDB_SERIAL_CONSOLE
	tristate "KGDB: use kgdb over the serial console"
	select CONSOLE_POLL
	select MAGIC_SYSRQ
	depends on TTY && HW_CONSOLE
	default y
	help
	  Share a serial console with kgdb. Sysrq-g must be used
	  to break in initially.

config KGDB_TESTS
	bool "KGDB: internal test suite"
	default n
	help
	  This is a kgdb I/O module specifically designed to test
	  kgdb's internal functions.  This kgdb I/O module is
	  intended to for the development of new kgdb stubs
	  as well as regression testing the kgdb internals.
	  See the drivers/misc/kgdbts.c for the details about
	  the tests.  The most basic of this I/O module is to boot
	  a kernel boot arguments "kgdbwait kgdbts=V1F100"

config KGDB_TESTS_ON_BOOT
	bool "KGDB: Run tests on boot"
	depends on KGDB_TESTS
	default n
	help
	  Run the kgdb tests on boot up automatically without the need
	  to pass in a kernel parameter

config KGDB_TESTS_BOOT_STRING
	string "KGDB: which internal kgdb tests to run"
	depends on KGDB_TESTS_ON_BOOT
	default "V1F100"
	help
	  This is the command string to send the kgdb test suite on
	  boot.  See the drivers/misc/kgdbts.c for detailed
	  information about other strings you could use beyond the
	  default of V1F100.

config KGDB_LOW_LEVEL_TRAP
       bool "KGDB: Allow debugging with traps in notifiers"
       depends on X86 || MIPS
       default n
       help
	 This will add an extra call back to kgdb for the breakpoint
	 exception handler which will allow kgdb to step through a
	 notify handler.

config KGDB_KDB
	bool "KGDB_KDB: include kdb frontend for kgdb"
	default n
	help
	  KDB frontend for kernel

config KDB_DEFAULT_ENABLE
	hex "KDB: Select kdb command functions to be enabled by default"
	depends on KGDB_KDB
	default 0x1
	help
	  Specifiers which kdb commands are enabled by default. This may
	  be set to 1 or 0 to enable all commands or disable almost all
	  commands.

	  Alternatively the following bitmask applies:

	    0x0002 - allow arbitrary reads from memory and symbol lookup
	    0x0004 - allow arbitrary writes to memory
	    0x0008 - allow current register state to be inspected
	    0x0010 - allow current register state to be modified
	    0x0020 - allow passive inspection (backtrace, process list, lsmod)
	    0x0040 - allow flow control management (breakpoint, single step)
	    0x0080 - enable signalling of processes
	    0x0100 - allow machine to be rebooted

	  The config option merely sets the default at boot time. Both
	  issuing 'echo X > /sys/module/kdb/parameters/cmd_enable' or
	  setting with kdb.cmd_enable=X kernel command line option will
	  override the default settings.

config KDB_KEYBOARD
	bool "KGDB_KDB: keyboard as input device"
	depends on VT && KGDB_KDB
	default n
	help
	  KDB can use a PS/2 type keyboard for an input device

config KDB_CONTINUE_CATASTROPHIC
	int "KDB: continue after catastrophic errors"
	depends on KGDB_KDB
	default "0"
	help
	  This integer controls the behaviour of kdb when the kernel gets a
	  catastrophic error, i.e. for a panic or oops.
	  When KDB is active and a catastrophic error occurs, nothing extra
	  will happen until you type 'go'.
	  CONFIG_KDB_CONTINUE_CATASTROPHIC == 0 (default). The first time
	  you type 'go', you will be warned by kdb. The secend time you type
	  'go', KDB tries to continue. No guarantees that the
	  kernel is still usable in this situation.
	  CONFIG_KDB_CONTINUE_CATASTROPHIC == 1. KDB tries to continue.
	  No guarantees that the kernel is still usable in this situation.
	  CONFIG_KDB_CONTINUE_CATASTROPHIC == 2. KDB forces a reboot.
	  If you are not sure, say 0.

config ARCH_HAS_EARLY_DEBUG
	bool
	default n
	help
	  If an architecture can definitely handle entering the debugger
	  when early_param's are parsed then it select this config.
	  Otherwise, if "kgdbwait" is passed on the kernel command line it
	  won't actually be processed until dbg_late_init() just after the
	  call to kgdb_arch_late() is made.

	  NOTE: Even if this isn't selected by an architecture we will
	  still try to register kgdb to handle breakpoints and crashes
	  when early_param's are parsed, we just won't act on the
	  "kgdbwait" parameter until dbg_late_init().  If you get a
	  crash and try to drop into kgdb somewhere between these two
	  places you might or might not end up being able to use kgdb
	  depending on exactly how far along the architecture has initted.

endif # KGDB
