diff options
-rw-r--r-- | gdb/ChangeLog | 20 | ||||
-rw-r--r-- | gdb/minsyms.c | 21 | ||||
-rw-r--r-- | gdb/minsyms.h | 107 | ||||
-rw-r--r-- | gdb/objfiles.c | 23 | ||||
-rw-r--r-- | gdb/symtab.h | 74 |
5 files changed, 150 insertions, 95 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 16bbedd..5bcccf6 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,25 @@ 2011-12-21 Tom Tromey <tromey@redhat.com> + * symtab.h: Include minsyms.h. + (prim_record_minimal_symbol, prim_record_minimal_symbol_full) + (prim_record_minimal_symbol_and_info, msymbol_hash_iw) + (msymbol_hash, SYMBOL_HASH_NEXT, msymbol_objfile) + (lookup_minimal_symbol, lookup_minimal_symbol_text) + (lookup_minimal_symbol_solib_trampoline) + (lookup_minimal_symbol_by_pc_name, lookup_minimal_symbol_by_pc) + (iterate_over_minimal_symbols, lookup_minimal_symbol_and_objfile) + (lookup_minimal_symbol_by_pc_section) + (lookup_solib_trampoline_symbol_by_pc) + (init_minimal_symbol_collection) + (make_cleanup_discard_minimal_symbols, install_minimal_symbols) + (msymbols_sort): Move to minsyms.h. + * objfiles.c (terminate_minimal_symbol_table): Move to minsyms.c. + * minsyms.c (terminate_minimal_symbol_table): Move from + objfiles.c. + * minsyms.h: New file. + +2011-12-21 Tom Tromey <tromey@redhat.com> + * hppa-hpux-tdep.c (hppa64_hpux_search_dummy_call_sequence): Use ALL_OBJFILE_MSYMBOLS. (hppa_hpux_find_dummy_bpaddr): Likewise. diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 8ac5014..18cf672 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -1291,6 +1291,27 @@ install_minimal_symbols (struct objfile *objfile) } } +/* See minsyms.h. */ + +void +terminate_minimal_symbol_table (struct objfile *objfile) +{ + if (! objfile->msymbols) + objfile->msymbols = ((struct minimal_symbol *) + obstack_alloc (&objfile->objfile_obstack, + sizeof (objfile->msymbols[0]))); + + { + struct minimal_symbol *m + = &objfile->msymbols[objfile->minimal_symbol_count]; + + memset (m, 0, sizeof (*m)); + /* Don't rely on these enumeration values being 0's. */ + MSYMBOL_TYPE (m) = mst_unknown; + SYMBOL_SET_LANGUAGE (m, language_unknown); + } +} + /* Sort all the minimal symbols in OBJFILE. */ void diff --git a/gdb/minsyms.h b/gdb/minsyms.h new file mode 100644 index 0000000..614f124 --- /dev/null +++ b/gdb/minsyms.h @@ -0,0 +1,107 @@ +/* Minimal symbol table definitions for GDB. + + Copyright (C) 2011 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef MINSYMS_H +#define MINSYMS_H + +/* Functions for dealing with the minimal symbol table, really a misc + address<->symbol mapping for things we don't have debug symbols for. */ + +void prim_record_minimal_symbol (const char *, CORE_ADDR, + enum minimal_symbol_type, + struct objfile *); + +struct minimal_symbol *prim_record_minimal_symbol_full + (const char *, + int, int, CORE_ADDR, + enum minimal_symbol_type, + int section, + asection *bfd_section, + struct objfile *); + +struct minimal_symbol *prim_record_minimal_symbol_and_info + (const char *, + CORE_ADDR, + enum minimal_symbol_type, + int section, + asection *bfd_section, + struct objfile *); + +unsigned int msymbol_hash_iw (const char *); + +unsigned int msymbol_hash (const char *); + +/* Compute the next hash value from previous HASH and the character C. This + is only a GDB in-memory computed value with no external files compatibility + requirements. */ + +#define SYMBOL_HASH_NEXT(hash, c) \ + ((hash) * 67 + tolower ((unsigned char) (c)) - 113) + +struct objfile *msymbol_objfile (struct minimal_symbol *sym); + +struct minimal_symbol *lookup_minimal_symbol (const char *, + const char *, + struct objfile *); + +struct minimal_symbol *lookup_minimal_symbol_text (const char *, + struct objfile *); + +struct minimal_symbol *lookup_minimal_symbol_solib_trampoline + (const char *, + struct objfile *); + +struct minimal_symbol *lookup_minimal_symbol_by_pc_name +(CORE_ADDR, const char *, struct objfile *); + +struct minimal_symbol *lookup_minimal_symbol_by_pc (CORE_ADDR); + +struct minimal_symbol *lookup_minimal_symbol_and_objfile (const char *, + struct objfile **); + +struct minimal_symbol *lookup_minimal_symbol_by_pc_section + (CORE_ADDR, + struct obj_section *); + +struct minimal_symbol *lookup_solib_trampoline_symbol_by_pc (CORE_ADDR); + +void init_minimal_symbol_collection (void); + +struct cleanup *make_cleanup_discard_minimal_symbols (void); + +void install_minimal_symbols (struct objfile *); + +/* Sort all the minimal symbols in OBJFILE. */ + +void msymbols_sort (struct objfile *objfile); + +/* Create the terminating entry of OBJFILE's minimal symbol table. + If OBJFILE->msymbols is zero, allocate a single entry from + OBJFILE->objfile_obstack; otherwise, just initialize + OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */ + +void terminate_minimal_symbol_table (struct objfile *objfile); + +void iterate_over_minimal_symbols (struct objfile *objf, + const char *name, + void (*callback) (struct minimal_symbol *, + void *), + void *user_data); + +#endif /* MINSYMS_H */ diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 1cb1698..229e641 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -344,29 +344,6 @@ entry_point_address (void) return retval; } -/* Create the terminating entry of OBJFILE's minimal symbol table. - If OBJFILE->msymbols is zero, allocate a single entry from - OBJFILE->objfile_obstack; otherwise, just initialize - OBJFILE->msymbols[OBJFILE->minimal_symbol_count]. */ -void -terminate_minimal_symbol_table (struct objfile *objfile) -{ - if (! objfile->msymbols) - objfile->msymbols = ((struct minimal_symbol *) - obstack_alloc (&objfile->objfile_obstack, - sizeof (objfile->msymbols[0]))); - - { - struct minimal_symbol *m - = &objfile->msymbols[objfile->minimal_symbol_count]; - - memset (m, 0, sizeof (*m)); - /* Don't rely on these enumeration values being 0's. */ - MSYMBOL_TYPE (m) = mst_unknown; - SYMBOL_SET_LANGUAGE (m, language_unknown); - } -} - /* Iterator on PARENT and every separate debug objfile of PARENT. The usage pattern is: for (objfile = parent; diff --git a/gdb/symtab.h b/gdb/symtab.h index 44e3283..bbc7f2b 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -373,6 +373,8 @@ struct minimal_symbol #define MSYMBOL_SIZE(msymbol) (msymbol)->size #define MSYMBOL_TYPE(msymbol) (msymbol)->type +#include "minsyms.h" + /* Represent one symbol name; a variable, constant, function or typedef. */ @@ -1008,58 +1010,6 @@ extern struct type *basic_lookup_transparent_type (const char *); #define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled." #endif -/* Functions for dealing with the minimal symbol table, really a misc - address<->symbol mapping for things we don't have debug symbols for. */ - -extern void prim_record_minimal_symbol (const char *, CORE_ADDR, - enum minimal_symbol_type, - struct objfile *); - -extern struct minimal_symbol *prim_record_minimal_symbol_full - (const char *, int, int, CORE_ADDR, - enum minimal_symbol_type, - int section, asection * bfd_section, struct objfile *); - -extern struct minimal_symbol *prim_record_minimal_symbol_and_info - (const char *, CORE_ADDR, - enum minimal_symbol_type, - int section, asection * bfd_section, struct objfile *); - -extern unsigned int msymbol_hash_iw (const char *); - -extern unsigned int msymbol_hash (const char *); - -/* Compute the next hash value from previous HASH and the character C. This - is only a GDB in-memory computed value with no external files compatibility - requirements. */ - -#define SYMBOL_HASH_NEXT(hash, c) \ - ((hash) * 67 + tolower ((unsigned char) (c)) - 113) - -extern struct objfile * msymbol_objfile (struct minimal_symbol *sym); - -extern struct minimal_symbol *lookup_minimal_symbol (const char *, - const char *, - struct objfile *); - -extern struct minimal_symbol *lookup_minimal_symbol_text (const char *, - struct objfile *); - -struct minimal_symbol *lookup_minimal_symbol_solib_trampoline (const char *, - struct objfile - *); - -extern struct minimal_symbol *lookup_minimal_symbol_by_pc_name - (CORE_ADDR, const char *, struct objfile *); - -extern struct minimal_symbol *lookup_minimal_symbol_by_pc (CORE_ADDR); - -extern void iterate_over_minimal_symbols (struct objfile *objf, - const char *name, - void (*callback) (struct minimal_symbol *, - void *), - void *user_data); - extern int in_gnu_ifunc_stub (CORE_ADDR pc); /* Functions for resolving STT_GNU_IFUNC symbols which are implemented only @@ -1089,28 +1039,8 @@ struct gnu_ifunc_fns extern const struct gnu_ifunc_fns *gnu_ifunc_fns_p; -extern struct minimal_symbol * - lookup_minimal_symbol_and_objfile (const char *, - struct objfile **); - -extern struct minimal_symbol - *lookup_minimal_symbol_by_pc_section (CORE_ADDR, struct obj_section *); - -extern struct minimal_symbol - *lookup_solib_trampoline_symbol_by_pc (CORE_ADDR); - extern CORE_ADDR find_solib_trampoline_target (struct frame_info *, CORE_ADDR); -extern void init_minimal_symbol_collection (void); - -extern struct cleanup *make_cleanup_discard_minimal_symbols (void); - -extern void install_minimal_symbols (struct objfile *); - -/* Sort all the minimal symbols in OBJFILE. */ - -extern void msymbols_sort (struct objfile *objfile); - struct symtab_and_line { /* The program space of this sal. */ |