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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [gdb/] [symfile.h] - Blame information for rev 25

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 25 jlechner
/* Definitions for reading symbol files into GDB.
2
 
3
   Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
4
   2000, 2001, 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 3 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20
 
21
#if !defined (SYMFILE_H)
22
#define SYMFILE_H
23
 
24
/* This file requires that you first include "bfd.h".  */
25
#include "symtab.h"
26
 
27
/* Opaque declarations.  */
28
struct section_table;
29
struct objfile;
30
struct obj_section;
31
struct obstack;
32
struct block;
33
 
34
/* Partial symbols are stored in the psymbol_cache and pointers to
35
   them are kept in a dynamically grown array that is obtained from
36
   malloc and grown as necessary via realloc.  Each objfile typically
37
   has two of these, one for global symbols and one for static
38
   symbols.  Although this adds a level of indirection for storing or
39
   accessing the partial symbols, it allows us to throw away duplicate
40
   psymbols and set all pointers to the single saved instance.  */
41
 
42
struct psymbol_allocation_list
43
{
44
 
45
  /* Pointer to beginning of dynamically allocated array of pointers
46
     to partial symbols.  The array is dynamically expanded as
47
     necessary to accommodate more pointers.  */
48
 
49
  struct partial_symbol **list;
50
 
51
  /* Pointer to next available slot in which to store a pointer to a
52
     partial symbol.  */
53
 
54
  struct partial_symbol **next;
55
 
56
  /* Number of allocated pointer slots in current dynamic array (not
57
     the number of bytes of storage).  The "next" pointer will always
58
     point somewhere between list[0] and list[size], and when at
59
     list[size] the array will be expanded on the next attempt to
60
     store a pointer.  */
61
 
62
  int size;
63
};
64
 
65
/* Define an array of addresses to accommodate non-contiguous dynamic
66
   loading of modules.  This is for use when entering commands, so we
67
   can keep track of the section names until we read the file and can
68
   map them to bfd sections.  This structure is also used by solib.c
69
   to communicate the section addresses in shared objects to
70
   symbol_file_add ().  */
71
 
72
struct section_addr_info
73
{
74
  /* The number of sections for which address information is
75
     available.  */
76
  size_t num_sections;
77
  /* Sections whose names are file format dependent. */
78
  struct other_sections
79
  {
80
    CORE_ADDR addr;
81
    char *name;
82
    int sectindex;
83
  } other[1];
84
};
85
 
86
 
87
/* A table listing the load segments in a symfile, and which segment
88
   each BFD section belongs to.  */
89
struct symfile_segment_data
90
{
91
  /* How many segments are present in this file.  If there are
92
     two, the text segment is the first one and the data segment
93
     is the second one.  */
94
  int num_segments;
95
 
96
  /* If NUM_SEGMENTS is greater than zero, the original base address
97
     of each segment.  */
98
  CORE_ADDR *segment_bases;
99
 
100
  /* If NUM_SEGMENTS is greater than zero, the memory size of each
101
     segment.  */
102
  CORE_ADDR *segment_sizes;
103
 
104
  /* If NUM_SEGMENTS is greater than zero, this is an array of entries
105
     recording which segment contains each BFD section.
106
     SEGMENT_INFO[I] is S+1 if the I'th BFD section belongs to segment
107
     S, or zero if it is not in any segment.  */
108
  int *segment_info;
109
};
110
 
111
/* Structure to keep track of symbol reading functions for various
112
   object file types.  */
113
 
114
struct sym_fns
115
{
116
 
117
  /* BFD flavour that we handle, or (as a special kludge, see
118
     xcoffread.c, (enum bfd_flavour)-1 for xcoff).  */
119
 
120
  enum bfd_flavour sym_flavour;
121
 
122
  /* Initializes anything that is global to the entire symbol table.
123
     It is called during symbol_file_add, when we begin debugging an
124
     entirely new program.  */
125
 
126
  void (*sym_new_init) (struct objfile *);
127
 
128
  /* Reads any initial information from a symbol file, and initializes
129
     the struct sym_fns SF in preparation for sym_read().  It is
130
     called every time we read a symbol file for any reason.  */
131
 
132
  void (*sym_init) (struct objfile *);
133
 
134
  /* sym_read (objfile, mainline) Reads a symbol file into a psymtab
135
     (or possibly a symtab).  OBJFILE is the objfile struct for the
136
     file we are reading.  MAINLINE is 1 if this is the main symbol
137
     table being read, and 0 if a secondary symbol file (e.g. shared
138
     library or dynamically loaded file) is being read.  */
139
 
140
  void (*sym_read) (struct objfile *, int);
141
 
142
  /* Called when we are finished with an objfile.  Should do all
143
     cleanup that is specific to the object file format for the
144
     particular objfile.  */
145
 
146
  void (*sym_finish) (struct objfile *);
147
 
148
  /* This function produces a file-dependent section_offsets
149
     structure, allocated in the objfile's storage, and based on the
150
     parameter.  The parameter is currently a CORE_ADDR (FIXME!) for
151
     backward compatibility with the higher levels of GDB.  It should
152
     probably be changed to a string, where NULL means the default,
153
     and others are parsed in a file dependent way.  */
154
 
155
  void (*sym_offsets) (struct objfile *, struct section_addr_info *);
156
 
157
  /* This function produces a format-independent description of
158
     the segments of ABFD.  Each segment is a unit of the file
159
     which may be relocated independently.  */
160
 
161
  struct symfile_segment_data *(*sym_segments) (bfd *abfd);
162
 
163
  /* This function should read the linetable from the objfile when
164
     the line table cannot be read while processing the debugging
165
     information.  */
166
  void (*sym_read_linetable) (void);
167
 
168
  /* Finds the next struct sym_fns.  They are allocated and
169
     initialized in whatever module implements the functions pointed
170
     to; an initializer calls add_symtab_fns to add them to the global
171
     chain.  */
172
 
173
  struct sym_fns *next;
174
 
175
};
176
 
177
/* The default version of sym_fns.sym_offsets for readers that don't
178
   do anything special.  */
179
 
180
extern void default_symfile_offsets (struct objfile *objfile,
181
                                     struct section_addr_info *);
182
 
183
/* The default version of sym_fns.sym_segments for readers that don't
184
   do anything special.  */
185
 
186
extern struct symfile_segment_data *default_symfile_segments (bfd *abfd);
187
 
188
extern void extend_psymbol_list (struct psymbol_allocation_list *,
189
                                 struct objfile *);
190
 
191
/* Add any kind of symbol to a psymbol_allocation_list.  */
192
 
193
/* #include "demangle.h" */
194
 
195
extern const
196
struct partial_symbol *add_psymbol_to_list (char *, int, domain_enum,
197
                                            enum address_class,
198
                                            struct psymbol_allocation_list *,
199
                                            long, CORE_ADDR,
200
                                            enum language, struct objfile *);
201
 
202
extern void init_psymbol_list (struct objfile *, int);
203
 
204
extern void sort_pst_symbols (struct partial_symtab *);
205
 
206
extern struct symtab *allocate_symtab (char *, struct objfile *);
207
 
208
extern int free_named_symtabs (char *);
209
 
210
extern void add_symtab_fns (struct sym_fns *);
211
 
212
extern void syms_from_objfile (struct objfile *,
213
                               struct section_addr_info *,
214
                               struct section_offsets *, int, int, int);
215
 
216
extern void new_symfile_objfile (struct objfile *, int, int);
217
 
218
extern struct objfile *symbol_file_add (char *, int,
219
                                        struct section_addr_info *, int, int);
220
 
221
extern struct objfile *symbol_file_add_from_bfd (bfd *, int,
222
                                                 struct section_addr_info *,
223
                                                 int, int);
224
 
225
/* Create a new section_addr_info, with room for NUM_SECTIONS.  */
226
 
227
extern struct section_addr_info *alloc_section_addr_info (size_t
228
                                                          num_sections);
229
 
230
/* Return a freshly allocated copy of ADDRS.  The section names, if
231
   any, are also freshly allocated copies of those in ADDRS.  */
232
extern struct section_addr_info *(copy_section_addr_info
233
                                  (struct section_addr_info *addrs));
234
 
235
/* Build (allocate and populate) a section_addr_info struct from an
236
   existing section table.  */
237
 
238
extern struct section_addr_info
239
  *build_section_addr_info_from_section_table (const struct section_table
240
                                               *start,
241
                                               const struct section_table
242
                                               *end);
243
 
244
/* Free all memory allocated by
245
   build_section_addr_info_from_section_table.  */
246
 
247
extern void free_section_addr_info (struct section_addr_info *);
248
 
249
 
250
extern struct partial_symtab *start_psymtab_common (struct objfile *,
251
                                                    struct section_offsets *,
252
                                                    char *, CORE_ADDR,
253
                                                    struct partial_symbol **,
254
                                                    struct partial_symbol **);
255
 
256
/* Make a copy of the string at PTR with SIZE characters in the symbol
257
   obstack (and add a null character at the end in the copy).  Returns
258
   the address of the copy.  */
259
 
260
extern char *obsavestring (const char *, int, struct obstack *);
261
 
262
/* Concatenate strings S1, S2 and S3; return the new string.  Space is
263
   found in the OBSTACKP  */
264
 
265
extern char *obconcat (struct obstack *obstackp, const char *, const char *,
266
                       const char *);
267
 
268
                        /*   Variables   */
269
 
270
/* If non-zero, shared library symbols will be added automatically
271
   when the inferior is created, new libraries are loaded, or when
272
   attaching to the inferior.  This is almost always what users will
273
   want to have happen; but for very large programs, the startup time
274
   will be excessive, and so if this is a problem, the user can clear
275
   this flag and then add the shared library symbols as needed.  Note
276
   that there is a potential for confusion, since if the shared
277
   library symbols are not loaded, commands like "info fun" will *not*
278
   report all the functions that are actually present.  */
279
 
280
extern int auto_solib_add;
281
 
282
/* For systems that support it, a threshold size in megabytes.  If
283
   automatically adding a new library's symbol table to those already
284
   known to the debugger would cause the total shared library symbol
285
   size to exceed this threshhold, then the shlib's symbols are not
286
   added.  The threshold is ignored if the user explicitly asks for a
287
   shlib to be added, such as when using the "sharedlibrary" command.  */
288
 
289
extern int auto_solib_limit;
290
 
291
/* From symfile.c */
292
 
293
extern void set_initial_language (void);
294
 
295
extern struct partial_symtab *allocate_psymtab (char *, struct objfile *);
296
 
297
extern void discard_psymtab (struct partial_symtab *);
298
 
299
extern void find_lowest_section (bfd *, asection *, void *);
300
 
301
extern bfd *symfile_bfd_open (char *);
302
 
303
extern int get_section_index (struct objfile *, char *);
304
 
305
/* Utility functions for overlay sections: */
306
extern enum overlay_debugging_state
307
{
308
  ovly_off,
309
  ovly_on,
310
  ovly_auto
311
} overlay_debugging;
312
extern int overlay_cache_invalid;
313
 
314
/* Return the "mapped" overlay section containing the PC.  */
315
extern asection *find_pc_mapped_section (CORE_ADDR);
316
 
317
/* Return any overlay section containing the PC (even in its LMA
318
   region).  */
319
extern asection *find_pc_overlay (CORE_ADDR);
320
 
321
/* Return true if the section is an overlay.  */
322
extern int section_is_overlay (asection *);
323
 
324
/* Return true if the overlay section is currently "mapped".  */
325
extern int section_is_mapped (asection *);
326
 
327
/* Return true if pc belongs to section's VMA.  */
328
extern CORE_ADDR pc_in_mapped_range (CORE_ADDR, asection *);
329
 
330
/* Return true if pc belongs to section's LMA.  */
331
extern CORE_ADDR pc_in_unmapped_range (CORE_ADDR, asection *);
332
 
333
/* Map an address from a section's LMA to its VMA.  */
334
extern CORE_ADDR overlay_mapped_address (CORE_ADDR, asection *);
335
 
336
/* Map an address from a section's VMA to its LMA.  */
337
extern CORE_ADDR overlay_unmapped_address (CORE_ADDR, asection *);
338
 
339
/* Convert an address in an overlay section (force into VMA range).  */
340
extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, asection *);
341
 
342
/* Load symbols from a file.  */
343
extern void symbol_file_add_main (char *args, int from_tty);
344
 
345
/* Clear GDB symbol tables.  */
346
extern void symbol_file_clear (int from_tty);
347
 
348
/* Default overlay update function.  */
349
extern void simple_overlay_update (struct obj_section *);
350
 
351
extern bfd_byte *symfile_relocate_debug_section (bfd *abfd, asection *sectp,
352
                                                 bfd_byte * buf);
353
 
354
extern int symfile_map_offsets_to_segments (bfd *,
355
                                            struct symfile_segment_data *,
356
                                            struct section_offsets *,
357
                                            int, const CORE_ADDR *);
358
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
359
void free_symfile_segment_data (struct symfile_segment_data *data);
360
 
361
/* From dwarf2read.c */
362
 
363
extern int dwarf2_has_info (struct objfile *);
364
 
365
extern void dwarf2_build_psymtabs (struct objfile *, int);
366
extern void dwarf2_build_frame_info (struct objfile *);
367
 
368
void dwarf2_free_objfile (struct objfile *);
369
 
370
/* From mdebugread.c */
371
 
372
/* Hack to force structures to exist before use in parameter list.  */
373
struct ecoff_debug_hack
374
{
375
  struct ecoff_debug_swap *a;
376
  struct ecoff_debug_info *b;
377
};
378
 
379
extern void mdebug_build_psymtabs (struct objfile *,
380
                                   const struct ecoff_debug_swap *,
381
                                   struct ecoff_debug_info *);
382
 
383
extern void elfmdebug_build_psymtabs (struct objfile *,
384
                                      const struct ecoff_debug_swap *,
385
                                      asection *);
386
 
387
#endif /* !defined(SYMFILE_H) */

powered by: WebSVN 2.1.0

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