diff --git a/xen/arch/x86/include/asm/bug.h b/xen/arch/x86/include/asm/bug.h index 7fe879a8ccb9..e748b6c2f269 100644 --- a/xen/arch/x86/include/asm/bug.h +++ b/xen/arch/x86/include/asm/bug.h @@ -21,8 +21,6 @@ #ifndef __ASSEMBLY__ -#define BUG_DEBUGGER_TRAP_FATAL(regs) debugger_trap_fatal(X86_EXC_GP,regs) - #define BUG_INSTR "ud2" #define BUG_ASM_CONST "c" diff --git a/xen/arch/x86/include/asm/debugger.h b/xen/arch/x86/include/asm/debugger.h deleted file mode 100644 index a5c299c6c34d..000000000000 --- a/xen/arch/x86/include/asm/debugger.h +++ /dev/null @@ -1,30 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/****************************************************************************** - * xen/arch/x86/include/asm/debugger.h - * - * x86-specific debugger hooks. - */ -#ifndef __X86_DEBUGGER_H__ -#define __X86_DEBUGGER_H__ - -#include -#include - -#include - -/* Returns true if GDB handled the trap, or it is surviveable. */ -static inline bool debugger_trap_fatal( - unsigned int vector, struct cpu_user_regs *regs) -{ - int rc = __trap_to_gdb(regs, vector); - - if ( rc == 0 ) - return true; - - return vector == X86_EXC_BP; -} - -/* Int3 is a trivial way to gather cpu_user_regs context. */ -#define debugger_trap_immediate() __asm__ __volatile__ ( "int3" ) - -#endif /* __X86_DEBUGGER_H__ */ diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 7724306116e9..5f4bcc0537f7 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -835,11 +834,6 @@ void fatal_trap(const struct cpu_user_regs *regs, bool show_remote) void asmlinkage do_unhandled_trap(struct cpu_user_regs *regs) { - unsigned int trapnr = regs->entry_vector; - - if ( debugger_trap_fatal(trapnr, regs) ) - return; - fatal_trap(regs, false); } @@ -941,9 +935,6 @@ void asmlinkage do_trap(struct cpu_user_regs *regs) return; hardware_trap: - if ( debugger_trap_fatal(trapnr, regs) ) - return; - fatal_trap(regs, false); } @@ -1190,9 +1181,6 @@ void asmlinkage do_invalid_op(struct cpu_user_regs *regs) if ( likely(extable_fixup(regs, true)) ) return; - if ( debugger_trap_fatal(X86_EXC_UD, regs) ) - return; - show_execution_state(regs); panic("FATAL TRAP: vector = %d (invalid opcode)\n", X86_EXC_UD); } @@ -1206,9 +1194,8 @@ void asmlinkage do_int3(struct cpu_user_regs *regs) if ( likely(extable_fixup(regs, true)) ) return; - if ( !debugger_trap_fatal(X86_EXC_BP, regs) ) - printk(XENLOG_DEBUG "Hit embedded breakpoint at %p [%ps]\n", - _p(regs->rip), _p(regs->rip)); + printk(XENLOG_DEBUG "Hit embedded breakpoint at %p [%ps]\n", + _p(regs->rip), _p(regs->rip)); return; } @@ -1294,9 +1281,6 @@ void do_general_protection(struct cpu_user_regs *regs) return; hardware_gp: - if ( debugger_trap_fatal(X86_EXC_GP, regs) ) - return; - show_execution_state(regs); panic("GENERAL PROTECTION FAULT\n[error_code=%04x]\n", regs->error_code); } @@ -1620,9 +1604,6 @@ void asmlinkage do_page_fault(struct cpu_user_regs *regs) } fatal: - if ( debugger_trap_fatal(X86_EXC_PF, regs) ) - return; - show_execution_state(regs); show_page_walk(addr); panic("FATAL PAGE FAULT\n" @@ -1933,11 +1914,8 @@ void asmlinkage do_debug(struct cpu_user_regs *regs) return; } #endif - if ( !debugger_trap_fatal(X86_EXC_DB, regs) ) - { - WARN(); - regs->eflags &= ~X86_EFLAGS_TF; - } + WARN(); + regs->eflags &= ~X86_EFLAGS_TF; } /* diff --git a/xen/common/bug.c b/xen/common/bug.c index ca166e102b4b..5fbe703a81b3 100644 --- a/xen/common/bug.c +++ b/xen/common/bug.c @@ -1,23 +1,4 @@ #include -/* - * Ideally should be included in - * but an issue with compilation can occur as uses - * BUG/ASSERT/etc macros inside but they will be defined later in - * after return from inclusion of : - * - * : - * ... - * : - * ... - * -> some of included header in it uses BUG/ASSERT/etc - * ... - * ... - * #define BUG() ... - * ... - * #define ASSERT() ... - * ... - */ -#include #include #include #include @@ -96,10 +77,6 @@ int do_bug_frame(struct cpu_user_regs *regs, unsigned long pc) case BUGFRAME_bug: printk("Xen BUG at %s%s:%d\n", prefix, filename, lineno); - - if ( BUG_DEBUGGER_TRAP_FATAL(regs) ) - break; - show_execution_state(regs); panic("Xen BUG at %s%s:%d\n", prefix, filename, lineno); @@ -111,10 +88,6 @@ int do_bug_frame(struct cpu_user_regs *regs, unsigned long pc) printk("Assertion '%s' failed at %s%s:%d\n", predicate, prefix, filename, lineno); - - if ( BUG_DEBUGGER_TRAP_FATAL(regs) ) - break; - show_execution_state(regs); panic("Assertion '%s' failed at %s%s:%d\n", predicate, prefix, filename, lineno); diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c index 99a2d72a0202..f131034d33ee 100644 --- a/xen/common/keyhandler.c +++ b/xen/common/keyhandler.c @@ -3,7 +3,6 @@ */ #include -#include #include #include #include @@ -29,8 +28,7 @@ static bool alt_key_handling; static keyhandler_fn_t cf_check show_handlers, cf_check dump_hwdom_registers, cf_check dump_domains, cf_check read_clocks; static irq_keyhandler_fn_t cf_check do_toggle_alt_key, cf_check dump_registers, - cf_check reboot_machine, cf_check run_all_keyhandlers, - cf_check do_debug_key; + cf_check reboot_machine, cf_check run_all_keyhandlers; static struct keyhandler { union { @@ -57,7 +55,6 @@ static struct keyhandler { IRQ_KEYHANDLER('R', reboot_machine, "reboot machine", 0), KEYHANDLER('t', read_clocks, "display multi-cpu clock info", 1), KEYHANDLER('0', dump_hwdom_registers, "dump Dom0 registers", 1), - IRQ_KEYHANDLER('%', do_debug_key, "trap to xendbg", 0), IRQ_KEYHANDLER('*', run_all_keyhandlers, "print all diagnostics", 0), #ifdef CONFIG_PERF_COUNTERS @@ -503,23 +500,6 @@ static void cf_check run_all_keyhandlers( tasklet_schedule(&run_all_keyhandlers_tasklet); } -static void cf_check do_debugger_trap_fatal(struct cpu_user_regs *regs) -{ - (void)debugger_trap_fatal(0xf001, regs); - - /* Prevent tail call optimisation, which confuses xendbg. */ - barrier(); -} - -static void cf_check do_debug_key(unsigned char key, struct cpu_user_regs *regs) -{ - printk("'%c' pressed -> trapping into debugger\n", key); - if ( regs ) - do_debugger_trap_fatal(regs); - else - run_in_exception_handler(do_debugger_trap_fatal); -} - static void cf_check do_toggle_alt_key( unsigned char key, struct cpu_user_regs *regs) { diff --git a/xen/common/shutdown.c b/xen/common/shutdown.c index dfd5e41097e9..5f8141edc6b2 100644 --- a/xen/common/shutdown.c +++ b/xen/common/shutdown.c @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include @@ -40,7 +39,6 @@ void hwdom_shutdown(u8 reason) machine_halt(); case SHUTDOWN_crash: - debugger_trap_immediate(); printk("Hardware Dom%u crashed: ", hardware_domain->domain_id); kexec_crash(CRASHREASON_HWDOM); reboot_or_halt(); diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index 0666564ec92e..dce0226e8711 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -1297,8 +1296,6 @@ void panic(const char *fmt, ...) spin_unlock_irqrestore(&lock, flags); - debugger_trap_immediate(); - kexec_crash(CRASHREASON_PANIC); if ( opt_noreboot ) diff --git a/xen/include/xen/bug.h b/xen/include/xen/bug.h index 8cca4486a477..4bd0be508825 100644 --- a/xen/include/xen/bug.h +++ b/xen/include/xen/bug.h @@ -16,10 +16,6 @@ #ifndef __ASSEMBLY__ -#ifndef BUG_DEBUGGER_TRAP_FATAL -#define BUG_DEBUGGER_TRAP_FATAL(regs) 0 -#endif - #include #include diff --git a/xen/include/xen/debugger.h b/xen/include/xen/debugger.h deleted file mode 100644 index 72684268aff7..000000000000 --- a/xen/include/xen/debugger.h +++ /dev/null @@ -1,44 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/****************************************************************************** - * Arch specific debuggers should implement: - * - * debugger_trap_fatal(): - * Called when Xen is about to give up and crash. Typically you will use this - * hook to drop into a debug session. It can also be used to hook off - * deliberately caused traps (which you then handle and return non-zero). - * - * debugger_trap_immediate(): - * Called if we want to drop into a debugger now. This is essentially the - * same as debugger_trap_fatal, except that we use the current register state - * rather than the state which was in effect when we took the trap. - * For example: if we're dying because of an unhandled exception, we call - * debugger_trap_fatal; if we're dying because of a panic() we call - * debugger_trap_immediate(). - */ - -#ifndef __XEN_DEBUGGER_H__ -#define __XEN_DEBUGGER_H__ - -#ifdef CONFIG_CRASH_DEBUG - -#include - -#else - -#include - -struct cpu_user_regs; - -static inline bool debugger_trap_fatal( - unsigned int vector, const struct cpu_user_regs *regs) -{ - return false; -} - -static inline void debugger_trap_immediate(void) -{ -} - -#endif /* CONFIG_CRASH_DEBUG */ - -#endif /* __XEN_DEBUGGER_H__ */