diff options
Diffstat (limited to 'gdb/symfile.h')
-rw-r--r-- | gdb/symfile.h | 242 |
1 files changed, 36 insertions, 206 deletions
diff --git a/gdb/symfile.h b/gdb/symfile.h index 1d9b7dd..3f232ec 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -60,20 +60,31 @@ struct sym_fns { /* sym_read (objfile, addr, mainline) Reads a symbol file into a psymtab (or possibly a symtab). - OBJFILE is the objfile struct for the file we are reading. ADDR - is the offset between the file's specified start address and - its true address in memory. MAINLINE is 1 if this is the + OBJFILE is the objfile struct for the file we are reading. + SECTION_OFFSETS + are the offset between the file's specified section addresses and + their true addresses in memory. + MAINLINE is 1 if this is the main symbol table being read, and 0 if a secondary symbol file (e.g. shared library or dynamically loaded file) is being read. */ - void (*sym_read) PARAMS ((struct objfile *, CORE_ADDR, int)); + void (*sym_read) PARAMS ((struct objfile *, struct section_offsets *, int)); /* Called when we are finished with an objfile. Should do all cleanup that is specific to the object file format for the particular objfile. */ void (*sym_finish) PARAMS ((struct objfile *)); + /* This function produces a file-dependent section_offsets structure, + allocated in the objfile's storage, and based on the parameter. + The parameter is currently a CORE_ADDR (FIXME!) for backward compatibility + with the higher levels of GDB. It should probably be changed to + a string, where NULL means the default, and others are parsed in a file + dependent way. The result of this function is handed in to sym_read. */ + + struct section_offsets *(*sym_offsets) PARAMS ((struct objfile *, CORE_ADDR)); + /* Finds the next struct sym_fns. They are allocated and initialized in whatever module implements the functions pointed to; an initializer calls add_symtab_fns to add them to the global chain. */ @@ -82,124 +93,6 @@ struct sym_fns { }; -/* Master structure for keeping track of each input file from which - gdb reads symbols. One of these is allocated for each such file we - access, e.g. the exec_file, symbol_file, and any shared library object - files. */ - -struct objfile -{ - - /* All struct objfile's are chained together by their next pointers. - The global variable "object_files" points to the first link in this - chain. */ - - struct objfile *next; - - /* The object file's name. Malloc'd; free it if you free this struct. */ - - char *name; - - /* Some flag bits for this objfile. */ - - unsigned short flags; - - /* Each objfile points to a linked list of symtabs derived from this file, - one symtab structure for each compilation unit (source file). Each link - in the symtab list contains a backpointer to this objfile. */ - - struct symtab *symtabs; - - /* Each objfile points to a linked list of partial symtabs derived from - this file, one partial symtab structure for each compilation unit - (source file). */ - - struct partial_symtab *psymtabs; - - /* List of freed partial symtabs, available for re-use */ - - struct partial_symtab *free_psymtabs; - - /* The object file's BFD. Can be null, in which case bfd_open (name) and - put the result here. */ - - bfd *obfd; - - /* The modification timestamp of the object file, as of the last time - we read its symbols. */ - - long mtime; - - /* Obstacks to hold objects that should be freed when we load a new symbol - table from this object file. */ - - struct obstack psymbol_obstack; /* Partial symbols */ - struct obstack symbol_obstack; /* Full symbols */ - struct obstack type_obstack; /* Types */ - - /* Vectors of all partial symbols read in from file. The actual data - is stored in the psymbol_obstack. */ - - struct psymbol_allocation_list global_psymbols; - struct psymbol_allocation_list static_psymbols; - - /* Each file contains a pointer to an array of minimal symbols for all - global symbols that are defined within the file. The array is terminated - by a "null symbol", one that has a NULL pointer for the name and a zero - value for the address. This makes it easy to walk through the array - when passed a pointer to somewhere in the middle of it. There is also - a count of the number of symbols, which does include the terminating - null symbol. The array itself, as well as all the data that it points - to, should be allocated on the symbol_obstack for this file. */ - - struct minimal_symbol *msymbols; - int minimal_symbol_count; - - /* For object file formats which don't specify fundamental types, gdb - can create such types. For now, it maintains a vector of pointers - to these internally created fundamental types on a per objfile basis, - however it really should ultimately keep them on a per-compilation-unit - basis, to account for linkage-units that consist of a number of - compilation units that may have different fundamental types, such as - linking C modules with ADA modules, or linking C modules that are - compiled with 32-bit ints with C modules that are compiled with 64-bit - ints (not inherently evil with a smarter linker). */ - - struct type **fundamental_types; - - /* The mmalloc() malloc-descriptor for this objfile if we are using - the memory mapped malloc() package to manage storage for this objfile's - data. NULL if we are not. */ - - PTR md; - - /* Structure which keeps track of functions that manipulate objfile's - of the same type as this objfile. I.E. the function to read partial - symbols for example. Note that this structure is in statically - allocated memory, and is shared by all objfiles that use the - object module reader of this type. */ - - struct sym_fns *sf; - - /* Hook for information which is shared by sym_init and sym_read for - this objfile. It is typically a pointer to malloc'd memory. */ - - PTR sym_private; - -}; - -/* Defines for the objfile flag word. */ - -/* Gdb can arrange to allocate storage for all objects related to a - particular objfile in a designated section of it's address space, - managed at a low level by mmap() and using a special version of - malloc that handles malloc/free/realloc on top of the mmap() interface. - This allows the "internal gdb state" for a particular objfile to be - dumped to a gdb state file and subsequently reloaded at a later time. */ - -#define OBJF_MAPPED (1 << 0) /* Objfile data is mmap'd */ - - extern void extend_psymbol_list PARAMS ((struct psymbol_allocation_list *, struct objfile *)); @@ -254,15 +147,6 @@ sort_pst_symbols PARAMS ((struct partial_symtab *)); extern struct symtab * allocate_symtab PARAMS ((char *, struct objfile *)); -extern struct objfile * -allocate_objfile PARAMS ((bfd *, int)); - -extern void -free_objfile PARAMS ((struct objfile *)); - -extern void -free_all_objfiles PARAMS ((void)); - extern int free_named_symtabs PARAMS ((char *)); @@ -273,10 +157,17 @@ extern void add_symtab_fns PARAMS ((struct sym_fns *)); extern void +init_entry_point_info PARAMS ((struct objfile *)); + +extern void syms_from_objfile PARAMS ((struct objfile *, CORE_ADDR, int, int)); +extern void +new_symfile_objfile PARAMS ((struct objfile *, int, int)); + extern struct partial_symtab * -start_psymtab_common PARAMS ((struct objfile *, CORE_ADDR, char *, CORE_ADDR, +start_psymtab_common PARAMS ((struct objfile *, struct section_offsets *, + char *, CORE_ADDR, struct partial_symbol *, struct partial_symbol *)); @@ -307,90 +198,29 @@ obconcat PARAMS ((struct obstack *obstackp, const char *, const char *, /* Variables */ -/* The object file that the main symbol table was loaded from (e.g. the - argument to the "symbol-file" or "file" command). */ - -extern struct objfile *symfile_objfile; - -/* Where execution starts in symfile */ - -extern CORE_ADDR entry_point; - -/* Root of object file struct chain. */ - -extern struct objfile *object_files; - -/* Traverse all object files. ALL_OBJFILES_SAFE works even if you delete - the objfile during the traversal. */ - -#define ALL_OBJFILES(obj) \ - for (obj = object_files; 0 != obj; obj = obj->next) - -#define ALL_OBJFILES_SAFE(obj,nxt) \ - for (obj = object_files; obj? (nxt=obj->next, 1): 0; obj = nxt) - -/* Support for complaining about things in the symbol file that aren't - catastrophic. - - Each such thing gets a counter. The first time we have the problem, - during a symbol read, we report it. At the end of symbol reading, - if verbose, we report how many of each problem we had. */ - -struct complaint { - char *message; - unsigned counter; - struct complaint *next; -}; - -/* Root of the chain of complaints that have at some point been issued. - This is used to reset the counters, and/or report the total counts. */ - -extern struct complaint complaint_root[1]; - -/* Functions that handle complaints. (in symfile.c) */ - -extern void -complain PARAMS ((struct complaint *, char *)); - -extern void -clear_complaints PARAMS ((int sym_reading, int noisy)); - /* From symfile.c */ extern struct partial_symtab * allocate_psymtab PARAMS ((char *, struct objfile *)); -/* From minsyms.c */ - -extern PTR -iterate_over_msymbols PARAMS ((PTR (*func) (struct objfile *, - struct minimal_symbol *, - PTR arg1, PTR arg2, PTR arg3), - PTR arg1, PTR arg2, PTR arg3)); - -/* From objfiles.c */ +/* From dwarfread.c */ -extern PTR -iterate_over_objfiles PARAMS ((PTR (*func) (struct objfile *, - PTR arg1, PTR arg2, PTR arg3), - PTR arg1, PTR arg2, PTR arg3)); +extern void +dwarf_build_psymtabs PARAMS ((struct objfile *, struct section_offsets *, int, + file_ptr, unsigned int, file_ptr, unsigned int)); -extern PTR -iterate_over_symtabs PARAMS ((PTR (*func) (struct objfile *, struct symtab *, - PTR arg1, PTR arg2, PTR arg3), - PTR arg1, PTR arg2, PTR arg3)); +/* From dbxread.c */ -extern PTR -iterate_over_psymtabs PARAMS ((PTR (*func) (struct objfile *, - struct partial_symtab *, - PTR arg1, PTR arg2, PTR arg3), - PTR arg1, PTR arg2, PTR arg3)); +extern void +elfstab_build_psymtabs PARAMS ((struct objfile *objfile, + struct section_offsets *section_offsets, + int mainline, + file_ptr staboff, unsigned int stabsize, + file_ptr stabstroffset, unsigned int stabstrsize)); -/* From dwarfread.c */ +/* From demangle.c */ extern void -dwarf_build_psymtabs PARAMS ((int, char *, CORE_ADDR, int, unsigned int, - unsigned int, unsigned int, unsigned int, - struct objfile *)); +set_demangling_style PARAMS ((char *)); #endif /* !defined(SYMFILE_H) */ |