|
|
1.1 ! root 1: #ifndef GDBMACH_H ! 2: #define GDBMACH_H ! 3: ! 4: /** @file ! 5: * ! 6: * GDB architecture specifics ! 7: * ! 8: * This file declares functions for manipulating the machine state and ! 9: * debugging context. ! 10: * ! 11: */ ! 12: ! 13: #include <stdint.h> ! 14: ! 15: typedef unsigned long gdbreg_t; ! 16: ! 17: /* The register snapshot, this must be in sync with interrupt handler and the ! 18: * GDB protocol. */ ! 19: enum { ! 20: GDBMACH_EAX, ! 21: GDBMACH_ECX, ! 22: GDBMACH_EDX, ! 23: GDBMACH_EBX, ! 24: GDBMACH_ESP, ! 25: GDBMACH_EBP, ! 26: GDBMACH_ESI, ! 27: GDBMACH_EDI, ! 28: GDBMACH_EIP, ! 29: GDBMACH_EFLAGS, ! 30: GDBMACH_CS, ! 31: GDBMACH_SS, ! 32: GDBMACH_DS, ! 33: GDBMACH_ES, ! 34: GDBMACH_FS, ! 35: GDBMACH_GS, ! 36: GDBMACH_NREGS, ! 37: GDBMACH_SIZEOF_REGS = GDBMACH_NREGS * sizeof ( gdbreg_t ) ! 38: }; ! 39: ! 40: /* Breakpoint types */ ! 41: enum { ! 42: GDBMACH_BPMEM, ! 43: GDBMACH_BPHW, ! 44: GDBMACH_WATCH, ! 45: GDBMACH_RWATCH, ! 46: GDBMACH_AWATCH, ! 47: }; ! 48: ! 49: static inline void gdbmach_set_pc ( gdbreg_t *regs, gdbreg_t pc ) { ! 50: regs [ GDBMACH_EIP ] = pc; ! 51: } ! 52: ! 53: static inline void gdbmach_set_single_step ( gdbreg_t *regs, int step ) { ! 54: regs [ GDBMACH_EFLAGS ] &= ~( 1 << 8 ); /* Trace Flag (TF) */ ! 55: regs [ GDBMACH_EFLAGS ] |= ( step << 8 ); ! 56: } ! 57: ! 58: static inline void gdbmach_breakpoint ( void ) { ! 59: __asm__ __volatile__ ( "int $3\n" ); ! 60: } ! 61: ! 62: extern int gdbmach_set_breakpoint ( int type, unsigned long addr, size_t len, int enable ); ! 63: ! 64: #endif /* GDBMACH_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.