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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [objfiles.h] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 104 markom
/* Definitions for symbol file management in GDB.
2
   Copyright (C) 1992, 1993, 1994, 1995, 1999 Free Software Foundation, Inc.
3
 
4
   This file is part of GDB.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 59 Temple Place - Suite 330,
19
   Boston, MA 02111-1307, USA.  */
20
 
21
#if !defined (OBJFILES_H)
22
#define OBJFILES_H
23
 
24
/* This structure maintains information on a per-objfile basis about the
25
   "entry point" of the objfile, and the scope within which the entry point
26
   exists.  It is possible that gdb will see more than one objfile that is
27
   executable, each with its own entry point.
28
 
29
   For example, for dynamically linked executables in SVR4, the dynamic linker
30
   code is contained within the shared C library, which is actually executable
31
   and is run by the kernel first when an exec is done of a user executable
32
   that is dynamically linked.  The dynamic linker within the shared C library
33
   then maps in the various program segments in the user executable and jumps
34
   to the user executable's recorded entry point, as if the call had been made
35
   directly by the kernel.
36
 
37
   The traditional gdb method of using this info is to use the recorded entry
38
   point to set the variables entry_file_lowpc and entry_file_highpc from
39
   the debugging information, where these values are the starting address
40
   (inclusive) and ending address (exclusive) of the instruction space in the
41
   executable which correspond to the "startup file", I.E. crt0.o in most
42
   cases.  This file is assumed to be a startup file and frames with pc's
43
   inside it are treated as nonexistent.  Setting these variables is necessary
44
   so that backtraces do not fly off the bottom of the stack.
45
 
46
   Gdb also supports an alternate method to avoid running off the bottom
47
   of the stack.
48
 
49
   There are two frames that are "special", the frame for the function
50
   containing the process entry point, since it has no predecessor frame,
51
   and the frame for the function containing the user code entry point
52
   (the main() function), since all the predecessor frames are for the
53
   process startup code.  Since we have no guarantee that the linked
54
   in startup modules have any debugging information that gdb can use,
55
   we need to avoid following frame pointers back into frames that might
56
   have been built in the startup code, as we might get hopelessly
57
   confused.  However, we almost always have debugging information
58
   available for main().
59
 
60
   These variables are used to save the range of PC values which are valid
61
   within the main() function and within the function containing the process
62
   entry point.  If we always consider the frame for main() as the outermost
63
   frame when debugging user code, and the frame for the process entry
64
   point function as the outermost frame when debugging startup code, then
65
   all we have to do is have FRAME_CHAIN_VALID return false whenever a
66
   frame's current PC is within the range specified by these variables.
67
   In essence, we set "ceilings" in the frame chain beyond which we will
68
   not proceed when following the frame chain back up the stack.
69
 
70
   A nice side effect is that we can still debug startup code without
71
   running off the end of the frame chain, assuming that we have usable
72
   debugging information in the startup modules, and if we choose to not
73
   use the block at main, or can't find it for some reason, everything
74
   still works as before.  And if we have no startup code debugging
75
   information but we do have usable information for main(), backtraces
76
   from user code don't go wandering off into the startup code.
77
 
78
   To use this method, define your FRAME_CHAIN_VALID macro like:
79
 
80
   #define FRAME_CHAIN_VALID(chain, thisframe)     \
81
   (chain != 0                                   \
82
   && !(inside_main_func ((thisframe)->pc))     \
83
   && !(inside_entry_func ((thisframe)->pc)))
84
 
85
   and add initializations of the four scope controlling variables inside
86
   the object file / debugging information processing modules.  */
87
 
88
struct entry_info
89
  {
90
 
91
    /* The value we should use for this objects entry point.
92
       The illegal/unknown value needs to be something other than 0, ~0
93
       for instance, which is much less likely than 0. */
94
 
95
    CORE_ADDR entry_point;
96
 
97
#define INVALID_ENTRY_POINT (~0)        /* ~0 will not be in any file, we hope.  */
98
 
99
    /* Start (inclusive) and end (exclusive) of function containing the
100
       entry point. */
101
 
102
    CORE_ADDR entry_func_lowpc;
103
    CORE_ADDR entry_func_highpc;
104
 
105
    /* Start (inclusive) and end (exclusive) of object file containing the
106
       entry point. */
107
 
108
    CORE_ADDR entry_file_lowpc;
109
    CORE_ADDR entry_file_highpc;
110
 
111
    /* Start (inclusive) and end (exclusive) of the user code main() function. */
112
 
113
    CORE_ADDR main_func_lowpc;
114
    CORE_ADDR main_func_highpc;
115
 
116
/* Use these values when any of the above ranges is invalid.  */
117
 
118
/* We use these values because it guarantees that there is no number that is
119
   both >= LOWPC && < HIGHPC.  It is also highly unlikely that 3 is a valid
120
   module or function start address (as opposed to 0).  */
121
 
122
#define INVALID_ENTRY_LOWPC (3)
123
#define INVALID_ENTRY_HIGHPC (1)
124
 
125
  };
126
 
127
/* Sections in an objfile.
128
 
129
   It is strange that we have both this notion of "sections"
130
   and the one used by section_offsets.  Section as used
131
   here, (currently at least) means a BFD section, and the sections
132
   are set up from the BFD sections in allocate_objfile.
133
 
134
   The sections in section_offsets have their meaning determined by
135
   the symbol format, and they are set up by the sym_offsets function
136
   for that symbol file format.
137
 
138
   I'm not sure this could or should be changed, however.  */
139
 
140
struct obj_section
141
  {
142
    CORE_ADDR addr;             /* lowest address in section */
143
    CORE_ADDR endaddr;          /* 1+highest address in section */
144
 
145
    /* This field is being used for nefarious purposes by syms_from_objfile.
146
       It is said to be redundant with section_offsets; it's not really being
147
       used that way, however, it's some sort of hack I don't understand
148
       and am not going to try to eliminate (yet, anyway).  FIXME.
149
 
150
       It was documented as "offset between (end)addr and actual memory
151
       addresses", but that's not true; addr & endaddr are actual memory
152
       addresses.  */
153
    CORE_ADDR offset;
154
 
155
    sec_ptr the_bfd_section;    /* BFD section pointer */
156
 
157
    /* Objfile this section is part of.  */
158
    struct objfile *objfile;
159
 
160
    /* True if this "overlay section" is mapped into an "overlay region". */
161
    int ovly_mapped;
162
  };
163
 
164
/* An import entry contains information about a symbol that
165
   is used in this objfile but not defined in it, and so needs
166
   to be imported from some other objfile */
167
/* Currently we just store the name; no attributes. 1997-08-05 */
168
typedef char *ImportEntry;
169
 
170
 
171
/* An export entry contains information about a symbol that
172
   is defined in this objfile and available for use in other
173
   objfiles */
174
typedef struct
175
  {
176
    char *name;                 /* name of exported symbol */
177
    int address;                /* offset subject to relocation */
178
    /* Currently no other attributes 1997-08-05 */
179
  }
180
ExportEntry;
181
 
182
 
183
/* The "objstats" structure provides a place for gdb to record some
184
   interesting information about its internal state at runtime, on a
185
   per objfile basis, such as information about the number of symbols
186
   read, size of string table (if any), etc. */
187
 
188
struct objstats
189
  {
190
    int n_minsyms;              /* Number of minimal symbols read */
191
    int n_psyms;                /* Number of partial symbols read */
192
    int n_syms;                 /* Number of full symbols read */
193
    int n_stabs;                /* Number of ".stabs" read (if applicable) */
194
    int n_types;                /* Number of types */
195
    int sz_strtab;              /* Size of stringtable, (if applicable) */
196
  };
197
 
198
#define OBJSTAT(objfile, expr) (objfile -> stats.expr)
199
#define OBJSTATS struct objstats stats
200
extern void print_objfile_statistics PARAMS ((void));
201
extern void print_symbol_bcache_statistics PARAMS ((void));
202
 
203
/* Number of entries in the minimal symbol hash table.  */
204
#define MINIMAL_SYMBOL_HASH_SIZE 349
205
 
206
/* Master structure for keeping track of each file from which
207
   gdb reads symbols.  There are several ways these get allocated: 1.
208
   The main symbol file, symfile_objfile, set by the symbol-file command,
209
   2.  Additional symbol files added by the add-symbol-file command,
210
   3.  Shared library objfiles, added by ADD_SOLIB,  4.  symbol files
211
   for modules that were loaded when GDB attached to a remote system
212
   (see remote-vx.c).  */
213
 
214
struct objfile
215
  {
216
 
217
    /* All struct objfile's are chained together by their next pointers.
218
       The global variable "object_files" points to the first link in this
219
       chain.
220
 
221
       FIXME:  There is a problem here if the objfile is reusable, and if
222
       multiple users are to be supported.  The problem is that the objfile
223
       list is linked through a member of the objfile struct itself, which
224
       is only valid for one gdb process.  The list implementation needs to
225
       be changed to something like:
226
 
227
       struct list {struct list *next; struct objfile *objfile};
228
 
229
       where the list structure is completely maintained separately within
230
       each gdb process. */
231
 
232
    struct objfile *next;
233
 
234
    /* The object file's name.  Malloc'd; free it if you free this struct.  */
235
 
236
    char *name;
237
 
238
    /* Some flag bits for this objfile. */
239
 
240
    unsigned short flags;
241
 
242
    /* Each objfile points to a linked list of symtabs derived from this file,
243
       one symtab structure for each compilation unit (source file).  Each link
244
       in the symtab list contains a backpointer to this objfile. */
245
 
246
    struct symtab *symtabs;
247
 
248
    /* Each objfile points to a linked list of partial symtabs derived from
249
       this file, one partial symtab structure for each compilation unit
250
       (source file). */
251
 
252
    struct partial_symtab *psymtabs;
253
 
254
    /* List of freed partial symtabs, available for re-use */
255
 
256
    struct partial_symtab *free_psymtabs;
257
 
258
    /* The object file's BFD.  Can be null if the objfile contains only
259
       minimal symbols, e.g. the run time common symbols for SunOS4.  */
260
 
261
    bfd *obfd;
262
 
263
    /* The modification timestamp of the object file, as of the last time
264
       we read its symbols.  */
265
 
266
    long mtime;
267
 
268
    /* Obstacks to hold objects that should be freed when we load a new symbol
269
       table from this object file. */
270
 
271
    struct obstack psymbol_obstack;     /* Partial symbols */
272
    struct obstack symbol_obstack;      /* Full symbols */
273
    struct obstack type_obstack;        /* Types */
274
 
275
    /* A byte cache where we can stash arbitrary "chunks" of bytes that
276
       will not change. */
277
 
278
    struct bcache psymbol_cache;        /* Byte cache for partial syms */
279
 
280
    /* Vectors of all partial symbols read in from file.  The actual data
281
       is stored in the psymbol_obstack. */
282
 
283
    struct psymbol_allocation_list global_psymbols;
284
    struct psymbol_allocation_list static_psymbols;
285
 
286
    /* Each file contains a pointer to an array of minimal symbols for all
287
       global symbols that are defined within the file.  The array is terminated
288
       by a "null symbol", one that has a NULL pointer for the name and a zero
289
       value for the address.  This makes it easy to walk through the array
290
       when passed a pointer to somewhere in the middle of it.  There is also
291
       a count of the number of symbols, which does not include the terminating
292
       null symbol.  The array itself, as well as all the data that it points
293
       to, should be allocated on the symbol_obstack for this file. */
294
 
295
    struct minimal_symbol *msymbols;
296
    int minimal_symbol_count;
297
 
298
    /* This is a hash table used to index the minimal symbols by name.  */
299
 
300
    struct minimal_symbol *msymbol_hash[MINIMAL_SYMBOL_HASH_SIZE];
301
 
302
    /* This hash table is used to index the minimal symbols by their
303
       demangled names.  */
304
 
305
    struct minimal_symbol *msymbol_demangled_hash[MINIMAL_SYMBOL_HASH_SIZE];
306
 
307
    /* For object file formats which don't specify fundamental types, gdb
308
       can create such types.  For now, it maintains a vector of pointers
309
       to these internally created fundamental types on a per objfile basis,
310
       however it really should ultimately keep them on a per-compilation-unit
311
       basis, to account for linkage-units that consist of a number of
312
       compilation units that may have different fundamental types, such as
313
       linking C modules with ADA modules, or linking C modules that are
314
       compiled with 32-bit ints with C modules that are compiled with 64-bit
315
       ints (not inherently evil with a smarter linker). */
316
 
317
    struct type **fundamental_types;
318
 
319
    /* The mmalloc() malloc-descriptor for this objfile if we are using
320
       the memory mapped malloc() package to manage storage for this objfile's
321
       data.  NULL if we are not. */
322
 
323
    PTR md;
324
 
325
    /* The file descriptor that was used to obtain the mmalloc descriptor
326
       for this objfile.  If we call mmalloc_detach with the malloc descriptor
327
       we should then close this file descriptor. */
328
 
329
    int mmfd;
330
 
331
    /* Structure which keeps track of functions that manipulate objfile's
332
       of the same type as this objfile.  I.E. the function to read partial
333
       symbols for example.  Note that this structure is in statically
334
       allocated memory, and is shared by all objfiles that use the
335
       object module reader of this type. */
336
 
337
    struct sym_fns *sf;
338
 
339
    /* The per-objfile information about the entry point, the scope (file/func)
340
       containing the entry point, and the scope of the user's main() func. */
341
 
342
    struct entry_info ei;
343
 
344
    /* Information about stabs.  Will be filled in with a dbx_symfile_info
345
       struct by those readers that need it. */
346
 
347
    struct dbx_symfile_info *sym_stab_info;
348
 
349
    /* Hook for information for use by the symbol reader (currently used
350
       for information shared by sym_init and sym_read).  It is
351
       typically a pointer to malloc'd memory.  The symbol reader's finish
352
       function is responsible for freeing the memory thusly allocated.  */
353
 
354
    PTR sym_private;
355
 
356
    /* Hook for target-architecture-specific information.  This must
357
       point to memory allocated on one of the obstacks in this objfile,
358
       so that it gets freed automatically when reading a new object
359
       file. */
360
 
361
    PTR obj_private;
362
 
363
    /* Set of relocation offsets to apply to each section.
364
       Currently on the psymbol_obstack (which makes no sense, but I'm
365
       not sure it's harming anything).
366
 
367
       These offsets indicate that all symbols (including partial and
368
       minimal symbols) which have been read have been relocated by this
369
       much.  Symbols which are yet to be read need to be relocated by
370
       it.  */
371
 
372
    struct section_offsets *section_offsets;
373
    int num_sections;
374
 
375
    /* These pointers are used to locate the section table, which
376
       among other things, is used to map pc addresses into sections.
377
       SECTIONS points to the first entry in the table, and
378
       SECTIONS_END points to the first location past the last entry
379
       in the table.  Currently the table is stored on the
380
       psymbol_obstack (which makes no sense, but I'm not sure it's
381
       harming anything).  */
382
 
383
    struct obj_section
384
     *sections, *sections_end;
385
 
386
    /* two auxiliary fields, used to hold the fp of separate symbol files */
387
    FILE *auxf1, *auxf2;
388
 
389
    /* Imported symbols */
390
    ImportEntry *import_list;
391
    int import_list_size;
392
 
393
    /* Exported symbols */
394
    ExportEntry *export_list;
395
    int export_list_size;
396
 
397
    /* Place to stash various statistics about this objfile */
398
      OBJSTATS;
399
  };
400
 
401
/* Defines for the objfile flag word. */
402
 
403
/* Gdb can arrange to allocate storage for all objects related to a
404
   particular objfile in a designated section of its address space,
405
   managed at a low level by mmap() and using a special version of
406
   malloc that handles malloc/free/realloc on top of the mmap() interface.
407
   This allows the "internal gdb state" for a particular objfile to be
408
   dumped to a gdb state file and subsequently reloaded at a later time. */
409
 
410
#define OBJF_MAPPED     (1 << 0)        /* Objfile data is mmap'd */
411
 
412
/* When using mapped/remapped predigested gdb symbol information, we need
413
   a flag that indicates that we have previously done an initial symbol
414
   table read from this particular objfile.  We can't just look for the
415
   absence of any of the three symbol tables (msymbols, psymtab, symtab)
416
   because if the file has no symbols for example, none of these will
417
   exist. */
418
 
419
#define OBJF_SYMS       (1 << 1)        /* Have tried to read symbols */
420
 
421
/* When an object file has its functions reordered (currently Irix-5.2
422
   shared libraries exhibit this behaviour), we will need an expensive
423
   algorithm to locate a partial symtab or symtab via an address.
424
   To avoid this penalty for normal object files, we use this flag,
425
   whose setting is determined upon symbol table read in.  */
426
 
427
#define OBJF_REORDERED  (1 << 2)        /* Functions are reordered */
428
 
429
/* Distinguish between an objfile for a shared library and a "vanilla"
430
   objfile. (If not set, the objfile may still actually be a solib.
431
   This can happen if the user created the objfile by using the
432
   add-symbol-file command.  GDB doesn't in that situation actually
433
   check whether the file is a solib.  Rather, the target's
434
   implementation of the solib interface is responsible for setting
435
   this flag when noticing solibs used by an inferior.)  */
436
 
437
#define OBJF_SHARED     (1 << 3)        /* From a shared library */
438
 
439
/* User requested that this objfile be read in it's entirety. */
440
 
441
#define OBJF_READNOW    (1 << 4)        /* Immediate full read */
442
 
443
/* This objfile was created because the user explicitly caused it
444
   (e.g., used the add-symbol-file command).  This bit offers a way
445
   for run_command to remove old objfile entries which are no longer
446
   valid (i.e., are associated with an old inferior), but to preserve
447
   ones that the user explicitly loaded via the add-symbol-file
448
   command. */
449
 
450
#define OBJF_USERLOADED (1 << 5)        /* User loaded */
451
 
452
/* The object file that the main symbol table was loaded from (e.g. the
453
   argument to the "symbol-file" or "file" command).  */
454
 
455
extern struct objfile *symfile_objfile;
456
 
457
/* The object file that contains the runtime common minimal symbols
458
   for SunOS4. Note that this objfile has no associated BFD.  */
459
 
460
extern struct objfile *rt_common_objfile;
461
 
462
/* When we need to allocate a new type, we need to know which type_obstack
463
   to allocate the type on, since there is one for each objfile.  The places
464
   where types are allocated are deeply buried in function call hierarchies
465
   which know nothing about objfiles, so rather than trying to pass a
466
   particular objfile down to them, we just do an end run around them and
467
   set current_objfile to be whatever objfile we expect to be using at the
468
   time types are being allocated.  For instance, when we start reading
469
   symbols for a particular objfile, we set current_objfile to point to that
470
   objfile, and when we are done, we set it back to NULL, to ensure that we
471
   never put a type someplace other than where we are expecting to put it.
472
   FIXME:  Maybe we should review the entire type handling system and
473
   see if there is a better way to avoid this problem. */
474
 
475
extern struct objfile *current_objfile;
476
 
477
/* All known objfiles are kept in a linked list.  This points to the
478
   root of this list. */
479
 
480
extern struct objfile *object_files;
481
 
482
/* Declarations for functions defined in objfiles.c */
483
 
484
extern struct objfile *
485
allocate_objfile PARAMS ((bfd *, int));
486
 
487
extern int
488
build_objfile_section_table PARAMS ((struct objfile *));
489
 
490
extern void objfile_to_front PARAMS ((struct objfile *));
491
 
492
extern void
493
unlink_objfile PARAMS ((struct objfile *));
494
 
495
extern void
496
free_objfile PARAMS ((struct objfile *));
497
 
498
extern void
499
free_all_objfiles PARAMS ((void));
500
 
501
extern void
502
objfile_relocate PARAMS ((struct objfile *, struct section_offsets *));
503
 
504
extern int
505
have_partial_symbols PARAMS ((void));
506
 
507
extern int
508
have_full_symbols PARAMS ((void));
509
 
510
/* This operation deletes all objfile entries that represent solibs that
511
   weren't explicitly loaded by the user, via e.g., the add-symbol-file
512
   command.
513
 */
514
extern void
515
objfile_purge_solibs PARAMS ((void));
516
 
517
/* Functions for dealing with the minimal symbol table, really a misc
518
   address<->symbol mapping for things we don't have debug symbols for.  */
519
 
520
extern int
521
have_minimal_symbols PARAMS ((void));
522
 
523
extern struct obj_section *
524
  find_pc_section PARAMS ((CORE_ADDR pc));
525
 
526
extern struct obj_section *
527
  find_pc_sect_section PARAMS ((CORE_ADDR pc, asection * section));
528
 
529
extern int
530
in_plt_section PARAMS ((CORE_ADDR, char *));
531
 
532
extern int
533
is_in_import_list PARAMS ((char *, struct objfile *));
534
 
535
/* Traverse all object files.  ALL_OBJFILES_SAFE works even if you delete
536
   the objfile during the traversal.  */
537
 
538
#define ALL_OBJFILES(obj) \
539
  for ((obj) = object_files; (obj) != NULL; (obj) = (obj)->next)
540
 
541
#define ALL_OBJFILES_SAFE(obj,nxt) \
542
  for ((obj) = object_files;       \
543
       (obj) != NULL? ((nxt)=(obj)->next,1) :0;  \
544
       (obj) = (nxt))
545
 
546
/* Traverse all symtabs in one objfile.  */
547
 
548
#define ALL_OBJFILE_SYMTABS(objfile, s) \
549
    for ((s) = (objfile) -> symtabs; (s) != NULL; (s) = (s) -> next)
550
 
551
/* Traverse all psymtabs in one objfile.  */
552
 
553
#define ALL_OBJFILE_PSYMTABS(objfile, p) \
554
    for ((p) = (objfile) -> psymtabs; (p) != NULL; (p) = (p) -> next)
555
 
556
/* Traverse all minimal symbols in one objfile.  */
557
 
558
#define ALL_OBJFILE_MSYMBOLS(objfile, m) \
559
    for ((m) = (objfile) -> msymbols; SYMBOL_NAME(m) != NULL; (m)++)
560
 
561
/* Traverse all symtabs in all objfiles.  */
562
 
563
#define ALL_SYMTABS(objfile, s) \
564
  ALL_OBJFILES (objfile)         \
565
    ALL_OBJFILE_SYMTABS (objfile, s)
566
 
567
/* Traverse all psymtabs in all objfiles.  */
568
 
569
#define ALL_PSYMTABS(objfile, p) \
570
  ALL_OBJFILES (objfile)         \
571
    ALL_OBJFILE_PSYMTABS (objfile, p)
572
 
573
/* Traverse all minimal symbols in all objfiles.  */
574
 
575
#define ALL_MSYMBOLS(objfile, m) \
576
  ALL_OBJFILES (objfile)         \
577
    if ((objfile)->msymbols)     \
578
      ALL_OBJFILE_MSYMBOLS (objfile, m)
579
 
580
#define ALL_OBJFILE_OSECTIONS(objfile, osect)   \
581
  for (osect = objfile->sections; osect < objfile->sections_end; osect++)
582
 
583
#define ALL_OBJSECTIONS(objfile, osect)         \
584
  ALL_OBJFILES (objfile)                        \
585
    ALL_OBJFILE_OSECTIONS (objfile, osect)
586
 
587
#endif /* !defined (OBJFILES_H) */

powered by: WebSVN 2.1.0

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