summaryrefslogtreecommitdiff
path: root/gdbstub/gdbstub_sys.h
blob: 4d0fe3e94d28a2fc947e12e0819fd90034abfc09 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#ifndef GDBSTUB_SYS_H
#define GDBSTUB_SYS_H

typedef unsigned int address;

enum DBG_REGISTER {
	DBG_CPU_MIPS_I_REG_ZERO,
	DBG_CPU_MIPS_I_REG_AT,
	DBG_CPU_MIPS_I_REG_V0,
	DBG_CPU_MIPS_I_REG_V1,
	DBG_CPU_MIPS_I_REG_A0,
	DBG_CPU_MIPS_I_REG_A1,
	DBG_CPU_MIPS_I_REG_A2,
	DBG_CPU_MIPS_I_REG_A3,
	DBG_CPU_MIPS_I_REG_T0,
	DBG_CPU_MIPS_I_REG_T1,
	DBG_CPU_MIPS_I_REG_T2,
	DBG_CPU_MIPS_I_REG_T3,
	DBG_CPU_MIPS_I_REG_T4,
	DBG_CPU_MIPS_I_REG_T5,
	DBG_CPU_MIPS_I_REG_T6,
	DBG_CPU_MIPS_I_REG_T7,
	DBG_CPU_MIPS_I_REG_S0,
	DBG_CPU_MIPS_I_REG_S1,
	DBG_CPU_MIPS_I_REG_S2,
	DBG_CPU_MIPS_I_REG_S3,
	DBG_CPU_MIPS_I_REG_S4,
	DBG_CPU_MIPS_I_REG_S5,
	DBG_CPU_MIPS_I_REG_S6,
	DBG_CPU_MIPS_I_REG_S7,
	DBG_CPU_MIPS_I_REG_T8,
	DBG_CPU_MIPS_I_REG_T9,
	DBG_CPU_MIPS_I_REG_K0,
	DBG_CPU_MIPS_I_REG_K1,
	DBG_CPU_MIPS_I_REG_GP,
	DBG_CPU_MIPS_I_REG_SP,
	DBG_CPU_MIPS_I_REG_S8,
	DBG_CPU_MIPS_I_REG_RA,
	DBG_CPU_MIPS_I_REG_SR,
	DBG_CPU_MIPS_I_REG_LO,
	DBG_CPU_MIPS_I_REG_HI,
	DBG_CPU_MIPS_I_REG_BAD,
	DBG_CPU_MIPS_I_REG_CAUSE,
	DBG_CPU_MIPS_I_REG_PC,

	/* GDB requests 73, where 38 are the ones above and the rest
	 * are the floating-point registers. This way, unused registers
	 * are left to zero. */
	DBG_CPU_NUM_REGISTERS = 73
};

typedef unsigned int reg;

struct dbg_state {
	int signum;
	reg registers[DBG_CPU_NUM_REGISTERS];
};

struct msg {
	enum {
		MSG_TYPE_CONTINUE,
		MSG_TYPE_BREAKPOINT,
		MSG_TYPE_STEP,
		MSG_TYPE_ACK,
		MSG_TYPE_REMOVE_BREAKPOINT,
		MSG_TYPE_SHUTDOWN,

		/* Response frames. */
		MSG_TYPE_HIT,
		MSG_TYPE_BREAK,
	} type;

	union {
		struct {
			address addr;
		} breakpoint;
	} data;
};

void dbg_start(void);
void dbg_stop(void);
void gdbstub_sys_send(const struct msg *msg);
void gdbstub_sys_recv(struct msg *msg);

#endif /* GDBSTUB_SYS_H */