|
|
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.