aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/asm-x86/debugger.h
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-11-23 22:46:54 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-11-23 22:46:54 +0000
commit3a0b9c57d5c9e82c55dd967c84dd06cb43c49ee9 (patch)
treecf8cf77f7209358485ef309e4ec4a6f688ab685b /xen/include/asm-x86/debugger.h
parent172b6660d82e8d178d5ba7f843fd90c62ed21b67 (diff)
downloadxen-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.h27
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