start change to progspace independence
authorTom Tromey <tromey@redhat.com>
Thu, 15 Aug 2013 14:46:35 +0000 (08:46 -0600)
committerTom Tromey <tromey@redhat.com>
Wed, 26 Feb 2014 19:11:17 +0000 (12:11 -0700)
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.

71 files changed:
gdb/ChangeLog
gdb/ada-lang.c
gdb/ada-tasks.c
gdb/aix-thread.c
gdb/arm-tdep.c
gdb/auxv.c
gdb/avr-tdep.c
gdb/ax-gdb.c
gdb/blockframe.c
gdb/breakpoint.c
gdb/bsd-uthread.c
gdb/c-valprint.c
gdb/coff-pe-read.c
gdb/common/agent.c
gdb/dbxread.c
gdb/dwarf2loc.c
gdb/dwarf2read.c
gdb/elfread.c
gdb/findvar.c
gdb/frame.c
gdb/frv-tdep.c
gdb/glibc-tdep.c
gdb/gnu-v3-abi.c
gdb/hppa-hpux-tdep.c
gdb/hppa-tdep.c
gdb/infcmd.c
gdb/jit.c
gdb/linespec.c
gdb/linux-nat.c
gdb/linux-thread-db.c
gdb/m32c-tdep.c
gdb/m32r-tdep.c
gdb/m68hc11-tdep.c
gdb/machoread.c
gdb/maint.c
gdb/minsyms.c
gdb/mips-linux-tdep.c
gdb/mips-tdep.c
gdb/objc-lang.c
gdb/objfiles.c
gdb/obsd-tdep.c
gdb/p-valprint.c
gdb/parse.c
gdb/ppc-linux-tdep.c
gdb/ppc-sysv-tdep.c
gdb/printcmd.c
gdb/proc-service.c
gdb/psymtab.c
gdb/ravenscar-thread.c
gdb/remote.c
gdb/sh64-tdep.c
gdb/sol2-tdep.c
gdb/solib-dsbt.c
gdb/solib-frv.c
gdb/solib-irix.c
gdb/solib-som.c
gdb/solib-spu.c
gdb/solib-svr4.c
gdb/spu-tdep.c
gdb/stabsread.c
gdb/stack.c
gdb/symfile-debug.c
gdb/symfile.c
gdb/symfile.h
gdb/symmisc.c
gdb/symtab.c
gdb/symtab.h
gdb/tracepoint.c
gdb/tui/tui-disasm.c
gdb/valops.c
gdb/value.c

index 40b819b20b2c081fc929eb1fc4d67fb72894e1fe..0ce3186102fab2c7b1148ccba5c4561c4bd3c727 100644 (file)
@@ -1,3 +1,109 @@
+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.
+
 2014-02-26  Tom Tromey  <tromey@redhat.com>
 
        * ada-lang.c (ada_update_initial_language): Update.
index baa5d8ce10fd7fec0ab4432cf857f3e3d27ae5dc..92f437fce2cfaa3a9ee65ad023ccbd8bb1d80076 100644 (file)
@@ -922,7 +922,7 @@ ada_main_name (void)
       CORE_ADDR main_program_name_addr;
       int err_code;
 
-      main_program_name_addr = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+      main_program_name_addr = BMSYMBOL_VALUE_ADDRESS (msym);
       if (main_program_name_addr == 0)
         error (_("Invalid address for Ada main program name."));
 
@@ -12673,7 +12673,7 @@ ada_add_standard_exceptions (regex_t *preg, VEC(ada_exc_info) **exceptions)
          if (msymbol.minsym != NULL)
            {
              struct ada_exc_info info
-               = {standard_exc[i], MSYMBOL_VALUE_ADDRESS (msymbol.minsym)};
+               = {standard_exc[i], BMSYMBOL_VALUE_ADDRESS (msymbol)};
 
              VEC_safe_push (ada_exc_info, *exceptions, &info);
            }
index 89bdac8d0f63d37a227b8e8b7c05542c6c1ca7f5..8b37f518900738813c6e52bb1ce6beee3bfdd517 100644 (file)
@@ -859,7 +859,7 @@ ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data)
   if (msym.minsym != NULL)
     {
       data->known_tasks_kind = ADA_TASKS_ARRAY;
-      data->known_tasks_addr = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+      data->known_tasks_addr = BMSYMBOL_VALUE_ADDRESS (msym);
 
       /* Try to get pointer type and array length from the symtab.  */
       sym = lookup_symbol_in_language (KNOWN_TASKS_NAME, NULL, VAR_DOMAIN,
@@ -904,7 +904,7 @@ ada_tasks_inferior_data_sniffer (struct ada_tasks_inferior_data *data)
   if (msym.minsym != NULL)
     {
       data->known_tasks_kind = ADA_TASKS_LIST;
-      data->known_tasks_addr = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+      data->known_tasks_addr = BMSYMBOL_VALUE_ADDRESS (msym);
       data->known_tasks_length = 1;
 
       sym = lookup_symbol_in_language (KNOWN_TASKS_LIST, NULL, VAR_DOMAIN,
index 0202a2471eb19461c032872494b1f2e2f5e5ec83..444a02530660198854ab08d5e621a32b4712740b 100644 (file)
@@ -49,6 +49,7 @@
 #include "ppc-tdep.h"
 #include <string.h>
 #include "observer.h"
+#include "objfiles.h"
 
 #include <procinfo.h>
 #include <sys/types.h>
@@ -313,7 +314,7 @@ pdc_symbol_addrs (pthdb_user_t user, pthdb_symbol_t *symbols, int count)
                fprintf_unfiltered (gdb_stdlog, " returning PDC_FAILURE\n");
              return PDC_FAILURE;
            }
-         symbols[i].addr = MSYMBOL_VALUE_ADDRESS (ms.minsym);
+         symbols[i].addr = BMSYMBOL_VALUE_ADDRESS (ms);
        }
       if (debug_aix_thread)
        fprintf_unfiltered (gdb_stdlog, "  symbols[%d].addr = %s\n",
@@ -912,7 +913,7 @@ pd_enable (void)
   ms = lookup_minimal_symbol (stub_name, NULL, NULL);
   if (ms.minsym == NULL)
     return;
-  pd_brk_addr = MSYMBOL_VALUE_ADDRESS (ms.minsym);
+  pd_brk_addr = BMSYMBOL_VALUE_ADDRESS (ms);
   if (!create_thread_event_breakpoint (target_gdbarch (), pd_brk_addr))
     return;
 
index 4df28464be8f76bf9976f6dbaba067b2ffcb0a6e..e3b1c3d58c79ea20ea75768b057ab3c73e83e396 100644 (file)
@@ -472,7 +472,7 @@ skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
 
   msym = lookup_minimal_symbol_by_pc (pc);
   if (msym.minsym != NULL
-      && MSYMBOL_VALUE_ADDRESS (msym.minsym) == pc
+      && BMSYMBOL_VALUE_ADDRESS (msym) == pc
       && MSYMBOL_LINKAGE_NAME (msym.minsym) != NULL)
     {
       const char *name = MSYMBOL_LINKAGE_NAME (msym.minsym);
@@ -9280,7 +9280,7 @@ arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
       objfile = (sec == NULL) ? NULL : sec->objfile;
       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
       if (minsym.minsym != NULL)
-       return MSYMBOL_VALUE_ADDRESS (minsym.minsym);
+       return BMSYMBOL_VALUE_ADDRESS (minsym);
       else
        return 0;
     }
index 239662782538be987f1a4c6fef42f86f2103fd7b..ce0a71c77a99deb5cae22f5543388aabcc020e8e 100644 (file)
@@ -27,6 +27,7 @@
 #include "gdbcore.h"
 #include "observer.h"
 #include "filestuff.h"
+#include "objfiles.h"
 
 #include "auxv.h"
 #include "elf/common.h"
@@ -105,7 +106,7 @@ ld_so_xfer_auxv (gdb_byte *readbuf,
      resides.  DATA_ADDRESS is the inferior value present in
      `_dl_auxv', therefore the real inferior AUXV address.  */
 
-  pointer_address = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+  pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
 
   /* The location of the _dl_auxv symbol may no longer be correct if
      ld.so runs at a different address than the one present in the
index a637cf832d9bc06a443623c4e53b1f46a51c858c..6e58f045d67ddefc279fc2b2bee43d8692e0f473 100644 (file)
@@ -36,6 +36,7 @@
 #include "regcache.h"
 #include <string.h>
 #include "dis-asm.h"
+#include "objfiles.h"
 
 /* AVR Background:
 
@@ -624,8 +625,7 @@ avr_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR pc_beg, CORE_ADDR pc_end,
 
       /* Resolve offset (in words) from __prologue_saves__ symbol.
          Which is a pushes count in `-mcall-prologues' mode */
-      num_pushes = (AVR_MAX_PUSHES
-                   - (i - MSYMBOL_VALUE_ADDRESS (msymbol.minsym)) / 2);
+      num_pushes = AVR_MAX_PUSHES - (i - BMSYMBOL_VALUE_ADDRESS (msymbol)) / 2;
 
       if (num_pushes > AVR_MAX_PUSHES)
         {
index f2bcefab7d37534f95dc439300b56b484d490f9b..b77716dd9a80fef6cbea41ddfd3bd8891f6ff18b 100644 (file)
@@ -41,6 +41,7 @@
 #include "arch-utils.h"
 #include "cli/cli-utils.h"
 #include "linespec.h"
+#include "objfiles.h"
 
 #include "valprint.h"
 #include "c-lang.h"
@@ -719,7 +720,7 @@ gen_var_ref (struct gdbarch *gdbarch, struct agent_expr *ax,
          error (_("Couldn't resolve symbol `%s'."), SYMBOL_PRINT_NAME (var));
 
        /* Push the address of the variable.  */
-       ax_const_l (ax, MSYMBOL_VALUE_ADDRESS (msym.minsym));
+       ax_const_l (ax, BMSYMBOL_VALUE_ADDRESS (msym));
        value->kind = axs_lvalue_memory;
       }
       break;
index ddfc7d6a662f9c5084aca8bad781c1b8a7997e29..0a9381e1ec20fabdf741ac900b416c1d73a56983 100644 (file)
@@ -104,7 +104,7 @@ get_pc_function_start (CORE_ADDR pc)
   msymbol = lookup_minimal_symbol_by_pc (pc);
   if (msymbol.minsym)
     {
-      CORE_ADDR fstart = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+      CORE_ADDR fstart = BMSYMBOL_VALUE_ADDRESS (msymbol);
 
       if (find_pc_section (fstart))
        return fstart;
@@ -221,7 +221,7 @@ find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, const char **name,
   ALL_OBJFILES (objfile)
   {
     if (objfile->sf)
-      symtab = objfile->sf->qf->find_pc_sect_symtab (objfile, msymbol.minsym,
+      symtab = objfile->sf->qf->find_pc_sect_symtab (objfile, msymbol,
                                                     mapped_pc, section, 0);
     if (symtab)
       break;
@@ -235,7 +235,7 @@ find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, const char **name,
       if (f != NULL
          && (msymbol.minsym == NULL
              || (BLOCK_START (SYMBOL_BLOCK_VALUE (f))
-                 >= MSYMBOL_VALUE_ADDRESS (msymbol.minsym))))
+                 >= BMSYMBOL_VALUE_ADDRESS (msymbol))))
        {
          cache_pc_function_low = BLOCK_START (SYMBOL_BLOCK_VALUE (f));
          cache_pc_function_high = BLOCK_END (SYMBOL_BLOCK_VALUE (f));
@@ -269,7 +269,7 @@ find_pc_partial_function_gnu_ifunc (CORE_ADDR pc, const char **name,
       return 0;
     }
 
-  cache_pc_function_low = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+  cache_pc_function_low = BMSYMBOL_VALUE_ADDRESS (msymbol);
   cache_pc_function_name = MSYMBOL_LINKAGE_NAME (msymbol.minsym);
   cache_pc_function_section = section;
   cache_pc_function_is_gnu_ifunc = (MSYMBOL_TYPE (msymbol.minsym)
index 7006beb62a94f12f884e547a6c17518801b01ff6..488064d95e29d2c11e646c04ea3766986fe35a27 100644 (file)
@@ -3243,7 +3243,7 @@ create_overlay_event_breakpoint (void)
          bp_objfile_data->overlay_msym = m;
        }
 
-      addr = MSYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym.minsym);
+      addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
       b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
                                       bp_overlay_event,
                                      &internal_breakpoint_ops);
@@ -3360,7 +3360,7 @@ create_longjmp_master_breakpoint (void)
              bp_objfile_data->longjmp_msym[i] = m;
            }
 
-         addr = MSYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i].minsym);
+         addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]);
          b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master,
                                          &internal_breakpoint_ops);
          b->addr_string = xstrdup (func_name);
@@ -3415,7 +3415,7 @@ create_std_terminate_master_breakpoint (void)
          bp_objfile_data->terminate_msym = m;
        }
 
-      addr = MSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym.minsym);
+      addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
       b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
                                       bp_std_terminate_master,
                                      &internal_breakpoint_ops);
@@ -3515,7 +3515,7 @@ create_exception_master_breakpoint (void)
          bp_objfile_data->exception_msym = debug_hook;
        }
 
-      addr = MSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym.minsym);
+      addr = BMSYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
       addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
                                                 &current_target);
       b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
index 473acbaa048564cb6e27c94fd1a51fe528b803d9..c73932a8a49691203de1547c0f2e6de5277f364e 100644 (file)
@@ -129,7 +129,7 @@ bsd_uthread_lookup_address (const char *name, struct objfile *objfile)
 
   sym = lookup_minimal_symbol (name, NULL, objfile);
   if (sym.minsym)
-    return MSYMBOL_VALUE_ADDRESS (sym.minsym);
+    return BMSYMBOL_VALUE_ADDRESS (sym);
 
   return 0;
 }
index 5f950f8dff57e2a9def7717b5c2cac01b8551b6c..f4694b07ca8f0671ea17fc4f8dd4e0740472c320 100644 (file)
@@ -28,6 +28,7 @@
 #include "c-lang.h"
 #include "cp-abi.h"
 #include "target.h"
+#include "objfiles.h"
 \f
 
 /* A helper for c_textual_element_type.  This checks the name of the
@@ -316,7 +317,7 @@ c_val_print (struct type *type, const gdb_byte *valaddr,
              /* If 'symbol_print' is set, we did the work above.  */
              if (!options->symbol_print
                  && (msymbol.minsym != NULL)
-                 && (vt_address == MSYMBOL_VALUE_ADDRESS (msymbol.minsym)))
+                 && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol)))
                {
                  if (want_space)
                    fputs_filtered (" ", stream);
index 7e4618902e05ba5791916c67d072eb2a46f03d4a..e1a61b7e65d477cf1c27ddb1b24d4b32e7bec193 100644 (file)
@@ -244,7 +244,7 @@ add_pe_forwarded_sym (const char *sym_name, const char *forward_dll_name,
                        " \"%s\" in dll \"%s\", pointing to \"%s\"\n"),
                        sym_name, dll_name, forward_qualified_name);
 
-  vma = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+  vma = BMSYMBOL_VALUE_ADDRESS (msymbol);
   msymtype = MSYMBOL_TYPE (msymbol.minsym);
   section = MSYMBOL_SECTION (msymbol.minsym);
 
index fdede74542ccb3930eff2707af1799b4d6022f7d..f553b947dbb4ba37b2113f10ec42a88307252043 100644 (file)
@@ -23,6 +23,7 @@
 #include "defs.h"
 #include "target.h"
 #include "inferior.h" /* for non_stop */
+#include "objfiles.h"
 #endif
 
 #include <string.h>
@@ -103,7 +104,7 @@ agent_look_up_symbols (void *arg)
                               (struct objfile *) arg);
 
       if (sym.minsym != NULL)
-       *addrp = MSYMBOL_VALUE_ADDRESS (sym.minsym);
+       *addrp = BMSYMBOL_VALUE_ADDRESS (sym);
       else
 #endif
        {
index ba8616f7bede134a0521b104fb47ef370ac6ea74..e0e5c481f738bdd508306ae5d3ca52c9660490fa 100644 (file)
@@ -1170,7 +1170,7 @@ find_stab_function_addr (char *namestring, const char *filename,
       msym = lookup_minimal_symbol (p, NULL, objfile);
     }
 
-  return msym.minsym == NULL ? 0 : MSYMBOL_VALUE_ADDRESS (msym.minsym);
+  return msym.minsym == NULL ? 0 : BMSYMBOL_VALUE_ADDRESS (msym);
 }
 
 static void
@@ -2278,7 +2278,7 @@ end_psymtab (struct objfile *objfile, struct partial_symtab *pst,
        }
 
       if (minsym.minsym)
-       pst->texthigh = (MSYMBOL_VALUE_ADDRESS (minsym.minsym)
+       pst->texthigh = (BMSYMBOL_VALUE_ADDRESS (minsym)
                         + MSYMBOL_SIZE (minsym.minsym));
 
       last_function_name = NULL;
index e109ff66e1aa2e8ba277281afbada488849aead7..e91b764065d1b4d09c0af858c55e88c0cd95c3ed 100644 (file)
@@ -605,7 +605,7 @@ call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
                          : MSYMBOL_PRINT_NAME (msym.minsym)));
                        
          }
-       return MSYMBOL_VALUE_ADDRESS (msym.minsym);
+       return BMSYMBOL_VALUE_ADDRESS (msym);
       }
 
     case FIELD_LOC_KIND_PHYSADDR:
index 52208d6dd5e15fef5f191d7499a26ea36b026cb0..8c20f15f0fb34d2638d2d237f2b930111cee0ba7 100644 (file)
@@ -3981,7 +3981,7 @@ recursively_find_pc_sect_symtab (struct symtab *symtab, CORE_ADDR pc)
 
 static struct symtab *
 dw2_find_pc_sect_symtab (struct objfile *objfile,
-                        struct minimal_symbol *msymbol,
+                        struct bound_minimal_symbol msymbol,
                         CORE_ADDR pc,
                         struct obj_section *section,
                         int warn_if_readin)
index 4d2e290e8630adfeb6328eb5e684ba3e4d7ef68a..7c4b17505ffa55ea4173a269a90a65c909222beb 100644 (file)
@@ -765,7 +765,7 @@ elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr)
   msym = lookup_minimal_symbol_by_pc (addr);
   if (msym.minsym == NULL)
     return 0;
-  if (MSYMBOL_VALUE_ADDRESS (msym.minsym) != addr)
+  if (BMSYMBOL_VALUE_ADDRESS (msym) != addr)
     return 0;
   /* minimal symbols have always SYMBOL_OBJ_SECTION non-NULL.  */
   sect = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym)->the_bfd_section;
@@ -891,7 +891,7 @@ elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p)
        continue;
       if (MSYMBOL_TYPE (msym.minsym) != mst_slot_got_plt)
        continue;
-      pointer_address = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+      pointer_address = BMSYMBOL_VALUE_ADDRESS (msym);
 
       plt = bfd_get_section_by_name (obfd, ".plt");
       if (plt == NULL)
index 56cbb2c26d012ff3c83a8473e311f3f69a904ccb..a2a7bb7d6d6becdf4525a399151cd26e5dc3188e 100644 (file)
@@ -573,11 +573,11 @@ default_read_var_value (struct symbol *var, struct frame_info *frame)
        if (msym == NULL)
          error (_("No global symbol \"%s\"."), SYMBOL_LINKAGE_NAME (var));
        if (overlay_debugging)
-         addr = symbol_overlayed_address (MSYMBOL_VALUE_ADDRESS (msym),
+         addr = symbol_overlayed_address (BMSYMBOL_VALUE_ADDRESS (lookup_data.result),
                                           MSYMBOL_OBJ_SECTION (lookup_data.result.objfile,
                                                                msym));
        else
-         addr = MSYMBOL_VALUE_ADDRESS (msym);
+         addr = BMSYMBOL_VALUE_ADDRESS (lookup_data.result);
 
        obj_section = MSYMBOL_OBJ_SECTION (lookup_data.result.objfile, msym);
        if (obj_section
index 40dc1d5e3dd6e33ca04d751085be7e1fb0a01434..97d54e91a92164ac8e6f2eddbe8cdc9c32e7914f 100644 (file)
@@ -2018,7 +2018,7 @@ inside_main_func (struct frame_info *this_frame)
   /* Make certain that the code, and not descriptor, address is
      returned.  */
   maddr = gdbarch_convert_from_func_ptr_addr (get_frame_arch (this_frame),
-                                             MSYMBOL_VALUE_ADDRESS (msymbol.minsym),
+                                             BMSYMBOL_VALUE_ADDRESS (msymbol),
                                              &current_target);
   return maddr == get_frame_func (this_frame);
 }
index acb0ba3eb50c8af6b62b67c7d488025da4c05e90..bd4dbdb2c1b925d3242bd10e100ec6b159c41969 100644 (file)
@@ -39,6 +39,7 @@
 #include "infcall.h"
 #include "solib.h"
 #include "frv-tdep.h"
+#include "objfiles.h"
 
 extern void _initialize_frv_tdep (void);
 
@@ -1399,8 +1400,7 @@ frv_frame_this_id (struct frame_info *this_frame,
 
   /* Check if the stack is empty.  */
   msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
-  if (msym_stack.minsym
-      && info->base == MSYMBOL_VALUE_ADDRESS (msym_stack.minsym))
+  if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
     return;
 
   /* Hopefully the prologue analysis either correctly determined the
index 99b504fda866635b8332df1cc517fa5c710a2b51..6d16c33625b38597cc44a8c56fa5dc403b2181e8 100644 (file)
@@ -66,7 +66,7 @@ glibc_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
       if (! fixup.minsym)
         fixup = lookup_minimal_symbol ("fixup", NULL, resolver.objfile);
 
-      if (fixup.minsym && MSYMBOL_VALUE_ADDRESS (fixup.minsym) == pc)
+      if (fixup.minsym && BMSYMBOL_VALUE_ADDRESS (fixup) == pc)
        return frame_unwind_caller_pc (get_current_frame ());
     }
 
index 35f8e7bd00ea9e9e193a8b13899057c562f6c559..e0be32843a5669b09ff0f208b998fc094dd821ce 100644 (file)
@@ -1131,8 +1131,7 @@ gnuv3_get_typeid (struct value *value)
       if (minsym.minsym == NULL)
        error (_("could not find typeinfo symbol for '%s'"), typename);
 
-      result = value_at_lazy (typeinfo_type,
-                             MSYMBOL_VALUE_ADDRESS (minsym.minsym));
+      result = value_at_lazy (typeinfo_type, BMSYMBOL_VALUE_ADDRESS (minsym));
     }
 
   do_cleanups (cleanup);
@@ -1236,7 +1235,7 @@ gnuv3_skip_trampoline (struct frame_info *frame, CORE_ADDR stop_pc)
   if (fn_sym.minsym == NULL)
     return 0;
 
-  method_stop_pc = MSYMBOL_VALUE_ADDRESS (fn_sym.minsym);
+  method_stop_pc = BMSYMBOL_VALUE_ADDRESS (fn_sym);
 
   /* Some targets have minimal symbols pointing to function descriptors
      (powerpc 64 for example).  Make sure to retrieve the address
index e9f067d68fd510dc019fe475a32925c632a90383..8d4686f0ccca0b4b308153a7309a715dfc5f8d53 100644 (file)
@@ -973,7 +973,7 @@ hppa64_hpux_search_dummy_call_sequence (struct gdbarch *gdbarch, CORE_ADDR pc,
       gdb_byte buf[2 * HPPA_INSN_SIZE];
       int offset;
 
-      find_pc_partial_function (MSYMBOL_VALUE_ADDRESS (msym), &name,
+      find_pc_partial_function (MSYMBOL_VALUE_ADDRESS (obj, msym), &name,
                                &begin, &end);
 
       if (name == NULL || begin == 0 || end == 0)
@@ -1096,10 +1096,10 @@ hppa_hpux_find_dummy_bpaddr (CORE_ADDR addr)
       find_pc_partial_function (addr, NULL, &func, NULL);
       ALL_OBJFILE_MSYMBOLS (sec->objfile, msym)
        {
-         u = find_unwind_entry (MSYMBOL_VALUE_ADDRESS (msym));
-         if (func != MSYMBOL_VALUE_ADDRESS (msym) 
+         u = find_unwind_entry (MSYMBOL_VALUE_ADDRESS (sec->objfile, msym));
+         if (func != MSYMBOL_VALUE_ADDRESS (sec->objfile, msym) 
              && (!u || u->stub_unwind.stub_type == 0))
-           return MSYMBOL_VALUE_ADDRESS (msym);
+           return MSYMBOL_VALUE_ADDRESS (sec->objfile, msym);
        }
     }
 
index 05ca007bed7ad2270508fd8f86d3379112ab425b..e302ebb55ab4e32a1f9fc90fba482ad691b6a9b4 100644 (file)
@@ -166,7 +166,7 @@ hppa_symbol_address(const char *sym)
 
   minsym = lookup_minimal_symbol (sym, NULL, NULL);
   if (minsym.minsym)
-    return MSYMBOL_VALUE_ADDRESS (minsym.minsym);
+    return BMSYMBOL_VALUE_ADDRESS (minsym);
   else
     return (CORE_ADDR)-1;
 }
index 23b02a3ce20aac707b30382b29aca076a5edbff4..c59d0be83bcf11c46958e2e13905e5d89a0cde82 100644 (file)
@@ -1335,7 +1335,7 @@ until_next_command (int from_tty)
       if (msymbol.minsym == NULL)
        error (_("Execution is not within a known function."));
 
-      tp->control.step_range_start = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+      tp->control.step_range_start = BMSYMBOL_VALUE_ADDRESS (msymbol);
       tp->control.step_range_end = pc;
     }
   else
index 53394c459d2f47195e90fb99b010cf12ff4664b1..db6c1b0f63cfbbf92acd0b02cbabb932efea6fa1 100644 (file)
--- a/gdb/jit.c
+++ b/gdb/jit.c
@@ -357,7 +357,8 @@ jit_read_descriptor (struct gdbarch *gdbarch,
   if (jit_debug)
     fprintf_unfiltered (gdb_stdlog,
                        "jit_read_descriptor, descriptor_addr = %s\n",
-                       paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (objf_data->descriptor)));
+                       paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
+                                                                 objf_data->descriptor)));
 
   /* Figure out how big the descriptor is on the remote and how to read it.  */
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
@@ -366,7 +367,8 @@ jit_read_descriptor (struct gdbarch *gdbarch,
   desc_buf = alloca (desc_size);
 
   /* Read the descriptor.  */
-  err = target_read_memory (MSYMBOL_VALUE_ADDRESS (objf_data->descriptor),
+  err = target_read_memory (MSYMBOL_VALUE_ADDRESS (ps_data->objfile,
+                                                  objf_data->descriptor),
                            desc_buf, desc_size);
   if (err)
     {
@@ -1026,13 +1028,13 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
         assume we are not attached to a JIT.  */
       reg_symbol = lookup_minimal_symbol_and_objfile (jit_break_name);
       if (reg_symbol.minsym == NULL
-         || MSYMBOL_VALUE_ADDRESS (reg_symbol.minsym) == 0)
+         || BMSYMBOL_VALUE_ADDRESS (reg_symbol) == 0)
        return 1;
 
       desc_symbol = lookup_minimal_symbol (jit_descriptor_name, NULL,
                                           reg_symbol.objfile);
       if (desc_symbol.minsym == NULL
-         || MSYMBOL_VALUE_ADDRESS (desc_symbol.minsym) == 0)
+         || BMSYMBOL_VALUE_ADDRESS (desc_symbol) == 0)
        return 1;
 
       objf_data = get_jit_objfile_data (reg_symbol.objfile);
@@ -1044,7 +1046,7 @@ jit_breakpoint_re_set_internal (struct gdbarch *gdbarch,
   else
     objf_data = get_jit_objfile_data (ps_data->objfile);
 
-  addr = MSYMBOL_VALUE_ADDRESS (objf_data->register_code);
+  addr = MSYMBOL_VALUE_ADDRESS (ps_data->objfile, objf_data->register_code);
 
   if (jit_debug)
     fprintf_unfiltered (gdb_stdlog,
index 70495c6d3a785844c82fd95475c81adb73c38dad..610809d44a099ce5255c203fe66f96628307e368 100644 (file)
@@ -3417,7 +3417,7 @@ minsym_found (struct linespec_state *self, struct objfile *objfile,
   CORE_ADDR pc;
   struct symtab_and_line sal;
 
-  sal = find_pc_sect_line (MSYMBOL_VALUE_ADDRESS (msymbol),
+  sal = find_pc_sect_line (MSYMBOL_VALUE_ADDRESS (objfile, msymbol),
                           (struct obj_section *) 0, 0);
   sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
 
@@ -3498,6 +3498,9 @@ add_minsym (struct minimal_symbol *minsym, void *d)
   struct collect_minsyms *info = d;
   bound_minimal_symbol_d mo;
 
+  mo.minsym = minsym;
+  mo.objfile = info->objfile;
+
   /* Exclude data symbols when looking for breakpoint locations.   */
   if (!info->list_mode)
     switch (minsym->type)
@@ -3513,16 +3516,14 @@ add_minsym (struct minimal_symbol *minsym, void *d)
               before we decide to discard it.  */
            struct gdbarch *gdbarch = get_objfile_arch (info->objfile);
            CORE_ADDR addr = gdbarch_convert_from_func_ptr_addr
-                              (gdbarch, MSYMBOL_VALUE_ADDRESS (minsym),
+                              (gdbarch, BMSYMBOL_VALUE_ADDRESS (mo),
                                &current_target);
 
-           if (addr == MSYMBOL_VALUE_ADDRESS (minsym))
+           if (addr == BMSYMBOL_VALUE_ADDRESS (mo))
              return;
          }
       }
 
-  mo.minsym = minsym;
-  mo.objfile = info->objfile;
   VEC_safe_push (bound_minimal_symbol_d, info->msyms, &mo);
 }
 
index 4702bf5dafc230a7704532b4ba4a2bd861268897..006614171bea94c12c69a7df9667b032c1b7a2ef 100644 (file)
@@ -67,6 +67,7 @@
 #include "buffer.h"
 #include "target-descriptions.h"
 #include "filestuff.h"
+#include "objfiles.h"
 
 #ifndef SPUFS_MAGIC
 #define SPUFS_MAGIC 0x23c9b64e
@@ -5038,8 +5039,7 @@ get_signo (const char *name)
   if (ms.minsym == NULL)
     return 0;
 
-  if (target_read_memory (MSYMBOL_VALUE_ADDRESS (ms.minsym),
-                         (gdb_byte *) &signo,
+  if (target_read_memory (BMSYMBOL_VALUE_ADDRESS (ms), (gdb_byte *) &signo,
                          sizeof (signo)) != 0)
     return 0;
 
index e1c5bce1e8e9ced21abd082feabd441c3c08b160..ca614a3e72ff3dcba00e9379a9628ae305959d88 100644 (file)
@@ -574,7 +574,7 @@ inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
   if (version_msym.minsym == NULL)
     return 0;
 
-  version_addr = MSYMBOL_VALUE_ADDRESS (version_msym.minsym);
+  version_addr = BMSYMBOL_VALUE_ADDRESS (version_msym);
   got = target_read_string (version_addr, &version, 32, &err);
   if (err == 0 && memchr (version, 0, got) == &version[got -1])
     {
index d6bc4820cd044846b61f43a727d48ff828f7f8fe..2c7dbb820f5fbbffc33a5339ae4d23bb7390eead 100644 (file)
@@ -40,6 +40,7 @@
 #include "reggroups.h"
 #include "prologue-value.h"
 #include "target.h"
+#include "objfiles.h"
 
 \f
 /* The m32c tdep structure.  */
@@ -2247,8 +2248,7 @@ m32c_return_value (struct gdbarch *gdbarch,
            error (_("The return value is stored in memory at 'mem0', "
                     "but GDB cannot find\n"
                     "its address."));
-         read_memory (MSYMBOL_VALUE_ADDRESS (mem0.minsym), readbuf,
-                      valtype_len);
+         read_memory (BMSYMBOL_VALUE_ADDRESS (mem0), readbuf, valtype_len);
        }
     }
 
@@ -2280,8 +2280,7 @@ m32c_return_value (struct gdbarch *gdbarch,
            error (_("The return value is stored in memory at 'mem0', "
                     "but GDB cannot find\n"
                     " its address."));
-         write_memory (MSYMBOL_VALUE_ADDRESS (mem0.minsym), writebuf,
-                       valtype_len);
+         write_memory (BMSYMBOL_VALUE_ADDRESS (mem0), writebuf, valtype_len);
        }
     }
 
@@ -2507,7 +2506,7 @@ m32c_m16c_address_to_pointer (struct gdbarch *gdbarch,
       else
        {
          /* The trampoline's address is our pointer.  */
-         addr = MSYMBOL_VALUE_ADDRESS (tramp_msym.minsym);
+         addr = BMSYMBOL_VALUE_ADDRESS (tramp_msym);
        }
     }
 
@@ -2560,7 +2559,7 @@ m32c_m16c_pointer_to_address (struct gdbarch *gdbarch,
               /* If we do have such a symbol, return its value as the
                  function's true address.  */
               if (func_msym.minsym)
-                ptr = MSYMBOL_VALUE_ADDRESS (func_msym.minsym);
+                ptr = BMSYMBOL_VALUE_ADDRESS (func_msym);
             }
         }
       else
index 2af57748cfa95dfff8b9249a697c6c20b15a455c..838d3d9c9c2a175a5133c83c4dee2e784b4cdda2 100644 (file)
@@ -36,6 +36,7 @@
 #include "regcache.h"
 #include "trad-frame.h"
 #include "dis-asm.h"
+#include "objfiles.h"
 
 #include "gdb_assert.h"
 
@@ -844,8 +845,7 @@ m32r_frame_this_id (struct frame_info *this_frame,
 
   /* Check if the stack is empty.  */
   msym_stack = lookup_minimal_symbol ("_stack", NULL, NULL);
-  if (msym_stack.minsym
-      && info->base == MSYMBOL_VALUE_ADDRESS (msym_stack.minsym))
+  if (msym_stack.minsym && info->base == BMSYMBOL_VALUE_ADDRESS (msym_stack))
     return;
 
   /* Hopefully the prologue analysis either correctly determined the
index 6f0092bb46e7b09703e3a0c40f8e228ae5bcedba..9b7e1af2e3ababca9a1128847f6ad6004f8a7150 100644 (file)
@@ -204,7 +204,7 @@ m68hc11_get_register_info (struct m68hc11_soft_reg *reg, const char *name)
   msymbol = lookup_minimal_symbol (name, NULL, NULL);
   if (msymbol.minsym)
     {
-      reg->addr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+      reg->addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
       reg->name = xstrdup (name);
 
       /* Keep track of the address range for soft registers.  */
index f189e99e10cb017105643f87e46dc2a6a542e027..f7194e250ae814719f132ffc57dd97f14f8af91e 100644 (file)
@@ -441,7 +441,7 @@ macho_resolve_oso_sym_with_minsym (struct objfile *main_objfile, asymbol *sym)
       return 0;
     }
   else
-    return MSYMBOL_VALUE_ADDRESS (msym.minsym);
+    return BMSYMBOL_VALUE_ADDRESS (msym);
 }
 
 /* Add oso file OSO/ABFD as a symbol file.  */
index b4225d950580b111b898699ecd7ced946d4b594b..873c33cce9ce16bd05165e66a5dfce2822a75757 100644 (file)
@@ -492,7 +492,7 @@ maintenance_translate_address (char *arg, int from_tty)
     {
       const char *symbol_name = MSYMBOL_PRINT_NAME (sym.minsym);
       const char *symbol_offset
-       = pulongest (address - MSYMBOL_VALUE_ADDRESS (sym.minsym));
+       = pulongest (address - BMSYMBOL_VALUE_ADDRESS (sym));
 
       sect = MSYMBOL_OBJ_SECTION(sym.objfile, sym.minsym);
       if (sect != NULL)
index 8335d51dc7bec6c49e9b5704b835ae26a3299d6b..aa6df11fc99a9893a60e226197d337076557932c 100644 (file)
@@ -407,7 +407,7 @@ lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name,
               msymbol != NULL;
               msymbol = msymbol->hash_next)
            {
-             if (MSYMBOL_VALUE_ADDRESS (msymbol) == pc
+             if (MSYMBOL_VALUE_ADDRESS (objfile, msymbol) == pc
                  && strcmp (MSYMBOL_LINKAGE_NAME (msymbol), name) == 0)
                return msymbol;
            }
@@ -454,6 +454,28 @@ lookup_minimal_symbol_solib_trampoline (const char *name,
   return found_symbol;
 }
 
+/* A helper function that makes *PC section-relative.  This searches
+   the sections of OBJFILE and if *PC is in a section, it subtracts
+   the section offset and returns true.  Otherwise it returns
+   false.  */
+
+static int
+frob_address (struct objfile *objfile, CORE_ADDR *pc)
+{
+  struct obj_section *iter;
+
+  ALL_OBJFILE_OSECTIONS (objfile, iter)
+    {
+      if (*pc >= obj_section_addr (iter) && *pc < obj_section_endaddr (iter))
+       {
+         *pc -= obj_section_offset (iter);
+         return 1;
+       }
+    }
+
+  return 0;
+}
+
 /* Search through the minimal symbol table for each objfile and find
    the symbol whose address is the largest address that is still less
    than or equal to PC, and matches SECTION (which is not NULL).
@@ -470,7 +492,7 @@ lookup_minimal_symbol_solib_trampoline (const char *name,
    Otherwise prefer mst_text symbols.  */
 
 static struct bound_minimal_symbol
-lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
+lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc_in,
                                       struct obj_section *section,
                                       int want_trampoline)
 {
@@ -502,6 +524,8 @@ lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
        objfile != NULL;
        objfile = objfile_separate_debug_iterate (section->objfile, objfile))
     {
+      CORE_ADDR pc = pc_in;
+
       /* If this objfile has a minimal symbol table, go search it using
          a binary search.  Note that a minimal symbol table always consists
          of at least two symbols, a "real" symbol and the terminating
@@ -534,16 +558,16 @@ lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
 
             Warning: this code is trickier than it would appear at first.  */
 
-         /* Should also require that pc is <= end of objfile.  FIXME!  */
-         if (pc >= MSYMBOL_VALUE_ADDRESS (&msymbol[lo]))
+         if (frob_address (objfile, &pc)
+             && pc >= MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[lo]))
            {
-             while (MSYMBOL_VALUE_ADDRESS (&msymbol[hi]) > pc)
+             while (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]) > pc)
                {
                  /* pc is still strictly less than highest address.  */
                  /* Note "new" will always be >= lo.  */
                  new = (lo + hi) / 2;
-                 if ((MSYMBOL_VALUE_ADDRESS (&msymbol[new]) >= pc) ||
-                     (lo == new))
+                 if ((MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[new]) >= pc)
+                     || (lo == new))
                    {
                      hi = new;
                    }
@@ -557,8 +581,8 @@ lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
                 hi to point to the last one.  That way we can find the
                 right symbol if it has an index greater than hi.  */
              while (hi < objfile->minimal_symbol_count - 1
-                    && (MSYMBOL_VALUE_ADDRESS (&msymbol[hi])
-                        == MSYMBOL_VALUE_ADDRESS (&msymbol[hi + 1])))
+                    && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
+                        == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi + 1])))
                hi++;
 
              /* Skip various undesirable symbols.  */
@@ -606,8 +630,8 @@ lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
                      && MSYMBOL_TYPE (&msymbol[hi - 1]) == want_type
                      && (MSYMBOL_SIZE (&msymbol[hi])
                          == MSYMBOL_SIZE (&msymbol[hi - 1]))
-                     && (MSYMBOL_VALUE_ADDRESS (&msymbol[hi])
-                         == MSYMBOL_VALUE_ADDRESS (&msymbol[hi - 1]))
+                     && (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
+                         == MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1]))
                      && (MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi])
                          == MSYMBOL_OBJ_SECTION (objfile, &msymbol[hi - 1])))
                    {
@@ -636,9 +660,9 @@ lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
                     the cancellable variants, but both have sizes.  */
                  if (hi > 0
                      && MSYMBOL_SIZE (&msymbol[hi]) != 0
-                     && pc >= (MSYMBOL_VALUE_ADDRESS (&msymbol[hi])
+                     && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
                                + MSYMBOL_SIZE (&msymbol[hi]))
-                     && pc < (MSYMBOL_VALUE_ADDRESS (&msymbol[hi - 1])
+                     && pc < (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi - 1])
                               + MSYMBOL_SIZE (&msymbol[hi - 1])))
                    {
                      hi--;
@@ -668,7 +692,7 @@ lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
 
              if (hi >= 0
                  && MSYMBOL_SIZE (&msymbol[hi]) != 0
-                 && pc >= (MSYMBOL_VALUE_ADDRESS (&msymbol[hi])
+                 && pc >= (MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi])
                            + MSYMBOL_SIZE (&msymbol[hi])))
                {
                  if (best_zero_sized != -1)
@@ -684,8 +708,8 @@ lookup_minimal_symbol_by_pc_section_1 (CORE_ADDR pc,
 
              if (hi >= 0
                  && ((best_symbol == NULL) ||
-                     (MSYMBOL_VALUE_ADDRESS (best_symbol) <
-                      MSYMBOL_VALUE_ADDRESS (&msymbol[hi]))))
+                     (MSYMBOL_VALUE_RAW_ADDRESS (best_symbol) <
+                      MSYMBOL_VALUE_RAW_ADDRESS (&msymbol[hi]))))
                {
                  best_symbol = &msymbol[hi];
                  best_objfile = objfile;
@@ -981,11 +1005,11 @@ compare_minimal_symbols (const void *fn1p, const void *fn2p)
   fn1 = (const struct minimal_symbol *) fn1p;
   fn2 = (const struct minimal_symbol *) fn2p;
 
-  if (MSYMBOL_VALUE_ADDRESS (fn1) < MSYMBOL_VALUE_ADDRESS (fn2))
+  if (MSYMBOL_VALUE_RAW_ADDRESS (fn1) < MSYMBOL_VALUE_RAW_ADDRESS (fn2))
     {
       return (-1);             /* addr 1 is less than addr 2.  */
     }
-  else if (MSYMBOL_VALUE_ADDRESS (fn1) > MSYMBOL_VALUE_ADDRESS (fn2))
+  else if (MSYMBOL_VALUE_RAW_ADDRESS (fn1) > MSYMBOL_VALUE_RAW_ADDRESS (fn2))
     {
       return (1);              /* addr 1 is greater than addr 2.  */
     }
@@ -1085,8 +1109,9 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount,
       copyfrom = copyto = msymbol;
       while (copyfrom < msymbol + mcount - 1)
        {
-         if (MSYMBOL_VALUE_ADDRESS (copyfrom)
-             == MSYMBOL_VALUE_ADDRESS ((copyfrom + 1))
+         if (MSYMBOL_VALUE_RAW_ADDRESS (copyfrom)
+             == MSYMBOL_VALUE_RAW_ADDRESS ((copyfrom + 1))
+             && MSYMBOL_SECTION (copyfrom) == MSYMBOL_SECTION (copyfrom + 1)
              && strcmp (MSYMBOL_LINKAGE_NAME (copyfrom),
                         MSYMBOL_LINKAGE_NAME ((copyfrom + 1))) == 0)
            {
@@ -1326,7 +1351,7 @@ find_solib_trampoline_target (struct frame_info *frame, CORE_ADDR pc)
            || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc)
            && strcmp (MSYMBOL_LINKAGE_NAME (msymbol),
                       MSYMBOL_LINKAGE_NAME (tsymbol)) == 0)
-         return MSYMBOL_VALUE_ADDRESS (msymbol);
+         return MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
 
        /* Also handle minimal symbols pointing to function descriptors.  */
        if (MSYMBOL_TYPE (msymbol) == mst_data
@@ -1337,11 +1362,11 @@ find_solib_trampoline_target (struct frame_info *frame, CORE_ADDR pc)
 
            func = gdbarch_convert_from_func_ptr_addr
                    (get_objfile_arch (objfile),
-                    MSYMBOL_VALUE_ADDRESS (msymbol),
+                    MSYMBOL_VALUE_ADDRESS (objfile, msymbol),
                     &current_target);
 
            /* Ignore data symbols that are not function descriptors.  */
-           if (func != MSYMBOL_VALUE_ADDRESS (msymbol))
+           if (func != MSYMBOL_VALUE_ADDRESS (objfile, msymbol))
              return func;
          }
       }
@@ -1367,7 +1392,7 @@ minimal_symbol_upper_bound (struct bound_minimal_symbol minsym)
      of the section, as the end of the function.  */
 
   if (MSYMBOL_SIZE (minsym.minsym) != 0)
-    return MSYMBOL_VALUE_ADDRESS (minsym.minsym) + MSYMBOL_SIZE (minsym.minsym);
+    return BMSYMBOL_VALUE_ADDRESS (minsym) + MSYMBOL_SIZE (minsym.minsym);
 
   /* Step over other symbols at this same address, and symbols in
      other sections, to find the next symbol in this section with a
@@ -1377,16 +1402,17 @@ minimal_symbol_upper_bound (struct bound_minimal_symbol minsym)
   section = MSYMBOL_SECTION (msymbol);
   for (i = 1; MSYMBOL_LINKAGE_NAME (msymbol + i) != NULL; i++)
     {
-      if (MSYMBOL_VALUE_ADDRESS (msymbol + i) != MSYMBOL_VALUE_ADDRESS (msymbol)
+      if ((MSYMBOL_VALUE_RAW_ADDRESS (msymbol + i)
+          != MSYMBOL_VALUE_RAW_ADDRESS (msymbol))
          && MSYMBOL_SECTION (msymbol + i) == section)
        break;
     }
 
   obj_section = MSYMBOL_OBJ_SECTION (minsym.objfile, minsym.minsym);
   if (MSYMBOL_LINKAGE_NAME (msymbol + i) != NULL
-      && (MSYMBOL_VALUE_ADDRESS (msymbol + i)
+      && (MSYMBOL_VALUE_ADDRESS (minsym.objfile, msymbol + i)
          < obj_section_endaddr (obj_section)))
-    result = MSYMBOL_VALUE_ADDRESS (msymbol + i);
+    result = MSYMBOL_VALUE_ADDRESS (minsym.objfile, msymbol + i);
   else
     /* We got the start address from the last msymbol in the objfile.
        So the end address is the end of the section.  */
index 89c578e9706f414bbd599e9a38d56afac566a514..61bea6c4d6f336b4481b113698c768e4c3e759dd 100644 (file)
@@ -826,7 +826,7 @@ mips_linux_skip_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
 
   resolver = lookup_minimal_symbol ("__dl_runtime_resolve", NULL, NULL);
 
-  if (resolver.minsym && MSYMBOL_VALUE_ADDRESS (resolver.minsym) == pc)
+  if (resolver.minsym && BMSYMBOL_VALUE_ADDRESS (resolver) == pc)
     return frame_unwind_caller_pc (get_current_frame ());
 
   return glibc_skip_solib_resolver (gdbarch, pc);
index 7380ee12d6491bb5a7c1c06a4c15c76d048b5d7d..606b150caacd8297c688da878b16dce6a2f70003 100644 (file)
@@ -7635,7 +7635,7 @@ mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
      which jumps to foo.  */
   msym = lookup_minimal_symbol_by_pc (pc);
   if (msym.minsym == NULL
-      || MSYMBOL_VALUE_ADDRESS (msym.minsym) != pc
+      || BMSYMBOL_VALUE_ADDRESS (msym) != pc
       || MSYMBOL_LINKAGE_NAME (msym.minsym) == NULL
       || strncmp (MSYMBOL_LINKAGE_NAME (msym.minsym), ".pic.", 5) != 0)
     return 0;
index 54a5acfa8ce116e858dfaa08fc0923ce1225a605..43278956a4d9830d1be87c019de1058339dafccd 100644 (file)
@@ -1276,7 +1276,7 @@ find_objc_msgsend (void)
          continue; 
        }
 
-      methcalls[i].begin = MSYMBOL_VALUE_ADDRESS (func.minsym);
+      methcalls[i].begin = BMSYMBOL_VALUE_ADDRESS (func);
       methcalls[i].end = minimal_symbol_upper_bound (func);
     }
 }
index dba13fbbfba04728a4b67454918a3ef8ef292002..db0c7206b002d20f7980649ec13e0ad74b47b18f 100644 (file)
@@ -805,7 +805,7 @@ objfile_relocate1 (struct objfile *objfile,
 
     ALL_OBJFILE_MSYMBOLS (objfile, msym)
       if (MSYMBOL_SECTION (msym) >= 0)
-       SET_MSYMBOL_VALUE_ADDRESS (msym, (MSYMBOL_VALUE_ADDRESS (msym)
+       SET_MSYMBOL_VALUE_ADDRESS (msym, (MSYMBOL_VALUE_ADDRESS (objfile, msym)
                                          + ANOFFSET (delta,
                                                      MSYMBOL_SECTION (msym))));
   }
index fc100e22e1b2ccfc9a36c43bf2c8f5b45ca4e2cc..b94ee41ab694101bcd2ee5da63ff05dfe80db51d 100644 (file)
@@ -20,6 +20,7 @@
 #include "defs.h"
 #include "frame.h"
 #include "symtab.h"
+#include "objfiles.h"
 
 #include "obsd-tdep.h"
 
@@ -29,7 +30,7 @@ obsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
   struct bound_minimal_symbol msym;
 
   msym = lookup_minimal_symbol("_dl_bind", NULL, NULL);
-  if (msym.minsym && MSYMBOL_VALUE_ADDRESS (msym.minsym) == pc)
+  if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
     return frame_unwind_caller_pc (get_current_frame ());
   else
     return find_solib_trampoline_target (get_current_frame (), pc);
index 5300d6b5f169db0483b2c8ae2c2ec2f6d99b23a5..70eb3a8c677cb261f34df56e4caddc49e4c3be6e 100644 (file)
@@ -38,6 +38,7 @@
 #include "cp-abi.h"
 #include "cp-support.h"
 #include "exceptions.h"
+#include "objfiles.h"
 \f
 
 /* Decorations for Pascal.  */
@@ -227,7 +228,7 @@ pascal_val_print (struct type *type, const gdb_byte *valaddr,
          /* If 'symbol_print' is set, we did the work above.  */
          if (!options->symbol_print
              && (msymbol.minsym != NULL)
-             && (vt_address == MSYMBOL_VALUE_ADDRESS (msymbol.minsym)))
+             && (vt_address == BMSYMBOL_VALUE_ADDRESS (msymbol)))
            {
              if (want_space)
                fputs_filtered (" ", stream);
index a40fae57ee0d77b13ba34efcbc1a69d1654142c5..c6e25a9d8c7ac4e575cea4d712d173af3b7a90b0 100644 (file)
@@ -502,7 +502,7 @@ write_exp_msymbol (struct bound_minimal_symbol bound_msym)
   struct objfile *objfile = bound_msym.objfile;
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
 
-  CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (msymbol);
+  CORE_ADDR addr = BMSYMBOL_VALUE_ADDRESS (bound_msym);
   struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
   enum minimal_symbol_type type = MSYMBOL_TYPE (msymbol);
   CORE_ADDR pc;
@@ -519,7 +519,7 @@ write_exp_msymbol (struct bound_minimal_symbol bound_msym)
 
       if (ifunc_msym.minsym != NULL
          && MSYMBOL_TYPE (ifunc_msym.minsym) == mst_text_gnu_ifunc
-         && MSYMBOL_VALUE_ADDRESS (ifunc_msym.minsym) == pc)
+         && BMSYMBOL_VALUE_ADDRESS (ifunc_msym) == pc)
        {
          /* A function descriptor has been resolved but PC is still in the
             STT_GNU_IFUNC resolver body (such as because inferior does not
index dee6938cf544c901eab53bc161d788916fd48b29..08c53427a0ad78d4c32672a978280d3a0064ab93 100644 (file)
@@ -919,9 +919,9 @@ ppc_elfv2_skip_entrypoint (struct gdbarch *gdbarch, CORE_ADDR pc)
   if (MSYMBOL_TARGET_FLAG_1 (fun.minsym))
     local_entry_offset = 8;
 
-  if (MSYMBOL_VALUE_ADDRESS (fun.minsym) <= pc
-      && pc < MSYMBOL_VALUE_ADDRESS (fun.minsym) + local_entry_offset)
-    return MSYMBOL_VALUE_ADDRESS (fun.minsym) + local_entry_offset;
+  if (BMSYMBOL_VALUE_ADDRESS (fun) <= pc
+      && pc < BMSYMBOL_VALUE_ADDRESS (fun) + local_entry_offset)
+    return BMSYMBOL_VALUE_ADDRESS (fun) + local_entry_offset;
 
   return pc;
 }
@@ -1028,7 +1028,7 @@ ppc_linux_spe_context_lookup (struct objfile *objfile)
     {
       spe_context_objfile = objfile;
       spe_context_lm_addr = svr4_fetch_objfile_link_map (objfile);
-      spe_context_offset = MSYMBOL_VALUE_ADDRESS (sym.minsym);
+      spe_context_offset = BMSYMBOL_VALUE_ADDRESS (sym);
       spe_context_cache_ptid = minus_one_ptid;
       spe_context_cache_address = 0;
       return;
index 124e4fae39f1ecf673b8de535123d39d5010b71d..1a880a657542b4ab9261f26719b30d35fbc5d47c 100644 (file)
@@ -1097,7 +1097,7 @@ convert_code_addr_to_desc_addr (CORE_ADDR code_addr, CORE_ADDR *desc_addr)
   if (fn.minsym == NULL)
     return 0;
   /* Found a descriptor.  */
-  (*desc_addr) = MSYMBOL_VALUE_ADDRESS (fn.minsym);
+  (*desc_addr) = BMSYMBOL_VALUE_ADDRESS (fn);
   return 1;
 }
 
index ec0d6c1188f021e94489abcf995ba4e105f5ad5f..87b14488b0cf30a52a387da1c6f071f7b97fdd84 100644 (file)
@@ -631,7 +631,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
                        int *line,       /* OUT */
                        int *unmapped)   /* OUT */
 {
-  struct minimal_symbol *msymbol;
+  struct bound_minimal_symbol msymbol;
   struct symbol *symbol;
   CORE_ADDR name_location = 0;
   struct obj_section *section = NULL;
@@ -661,7 +661,7 @@ build_address_symbolic (struct gdbarch *gdbarch,
      save some memory, but for many debug format--ELF/DWARF or
      anything/stabs--it would be inconvenient to eliminate those minimal
      symbols anyway).  */
-  msymbol = lookup_minimal_symbol_by_pc_section (addr, section).minsym;
+  msymbol = lookup_minimal_symbol_by_pc_section (addr, section);
   symbol = find_pc_sect_function (addr, section);
 
   if (symbol)
@@ -680,40 +680,40 @@ build_address_symbolic (struct gdbarch *gdbarch,
        name_temp = SYMBOL_LINKAGE_NAME (symbol);
     }
 
-  if (msymbol != NULL
-      && MSYMBOL_HAS_SIZE (msymbol)
-      && MSYMBOL_SIZE (msymbol) == 0
-      && MSYMBOL_TYPE (msymbol) != mst_text
-      && MSYMBOL_TYPE (msymbol) != mst_text_gnu_ifunc
-      && MSYMBOL_TYPE (msymbol) != mst_file_text)
-    msymbol = NULL;
+  if (msymbol.minsym != NULL
+      && MSYMBOL_HAS_SIZE (msymbol.minsym)
+      && MSYMBOL_SIZE (msymbol.minsym) == 0
+      && MSYMBOL_TYPE (msymbol.minsym) != mst_text
+      && MSYMBOL_TYPE (msymbol.minsym) != mst_text_gnu_ifunc
+      && MSYMBOL_TYPE (msymbol.minsym) != mst_file_text)
+    msymbol.minsym = NULL;
 
-  if (msymbol != NULL)
+  if (msymbol.minsym != NULL)
     {
-      if (MSYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
+      if (BMSYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
        {
          /* If this is a function (i.e. a code address), strip out any
             non-address bits.  For instance, display a pointer to the
             first instruction of a Thumb function as <function>; the
             second instruction will be <function+2>, even though the
             pointer is <function+3>.  This matches the ISA behavior.  */
-         if (MSYMBOL_TYPE (msymbol) == mst_text
-             || MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc
-             || MSYMBOL_TYPE (msymbol) == mst_file_text
-             || MSYMBOL_TYPE (msymbol) == mst_solib_trampoline)
+         if (MSYMBOL_TYPE (msymbol.minsym) == mst_text
+             || MSYMBOL_TYPE (msymbol.minsym) == mst_text_gnu_ifunc
+             || MSYMBOL_TYPE (msymbol.minsym) == mst_file_text
+             || MSYMBOL_TYPE (msymbol.minsym) == mst_solib_trampoline)
            addr = gdbarch_addr_bits_remove (gdbarch, addr);
 
          /* The msymbol is closer to the address than the symbol;
             use the msymbol instead.  */
          symbol = 0;
-         name_location = MSYMBOL_VALUE_ADDRESS (msymbol);
+         name_location = BMSYMBOL_VALUE_ADDRESS (msymbol);
          if (do_demangle || asm_demangle)
-           name_temp = MSYMBOL_PRINT_NAME (msymbol);
+           name_temp = MSYMBOL_PRINT_NAME (msymbol.minsym);
          else
-           name_temp = MSYMBOL_LINKAGE_NAME (msymbol);
+           name_temp = MSYMBOL_LINKAGE_NAME (msymbol.minsym);
        }
     }
-  if (symbol == NULL && msymbol == NULL)
+  if (symbol == NULL && msymbol.minsym == NULL)
     return 1;
 
   /* If the nearest symbol is too far away, don't print anything symbolic.  */
@@ -1126,7 +1126,7 @@ sym_info (char *arg, int from_tty)
        struct cleanup *old_chain;
 
        matches = 1;
-       offset = sect_addr - MSYMBOL_VALUE_ADDRESS (msymbol);
+       offset = sect_addr - MSYMBOL_VALUE_ADDRESS (objfile, msymbol);
        mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
        sec_name = osect->the_bfd_section->name;
        msym_name = MSYMBOL_PRINT_NAME (msymbol);
@@ -1225,7 +1225,7 @@ address_info (char *exp, int from_tty)
          struct objfile *objfile = msymbol.objfile;
 
          gdbarch = get_objfile_arch (objfile);
-         load_addr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+         load_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
 
          printf_filtered ("Symbol \"");
          fprintf_symbol_filtered (gdb_stdout, exp,
@@ -1367,7 +1367,7 @@ address_info (char *exp, int from_tty)
        else
          {
            section = MSYMBOL_OBJ_SECTION (msym.objfile, msym.minsym);
-           load_addr = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+           load_addr = BMSYMBOL_VALUE_ADDRESS (msym);
 
            if (section
                && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0)
index 96e4fe0b48eb3a95b0eda1f6251b6965d51ac138..09cfc79198f5dd5811c961ddfc7d667db702d5b3 100644 (file)
@@ -24,6 +24,7 @@
 #include "symtab.h"
 #include "target.h"
 #include "regcache.h"
+#include "objfiles.h"
 
 #include "gdb_proc_service.h"
 
@@ -207,7 +208,7 @@ ps_pglobal_lookup (gdb_ps_prochandle_t ph, const char *obj,
     result = PS_NOSYM;
   else
     {
-      *sym_addr = core_addr_to_ps_addr (MSYMBOL_VALUE_ADDRESS (ms.minsym));
+      *sym_addr = core_addr_to_ps_addr (BMSYMBOL_VALUE_ADDRESS (ms));
       result = PS_OK;
     }
 
index a1e584e844b81923924cee607966577fd1fc6a4f..2787f4cf8d3a4f1e630c1d7dbef6673b189e187e 100644 (file)
@@ -226,7 +226,7 @@ static struct partial_symtab *
 find_pc_sect_psymtab_closer (struct objfile *objfile,
                             CORE_ADDR pc, struct obj_section *section,
                             struct partial_symtab *pst,
-                            struct minimal_symbol *msymbol)
+                            struct bound_minimal_symbol msymbol)
 {
   struct partial_symtab *tpst;
   struct partial_symtab *best_pst = pst;
@@ -242,7 +242,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile,
       section == 0)    /* Can't validate section this way.  */
     return pst;
 
-  if (msymbol == NULL)
+  if (msymbol.minsym == NULL)
     return (pst);
 
   /* The code range of partial symtabs sometimes overlap, so, in
@@ -266,7 +266,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile,
          p = find_pc_sect_psymbol (objfile, tpst, pc, section);
          if (p != NULL
              && SYMBOL_VALUE_ADDRESS (p)
-             == MSYMBOL_VALUE_ADDRESS (msymbol))
+             == BMSYMBOL_VALUE_ADDRESS (msymbol))
            return tpst;
 
          /* Also accept the textlow value of a psymtab as a
@@ -305,7 +305,7 @@ find_pc_sect_psymtab_closer (struct objfile *objfile,
 static struct partial_symtab *
 find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
                      struct obj_section *section,
-                     struct minimal_symbol *msymbol)
+                     struct bound_minimal_symbol msymbol)
 {
   struct partial_symtab *pst;
 
@@ -320,7 +320,7 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
          /* FIXME: addrmaps currently do not handle overlayed sections,
             so fall back to the non-addrmap case if we're debugging
             overlays and the addrmap returned the wrong section.  */
-         if (overlay_debugging && msymbol && section)
+         if (overlay_debugging && msymbol.minsym && section)
            {
              struct partial_symbol *p;
 
@@ -331,7 +331,7 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
              p = find_pc_sect_psymbol (objfile, pst, pc, section);
              if (!p
                  || SYMBOL_VALUE_ADDRESS (p)
-                 != MSYMBOL_VALUE_ADDRESS (msymbol))
+                 != BMSYMBOL_VALUE_ADDRESS (msymbol))
                goto next;
            }
 
@@ -373,7 +373,7 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
 
 static struct symtab *
 find_pc_sect_symtab_from_partial (struct objfile *objfile,
-                                 struct minimal_symbol *msymbol,
+                                 struct bound_minimal_symbol msymbol,
                                  CORE_ADDR pc, struct obj_section *section,
                                  int warn_if_readin)
 {
index d150412005bc3f92b12edb40de7a12b74a660f9b..01b5d811dda9038580b17f8407dbf1ce68641cfd 100644 (file)
@@ -30,6 +30,7 @@
 #include "gdbcmd.h"
 #include "top.h"
 #include "regcache.h"
+#include "objfiles.h"
 
 /* If non-null, ravenscar task support is enabled.  */
 static int ravenscar_task_support = 1;
@@ -164,7 +165,7 @@ get_running_thread_id (void)
   if (!object_msym.minsym)
     return 0;
 
-  object_addr = MSYMBOL_VALUE_ADDRESS (object_msym.minsym);
+  object_addr = BMSYMBOL_VALUE_ADDRESS (object_msym);
   object_size = TYPE_LENGTH (builtin_type_void_data_ptr);
   buf_size = object_size;
   buf = alloca (buf_size);
index 8e9ef64e3d37ee6d67b9e544a5bb87ccf4a8d72e..e03d3bf988a01e8308c09e9c128a4cc4a49506cb 100644 (file)
@@ -3701,6 +3701,8 @@ remote_check_symbols (void)
 
   while (strncmp (reply, "qSymbol:", 8) == 0)
     {
+      struct bound_minimal_symbol sym;
+
       tmp = &reply[8];
       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
       msg[end] = '\0';
@@ -3710,7 +3712,7 @@ remote_check_symbols (void)
       else
        {
          int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
-         CORE_ADDR sym_addr = MSYMBOL_VALUE_ADDRESS (sym.minsym);
+         CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
 
          /* If this is a function address, return the start of code
             instead of any data function descriptor.  */
index cf93d53132eb7705da829e89f04b1d7c10920696..9f115e0174dc0a1505fba68f7482ff19dbfc6e92 100644 (file)
@@ -224,7 +224,7 @@ sh64_elf_make_msymbol_special (asymbol *sym, struct minimal_symbol *msym)
   if (((elf_symbol_type *)(sym))->internal_elf_sym.st_other == STO_SH5_ISA32)
     {
       MSYMBOL_TARGET_FLAG_1 (msym) = 1;
-      SET_MSYMBOL_VALUE_ADDRESS (msym, MSYMBOL_VALUE_ADDRESS (msym) | 1);
+      SET_MSYMBOL_VALUE_ADDRESS (msym, MSYMBOL_VALUE_RAW_ADDRESS (msym) | 1);
     }
 }
 
index a4efd42acf369188255bb07f4750f913e78b1293..bf7d6a128f13c3088de2715632710d34e97404a9 100644 (file)
@@ -21,6 +21,7 @@
 #include "frame.h"
 #include "symtab.h"
 #include "inferior.h"
+#include "objfiles.h"
 
 #include "sol2-tdep.h"
 
@@ -30,7 +31,7 @@ sol2_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
   struct bound_minimal_symbol msym;
 
   msym = lookup_minimal_symbol("elf_bndr", NULL, NULL);
-  if (msym.minsym && MSYMBOL_VALUE_ADDRESS (msym.minsym) == pc)
+  if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
     return frame_unwind_caller_pc (get_current_frame ());
 
   return 0;
index 61ccc4a2cca5cf9c3ffc7726d96e9e8f28797552..0217a94ef296e468f5a86345ee5d073af0047b8a 100644 (file)
@@ -572,7 +572,7 @@ lm_base (void)
 
   if (got_sym.minsym != 0)
     {
-      addr = MSYMBOL_VALUE_ADDRESS (got_sym.minsym);
+      addr = BMSYMBOL_VALUE_ADDRESS (got_sym);
       if (solib_dsbt_debug)
        fprintf_unfiltered (gdb_stdlog,
                            "lm_base: get addr %x by _GLOBAL_OFFSET_TABLE_.\n",
index 0b111bccffdc45e1865895affd43ba6598c0ce0b..9724a3c74752754913a3071b755367137086b97e 100644 (file)
@@ -292,7 +292,7 @@ lm_base (void)
       return 0;
     }
 
-  addr = MSYMBOL_VALUE_ADDRESS (got_sym.minsym) + 8;
+  addr = BMSYMBOL_VALUE_ADDRESS (got_sym) + 8;
 
   if (solib_frv_debug)
     fprintf_unfiltered (gdb_stdlog,
@@ -926,7 +926,7 @@ main_got (void)
   if (got_sym.minsym == 0)
     return 0;
 
-  return MSYMBOL_VALUE_ADDRESS (got_sym.minsym);
+  return BMSYMBOL_VALUE_ADDRESS (got_sym);
 }
 
 /* Find the global pointer for the given function address ADDR.  */
index d6a4c699149eb43170582e54129956dedd82970a..6266ee00c3d49b8af43ca0a2879908b4f01083f3 100644 (file)
@@ -285,9 +285,9 @@ locate_base (void)
   CORE_ADDR address = 0;
 
   msymbol = lookup_minimal_symbol (DEBUG_BASE, NULL, symfile_objfile);
-  if ((msymbol.minsym != NULL) && (MSYMBOL_VALUE_ADDRESS (msymbol.minsym) != 0))
+  if ((msymbol.minsym != NULL) && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
     {
-      address = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+      address = BMSYMBOL_VALUE_ADDRESS (msymbol);
     }
   return (address);
 }
index d9e411903941d25ae6b55ec8f5c452b0c718bc5e..cba50d1886f01052da236a133b1cc6b81a994b54 100644 (file)
@@ -219,7 +219,7 @@ som_solib_create_inferior_hook (int from_tty)
   if (msymbol.minsym == NULL)
     goto keep_going;
 
-  anaddr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+  anaddr = BMSYMBOL_VALUE_ADDRESS (msymbol);
   store_unsigned_integer (buf, 4, byte_order, ptid_get_pid (inferior_ptid));
   status = target_write_memory (anaddr, buf, 4);
   if (status != 0)
@@ -251,7 +251,7 @@ Suggest linking with /opt/langtools/lib/end.o.\n\
 GDB will be unable to track shl_load/shl_unload calls"));
       goto keep_going;
     }
-  anaddr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+  anaddr = BMSYMBOL_VALUE_ADDRESS (msymbol);
   dld_cache.hook.address = anaddr;
 
   /* Grrr, this might not be an export symbol!  We have to find the
@@ -275,7 +275,7 @@ Suggest linking with /opt/langtools/lib/end.o.\n\
 GDB will be unable to track shl_load/shl_unload calls"));
       goto keep_going;
     }
-  anaddr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+  anaddr = BMSYMBOL_VALUE_ADDRESS (msymbol);
   status = target_write_memory (anaddr, buf, 4);
 
   /* Now set a shlib_event breakpoint at __d_trap so we can track
@@ -290,7 +290,7 @@ GDB will be unable to track shl_load/shl_unload calls"));
       goto keep_going;
     }
   create_solib_event_breakpoint (target_gdbarch (),
-                                MSYMBOL_VALUE_ADDRESS (msymbol.minsym));
+                                BMSYMBOL_VALUE_ADDRESS (msymbol));
 
   /* We have all the support usually found in end.o, so we can track
      shl_load and shl_unload calls.  */
@@ -306,7 +306,7 @@ keep_going:
       error (_("Unable to find __dld_flags symbol in object file."));
     }
 
-  anaddr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+  anaddr = BMSYMBOL_VALUE_ADDRESS (msymbol);
 
   /* Read the current contents.  */
   status = target_read_memory (anaddr, buf, 4);
@@ -351,7 +351,7 @@ manpage for methods to privately map shared library text."));
   if (msymbol.minsym == NULL)
     error (_("Unable to find _start symbol in object file."));
 
-  anaddr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+  anaddr = BMSYMBOL_VALUE_ADDRESS (msymbol);
 
   /* Make the breakpoint at "_start" a shared library event breakpoint.  */
   create_solib_event_breakpoint (target_gdbarch (), anaddr);
@@ -537,7 +537,7 @@ link_map_start (void)
   sym = lookup_minimal_symbol ("__dld_flags", NULL, NULL);
   if (!sym.minsym)
     error (_("Unable to find __dld_flags symbol in object file."));
-  addr = MSYMBOL_VALUE_ADDRESS (sym.minsym);
+  addr = BMSYMBOL_VALUE_ADDRESS (sym);
   read_memory (addr, buf, 4);
   dld_flags = extract_unsigned_integer (buf, 4, byte_order);
   if ((dld_flags & DLD_FLAGS_LISTVALID) == 0)
@@ -554,10 +554,10 @@ link_map_start (void)
          error (_("Unable to find dynamic library list."));
          return 0;
        }
-      addr = MSYMBOL_VALUE_ADDRESS (sym.minsym) - 8;
+      addr = BMSYMBOL_VALUE_ADDRESS (sym) - 8;
     }
   else
-    addr = MSYMBOL_VALUE_ADDRESS (sym.minsym);
+    addr = BMSYMBOL_VALUE_ADDRESS (sym);
 
   read_memory (addr, buf, 4);
   addr = extract_unsigned_integer (buf, 4, byte_order);
index a4cefad3751f0a8b6bbcac8634cafe8d476ae679..1c574b537b4ef544747feeefbf683630e4271ada 100644 (file)
@@ -418,7 +418,7 @@ spu_enable_break (struct objfile *objfile)
   /* Place a solib_event breakpoint on the symbol.  */
   if (spe_event_sym.minsym)
     {
-      CORE_ADDR addr = MSYMBOL_VALUE_ADDRESS (spe_event_sym.minsym);
+      CORE_ADDR addr = BMSYMBOL_VALUE_ADDRESS (spe_event_sym);
 
       addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (), addr,
                                                  &current_target);
@@ -448,7 +448,7 @@ ocl_enable_break (struct objfile *objfile)
   if (event_sym.minsym && addr_sym.minsym)
     {
       /* Place a solib_event breakpoint on the symbol.  */
-      CORE_ADDR event_addr = MSYMBOL_VALUE_ADDRESS (event_sym.minsym);
+      CORE_ADDR event_addr = BMSYMBOL_VALUE_ADDRESS (event_sym);
       create_solib_event_breakpoint (get_objfile_arch (objfile), event_addr);
 
       /* Store the address of the symbol that will point to OpenCL program
@@ -459,7 +459,7 @@ ocl_enable_break (struct objfile *objfile)
                  &objfile->objfile_obstack,
                  objfile->sections_end - objfile->sections,
                  CORE_ADDR);
-         *ocl_program_addr_base = MSYMBOL_VALUE_ADDRESS (addr_sym.minsym);
+         *ocl_program_addr_base = BMSYMBOL_VALUE_ADDRESS (addr_sym);
          set_objfile_data (objfile, ocl_program_data_key,
                            ocl_program_addr_base);
         }
index 4be0807fe009a8d8fb82243d0777f74f2cccdf68..e2e173a4ca91896e504ce54b16cc64d7f0f71fd2 100644 (file)
@@ -817,7 +817,7 @@ elf_locate_base (void)
      conventionally named _r_debug, as a last resort.  */
   msymbol = lookup_minimal_symbol ("_r_debug", NULL, symfile_objfile);
   if (msymbol.minsym != NULL)
-    return MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+    return BMSYMBOL_VALUE_ADDRESS (msymbol);
 
   /* DT_DEBUG entry not found.  */
   return 0;
@@ -2349,9 +2349,9 @@ enable_break (struct svr4_info *info, int from_tty)
     {
       msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
       if ((msymbol.minsym != NULL)
-         && (MSYMBOL_VALUE_ADDRESS (msymbol.minsym) != 0))
+         && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
        {
-         sym_addr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+         sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
          sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
                                                         sym_addr,
                                                         &current_target);
@@ -2366,9 +2366,9 @@ enable_break (struct svr4_info *info, int from_tty)
        {
          msymbol = lookup_minimal_symbol (*bkpt_namep, NULL, symfile_objfile);
          if ((msymbol.minsym != NULL)
-             && (MSYMBOL_VALUE_ADDRESS (msymbol.minsym) != 0))
+             && (BMSYMBOL_VALUE_ADDRESS (msymbol) != 0))
            {
-             sym_addr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+             sym_addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
              sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
                                                             sym_addr,
                                                             &current_target);
index 157f37b933b54a8d2223e1d0a68d3254c09c5351..4967bcd1d7231edf9993f2234c0fe3d42aca0df8 100644 (file)
@@ -1768,10 +1768,10 @@ spu_get_overlay_table (struct objfile *objfile)
   if (!ovly_buf_table_msym.minsym)
     return NULL;
 
-  ovly_table_base = MSYMBOL_VALUE_ADDRESS (ovly_table_msym.minsym);
+  ovly_table_base = BMSYMBOL_VALUE_ADDRESS (ovly_table_msym);
   ovly_table_size = MSYMBOL_SIZE (ovly_table_msym.minsym);
 
-  ovly_buf_table_base = MSYMBOL_VALUE_ADDRESS (ovly_buf_table_msym.minsym);
+  ovly_buf_table_base = BMSYMBOL_VALUE_ADDRESS (ovly_buf_table_msym);
   ovly_buf_table_size = MSYMBOL_SIZE (ovly_buf_table_msym.minsym);
 
   ovly_table = xmalloc (ovly_table_size);
@@ -1923,7 +1923,7 @@ spu_catch_start (struct objfile *objfile)
 
   /* If we have debugging information, try to use it -- this
      will allow us to properly skip the prologue.  */
-  pc = MSYMBOL_VALUE_ADDRESS (minsym.minsym);
+  pc = BMSYMBOL_VALUE_ADDRESS (minsym);
   symtab = find_pc_sect_symtab (pc, MSYMBOL_OBJ_SECTION (minsym.objfile,
                                                         minsym.minsym));
   if (symtab != NULL)
@@ -2002,7 +2002,7 @@ flush_ea_cache (void)
       type = objfile_type (obj)->builtin_void;
       type = lookup_function_type (type);
       type = lookup_pointer_type (type);
-      addr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+      addr = BMSYMBOL_VALUE_ADDRESS (msymbol);
 
       call_function_by_hand (value_from_pointer (type, addr), 0, NULL);
     }
index b5bec10762a0cfb793fd8497348a2b7f51fe88e2..b40cf78f49c064ace4b9059f4038c7d0612ae389 100644 (file)
@@ -1178,7 +1178,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
-             SYMBOL_VALUE_ADDRESS (sym) = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+             SYMBOL_VALUE_ADDRESS (sym) = BMSYMBOL_VALUE_ADDRESS (msym);
            }
        }
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
@@ -1370,7 +1370,7 @@ define_symbol (CORE_ADDR valu, char *string, int desc, int type,
                (gdbarch, SYMBOL_LINKAGE_NAME (sym));
 
              SYMBOL_SET_LINKAGE_NAME (sym, new_name);
-             SYMBOL_VALUE_ADDRESS (sym) = MSYMBOL_VALUE_ADDRESS (msym.minsym);
+             SYMBOL_VALUE_ADDRESS (sym) = BMSYMBOL_VALUE_ADDRESS (msym);
            }
        }
       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
@@ -4680,12 +4680,13 @@ scan_file_globals (struct objfile *objfile)
                      if (SYMBOL_CLASS (sym) == LOC_BLOCK)
                        {
                          fix_common_block (sym,
-                                           MSYMBOL_VALUE_ADDRESS (msymbol));
+                                           MSYMBOL_VALUE_ADDRESS (resolve_objfile,
+                                                                  msymbol));
                        }
                      else
                        {
                          SYMBOL_VALUE_ADDRESS (sym)
-                           = MSYMBOL_VALUE_ADDRESS (msymbol);
+                           = MSYMBOL_VALUE_ADDRESS (resolve_objfile, msymbol);
                        }
                      SYMBOL_SECTION (sym) = MSYMBOL_SECTION (msymbol);
                    }
index aec0e5d9cdacbcc55e52eed4b4c63a077206eaec..da7d977510148acb7cd9ccdb24b3c8e77eec888b 100644 (file)
@@ -47,6 +47,7 @@
 #include "inline-frame.h"
 #include "linespec.h"
 #include "cli/cli-utils.h"
+#include "objfiles.h"
 
 #include "gdb_assert.h"
 #include <ctype.h>
@@ -1076,7 +1077,7 @@ find_frame_funname (struct frame_info *frame, char **funname,
        memset (&msymbol, 0, sizeof (msymbol));
 
       if (msymbol.minsym != NULL
-         && (MSYMBOL_VALUE_ADDRESS (msymbol.minsym)
+         && (BMSYMBOL_VALUE_ADDRESS (msymbol)
              > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
        {
          /* We also don't know anything about the function besides
index c247bd7e0448b56acd18f4888c01a569f72b1b8c..e8491c8f501b2fac0d4a96b6c88dc4e258306d91 100644 (file)
@@ -308,7 +308,7 @@ debug_qf_expand_symtabs_matching
 
 static struct symtab *
 debug_qf_find_pc_sect_symtab (struct objfile *objfile,
-                             struct minimal_symbol *msymbol,
+                             struct bound_minimal_symbol msymbol,
                              CORE_ADDR pc,
                              struct obj_section *section,
                              int warn_if_readin)
@@ -320,7 +320,7 @@ debug_qf_find_pc_sect_symtab (struct objfile *objfile,
   fprintf_filtered (gdb_stdlog,
                    "qf->find_pc_sect_symtab (%s, %s, %s, %s, %d)\n",
                    debug_objfile_name (objfile),
-                   host_address_to_string (msymbol),
+                   host_address_to_string (msymbol.minsym),
                    hex_string (pc),
                    host_address_to_string (section),
                    warn_if_readin);
index b8d4479117c5f07111284201a2e614aef7484d8e..d5cb7cb227d3513bb5659196037de92ba69d273f 100644 (file)
@@ -3561,12 +3561,11 @@ simple_read_overlay_table (void)
   word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
   byte_order = gdbarch_byte_order (gdbarch);
 
-  cache_novlys
-    = read_memory_integer (MSYMBOL_VALUE_ADDRESS (novlys_msym.minsym),
-                          4, byte_order);
+  cache_novlys = read_memory_integer (BMSYMBOL_VALUE_ADDRESS (novlys_msym),
+                                     4, byte_order);
   cache_ovly_table
     = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
-  cache_ovly_table_base = MSYMBOL_VALUE_ADDRESS (ovly_table_msym.minsym);
+  cache_ovly_table_base = BMSYMBOL_VALUE_ADDRESS (ovly_table_msym);
   read_target_long_array (cache_ovly_table_base,
                           (unsigned int *) cache_ovly_table,
                           cache_novlys * 4, word_size, byte_order);
@@ -3642,7 +3641,7 @@ simple_overlay_update (struct obj_section *osect)
                   "find `_ovly_table' array\n"
                   "in inferior.  Use `overlay manual' mode."));
        
-       if (cache_ovly_table_base == MSYMBOL_VALUE_ADDRESS (minsym.minsym))
+       if (cache_ovly_table_base == BMSYMBOL_VALUE_ADDRESS (minsym))
          /* Then go ahead and try to look up this single section in
             the cache.  */
          if (simple_overlay_update_1 (osect))
index 17599bebb44765829d958bb015b4fda06c4d901a..614af3c21c3b58b90ce7f9da3eec42876233f684 100644 (file)
@@ -292,7 +292,7 @@ struct quick_symbol_functions
      symbol table that contains a symbol whose address is closest to
      PC.  */
   struct symtab *(*find_pc_sect_symtab) (struct objfile *objfile,
-                                        struct minimal_symbol *msymbol,
+                                        struct bound_minimal_symbol msymbol,
                                         CORE_ADDR pc,
                                         struct obj_section *section,
                                         int warn_if_readin);
index fe324a009f2dc3da1574fdbae3a2b2adf9e13917..0fc78d540dcc887493e2166466ac45d620acbaef 100644 (file)
@@ -251,7 +251,8 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
          break;
        }
       fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
-      fputs_filtered (paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (msymbol)),
+      fputs_filtered (paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (objfile,
+                                                               msymbol)),
                      outfile);
       fprintf_filtered (outfile, " %s", MSYMBOL_LINKAGE_NAME (msymbol));
       if (section)
index 65d7188a6c6a31e5df9e9009527fdac8a8b0a2eb..e267823bd300bc79b7d7550a92ba83d41320ba9f 100644 (file)
@@ -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));
index bf1ef74185d248658d47ea5fd6f5c05d2459d8e7..d80222b5d32011891e8a62f7e8a3189b4d18530f 100644 (file)
@@ -391,8 +391,18 @@ struct minimal_symbol
 #define MSYMBOL_TYPE(msymbol)          (msymbol)->type
 
 #define MSYMBOL_VALUE(symbol)          (symbol)->mginfo.value.ivalue
-#define MSYMBOL_VALUE_ADDRESS(symbol)  ((symbol)->mginfo.value.address + 0)
-#define SET_MSYMBOL_VALUE_ADDRESS(symbol, new_value) \
+/* The unrelocated address of the minimal symbol.  */
+#define MSYMBOL_VALUE_RAW_ADDRESS(symbol) ((symbol)->mginfo.value.address + 0)
+/* This weird definition lets us syntax-check without affecting the
+   results.  It is a temporary measure until a later patch.  */
+#define MSYMBOL_VALUE_ADDRESS(objfile, symbol)                         \
+  ((symbol)->mginfo.value.address                                      \
+   + (0                                                                        \
+      * ANOFFSET ((objfile)->section_offsets, ((symbol)->mginfo.section))))
+/* For a bound minsym, we can easily compute the address directly.  */
+#define BMSYMBOL_VALUE_ADDRESS(symbol) \
+  MSYMBOL_VALUE_ADDRESS ((symbol).objfile, (symbol).minsym)
+#define SET_MSYMBOL_VALUE_ADDRESS(symbol, new_value)   \
   ((symbol)->mginfo.value.address = (new_value))
 #define MSYMBOL_VALUE_BYTES(symbol)    (symbol)->mginfo.value.bytes
 #define MSYMBOL_BLOCK_VALUE(symbol)    (symbol)->mginfo.value.block
index bd3e9d07732c4fc7d26054c53047c5d27730fabb..08541c5cc650d03652ce7c416e553e3c7fc69155 100644 (file)
@@ -2831,7 +2831,7 @@ scope_info (char *args, int from_tty)
                      printf_filtered ("static storage at address ");
                      printf_filtered ("%s",
                                       paddress (gdbarch,
-                                                MSYMBOL_VALUE_ADDRESS (msym.minsym)));
+                                                BMSYMBOL_VALUE_ADDRESS (msym)));
                    }
                  break;
                case LOC_OPTIMIZED_OUT:
index e0ea1837af19ded179d86bfe63c032309093c9cd..8c48d66158fbc44e41d26547780351233813fdb7 100644 (file)
@@ -37,6 +37,7 @@
 #include "tui/tui-file.h"
 #include "tui/tui-disasm.h"
 #include "progspace.h"
+#include "objfiles.h"
 
 #include "gdb_curses.h"
 
@@ -113,7 +114,7 @@ tui_find_disassembly_address (struct gdbarch *gdbarch, CORE_ADDR pc, int from)
     {
       CORE_ADDR last_addr;
       int pos;
-      struct minimal_symbol *msymbol;
+      struct bound_minimal_symbol msymbol;
               
       /* Find backward an address which is a symbol and for which
          disassembling from that address will fill completely the
@@ -121,16 +122,16 @@ tui_find_disassembly_address (struct gdbarch *gdbarch, CORE_ADDR pc, int from)
       pos = max_lines - 1;
       do {
          new_low -= 1 * max_lines;
-         msymbol = lookup_minimal_symbol_by_pc_section (new_low, 0).minsym;
+         msymbol = lookup_minimal_symbol_by_pc_section (new_low, 0);
 
-         if (msymbol)
-            new_low = MSYMBOL_VALUE_ADDRESS (msymbol);
+         if (msymbol.minsym)
+            new_low = BMSYMBOL_VALUE_ADDRESS (msymbol);
          else
             new_low += 1 * max_lines;
 
          tui_disassemble (gdbarch, asm_lines, new_low, max_lines);
          last_addr = asm_lines[pos].addr;
-      } while (last_addr > pc && msymbol);
+      } while (last_addr > pc && msymbol.minsym);
 
       /* Scan forward disassembling one instruction at a time until
          the last visible instruction of the window matches the pc.
@@ -349,7 +350,7 @@ tui_get_begin_asm_address (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p)
       if (main_symbol.minsym == 0)
         main_symbol = lookup_minimal_symbol ("_start", NULL, NULL);
       if (main_symbol.minsym)
-        addr = MSYMBOL_VALUE_ADDRESS (main_symbol.minsym);
+        addr = BMSYMBOL_VALUE_ADDRESS (main_symbol);
       else
         addr = 0;
     }
index cdbaecac8acf1d46a0276f2e1fc9791d8bf3d569..9d2218fdc89ae4c3774444cfccc1062f728693a8 100644 (file)
@@ -160,7 +160,7 @@ find_function_in_inferior (const char *name, struct objfile **objf_p)
          type = lookup_pointer_type (builtin_type (gdbarch)->builtin_char);
          type = lookup_function_type (type);
          type = lookup_pointer_type (type);
-         maddr = MSYMBOL_VALUE_ADDRESS (msymbol.minsym);
+         maddr = BMSYMBOL_VALUE_ADDRESS (msymbol);
 
          if (objf_p)
            *objf_p = objfile;
index 1dfc6d58f1de6479a25f5583782f8c7165c0771a..4e8d1fe815e5619a29222c791c60941f36065862 100644 (file)
@@ -2758,7 +2758,7 @@ value_static_field (struct type *type, int fieldno)
          else
            {
              retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno),
-                                     MSYMBOL_VALUE_ADDRESS (msym.minsym));
+                                     BMSYMBOL_VALUE_ADDRESS (msym));
            }
        }
       else
@@ -2974,7 +2974,7 @@ value_fn_field (struct value **arg1p, struct fn_field *f,
 
       set_value_address (v,
        gdbarch_convert_from_func_ptr_addr
-          (gdbarch, MSYMBOL_VALUE_ADDRESS (msym.minsym), &current_target));
+          (gdbarch, BMSYMBOL_VALUE_ADDRESS (msym), &current_target));
     }
 
   if (arg1p)