]>
Commit | Line | Data |
---|---|---|
1 | #ifndef GDBSTUB_H | |
2 | #define GDBSTUB_H | |
3 | ||
4 | #define DEFAULT_GDBSTUB_PORT "1234" | |
5 | ||
6 | /* GDB breakpoint/watchpoint types */ | |
7 | #define GDB_BREAKPOINT_SW 0 | |
8 | #define GDB_BREAKPOINT_HW 1 | |
9 | #define GDB_WATCHPOINT_WRITE 2 | |
10 | #define GDB_WATCHPOINT_READ 3 | |
11 | #define GDB_WATCHPOINT_ACCESS 4 | |
12 | ||
13 | typedef struct GDBFeature { | |
14 | const char *xmlname; | |
15 | const char *xml; | |
16 | const char *name; | |
17 | const char * const *regs; | |
18 | int num_regs; | |
19 | } GDBFeature; | |
20 | ||
21 | typedef struct GDBFeatureBuilder { | |
22 | GDBFeature *feature; | |
23 | GPtrArray *xml; | |
24 | GPtrArray *regs; | |
25 | int base_reg; | |
26 | } GDBFeatureBuilder; | |
27 | ||
28 | ||
29 | /* Get or set a register. Returns the size of the register. */ | |
30 | typedef int (*gdb_get_reg_cb)(CPUState *cpu, GByteArray *buf, int reg); | |
31 | typedef int (*gdb_set_reg_cb)(CPUState *cpu, uint8_t *buf, int reg); | |
32 | ||
33 | /** | |
34 | * gdb_init_cpu(): Initialize the CPU for gdbstub. | |
35 | * @cpu: The CPU to be initialized. | |
36 | */ | |
37 | void gdb_init_cpu(CPUState *cpu); | |
38 | ||
39 | /** | |
40 | * gdb_register_coprocessor() - register a supplemental set of registers | |
41 | * @cpu - the CPU associated with registers | |
42 | * @get_reg - get function (gdb reading) | |
43 | * @set_reg - set function (gdb modifying) | |
44 | * @num_regs - number of registers in set | |
45 | * @xml - xml name of set | |
46 | * @gpos - non-zero to append to "general" register set at @gpos | |
47 | */ | |
48 | void gdb_register_coprocessor(CPUState *cpu, | |
49 | gdb_get_reg_cb get_reg, gdb_set_reg_cb set_reg, | |
50 | const GDBFeature *feature, int g_pos); | |
51 | ||
52 | /** | |
53 | * gdbserver_start: start the gdb server | |
54 | * @port_or_device: connection spec for gdb | |
55 | * | |
56 | * For CONFIG_USER this is either a tcp port or a path to a fifo. For | |
57 | * system emulation you can use a full chardev spec for your gdbserver | |
58 | * port. | |
59 | */ | |
60 | int gdbserver_start(const char *port_or_device); | |
61 | ||
62 | /** | |
63 | * gdb_feature_builder_init() - Initialize GDBFeatureBuilder. | |
64 | * @builder: The builder to be initialized. | |
65 | * @feature: The feature to be filled. | |
66 | * @name: The name of the feature. | |
67 | * @xmlname: The name of the XML. | |
68 | * @base_reg: The base number of the register ID. | |
69 | */ | |
70 | void gdb_feature_builder_init(GDBFeatureBuilder *builder, GDBFeature *feature, | |
71 | const char *name, const char *xmlname, | |
72 | int base_reg); | |
73 | ||
74 | /** | |
75 | * gdb_feature_builder_append_tag() - Append a tag. | |
76 | * @builder: The builder. | |
77 | * @format: The format of the tag. | |
78 | * @...: The values to be formatted. | |
79 | */ | |
80 | void G_GNUC_PRINTF(2, 3) | |
81 | gdb_feature_builder_append_tag(const GDBFeatureBuilder *builder, | |
82 | const char *format, ...); | |
83 | ||
84 | /** | |
85 | * gdb_feature_builder_append_reg() - Append a register. | |
86 | * @builder: The builder. | |
87 | * @name: The register's name; it must be unique within a CPU. | |
88 | * @bitsize: The register's size, in bits. | |
89 | * @regnum: The offset of the register's number in the feature. | |
90 | * @type: The type of the register. | |
91 | * @group: The register group to which this register belongs; it can be NULL. | |
92 | */ | |
93 | void gdb_feature_builder_append_reg(const GDBFeatureBuilder *builder, | |
94 | const char *name, | |
95 | int bitsize, | |
96 | int regnum, | |
97 | const char *type, | |
98 | const char *group); | |
99 | ||
100 | /** | |
101 | * gdb_feature_builder_end() - End building GDBFeature. | |
102 | * @builder: The builder. | |
103 | */ | |
104 | void gdb_feature_builder_end(const GDBFeatureBuilder *builder); | |
105 | ||
106 | /** | |
107 | * gdb_find_static_feature() - Find a static feature. | |
108 | * @xmlname: The name of the XML. | |
109 | * | |
110 | * Return: The static feature. | |
111 | */ | |
112 | const GDBFeature *gdb_find_static_feature(const char *xmlname); | |
113 | ||
114 | /** | |
115 | * gdb_read_register() - Read a register associated with a CPU. | |
116 | * @cpu: The CPU associated with the register. | |
117 | * @buf: The buffer that the read register will be appended to. | |
118 | * @reg: The register's number returned by gdb_find_feature_register(). | |
119 | * | |
120 | * Return: The number of read bytes. | |
121 | */ | |
122 | int gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); | |
123 | ||
124 | /** | |
125 | * typedef GDBRegDesc - a register description from gdbstub | |
126 | */ | |
127 | typedef struct { | |
128 | int gdb_reg; | |
129 | const char *name; | |
130 | const char *feature_name; | |
131 | } GDBRegDesc; | |
132 | ||
133 | /** | |
134 | * gdb_get_register_list() - Return list of all registers for CPU | |
135 | * @cpu: The CPU being searched | |
136 | * | |
137 | * Returns a GArray of GDBRegDesc, caller frees array but not the | |
138 | * const strings. | |
139 | */ | |
140 | GArray *gdb_get_register_list(CPUState *cpu); | |
141 | ||
142 | void gdb_set_stop_cpu(CPUState *cpu); | |
143 | ||
144 | /* in gdbstub-xml.c, generated by scripts/feature_to_c.py */ | |
145 | extern const GDBFeature gdb_static_features[]; | |
146 | ||
147 | #endif |