diff options
author | Mark Alexander <marka@cygnus> | 1996-07-03 05:11:40 +0000 |
---|---|---|
committer | Mark Alexander <marka@cygnus> | 1996-07-03 05:11:40 +0000 |
commit | e74acce48c1b4efc29fd1e9e84639b77383aa002 (patch) | |
tree | 11d2d6bd0a7cdc15c36480e244625e817eb65e1b /gdb/symfile.h | |
parent | 7647e0dd79067a650898281d3cffc4746aa09fae (diff) | |
download | gdb-e74acce48c1b4efc29fd1e9e84639b77383aa002.zip gdb-e74acce48c1b4efc29fd1e9e84639b77383aa002.tar.gz gdb-e74acce48c1b4efc29fd1e9e84639b77383aa002.tar.bz2 |
* coffread.c, dbxread.c, elfread.c, mipsread.c, nlmread.c,
os9kread.c: Replace identical sym_offsets functions with
default_symfile_offsets.
* somread.c (som_symfile_offsets): Use new SIZEOF_SECTION_OFFSETS
macro to allocate section_offsets.
* symfile.c (default_symfile_offsets): New function.
* symfile.h: Declare default_symfile_offsets.
* symtab.h: Define SIZEOF_SECTION_OFFSETS macro to
simplify allocation of section_offsets.
Diffstat (limited to 'gdb/symfile.h')
-rw-r--r-- | gdb/symfile.h | 87 |
1 files changed, 32 insertions, 55 deletions
diff --git a/gdb/symfile.h b/gdb/symfile.h index 3c968f6..5921cbb 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -32,9 +32,24 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ to the single saved instance. */ struct psymbol_allocation_list { - struct partial_symbol **list; /* Pointer to first partial symbol pointer*/ - struct partial_symbol **next; /* Pointer to next avail storage for pointer */ - int size; /* Number of symbols */ + + /* Pointer to beginning of dynamically allocated array of pointers to + partial symbols. The array is dynamically expanded as necessary to + accommodate more pointers. */ + + struct partial_symbol **list; + + /* Pointer to next available slot in which to store a pointer to a partial + symbol. */ + + struct partial_symbol **next; + + /* Number of allocated pointer slots in current dynamic array (not the + number of bytes of storage). The "next" pointer will always point + somewhere between list[0] and list[size], and when at list[size] the + array will be expanded on the next attempt to store a pointer. */ + + int size; }; /* Structure to keep track of symbol reading functions for various @@ -94,65 +109,25 @@ struct sym_fns { }; +/* The default version of sym_fns.sym_offsets for readers that don't + do anything special. */ + +extern struct section_offsets * +default_symfile_offsets PARAMS ((struct objfile *objfile, CORE_ADDR addr)); + + extern void extend_psymbol_list PARAMS ((struct psymbol_allocation_list *, struct objfile *)); /* Add any kind of symbol to a psymbol_allocation_list. */ -#ifndef INLINE_ADD_PSYMBOL -/* Default this to off for now, and probably eventually remove support for inlining via - macros. Real world tests show no performance improvements by inlining, and the macros - just make debugging gdb more complicated and make gdb larger by up to 150 Kb. */ -#define INLINE_ADD_PSYMBOL 0 -#endif - -#include "demangle.h" - -#if !INLINE_ADD_PSYMBOL +/* #include "demangle.h" */ -/* Since one arg is a struct, we have to pass in a ptr and deref it (sigh) */ - -#define ADD_PSYMBOL_TO_LIST(name, namelength, namespace, class, list, value, language, objfile) \ - add_psymbol_to_list (name, namelength, namespace, class, &list, value, language, objfile) - -#define ADD_PSYMBOL_ADDR_TO_LIST(name, namelength, namespace, class, list, value, language, objfile) \ - add_psymbol_addr_to_list (name, namelength, namespace, class, &list, value, language, objfile) - -#else /* !INLINE_ADD_PSYMBOL */ - -#define ADD_PSYMBOL_VT_TO_LIST(NAME,NAMELENGTH,NAMESPACE,CLASS,LIST,VALUE,VT,LANGUAGE, OBJFILE) \ - do { \ - register struct partial_symbol *psym; \ - char *buf = alloca ((NAMELENGTH) + 1); \ - struct partial_symbol psymbol; \ - memcpy (buf, (NAME), (NAMELENGTH)); \ - buf[(NAMELENGTH)] = '\0'; \ - SYMBOL_NAME (&psymbol) = bcache (buf, (NAMELENGTH) + 1, &(OBJFILE)->psymbol_cache); \ - VT (&psymbol) = (VALUE); \ - SYMBOL_SECTION (&psymbol) = 0; \ - SYMBOL_LANGUAGE (&psymbol) = (LANGUAGE); \ - PSYMBOL_NAMESPACE (&psymbol) = (NAMESPACE); \ - PSYMBOL_CLASS (&psymbol) = (CLASS); \ - SYMBOL_INIT_LANGUAGE_SPECIFIC (&psymbol, (LANGUAGE)); \ - psym = bcache (&psymbol, sizeof (struct partial_symbol), &(OBJFILE)->psymbol_cache); \ - if ((LIST).next >= (LIST).list + (LIST).size) \ - extend_psymbol_list (&(LIST), (OBJFILE)); \ - *(LIST).next++ = psym; \ - OBJSTAT ((OBJFILE), n_psyms++); \ - } while (0) - -/* Add a symbol with an integer value to a psymtab. */ - -#define ADD_PSYMBOL_TO_LIST(name, namelength, namespace, class, list, value, language, objfile) \ - ADD_PSYMBOL_VT_TO_LIST (name, namelength, namespace, class, list, value, SYMBOL_VALUE, language, objfile) - -/* Add a symbol with a CORE_ADDR value to a psymtab. */ - -#define ADD_PSYMBOL_ADDR_TO_LIST(name, namelength, namespace, class, list, value, language, objfile)\ - ADD_PSYMBOL_VT_TO_LIST (name, namelength, namespace, class, list, value, SYMBOL_VALUE_ADDRESS, language, objfile) - -#endif /* INLINE_ADD_PSYMBOL */ +extern void +add_psymbol_to_list PARAMS ((char *, int, namespace_enum, enum address_class, + struct psymbol_allocation_list *, long, CORE_ADDR, + enum language, struct objfile *)); extern void init_psymbol_list PARAMS ((struct objfile *, int)); @@ -219,6 +194,8 @@ extern int auto_solib_add; extern struct partial_symtab * allocate_psymtab PARAMS ((char *, struct objfile *)); +extern void find_lowest_section PARAMS ((bfd *, asection *, PTR)); + /* Remote targets may wish to use this as their load function. */ extern void generic_load PARAMS ((char *name, int from_tty)); |