diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-11-23 22:46:54 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-11-23 22:46:54 +0000 |
commit | 3a0b9c57d5c9e82c55dd967c84dd06cb43c49ee9 (patch) | |
tree | cf8cf77f7209358485ef309e4ec4a6f688ab685b /xen/include/asm-x86/debugger.h | |
parent | 172b6660d82e8d178d5ba7f843fd90c62ed21b67 (diff) | |
download | xen-3a0b9c57d5c9e82c55dd967c84dd06cb43c49ee9.tar.gz xen-3a0b9c57d5c9e82c55dd967c84dd06cb43c49ee9.tar.bz2 xen-3a0b9c57d5c9e82c55dd967c84dd06cb43c49ee9.zip |
bitkeeper revision 1.1159.187.3 (41a3bdde1DKDiUc_Vvg6h5QrnkHvJg)
Big rewrite of Xen->guest transition code. If we fault during the transition
then we roll back and reenable interrupts before properly handling the
fault. This means, for example, that shadow code always executes with
interrupts enabled.
Diffstat (limited to 'xen/include/asm-x86/debugger.h')
-rw-r--r-- | xen/include/asm-x86/debugger.h | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/xen/include/asm-x86/debugger.h b/xen/include/asm-x86/debugger.h index 4b32491d15..1d377c5060 100644 --- a/xen/include/asm-x86/debugger.h +++ b/xen/include/asm-x86/debugger.h @@ -25,17 +25,17 @@ #include <asm/processor.h> /* The main trap handlers use these helper macros which include early bail. */ -#define DEBUGGER_trap_entry(_v, _r, _e) \ - if ( debugger_trap_entry(_v, _r, _e) ) return EXCRET_fault_fixed; -#define DEBUGGER_trap_fatal(_v, _r, _e) \ - if ( debugger_trap_fatal(_v, _r, _e) ) return EXCRET_fault_fixed; +#define DEBUGGER_trap_entry(_v, _r) \ + if ( debugger_trap_entry(_v, _r) ) return EXCRET_fault_fixed; +#define DEBUGGER_trap_fatal(_v, _r) \ + if ( debugger_trap_fatal(_v, _r) ) return EXCRET_fault_fixed; #ifdef XEN_DEBUGGER #include <asm/pdb.h> static inline int debugger_trap_entry( - unsigned int vector, struct xen_regs *regs, unsigned int error_code) + unsigned int vector, struct xen_regs *regs) { int ret = 0; @@ -44,7 +44,7 @@ static inline int debugger_trap_entry( case TRAP_debug: if ( pdb_initialized ) { - pdb_handle_debug_trap(regs, (long)error_code); + pdb_handle_debug_trap(regs, regs->error_code); ret = 1; /* early exit */ } break; @@ -55,13 +55,14 @@ static inline int debugger_trap_entry( break; case TRAP_gp_fault: - if ( ((regs->cs & 3) != 0) && ((error_code & 3) == 2) && + if ( ((regs->cs & 3) != 0) && ((regs->error_code & 3) == 2) && pdb_initialized && (pdb_ctx.system_call != 0) ) { unsigned long cr3 = read_cr3(); if ( cr3 == pdb_ctx.ptbr ) pdb_linux_syscall_enter_bkpt( - regs, error_code, current->thread.traps + (error_code>>3)); + regs, regs->error_code, + current->thread.traps + (regs->error_code>>3)); } break; } @@ -70,7 +71,7 @@ static inline int debugger_trap_entry( } static inline int debugger_trap_fatal( - unsigned int vector, struct xen_regs *regs, unsigned int error_code) + unsigned int vector, struct xen_regs *regs) { int ret = 0; @@ -96,21 +97,21 @@ static inline int debugger_trap_fatal( extern int kdb_trap(int, int, struct xen_regs *); static inline int debugger_trap_entry( - unsigned int vector, struct xen_regs *regs, unsigned int error_code) + unsigned int vector, struct xen_regs *regs) { return 0; } static inline int debugger_trap_fatal( - unsigned int vector, struct xen_regs *regs, unsigned int error_code) + unsigned int vector, struct xen_regs *regs) { return kdb_trap(vector, 0, regs); } #else -#define debugger_trap_entry(_v, _r, _e) (0) -#define debugger_trap_fatal(_v, _r, _e) (0) +#define debugger_trap_entry(_v, _r) (0) +#define debugger_trap_fatal(_v, _r) (0) #endif |