⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debugger.h

📁 xen虚拟机源代码安装包
💻 H
字号:
/****************************************************************************** * asm/debugger.h *  * Generic hooks into arch-dependent Xen. *  * Each debugger should define two functions here: *  * 1. debugger_trap_entry():  *  Called at start of any synchronous fault or trap, before any other work *  is done. The idea is that if your debugger deliberately caused the trap *  (e.g. to implement breakpoints or data watchpoints) then you can take *  appropriate action and return a non-zero value to cause early exit from *  the trap function. *  * 2. 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) *  but really these should be hooked off 'debugger_trap_entry'. */#ifndef __ASM_DEBUGGER_H__#define __ASM_DEBUGGER_H__// this number is an arbitary number which is not used for any other purpose// __builtin_trap() 0x0// ski  0x80001, 0x80002// kdb  0x80100, 0x80101// kprobe 0x80200, jprobe 0x80300// kgdb 0x6665// gdb 0x99998 (#define IA64_BREAKPOINT 0x00003333300LL)// ltrace 0x80001 (NOTE: this conflicts ski)// cdb should handle 0 and CDB_BREAK_NUM.#define CDB_BREAK_NUM	0x80800#ifndef __ASSEMBLY__#include <xen/sched.h>#include <xen/softirq.h>#include <xen/gdbstub.h>#include <public/arch-ia64/debug_op.h>void show_registers(struct cpu_user_regs *regs);void dump_stack(void);static inline voidshow_execution_state(struct cpu_user_regs *regs){    show_registers(regs);}// NOTE: on xen struct pt_regs = struct cpu_user_regs//       see include/asm-ia64/linux-xen/asm/ptrace.h#ifdef CRASH_DEBUG// crash_debug=yextern int __trap_to_cdb(struct cpu_user_regs *r);static inline int debugger_trap_fatal(    unsigned int vector, struct cpu_user_regs *regs){	(void)__trap_to_gdb(regs, vector);    return 0;}#define ____debugger_trap_immediate(b) __asm__ __volatile__ ("break.m "#b"\n")#define __debugger_trap_immediate(b) ____debugger_trap_immediate(b)#define debugger_trap_immediate() __debugger_trap_immediate(CDB_BREAK_NUM)//XXX temporal work around#ifndef CONFIG_SMP#define smp_send_stop()	/* nothing */#endif#elsestatic inline int debugger_trap_fatal(    unsigned int vector, struct cpu_user_regs *regs){    return 0;}#define debugger_trap_immediate()		((void)0)#endifstatic inline int debugger_event(unsigned long event){    struct vcpu *v = current;    struct domain *d = v->domain;    if (unlikely (d->debugger_attached && (d->arch.debug_flags & event))) {        d->arch.debug_event = event;        domain_pause_for_debugger();        return 1;    }    return 0;}static inline int debugger_kernel_event(    struct cpu_user_regs *regs, unsigned long event){    struct vcpu *v = current;    struct domain *d = v->domain;    if (unlikely(d->debugger_attached && (d->arch.debug_flags & event)                 && guest_kernel_mode(regs))) {        d->arch.debug_event = event;        domain_pause_for_debugger();        return 1;    }    return 0;}#endif // __ASSEMBLLY__#endif /* __ASM_DEBUGGER_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -