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

menuconfig GDBSTUB
	bool "GDB remote serial protocol support [EXPERIMENTAL]"
	depends on ARCH_HAS_GDBSTUB
	select UART_USE_RUNTIME_CONFIGURE if SERIAL
	select EXPERIMENTAL
	help
	  This option enable support the target using GDB, or any other
	  application that supports GDB protocol.

if GDBSTUB

choice
	prompt "GDB backend"

config GDBSTUB_SERIAL_BACKEND
	bool "Use serial backend"
	depends on SERIAL
	help
	  Use serial as backend for GDB

config GDBSTUB_CUSTOM_BACKEND
	bool "Use a custom backend"
	help
	  Use a custom backend for GDB

endchoice

config GDBSTUB_BUF_SZ
	int "GDB backend send/receive buffer size (in bytes)"
	default 256
	help
	  This specifies the size (in bytes) of the send/receive buffer
	  for GDB backend. This needs to be big enough to hold one
	  full GDB packet at a time.

config GDBSTUB_TRACE
	bool "GDB backend extra logging"
	help
	  Enable extra debug logging for the GDB backend, including
	  breakpoint interrupts and remote commands it receives.

config GDBSTUB_ENTER_IMMEDIATELY
	bool "Stop execution and enter the GDB stub at boot"
	default y
	help
	  Functions like QEMU's -S. If enabled, boot will halt before user code
	  starts execution and GDB stub will wait for connection.

endif # GDBSTUB
