jit-reader.h revision 1.8 1 1.1 christos /* This file is automatically generated. DO NOT EDIT! */
2 1.8 christos /* Generated from: NetBSD: mknative-gdb,v 1.8 2019/05/29 01:56:06 christos Exp */
3 1.8 christos /* Generated from: NetBSD: mknative.common,v 1.16 2018/04/15 15:13:37 christos Exp */
4 1.1 christos
5 1.1 christos /* JIT declarations for GDB, the GNU Debugger.
6 1.1 christos
7 1.8 christos Copyright (C) 2011-2019 Free Software Foundation, Inc.
8 1.1 christos
9 1.1 christos This file is part of GDB.
10 1.1 christos
11 1.1 christos This program is free software; you can redistribute it and/or modify
12 1.1 christos it under the terms of the GNU General Public License as published by
13 1.1 christos the Free Software Foundation; either version 3 of the License, or
14 1.1 christos (at your option) any later version.
15 1.1 christos
16 1.1 christos This program is distributed in the hope that it will be useful,
17 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
18 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 1.1 christos GNU General Public License for more details.
20 1.1 christos
21 1.1 christos You should have received a copy of the GNU General Public License
22 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 1.1 christos
24 1.1 christos #ifndef GDB_JIT_READER_H
25 1.1 christos #define GDB_JIT_READER_H
26 1.1 christos
27 1.1 christos #ifdef __cplusplus
28 1.1 christos extern "C" {
29 1.1 christos #endif
30 1.1 christos
31 1.1 christos /* Versioning information. See gdb_reader_funcs. */
32 1.1 christos
33 1.1 christos #define GDB_READER_INTERFACE_VERSION 1
34 1.1 christos
35 1.1 christos /* Readers must be released under a GPL compatible license. To
36 1.1 christos declare that the reader is indeed released under a GPL compatible
37 1.1 christos license, invoke the macro GDB_DECLARE_GPL_COMPATIBLE in a source
38 1.1 christos file. */
39 1.1 christos
40 1.1 christos #ifdef __cplusplus
41 1.1 christos #define GDB_DECLARE_GPL_COMPATIBLE_READER \
42 1.1 christos extern "C" { \
43 1.1 christos extern int plugin_is_GPL_compatible (void); \
44 1.1 christos extern int plugin_is_GPL_compatible (void) \
45 1.1 christos { \
46 1.1 christos return 0; \
47 1.1 christos } \
48 1.1 christos }
49 1.1 christos
50 1.1 christos #else
51 1.1 christos
52 1.1 christos #define GDB_DECLARE_GPL_COMPATIBLE_READER \
53 1.1 christos extern int plugin_is_GPL_compatible (void); \
54 1.1 christos extern int plugin_is_GPL_compatible (void) \
55 1.1 christos { \
56 1.1 christos return 0; \
57 1.1 christos }
58 1.1 christos
59 1.1 christos #endif
60 1.1 christos
61 1.1 christos /* Represents an address on the target system. */
62 1.1 christos
63 1.1 christos typedef unsigned long long GDB_CORE_ADDR;
64 1.1 christos
65 1.1 christos /* Return status codes. */
66 1.1 christos
67 1.1 christos enum gdb_status {
68 1.1 christos GDB_FAIL = 0,
69 1.1 christos GDB_SUCCESS = 1
70 1.1 christos };
71 1.1 christos
72 1.1 christos struct gdb_object;
73 1.1 christos struct gdb_symtab;
74 1.1 christos struct gdb_block;
75 1.1 christos struct gdb_symbol_callbacks;
76 1.1 christos
77 1.1 christos /* An array of these are used to represent a map from code addresses to line
78 1.1 christos numbers in the source file. */
79 1.1 christos
80 1.1 christos struct gdb_line_mapping
81 1.1 christos {
82 1.1 christos int line;
83 1.1 christos GDB_CORE_ADDR pc;
84 1.1 christos };
85 1.1 christos
86 1.1 christos /* Create a new GDB code object. Each code object can have one or
87 1.1 christos more symbol tables, each representing a compiled source file. */
88 1.1 christos
89 1.1 christos typedef struct gdb_object *(gdb_object_open) (struct gdb_symbol_callbacks *cb);
90 1.1 christos
91 1.1 christos /* The callback used to create new symbol table. CB is the
92 1.1 christos gdb_symbol_callbacks which the structure is part of. FILE_NAME is
93 1.1 christos an (optionally NULL) file name to associate with this new symbol
94 1.1 christos table.
95 1.1 christos
96 1.1 christos Returns a new instance to gdb_symtab that can later be passed to
97 1.1 christos gdb_block_new, gdb_symtab_add_line_mapping and gdb_symtab_close. */
98 1.1 christos
99 1.1 christos typedef struct gdb_symtab *(gdb_symtab_open) (struct gdb_symbol_callbacks *cb,
100 1.1 christos struct gdb_object *obj,
101 1.1 christos const char *file_name);
102 1.1 christos
103 1.1 christos /* Creates a new block in a given symbol table. A symbol table is a
104 1.1 christos forest of blocks, each block representing an code address range and
105 1.1 christos a corresponding (optionally NULL) NAME. In case the block
106 1.1 christos corresponds to a function, the NAME passed should be the name of
107 1.1 christos the function.
108 1.1 christos
109 1.1 christos If the new block to be created is a child of (i.e. is nested in)
110 1.1 christos another block, the parent block can be passed in PARENT. SYMTAB is
111 1.1 christos the symbol table the new block is to belong in. BEGIN, END is the
112 1.1 christos code address range the block corresponds to.
113 1.1 christos
114 1.1 christos Returns a new instance of gdb_block, which, as of now, has no use.
115 1.1 christos Note that the gdb_block returned must not be freed by the
116 1.1 christos caller. */
117 1.1 christos
118 1.1 christos typedef struct gdb_block *(gdb_block_open) (struct gdb_symbol_callbacks *cb,
119 1.1 christos struct gdb_symtab *symtab,
120 1.1 christos struct gdb_block *parent,
121 1.1 christos GDB_CORE_ADDR begin,
122 1.1 christos GDB_CORE_ADDR end,
123 1.1 christos const char *name);
124 1.1 christos
125 1.1 christos /* Adds a PC to line number mapping for the symbol table SYMTAB.
126 1.1 christos NLINES is the number of elements in LINES, each element
127 1.1 christos corresponding to one (PC, line) pair. */
128 1.1 christos
129 1.1 christos typedef void (gdb_symtab_add_line_mapping) (struct gdb_symbol_callbacks *cb,
130 1.1 christos struct gdb_symtab *symtab,
131 1.1 christos int nlines,
132 1.1 christos struct gdb_line_mapping *lines);
133 1.1 christos
134 1.1 christos /* Close the symtab SYMTAB. This signals to GDB that no more blocks
135 1.1 christos will be opened on this symtab. */
136 1.1 christos
137 1.1 christos typedef void (gdb_symtab_close) (struct gdb_symbol_callbacks *cb,
138 1.1 christos struct gdb_symtab *symtab);
139 1.1 christos
140 1.1 christos
141 1.1 christos /* Closes the gdb_object OBJ and adds the emitted information into
142 1.1 christos GDB's internal structures. Once this is done, the debug
143 1.1 christos information will be picked up and used; this will usually be the
144 1.1 christos last operation in gdb_read_debug_info. */
145 1.1 christos
146 1.1 christos typedef void (gdb_object_close) (struct gdb_symbol_callbacks *cb,
147 1.1 christos struct gdb_object *obj);
148 1.1 christos
149 1.1 christos /* Reads LEN bytes from TARGET_MEM in the target's virtual address
150 1.1 christos space into GDB_BUF.
151 1.1 christos
152 1.1 christos Returns GDB_FAIL on failure, and GDB_SUCCESS on success. */
153 1.1 christos
154 1.1 christos typedef enum gdb_status (gdb_target_read) (GDB_CORE_ADDR target_mem,
155 1.1 christos void *gdb_buf, int len);
156 1.1 christos
157 1.1 christos /* The list of callbacks that are passed to read. These callbacks are
158 1.1 christos to be used to construct the symbol table. The functions have been
159 1.1 christos described above. */
160 1.1 christos
161 1.1 christos struct gdb_symbol_callbacks
162 1.1 christos {
163 1.1 christos gdb_object_open *object_open;
164 1.1 christos gdb_symtab_open *symtab_open;
165 1.1 christos gdb_block_open *block_open;
166 1.1 christos gdb_symtab_close *symtab_close;
167 1.1 christos gdb_object_close *object_close;
168 1.1 christos
169 1.1 christos gdb_symtab_add_line_mapping *line_mapping_add;
170 1.1 christos gdb_target_read *target_read;
171 1.1 christos
172 1.1 christos /* For internal use by GDB. */
173 1.1 christos void *priv_data;
174 1.1 christos };
175 1.1 christos
176 1.1 christos /* Forward declaration. */
177 1.1 christos
178 1.1 christos struct gdb_reg_value;
179 1.1 christos
180 1.1 christos /* A function of this type is used to free a gdb_reg_value. See the
181 1.1 christos comment on `free' in struct gdb_reg_value. */
182 1.1 christos
183 1.1 christos typedef void (gdb_reg_value_free) (struct gdb_reg_value *);
184 1.1 christos
185 1.1 christos /* Denotes the value of a register. */
186 1.1 christos
187 1.1 christos struct gdb_reg_value
188 1.1 christos {
189 1.1 christos /* The size of the register in bytes. The reader need not set this
190 1.1 christos field. This will be set for (defined) register values being read
191 1.1 christos from GDB using reg_get. */
192 1.1 christos int size;
193 1.1 christos
194 1.1 christos /* Set to non-zero if the value for the register is known. The
195 1.1 christos registers for which the reader does not call reg_set are also
196 1.1 christos assumed to be undefined */
197 1.1 christos int defined;
198 1.1 christos
199 1.1 christos /* Since gdb_reg_value is a variable sized structure, it will
200 1.1 christos usually be allocated on the heap. This function is expected to
201 1.1 christos contain the corresponding "free" function.
202 1.1 christos
203 1.1 christos When a pointer to gdb_reg_value is being sent from GDB to the
204 1.1 christos reader (via gdb_unwind_reg_get), the reader is expected to call
205 1.1 christos this function (with the same gdb_reg_value as argument) once it
206 1.1 christos is done with the value.
207 1.1 christos
208 1.1 christos When the function sends the a gdb_reg_value to GDB (via
209 1.1 christos gdb_unwind_reg_set), it is expected to set this field to point to
210 1.1 christos an appropriate cleanup routine (or to NULL if no cleanup is
211 1.1 christos required). */
212 1.1 christos gdb_reg_value_free *free;
213 1.1 christos
214 1.1 christos /* The value of the register. */
215 1.1 christos unsigned char value[1];
216 1.1 christos };
217 1.1 christos
218 1.1 christos /* get_frame_id in gdb_reader_funcs is to return a gdb_frame_id
219 1.1 christos corresponding to the current frame. The registers corresponding to
220 1.1 christos the current frame can be read using reg_get. Calling get_frame_id
221 1.1 christos on a particular frame should return the same gdb_frame_id
222 1.1 christos throughout its lifetime (i.e. till before it gets unwound). One
223 1.1 christos way to do this is by having the CODE_ADDRESS point to the
224 1.1 christos function's first instruction and STACK_ADDRESS point to the value
225 1.1 christos of the stack pointer when entering the function. */
226 1.1 christos
227 1.1 christos struct gdb_frame_id
228 1.1 christos {
229 1.1 christos GDB_CORE_ADDR code_address;
230 1.1 christos GDB_CORE_ADDR stack_address;
231 1.1 christos };
232 1.1 christos
233 1.1 christos /* Forward declaration. */
234 1.1 christos
235 1.1 christos struct gdb_unwind_callbacks;
236 1.1 christos
237 1.1 christos /* Returns the value of a particular register in the current frame.
238 1.1 christos The current frame is the frame that needs to be unwound into the
239 1.1 christos outer (earlier) frame.
240 1.1 christos
241 1.1 christos CB is the struct gdb_unwind_callbacks * the callback belongs to.
242 1.1 christos REGNUM is the DWARF register number of the register that needs to
243 1.1 christos be unwound.
244 1.1 christos
245 1.1 christos Returns the gdb_reg_value corresponding to the register requested.
246 1.1 christos In case the value of the register has been optimized away or
247 1.1 christos otherwise unavailable, the defined flag in the returned
248 1.1 christos gdb_reg_value will be zero. */
249 1.1 christos
250 1.1 christos typedef struct gdb_reg_value *(gdb_unwind_reg_get)
251 1.1 christos (struct gdb_unwind_callbacks *cb, int regnum);
252 1.1 christos
253 1.1 christos /* Sets the previous value of a particular register. REGNUM is the
254 1.1 christos (DWARF) register number whose value is to be set. VAL is the value
255 1.1 christos the register is to be set to.
256 1.1 christos
257 1.1 christos VAL is *not* copied, so the memory allocated to it cannot be
258 1.1 christos reused. Once GDB no longer needs the value, it is deallocated
259 1.1 christos using the FREE function (see gdb_reg_value).
260 1.1 christos
261 1.1 christos A register can also be "set" to an undefined value by setting the
262 1.1 christos defined in VAL to zero. */
263 1.1 christos
264 1.1 christos typedef void (gdb_unwind_reg_set) (struct gdb_unwind_callbacks *cb, int regnum,
265 1.1 christos struct gdb_reg_value *val);
266 1.1 christos
267 1.1 christos /* This struct is passed to unwind in gdb_reader_funcs, and is to be
268 1.1 christos used to unwind the current frame (current being the frame whose
269 1.1 christos registers can be read using reg_get) into the earlier frame. The
270 1.1 christos functions have been described above. */
271 1.1 christos
272 1.1 christos struct gdb_unwind_callbacks
273 1.1 christos {
274 1.1 christos gdb_unwind_reg_get *reg_get;
275 1.1 christos gdb_unwind_reg_set *reg_set;
276 1.1 christos gdb_target_read *target_read;
277 1.1 christos
278 1.1 christos /* For internal use by GDB. */
279 1.1 christos void *priv_data;
280 1.1 christos };
281 1.1 christos
282 1.1 christos /* Forward declaration. */
283 1.1 christos
284 1.1 christos struct gdb_reader_funcs;
285 1.1 christos
286 1.1 christos /* Parse the debug info off a block of memory, pointed to by MEMORY
287 1.1 christos (already copied to GDB's address space) and MEMORY_SZ bytes long.
288 1.1 christos The implementation has to use the functions in CB to actually emit
289 1.1 christos the parsed data into GDB. SELF is the same structure returned by
290 1.1 christos gdb_init_reader.
291 1.1 christos
292 1.1 christos Return GDB_FAIL on failure and GDB_SUCCESS on success. */
293 1.1 christos
294 1.1 christos typedef enum gdb_status (gdb_read_debug_info) (struct gdb_reader_funcs *self,
295 1.1 christos struct gdb_symbol_callbacks *cb,
296 1.1 christos void *memory, long memory_sz);
297 1.1 christos
298 1.1 christos /* Unwind the current frame, CB is the set of unwind callbacks that
299 1.1 christos are to be used to do this.
300 1.1 christos
301 1.1 christos Return GDB_FAIL on failure and GDB_SUCCESS on success. */
302 1.1 christos
303 1.1 christos typedef enum gdb_status (gdb_unwind_frame) (struct gdb_reader_funcs *self,
304 1.1 christos struct gdb_unwind_callbacks *cb);
305 1.1 christos
306 1.1 christos /* Return the frame ID corresponding to the current frame, using C to
307 1.1 christos read the current register values. See the comment on struct
308 1.1 christos gdb_frame_id. */
309 1.1 christos
310 1.1 christos typedef struct gdb_frame_id (gdb_get_frame_id) (struct gdb_reader_funcs *self,
311 1.1 christos struct gdb_unwind_callbacks *c);
312 1.1 christos
313 1.1 christos /* Called when a reader is being unloaded. This function should also
314 1.1 christos free SELF, if required. */
315 1.1 christos
316 1.1 christos typedef void (gdb_destroy_reader) (struct gdb_reader_funcs *self);
317 1.1 christos
318 1.1 christos /* Called when the reader is loaded. Must either return a properly
319 1.1 christos populated gdb_reader_funcs or NULL. The memory allocated for the
320 1.1 christos gdb_reader_funcs is to be managed by the reader itself (i.e. if it
321 1.1 christos is allocated from the heap, it must also be freed in
322 1.1 christos gdb_destroy_reader). */
323 1.1 christos
324 1.1 christos extern struct gdb_reader_funcs *gdb_init_reader (void);
325 1.1 christos
326 1.1 christos /* Pointer to the functions which implement the reader's
327 1.1 christos functionality. The individual functions have been documented
328 1.1 christos above.
329 1.1 christos
330 1.1 christos None of the fields are optional. */
331 1.1 christos
332 1.1 christos struct gdb_reader_funcs
333 1.1 christos {
334 1.1 christos /* Must be set to GDB_READER_INTERFACE_VERSION. */
335 1.1 christos int reader_version;
336 1.1 christos
337 1.1 christos /* For use by the reader. */
338 1.1 christos void *priv_data;
339 1.1 christos
340 1.1 christos gdb_read_debug_info *read;
341 1.1 christos gdb_unwind_frame *unwind;
342 1.1 christos gdb_get_frame_id *get_frame_id;
343 1.1 christos gdb_destroy_reader *destroy;
344 1.1 christos };
345 1.1 christos
346 1.1 christos #ifdef __cplusplus
347 1.1 christos } /* extern "C" */
348 1.1 christos #endif
349 1.1 christos
350 1.1 christos #endif
351