diff options
author | Tom Tromey <tromey@redhat.com> | 2013-08-15 08:46:35 -0600 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2014-02-26 12:11:17 -0700 |
commit | 77e371c079408e265f1dfd2b0620dd8e76c23371 (patch) | |
tree | c2452c7328aae0fd2602f486e4e67b453144ebfa /gdb/symtab.c | |
parent | 3b7344d5ab495cd82b6c72ec5e00d018549837fb (diff) | |
download | gdb-77e371c079408e265f1dfd2b0620dd8e76c23371.zip gdb-77e371c079408e265f1dfd2b0620dd8e76c23371.tar.gz gdb-77e371c079408e265f1dfd2b0620dd8e76c23371.tar.bz2 |
start change to progspace independence
This patch starts changing minimal symbols to be independent of the
program space.
Specifically, it adds a new objfile parameter to MSYMBOL_VALUE_ADDRESS
and changes all the code to use it. This is needed so we can change
gdb to apply the section offset when a minsym's address is computed,
as opposed to baking the offsets into the symbol itself.
A few spots still need the unrelocated address. For these, we
introduce MSYMBOL_VALUE_RAW_ADDRESS.
As a convenience, we also add the new macro BMSYMBOL_VALUE_ADDRESS,
which computes the address of a bound minimal symbol. This just does
the obvious thing with the fields.
Note that this change does not actually enable program space
independence. That requires more changes to gdb. However, to ensure
that these changes compile properly, this patch does add the needed
section lookup code to MSYMBOL_VALUE_ADDRESS -- it just ensures it has
no effect at runtime by multiplying the offset by 0.
2014-02-26 Tom Tromey <tromey@redhat.com>
* ada-lang.c (ada_main_name): Update.
(ada_add_standard_exceptions): Update.
* ada-tasks.c (ada_tasks_inferior_data_sniffer): Update.
* aix-thread.c (pdc_symbol_addrs, pd_enable): Update.
* arm-tdep.c (skip_prologue_function, arm_skip_stub): Update.
* auxv.c (ld_so_xfer_auxv): Update.
* avr-tdep.c (avr_scan_prologue): Update.
* ax-gdb.c (gen_var_ref): Update.
* blockframe.c (get_pc_function_start)
(find_pc_partial_function_gnu_ifunc): Update.
* breakpoint.c (create_overlay_event_breakpoint)
(create_longjmp_master_breakpoint)
(create_std_terminate_master_breakpoint)
(create_exception_master_breakpoint): Update.
* bsd-uthread.c (bsd_uthread_lookup_address): Update.
* c-valprint.c (c_val_print): Update.
* coff-pe-read.c (add_pe_forwarded_sym): Update.
* common/agent.c (agent_look_up_symbols): Update.
* dbxread.c (find_stab_function_addr, end_psymtab): Update.
* dwarf2loc.c (call_site_to_target_addr): Update.
* dwarf2read.c (dw2_find_pc_sect_symtab): Update.
* elfread.c (elf_gnu_ifunc_record_cache)
(elf_gnu_ifunc_resolve_by_got): Update.
* findvar.c (default_read_var_value): Update.
* frame.c (inside_main_func): Update.
* frv-tdep.c (frv_frame_this_id): Update.
* glibc-tdep.c (glibc_skip_solib_resolver): Update.
* gnu-v3-abi.c (gnuv3_get_typeid, gnuv3_skip_trampoline):
Update.
* hppa-hpux-tdep.c (hppa64_hpux_search_dummy_call_sequence)
(hppa_hpux_find_dummy_bpaddr): Update.
* hppa-tdep.c (hppa_symbol_address): Update.
* infcmd.c (until_next_command): Update.
* jit.c (jit_read_descriptor, jit_breakpoint_re_set_internal):
Update.
* linespec.c (minsym_found, add_minsym): Update.
* linux-nat.c (get_signo): Update.
* linux-thread-db.c (inferior_has_bug): Update.
* m32c-tdep.c (m32c_return_value)
(m32c_m16c_address_to_pointer): Update.
* m32r-tdep.c (m32r_frame_this_id): Update.
* m68hc11-tdep.c (m68hc11_get_register_info): Update.
* machoread.c (macho_resolve_oso_sym_with_minsym): Update.
* maint.c (maintenance_translate_address): Update.
* minsyms.c (lookup_minimal_symbol_by_pc_name): Update.
(frob_address): New function.
(lookup_minimal_symbol_by_pc_section_1): Use raw addresses,
frob_address. Rename parameter to "pc_in".
(compare_minimal_symbols, compact_minimal_symbols): Use raw
addresses.
(find_solib_trampoline_target, minimal_symbol_upper_bound):
Update.
* mips-linux-tdep.c (mips_linux_skip_resolver): Update.
* mips-tdep.c (mips_skip_pic_trampoline_code): Update.
* objc-lang.c (find_objc_msgsend): Update.
* objfiles.c (objfile_relocate1): Update.
* obsd-tdep.c (obsd_skip_solib_resolver): Update.
* p-valprint.c (pascal_val_print): Update.
* parse.c (write_exp_msymbol): Update.
* ppc-linux-tdep.c (ppc_linux_spe_context_lookup)
(ppc_elfv2_skip_entrypoint): Update.
* ppc-sysv-tdep.c (convert_code_addr_to_desc_addr): Update.
* printcmd.c (build_address_symbolic, msym_info)
(address_info): Update.
* proc-service.c (ps_pglobal_lookup): Update.
* psymtab.c (find_pc_sect_psymtab_closer)
(find_pc_sect_psymtab, find_pc_sect_symtab_from_partial):
Change msymbol parameter to bound_minimal_symbol.
* ravenscar-thread.c (get_running_thread_id): Update.
* remote.c (remote_check_symbols): Update.
* sh64-tdep.c (sh64_elf_make_msymbol_special): Use raw
address.
* sol2-tdep.c (sol2_skip_solib_resolver): Update.
* solib-dsbt.c (lm_base): Update.
* solib-frv.c (lm_base, main_got): Update.
* solib-irix.c (locate_base): Update.
* solib-som.c (som_solib_create_inferior_hook)
(link_map_start): Update.
* solib-spu.c (spu_enable_break, ocl_enable_break): Update.
* solib-svr4.c (elf_locate_base, enable_break): Update.
* spu-tdep.c (spu_get_overlay_table, spu_catch_start)
(flush_ea_cache): Update.
* stabsread.c (define_symbol, scan_file_globals): Update.
* stack.c (find_frame_funname): Update.
* symfile-debug.c (debug_qf_expand_symtabs_matching)
(debug_qf_find_pc_sect_symtab): Update.
* symfile.c (simple_read_overlay_table)
(simple_overlay_update): Update.
* symfile.h (struct quick_symbol_functions)
<find_pc_sect_symtab>: Change type of msymbol to
bound_minimal_symbol.
* symmisc.c (dump_msymbols): Update.
* symtab.c (find_pc_sect_symtab_via_partial)
(find_pc_sect_psymtab, find_pc_sect_line, skip_prologue_sal)
(search_symbols, print_msymbol_info): Update.
* symtab.h (MSYMBOL_VALUE_RAW_ADDRESS): New macro.
(MSYMBOL_VALUE_ADDRESS): Redefine.
(BMSYMBOL_VALUE_ADDRESS): New macro.
* tracepoint.c (scope_info): Update.
* tui/tui-disasm.c (tui_find_disassembly_address)
(tui_get_begin_asm_address): Update.
* valops.c (find_function_in_inferior): Update.
* value.c (value_static_field, value_fn_field): Update.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r-- | gdb/symtab.c | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index 65d7188..e267823 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -1074,18 +1074,18 @@ struct symtab * find_pc_sect_symtab_via_partial (CORE_ADDR pc, struct obj_section *section) { struct objfile *objfile; - struct minimal_symbol *msymbol; + struct bound_minimal_symbol msymbol; /* If we know that this is not a text address, return failure. This is necessary because we loop based on texthigh and textlow, which do not include the data ranges. */ - msymbol = lookup_minimal_symbol_by_pc_section (pc, section).minsym; - if (msymbol - && (MSYMBOL_TYPE (msymbol) == mst_data - || MSYMBOL_TYPE (msymbol) == mst_bss - || MSYMBOL_TYPE (msymbol) == mst_abs - || MSYMBOL_TYPE (msymbol) == mst_file_data - || MSYMBOL_TYPE (msymbol) == mst_file_bss)) + msymbol = lookup_minimal_symbol_by_pc_section (pc, section); + if (msymbol.minsym + && (MSYMBOL_TYPE (msymbol.minsym) == mst_data + || MSYMBOL_TYPE (msymbol.minsym) == mst_bss + || MSYMBOL_TYPE (msymbol.minsym) == mst_abs + || MSYMBOL_TYPE (msymbol.minsym) == mst_file_data + || MSYMBOL_TYPE (msymbol.minsym) == mst_file_bss)) return NULL; ALL_OBJFILES (objfile) @@ -2149,20 +2149,20 @@ find_pc_sect_symtab (CORE_ADDR pc, struct obj_section *section) struct symtab *best_s = NULL; struct objfile *objfile; CORE_ADDR distance = 0; - struct minimal_symbol *msymbol; + struct bound_minimal_symbol msymbol; /* If we know that this is not a text address, return failure. This is necessary because we loop based on the block's high and low code addresses, which do not include the data ranges, and because we call find_pc_sect_psymtab which has a similar restriction based on the partial_symtab's texthigh and textlow. */ - msymbol = lookup_minimal_symbol_by_pc_section (pc, section).minsym; - if (msymbol - && (MSYMBOL_TYPE (msymbol) == mst_data - || MSYMBOL_TYPE (msymbol) == mst_bss - || MSYMBOL_TYPE (msymbol) == mst_abs - || MSYMBOL_TYPE (msymbol) == mst_file_data - || MSYMBOL_TYPE (msymbol) == mst_file_bss)) + msymbol = lookup_minimal_symbol_by_pc_section (pc, section); + if (msymbol.minsym + && (MSYMBOL_TYPE (msymbol.minsym) == mst_data + || MSYMBOL_TYPE (msymbol.minsym) == mst_bss + || MSYMBOL_TYPE (msymbol.minsym) == mst_abs + || MSYMBOL_TYPE (msymbol.minsym) == mst_file_data + || MSYMBOL_TYPE (msymbol.minsym) == mst_file_bss)) return NULL; /* Search all symtabs for the one whose file contains our address, and which @@ -2289,7 +2289,6 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent) struct symtab_and_line val; struct blockvector *bv; struct bound_minimal_symbol msymbol; - struct minimal_symbol *mfunsym; struct objfile *objfile; /* Info on best line seen so far, and where it starts, and its file. */ @@ -2377,10 +2376,11 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent) if (msymbol.minsym != NULL) if (MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline) { - mfunsym + struct bound_minimal_symbol mfunsym = lookup_minimal_symbol_text (MSYMBOL_LINKAGE_NAME (msymbol.minsym), - NULL).minsym; - if (mfunsym == NULL) + NULL); + + if (mfunsym.minsym == NULL) /* I eliminated this warning since it is coming out * in the following situation: * gdb shmain // test program with shared libraries @@ -2394,8 +2394,8 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent) SYMBOL_LINKAGE_NAME (msymbol)); */ ; /* fall through */ - else if (MSYMBOL_VALUE_ADDRESS (mfunsym) - == MSYMBOL_VALUE_ADDRESS (msymbol.minsym)) + else if (BMSYMBOL_VALUE_ADDRESS (mfunsym) + == BMSYMBOL_VALUE_ADDRESS (msymbol)) /* Avoid infinite recursion */ /* See above comment about why warning is commented out. */ /* warning ("In stub for %s; unable to find real function/line info", @@ -2403,7 +2403,7 @@ find_pc_sect_line (CORE_ADDR pc, struct obj_section *section, int notcurrent) ; /* fall through */ else - return find_pc_line (MSYMBOL_VALUE_ADDRESS (mfunsym), 0); + return find_pc_line (BMSYMBOL_VALUE_ADDRESS (mfunsym), 0); } @@ -2917,7 +2917,7 @@ skip_prologue_sal (struct symtab_and_line *sal) } objfile = msymbol.objfile; - pc = MSYMBOL_VALUE_ADDRESS (msymbol.minsym); + pc = BMSYMBOL_VALUE_ADDRESS (msymbol); section = MSYMBOL_OBJ_SECTION (objfile, msymbol.minsym); name = MSYMBOL_LINKAGE_NAME (msymbol.minsym); } @@ -3665,7 +3665,8 @@ search_symbols (char *regexp, enum search_domain kind, is to expand the symbol table if msymbol is found, for the benefit of the next loop on ALL_PRIMARY_SYMTABS. */ if (kind == FUNCTIONS_DOMAIN - ? find_pc_symtab (MSYMBOL_VALUE_ADDRESS (msymbol)) == NULL + ? find_pc_symtab (MSYMBOL_VALUE_ADDRESS (objfile, + msymbol)) == NULL : (lookup_symbol_in_objfile_from_linkage_name (objfile, MSYMBOL_LINKAGE_NAME (msymbol), VAR_DOMAIN) == NULL)) @@ -3767,7 +3768,8 @@ search_symbols (char *regexp, enum search_domain kind, /* For functions we can do a quick check of whether the symbol might be found via find_pc_symtab. */ if (kind != FUNCTIONS_DOMAIN - || find_pc_symtab (MSYMBOL_VALUE_ADDRESS (msymbol)) == NULL) + || find_pc_symtab (MSYMBOL_VALUE_ADDRESS (objfile, + msymbol)) == NULL) { if (lookup_symbol_in_objfile_from_linkage_name (objfile, MSYMBOL_LINKAGE_NAME (msymbol), VAR_DOMAIN) @@ -3848,11 +3850,11 @@ print_msymbol_info (struct bound_minimal_symbol msymbol) char *tmp; if (gdbarch_addr_bit (gdbarch) <= 32) - tmp = hex_string_custom (MSYMBOL_VALUE_ADDRESS (msymbol.minsym) + tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol) & (CORE_ADDR) 0xffffffff, 8); else - tmp = hex_string_custom (MSYMBOL_VALUE_ADDRESS (msymbol.minsym), + tmp = hex_string_custom (BMSYMBOL_VALUE_ADDRESS (msymbol), 16); printf_filtered ("%s %s\n", tmp, MSYMBOL_PRINT_NAME (msymbol.minsym)); |