Index: gdb/minsyms.c |
diff --git a/gdb/minsyms.c b/gdb/minsyms.c |
index 2aec6324d061a55825607946f698fd7878c655fb..1070fff644e8a08446632895ac642a25c8d743e6 100644 |
--- a/gdb/minsyms.c |
+++ b/gdb/minsyms.c |
@@ -76,7 +76,7 @@ static int msym_bunch_index; |
static int msym_count; |
-/* Compute a hash code based using the same criteria as `strcmp_iw'. */ |
+/* See minsyms.h. */ |
unsigned int |
msymbol_hash_iw (const char *string) |
@@ -96,7 +96,7 @@ msymbol_hash_iw (const char *string) |
return hash; |
} |
-/* Compute a hash code for a string. */ |
+/* See minsyms.h. */ |
unsigned int |
msymbol_hash (const char *string) |
@@ -109,7 +109,7 @@ msymbol_hash (const char *string) |
} |
/* Add the minimal symbol SYM to an objfile's minsym hash table, TABLE. */ |
-void |
+static void |
add_minsym_to_hash_table (struct minimal_symbol *sym, |
struct minimal_symbol **table) |
{ |
@@ -139,8 +139,8 @@ add_minsym_to_demangled_hash_table (struct minimal_symbol *sym, |
} |
} |
+/* See minsyms.h. */ |
-/* Return OBJFILE where minimal symbol SYM is defined. */ |
struct objfile * |
msymbol_objfile (struct minimal_symbol *sym) |
{ |
@@ -308,13 +308,7 @@ lookup_minimal_symbol (const char *name, const char *sfile, |
return NULL; |
} |
-/* Iterate over all the minimal symbols in the objfile OBJF which |
- match NAME. Both the ordinary and demangled names of each symbol |
- are considered. The caller is responsible for canonicalizing NAME, |
- should that need to be done. |
- |
- For each matching symbol, CALLBACK is called with the symbol and |
- USER_DATA as arguments. */ |
+/* See minsyms.h. */ |
void |
iterate_over_minimal_symbols (struct objfile *objf, const char *name, |
@@ -348,12 +342,7 @@ iterate_over_minimal_symbols (struct objfile *objf, const char *name, |
} |
} |
-/* Look through all the current minimal symbol tables and find the |
- first minimal symbol that matches NAME and has text type. If OBJF |
- is non-NULL, limit the search to that objfile. Returns a pointer |
- to the minimal symbol that matches, or NULL if no match is found. |
- |
- This function only searches the mangled (linkage) names. */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
lookup_minimal_symbol_text (const char *name, struct objfile *objf) |
@@ -405,10 +394,7 @@ lookup_minimal_symbol_text (const char *name, struct objfile *objf) |
return NULL; |
} |
-/* Look through all the current minimal symbol tables and find the |
- first minimal symbol that matches NAME and PC. If OBJF is non-NULL, |
- limit the search to that objfile. Returns a pointer to the minimal |
- symbol that matches, or NULL if no match is found. */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name, |
@@ -440,13 +426,7 @@ lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name, |
return NULL; |
} |
-/* Look through all the current minimal symbol tables and find the |
- first minimal symbol that matches NAME and is a solib trampoline. |
- If OBJF is non-NULL, limit the search to that objfile. Returns a |
- pointer to the minimal symbol that matches, or NULL if no match is |
- found. |
- |
- This function only searches the mangled (linkage) names. */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
lookup_minimal_symbol_solib_trampoline (const char *name, |
@@ -732,8 +712,7 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc, struct obj_section *section) |
return lookup_minimal_symbol_by_pc_section_1 (pc, section, 0); |
} |
-/* Backward compatibility: search through the minimal symbol table |
- for a matching PC (no section given). */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
lookup_minimal_symbol_by_pc (CORE_ADDR pc) |
@@ -804,10 +783,7 @@ static const struct gnu_ifunc_fns stub_gnu_ifunc_fns = |
const struct gnu_ifunc_fns *gnu_ifunc_fns_p = &stub_gnu_ifunc_fns; |
-/* Find the minimal symbol named NAME, and return both the minsym |
- struct and its objfile. This only checks the linkage name. Sets |
- *OBJFILE_P and returns the minimal symbol, if it is found. If it |
- is not found, returns NULL. */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
lookup_minimal_symbol_and_objfile (const char *name, |
@@ -851,18 +827,21 @@ get_symbol_leading_char (bfd *abfd) |
return 0; |
} |
-/* Prepare to start collecting minimal symbols. Note that presetting |
- msym_bunch_index to BUNCH_SIZE causes the first call to save a minimal |
- symbol to allocate the memory for the first bunch. */ |
+/* See minsyms.h. */ |
void |
init_minimal_symbol_collection (void) |
{ |
msym_count = 0; |
msym_bunch = NULL; |
+ /* Note that presetting msym_bunch_index to BUNCH_SIZE causes the |
+ first call to save a minimal symbol to allocate the memory for |
+ the first bunch. */ |
msym_bunch_index = BUNCH_SIZE; |
} |
+/* See minsyms.h. */ |
+ |
void |
prim_record_minimal_symbol (const char *name, CORE_ADDR address, |
enum minimal_symbol_type ms_type, |
@@ -894,8 +873,7 @@ prim_record_minimal_symbol (const char *name, CORE_ADDR address, |
section, NULL, objfile); |
} |
-/* Record a minimal symbol in the msym bunches. Returns the symbol |
- newly created. */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name, |
@@ -972,8 +950,7 @@ prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name, |
return msymbol; |
} |
-/* Record a minimal symbol in the msym bunches. Returns the symbol |
- newly created. */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
prim_record_minimal_symbol_and_info (const char *name, CORE_ADDR address, |
@@ -1011,8 +988,8 @@ compare_minimal_symbols (const void *fn1p, const void *fn2p) |
else |
/* addrs are equal: sort by name */ |
{ |
- char *name1 = SYMBOL_LINKAGE_NAME (fn1); |
- char *name2 = SYMBOL_LINKAGE_NAME (fn2); |
+ const char *name1 = SYMBOL_LINKAGE_NAME (fn1); |
+ const char *name2 = SYMBOL_LINKAGE_NAME (fn2); |
if (name1 && name2) /* both have names */ |
return strcmp (name1, name2); |
@@ -1046,6 +1023,8 @@ do_discard_minimal_symbols_cleanup (void *arg) |
} |
} |
+/* See minsyms.h. */ |
+ |
struct cleanup * |
make_cleanup_discard_minimal_symbols (void) |
{ |
@@ -1188,6 +1167,13 @@ install_minimal_symbols (struct objfile *objfile) |
if (msym_count > 0) |
{ |
+ if (symtab_create_debug) |
+ { |
+ fprintf_unfiltered (gdb_stdlog, |
+ "Installing %d minimal symbols of objfile %s.\n", |
+ msym_count, objfile->name); |
+ } |
+ |
/* Allocate enough space in the obstack, into which we will gather the |
bunches of new and existing minimal symbols, sort them, and then |
compact out the duplicate entries. Once we have a final table, |
@@ -1289,6 +1275,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 |
@@ -1299,9 +1306,7 @@ msymbols_sort (struct objfile *objfile) |
build_minimal_symbol_hash_tables (objfile); |
} |
-/* Check if PC is in a shared library trampoline code stub. |
- Return minimal symbol for the trampoline entry or NULL if PC is not |
- in a trampoline code stub. */ |
+/* See minsyms.h. */ |
struct minimal_symbol * |
lookup_solib_trampoline_symbol_by_pc (CORE_ADDR pc) |