diff options
Diffstat (limited to 'roms/ipxe/src/arch/x86_64/include/gdbmach.h')
-rw-r--r-- | roms/ipxe/src/arch/x86_64/include/gdbmach.h | 49 |
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 */ |