From bccdca4a5f7b9879d67a35d78063a9ac3b5f5104 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Sat, 3 May 2008 00:37:35 +0000 Subject: * linespec.c: Include "target.h". (minsym_found): Handle minimal symbols pointing to function descriptors. Use find_function_start_pc. * minsyms.c (msymbol_objfile): New function. * parse.c (write_exp_msymbol): Handle minimal symbols pointing to function descriptors. * symtab.c (fixup_section): Only use minimal symbol at the same address to determine section of a symbol. (find_function_start_pc): New function. (find_function_start_sal): Use it. * symtab.h (msymbol_objfile): Add prototype. (find_function_start_pc): Likewise. * value.c: Include "objfiles.h". (value_fn_field): Handle minimal symbols pointing to function descriptors. * Makefile.in (linespec.o): Update dependencies. (value.o): Likewise. --- gdb/value.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'gdb/value.c') diff --git a/gdb/value.c b/gdb/value.c index 52d0030..21a7e6c 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -35,6 +35,7 @@ #include "regcache.h" #include "block.h" #include "dfp.h" +#include "objfiles.h" /* Prototypes for exported functions. */ @@ -1433,7 +1434,14 @@ value_fn_field (struct value **arg1p, struct fn_field *f, int j, struct type *ty } else { - VALUE_ADDRESS (v) = SYMBOL_VALUE_ADDRESS (msym); + /* The minimal symbol might point to a function descriptor; + resolve it to the actual code address instead. */ + struct objfile *objfile = msymbol_objfile (msym); + struct gdbarch *gdbarch = get_objfile_arch (objfile); + + VALUE_ADDRESS (v) + = gdbarch_convert_from_func_ptr_addr + (gdbarch, SYMBOL_VALUE_ADDRESS (msym), ¤t_target); } if (arg1p) -- cgit v1.1