Lean Sheng Tan has submitted this change. ( https://review.coreboot.org/c/coreboot/+/81379?usp=email )
Change subject: Kconfig: Make GBD_STUB and long mode mutually exclusive ......................................................................
Kconfig: Make GBD_STUB and long mode mutually exclusive
GDB debugging is not implemented with x86 long mode.
Change-Id: Icaf7d0763829d5badf73d38bb8fc3d36cfe18964 Signed-off-by: Arthur Heymans arthur@aheymans.xyz Reviewed-on: https://review.coreboot.org/c/coreboot/+/81379 Reviewed-by: Martin L Roth gaumless@gmail.com Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Lean Sheng Tan sheng.tan@9elements.com Reviewed-by: Eric Lai ericllai@google.com --- M src/Kconfig M src/arch/x86/c_start.S M src/arch/x86/exception.c 3 files changed, 6 insertions(+), 3 deletions(-)
Approvals: build bot (Jenkins): Verified Martin L Roth: Looks good to me, approved Lean Sheng Tan: Looks good to me, but someone else must approve Eric Lai: Looks good to me, but someone else must approve
diff --git a/src/Kconfig b/src/Kconfig index 3a9a4e8..645d16c 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -1015,7 +1015,8 @@ config GDB_STUB bool "GDB debugging support" default n - depends on DRIVERS_UART +# FIXME Not implemented in long mode + depends on DRIVERS_UART && !USE_X86_64_SUPPORT help If enabled, you will be able to set breakpoints for gdb debugging. See src/arch/x86/c_start.S for details. diff --git a/src/arch/x86/c_start.S b/src/arch/x86/c_start.S index 6bea8db..94b9bd9 100644 --- a/src/arch/x86/c_start.S +++ b/src/arch/x86/c_start.S @@ -129,8 +129,9 @@ gdb_stub_breakpoint: #if ENV_X86_64 pop %rax /* Return address */ - pushfl - push %cs + pushfq + mov %cs, %rbx + push %rbx push %rax /* Return address */ push $0 /* No error code */ push $32 /* vector 32 is user defined */ diff --git a/src/arch/x86/exception.c b/src/arch/x86/exception.c index b8f0583..aecce7b 100644 --- a/src/arch/x86/exception.c +++ b/src/arch/x86/exception.c @@ -379,6 +379,7 @@ void x86_exception(struct eregs *info) { #if CONFIG(GDB_STUB) + /* TODO implement 64bit mode */ int signo; memcpy(gdb_stub_registers, info, 8*sizeof(uint32_t)); gdb_stub_registers[PC] = info->eip;