1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #ifndef GDBMACH_H
- #define GDBMACH_H
-
- /** @file
- *
- * GDB architecture specifics
- *
- * This file declares functions for manipulating the machine state and
- * debugging context.
- *
- */
-
- #include <stdint.h>
-
- typedef unsigned long gdbreg_t;
-
- /* Register snapshot */
- 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,
- GDBMACH_NREGS,
- };
-
- #define GDBMACH_SIZEOF_REGS ( GDBMACH_NREGS * sizeof ( gdbreg_t ) )
-
- /* Breakpoint types */
- enum {
- GDBMACH_BPMEM,
- GDBMACH_BPHW,
- GDBMACH_WATCH,
- GDBMACH_RWATCH,
- 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;
- }
-
- 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 );
- }
-
- 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 void gdbmach_init ( void );
-
- #endif /* GDBMACH_H */
|