summaryrefslogtreecommitdiff
path: root/roms/ipxe/src/arch/x86_64/include/gdbmach.h
diff options
context:
space:
mode:
Diffstat (limited to 'roms/ipxe/src/arch/x86_64/include/gdbmach.h')
-rw-r--r--roms/ipxe/src/arch/x86_64/include/gdbmach.h49
1 files changed, 11 insertions, 38 deletions
diff --git a/roms/ipxe/src/arch/x86_64/include/gdbmach.h b/roms/ipxe/src/arch/x86_64/include/gdbmach.h
index 367405fd6..6dadbbdd3 100644
--- a/roms/ipxe/src/arch/x86_64/include/gdbmach.h
+++ b/roms/ipxe/src/arch/x86_64/include/gdbmach.h
@@ -14,37 +14,16 @@
typedef unsigned long gdbreg_t;
-/* Register snapshot */
+/* The register snapshot, this must be in sync with interrupt handler and the
+ * GDB protocol. */
enum {
- GDBMACH_RAX,
- GDBMACH_RBX,
- GDBMACH_RCX,
- GDBMACH_RDX,
- GDBMACH_RSI,
- GDBMACH_RDI,
- GDBMACH_RBP,
- GDBMACH_RSP,
- GDBMACH_R8,
- GDBMACH_R9,
- GDBMACH_R10,
- GDBMACH_R11,
- GDBMACH_R12,
- GDBMACH_R13,
- GDBMACH_R14,
- GDBMACH_R15,
- GDBMACH_RIP,
- GDBMACH_RFLAGS,
- GDBMACH_CS,
- GDBMACH_SS,
- GDBMACH_DS,
- GDBMACH_ES,
- GDBMACH_FS,
- GDBMACH_GS,
+ // STUB: don't expect this to work!
+ GDBMACH_EIP,
+ GDBMACH_EFLAGS,
GDBMACH_NREGS,
+ GDBMACH_SIZEOF_REGS = GDBMACH_NREGS * sizeof ( gdbreg_t )
};
-#define GDBMACH_SIZEOF_REGS ( GDBMACH_NREGS * sizeof ( gdbreg_t ) )
-
/* Breakpoint types */
enum {
GDBMACH_BPMEM,
@@ -54,27 +33,21 @@ enum {
GDBMACH_AWATCH,
};
-/* Exception vectors */
-extern void gdbmach_sigfpe ( void );
-extern void gdbmach_sigtrap ( void );
-extern void gdbmach_sigstkflt ( void );
-extern void gdbmach_sigill ( void );
-
static inline void gdbmach_set_pc ( gdbreg_t *regs, gdbreg_t pc ) {
- regs[GDBMACH_RIP] = pc;
+ regs [ GDBMACH_EIP ] = pc;
}
static inline void gdbmach_set_single_step ( gdbreg_t *regs, int step ) {
- regs[GDBMACH_RFLAGS] &= ~( 1 << 8 ); /* Trace Flag (TF) */
- regs[GDBMACH_RFLAGS] |= ( step << 8 );
+ regs [ GDBMACH_EFLAGS ] &= ~( 1 << 8 ); /* Trace Flag (TF) */
+ regs [ GDBMACH_EFLAGS ] |= ( step << 8 );
}
static inline void gdbmach_breakpoint ( void ) {
__asm__ __volatile__ ( "int $3\n" );
}
-extern int gdbmach_set_breakpoint ( int type, unsigned long addr, size_t len,
- int enable );
+extern int gdbmach_set_breakpoint ( int type, unsigned long addr, size_t len, int enable );
+
extern void gdbmach_init ( void );
#endif /* GDBMACH_H */