aboutsummaryrefslogtreecommitdiff
path: root/gdb/value.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2013-08-05 15:51:02 +0000
committerTom Tromey <tromey@redhat.com>2013-08-05 15:51:02 +0000
commit7c7b66552d1cca8a2d2519232f26643dbcb6300a (patch)
tree6a89fb80425d84b6e33600203b67e83cb72bc273 /gdb/value.c
parent6e8c566101d0cb885568e2326d9d2751d97c70b6 (diff)
downloadgdb-7c7b66552d1cca8a2d2519232f26643dbcb6300a.zip
gdb-7c7b66552d1cca8a2d2519232f26643dbcb6300a.tar.gz
gdb-7c7b66552d1cca8a2d2519232f26643dbcb6300a.tar.bz2
remove msymbol_objfile
This is another patch in my ongoing series to "split" objfile to share more read-only data across inferiors. See http://sourceware.org/gdb/wiki/ObjfileSplitting When symbols are finally shared, there will be no back-link from the symbol to its containing objfile, because there may be more than one such objfile. So, all such back-links must be removed. One hidden back-link is the msymbol_objfile function. Since (eventually) a symbol may appear in more than one objfile, trying to look up the objfile given just a symbol cannot work. This patch removes msymbol_objfile in favor of using a bound minimal symbol. It introduces a new function to make this conversion simpler in some spots. The bonus of this patch is that using msymbol_objfile is slower than simply looking up the owning objfile in the first place. Built and regtested on x86-64 Fedora 18. * ada-exp.y (write_var_or_type): Use bound_minimal_symbol. * ada-lang.c (ada_lookup_simple_minsym): Return bound_minimal_symbol. * ada-lang.h (ada_lookup_simple_minsym): Update. * c-exp.y (variable): Use lookup_bound_minimal_symbol. * f-exp.y (variable): Use lookup_bound_minimal_symbol. * go-exp.y (variable): Use lookup_bound_minimal_symbol. * jv-exp.y (push_expression_name): Use lookup_bound_minimal_symbol. * m2-exp.y (variable): Use lookup_bound_minimal_symbol. * minsyms.c (msymbol_objfile): Remove. (lookup_minimal_symbol_internal): New function, from lookup_minimal_symbol. (lookup_minimal_symbol): Rewrite using lookup_minimal_symbol_internal. (lookup_bound_minimal_symbol): New function. * minsyms.h (msymbol_objfile): Remove. (lookup_bound_minimal_symbol): Declare. * p-exp.y (variable): Use lookup_bound_minimal_symbol. * parse.c (write_exp_msymbol): Change parameter to a bound_minimal_symbol. (write_dollar_variable): Use lookup_bound_minimal_symbol. * parser-defs.h (write_exp_msymbol): Update. * printcmd.c (address_info): Use lookup_bound_minimal_symbol. * symfile.c (simple_read_overlay_table): Use lookup_bound_minimal_symbol. * symtab.c (skip_prologue_sal): Don't use msymbol_objfile. (search_symbols): Likewise. (print_msymbol_info): Take a bound_minimal_symbol argument. (symtab_symbol_info, rbreak_command): Update. * symtab.h (struct symbol_search) <msymbol>: Change type to bound_minimal_symbol. * valops.c (find_function_in_inferior): Use lookup_bound_minimal_symbol. * value.c (value_fn_field): Use lookup_bound_minimal_symbol.
Diffstat (limited to 'gdb/value.c')
-rw-r--r--gdb/value.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/gdb/value.c b/gdb/value.c
index 8d635c7..09ab1bb 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -2773,18 +2773,18 @@ value_fn_field (struct value **arg1p, struct fn_field *f,
struct type *ftype = TYPE_FN_FIELD_TYPE (f, j);
const char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
struct symbol *sym;
- struct minimal_symbol *msym;
+ struct bound_minimal_symbol msym;
sym = lookup_symbol (physname, 0, VAR_DOMAIN, 0);
if (sym != NULL)
{
- msym = NULL;
+ memset (&msym, 0, sizeof (msym));
}
else
{
gdb_assert (sym == NULL);
- msym = lookup_minimal_symbol (physname, NULL, NULL);
- if (msym == NULL)
+ msym = lookup_bound_minimal_symbol (physname);
+ if (msym.minsym == NULL)
return NULL;
}
@@ -2797,12 +2797,12 @@ value_fn_field (struct value **arg1p, struct fn_field *f,
{
/* The minimal symbol might point to a function descriptor;
resolve it to the actual code address instead. */
- struct objfile *objfile = msymbol_objfile (msym);
+ struct objfile *objfile = msym.objfile;
struct gdbarch *gdbarch = get_objfile_arch (objfile);
set_value_address (v,
gdbarch_convert_from_func_ptr_addr
- (gdbarch, SYMBOL_VALUE_ADDRESS (msym), &current_target));
+ (gdbarch, SYMBOL_VALUE_ADDRESS (msym.minsym), &current_target));
}
if (arg1p)