diff options
-rw-r--r-- | gdb/ChangeLog | 19 | ||||
-rw-r--r-- | gdb/cp-namespace.c | 3 | ||||
-rw-r--r-- | gdb/elfread.c | 6 | ||||
-rw-r--r-- | gdb/jit.c | 2 | ||||
-rw-r--r-- | gdb/jv-lang.c | 2 | ||||
-rw-r--r-- | gdb/linespec.c | 2 | ||||
-rw-r--r-- | gdb/objfiles.c | 8 | ||||
-rw-r--r-- | gdb/objfiles.h | 14 | ||||
-rw-r--r-- | gdb/stap-probe.c | 2 | ||||
-rw-r--r-- | gdb/symfile.c | 4 |
10 files changed, 41 insertions, 21 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f22a1b4..d11e226 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,22 @@ +2013-08-20 Tom Tromey <tromey@redhat.com> + + * cp-namespace.c (cp_lookup_symbol_imports_or_template): Use + get_objfile_arch. + * elfread.c (elf_rel_plt_read, elf_gnu_ifunc_record_cache) + (elf_gnu_ifunc_resolve_by_got): Use get_objfile_arch. + * jit.c (jit_object_close_impl): Update. + * jv-lang.c (get_dynamics_objfile): Update. + * linespec.c (add_minsym): Use get_dynamics_objfile. + * objfiles.c (get_objfile_bfd_data): Initialize 'gdbarch' field. + (allocate_objfile): Don't initialize 'gdbarch' field. + (get_objfile_arch): Update. + * objfiles.h (struct objfile_per_bfd_storage) <gdbarch>: New field, + moved from... + (struct objfile) <gdbarch>: ... here. Remove. + * stap-probe.c (stap_can_evaluate_probe_arguments): Use + get_objfile_arch. + * symfile.c (init_entry_point_info): Use get_objfile_arch. + 2013-08-20 Alan Modra <amodra@gmail.com> * doublest.c (convert_floatformat_to_doublest): Use fmt->split_half diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index 755aeef..36134c0 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -473,7 +473,8 @@ cp_lookup_symbol_imports_or_template (const char *scope, char *name_copy = xstrdup (SYMBOL_NATURAL_NAME (function)); struct cleanup *cleanups = make_cleanup (xfree, name_copy); const struct language_defn *lang = language_def (language_cplus); - struct gdbarch *arch = SYMBOL_SYMTAB (function)->objfile->gdbarch; + struct gdbarch *arch + = get_objfile_arch (SYMBOL_SYMTAB (function)->objfile); const struct block *parent = BLOCK_SUPERBLOCK (block); while (1) diff --git a/gdb/elfread.c b/gdb/elfread.c index 1aa10d1..d16287a 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -636,7 +636,7 @@ elf_rel_plt_read (struct objfile *objfile, asymbol **dyn_symbol_table) char *string_buffer = NULL; size_t string_buffer_size = 0; struct cleanup *back_to; - struct gdbarch *gdbarch = objfile->gdbarch; + struct gdbarch *gdbarch = get_objfile_arch (objfile); struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; size_t ptr_size = TYPE_LENGTH (ptr_type); @@ -797,7 +797,7 @@ elf_gnu_ifunc_record_cache (const char *name, CORE_ADDR addr) if (*slot != NULL) { struct elf_gnu_ifunc_cache *entry_found_p = *slot; - struct gdbarch *gdbarch = objfile->gdbarch; + struct gdbarch *gdbarch = get_objfile_arch (objfile); if (entry_found_p->addr != addr) { @@ -877,7 +877,7 @@ elf_gnu_ifunc_resolve_by_got (const char *name, CORE_ADDR *addr_p) ALL_PSPACE_OBJFILES (current_program_space, objfile) { bfd *obfd = objfile->obfd; - struct gdbarch *gdbarch = objfile->gdbarch; + struct gdbarch *gdbarch = get_objfile_arch (objfile); struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; size_t ptr_size = TYPE_LENGTH (ptr_type); CORE_ADDR pointer_address, addr; @@ -786,7 +786,7 @@ jit_object_close_impl (struct gdb_symbol_callbacks *cb, priv_data = cb->priv_data; objfile = allocate_objfile (NULL, 0); - objfile->gdbarch = target_gdbarch (); + objfile->per_bfd->gdbarch = target_gdbarch (); terminate_minimal_symbol_table (objfile); diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c index 1ef1296..bba94f2 100644 --- a/gdb/jv-lang.c +++ b/gdb/jv-lang.c @@ -119,7 +119,7 @@ get_dynamics_objfile (struct gdbarch *gdbarch) /* Mark it as shared so that it is cleared when the inferior is re-run. */ dynamics_objfile = allocate_objfile (NULL, OBJF_SHARED); - dynamics_objfile->gdbarch = gdbarch; + dynamics_objfile->per_bfd->gdbarch = gdbarch; data = XCNEW (struct jv_per_objfile_data); set_objfile_data (dynamics_objfile, jv_dynamics_objfile_data_key, data); diff --git a/gdb/linespec.c b/gdb/linespec.c index 45d7817..b1a8063 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -3511,7 +3511,7 @@ add_minsym (struct minimal_symbol *minsym, void *d) { /* Make sure this minsym is not a function descriptor before we decide to discard it. */ - struct gdbarch *gdbarch = info->objfile->gdbarch; + struct gdbarch *gdbarch = get_objfile_arch (info->objfile); CORE_ADDR addr = gdbarch_convert_from_func_ptr_addr (gdbarch, SYMBOL_VALUE_ADDRESS (minsym), ¤t_target); diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 759159c..2b8cf4e 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -143,6 +143,9 @@ get_objfile_bfd_data (struct objfile *objfile, struct bfd *abfd) { storage = bfd_zalloc (abfd, sizeof (struct objfile_per_bfd_storage)); set_bfd_data (abfd, objfiles_bfd_data, storage); + + /* Look up the gdbarch associated with the BFD. */ + storage->gdbarch = gdbarch_from_bfd (abfd); } else storage = OBSTACK_ZALLOC (&objfile->objfile_obstack, @@ -282,9 +285,6 @@ allocate_objfile (bfd *abfd, int flags) gdb_bfd_ref (abfd); if (abfd != NULL) { - /* Look up the gdbarch associated with the BFD. */ - objfile->gdbarch = gdbarch_from_bfd (abfd); - objfile->name = bfd_get_filename (abfd); objfile->mtime = bfd_get_mtime (abfd); @@ -335,7 +335,7 @@ allocate_objfile (bfd *abfd, int flags) struct gdbarch * get_objfile_arch (struct objfile *objfile) { - return objfile->gdbarch; + return objfile->per_bfd->gdbarch; } /* If there is a valid and known entry point, function fills *ENTRY_P with it diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 84167e0..5b762e4 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -178,6 +178,13 @@ struct objfile_per_bfd_storage /* Byte cache for macros. */ struct bcache *macro_cache; + + /* The gdbarch associated with the BFD. Note that this gdbarch is + determined solely from BFD information, without looking at target + information. The gdbarch determined from a running target may + differ from this e.g. with respect to register types and names. */ + + struct gdbarch *gdbarch; }; /* Master structure for keeping track of each file from which @@ -248,13 +255,6 @@ struct objfile struct objfile_per_bfd_storage *per_bfd; - /* The gdbarch associated with the BFD. Note that this gdbarch is - determined solely from BFD information, without looking at target - information. The gdbarch determined from a running target may - differ from this e.g. with respect to register types and names. */ - - struct gdbarch *gdbarch; - /* The modification timestamp of the object file, as of the last time we read its symbols. */ diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c index cbbdf391..200111c 100644 --- a/gdb/stap-probe.c +++ b/gdb/stap-probe.c @@ -1086,7 +1086,7 @@ static int stap_can_evaluate_probe_arguments (struct probe *probe_generic) { struct stap_probe *stap_probe = (struct stap_probe *) probe_generic; - struct gdbarch *gdbarch = stap_probe->p.objfile->gdbarch; + struct gdbarch *gdbarch = get_objfile_arch (stap_probe->p.objfile); /* For SystemTap probes, we have to guarantee that the method stap_is_single_operand is defined on gdbarch. If it is not, then it diff --git a/gdb/symfile.c b/gdb/symfile.c index 3dd5509..d1e024f 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -884,14 +884,14 @@ init_entry_point_info (struct objfile *objfile) /* Make certain that the address points at real code, and not a function descriptor. */ entry_point - = gdbarch_convert_from_func_ptr_addr (objfile->gdbarch, + = gdbarch_convert_from_func_ptr_addr (get_objfile_arch (objfile), entry_point, ¤t_target); /* Remove any ISA markers, so that this matches entries in the symbol table. */ objfile->ei.entry_point - = gdbarch_addr_bits_remove (objfile->gdbarch, entry_point); + = gdbarch_addr_bits_remove (get_objfile_arch (objfile), entry_point); } } |