OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [include/] [gdb/] [jit-reader.h] - Blame information for rev 35

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.