move the demangled_names_hash into the per-BFD
[deliverable/binutils-gdb.git] / gdb / symfile.c
index c2ad7975091ddb138aac3bed5b71d26a33a18c48..d260ff9fcdab25da2d29d2f6f79302a7c396f6e9 100644 (file)
@@ -87,14 +87,10 @@ int readnow_symbol_files;   /* Read full symbols immediately.  */
 
 static void load_command (char *, int);
 
-static void symbol_file_add_main_1 (char *args, int from_tty, int flags);
+static void symbol_file_add_main_1 (const char *args, int from_tty, int flags);
 
 static void add_symbol_file_command (char *, int);
 
-bfd *symfile_bfd_open (char *);
-
-int get_section_index (struct objfile *, char *);
-
 static const struct sym_fns *find_sym_fns (bfd *);
 
 static void decrement_reading_symtab (void *);
@@ -134,10 +130,18 @@ void _initialize_symfile (void);
    calls add_symtab_fns() to register information on each format it is
    prepared to read.  */
 
-typedef const struct sym_fns *sym_fns_ptr;
-DEF_VEC_P (sym_fns_ptr);
+typedef struct
+{
+  /* BFD flavour that we handle.  */
+  enum bfd_flavour sym_flavour;
+
+  /* The "vtable" of symbol functions.  */
+  const struct sym_fns *sym_fns;
+} registered_sym_fns;
+
+DEF_VEC_O (registered_sym_fns);
 
-static VEC (sym_fns_ptr) *symtab_fns = NULL;
+static VEC (registered_sym_fns) *symtab_fns = NULL;
 
 /* If non-zero, shared library symbols will be added automatically
    when the inferior is created, new libraries are loaded, or when
@@ -233,15 +237,15 @@ build_section_addr_info_from_section_table (const struct target_section *start,
 
   for (stp = start, oidx = 0; stp != end; stp++)
     {
-      if (bfd_get_section_flags (stp->bfd,
-                                stp->the_bfd_section) & (SEC_ALLOC | SEC_LOAD)
+      struct bfd_section *asect = stp->the_bfd_section;
+      bfd *abfd = asect->owner;
+
+      if (bfd_get_section_flags (abfd, asect) & (SEC_ALLOC | SEC_LOAD)
          && oidx < end - start)
        {
          sap->other[oidx].addr = stp->addr;
-         sap->other[oidx].name
-           = xstrdup (bfd_section_name (stp->bfd, stp->the_bfd_section));
-         sap->other[oidx].sectindex
-           = gdb_bfd_section_index (stp->bfd, stp->the_bfd_section);
+         sap->other[oidx].name = xstrdup (bfd_section_name (abfd, asect));
+         sap->other[oidx].sectindex = gdb_bfd_section_index (abfd, asect);
          oidx++;
        }
     }
@@ -843,7 +847,14 @@ read_symbols (struct objfile *objfile, int add_flags)
       struct cleanup *cleanup = make_cleanup_bfd_unref (abfd);
 
       if (abfd != NULL)
-       symbol_file_add_separate (abfd, add_flags, objfile);
+       {
+         /* find_separate_debug_file_in_section uses the same filename for the
+            virtual section-as-bfd like the bfd filename containing the
+            section.  Therefore use also non-canonical name form for the same
+            file containing the section.  */
+         symbol_file_add_separate (abfd, objfile->original_name, add_flags,
+                                   objfile);
+       }
 
       do_cleanups (cleanup);
     }
@@ -888,14 +899,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,
                                              &current_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);
     }
 }
 
@@ -929,7 +940,7 @@ syms_from_objfile_1 (struct objfile *objfile,
   struct cleanup *old_chain;
   const int mainline = add_flags & SYMFILE_MAINLINE;
 
-  objfile->sf = find_sym_fns (objfile->obfd);
+  objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
 
   if (objfile->sf == NULL)
     {
@@ -1051,6 +1062,8 @@ new_symfile_objfile (struct objfile *objfile, int add_flags)
    ABFD is a BFD already open on the file, as from symfile_bfd_open.
    A new reference is acquired by this function.
 
+   For NAME description see allocate_objfile's definition.
+
    ADD_FLAGS encodes verbosity, whether this is main symbol file or
    extra, such as dynamically loaded code, and what to do with breakpoins.
 
@@ -1064,12 +1077,11 @@ new_symfile_objfile (struct objfile *objfile, int add_flags)
    Upon failure, jumps back to command level (never returns).  */
 
 static struct objfile *
-symbol_file_add_with_addrs (bfd *abfd, int add_flags,
+symbol_file_add_with_addrs (bfd *abfd, const char *name, int add_flags,
                            struct section_addr_info *addrs,
                            int flags, struct objfile *parent)
 {
   struct objfile *objfile;
-  const char *name = bfd_get_filename (abfd);
   const int from_tty = add_flags & SYMFILE_VERBOSE;
   const int mainline = add_flags & SYMFILE_MAINLINE;
   const int should_print = ((from_tty || info_verbose)
@@ -1091,7 +1103,8 @@ symbol_file_add_with_addrs (bfd *abfd, int add_flags,
       && !query (_("Load new symbol table from \"%s\"? "), name))
     error (_("Not confirmed."));
 
-  objfile = allocate_objfile (abfd, flags | (mainline ? OBJF_MAINLINE : 0));
+  objfile = allocate_objfile (abfd, name,
+                             flags | (mainline ? OBJF_MAINLINE : 0));
 
   if (parent)
     add_separate_debug_objfile (objfile, parent);
@@ -1164,10 +1177,12 @@ symbol_file_add_with_addrs (bfd *abfd, int add_flags,
   return (objfile);
 }
 
-/* Add BFD as a separate debug file for OBJFILE.  */
+/* Add BFD as a separate debug file for OBJFILE.  For NAME description
+   see allocate_objfile's definition.  */
 
 void
-symbol_file_add_separate (bfd *bfd, int symfile_flags, struct objfile *objfile)
+symbol_file_add_separate (bfd *bfd, const char *name, int symfile_flags,
+                         struct objfile *objfile)
 {
   struct objfile *new_objfile;
   struct section_addr_info *sap;
@@ -1180,7 +1195,7 @@ symbol_file_add_separate (bfd *bfd, int symfile_flags, struct objfile *objfile)
   my_cleanup = make_cleanup_free_section_addr_info (sap);
 
   new_objfile = symbol_file_add_with_addrs
-    (bfd, symfile_flags, sap,
+    (bfd, name, symfile_flags, sap,
      objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW
                       | OBJF_USERLOADED),
      objfile);
@@ -1193,25 +1208,26 @@ symbol_file_add_separate (bfd *bfd, int symfile_flags, struct objfile *objfile)
    See symbol_file_add_with_addrs's comments for details.  */
 
 struct objfile *
-symbol_file_add_from_bfd (bfd *abfd, int add_flags,
+symbol_file_add_from_bfd (bfd *abfd, const char *name, int add_flags,
                           struct section_addr_info *addrs,
                           int flags, struct objfile *parent)
 {
-  return symbol_file_add_with_addrs (abfd, add_flags, addrs, flags, parent);
+  return symbol_file_add_with_addrs (abfd, name, add_flags, addrs, flags,
+                                    parent);
 }
 
 /* Process a symbol file, as either the main file or as a dynamically
    loaded file.  See symbol_file_add_with_addrs's comments for details.  */
 
 struct objfile *
-symbol_file_add (char *name, int add_flags, struct section_addr_info *addrs,
-                int flags)
+symbol_file_add (const char *name, int add_flags,
+                struct section_addr_info *addrs, int flags)
 {
   bfd *bfd = symfile_bfd_open (name);
   struct cleanup *cleanup = make_cleanup_bfd_unref (bfd);
   struct objfile *objf;
 
-  objf = symbol_file_add_from_bfd (bfd, add_flags, addrs, flags, NULL);
+  objf = symbol_file_add_from_bfd (bfd, name, add_flags, addrs, flags, NULL);
   do_cleanups (cleanup);
   return objf;
 }
@@ -1225,13 +1241,13 @@ symbol_file_add (char *name, int add_flags, struct section_addr_info *addrs,
    command itself.  */
 
 void
-symbol_file_add_main (char *args, int from_tty)
+symbol_file_add_main (const char *args, int from_tty)
 {
   symbol_file_add_main_1 (args, from_tty, 0);
 }
 
 static void
-symbol_file_add_main_1 (char *args, int from_tty, int flags)
+symbol_file_add_main_1 (const char *args, int from_tty, int flags)
 {
   const int add_flags = (current_inferior ()->symfile_flags
                         | SYMFILE_MAINLINE | (from_tty ? SYMFILE_VERBOSE : 0));
@@ -1253,7 +1269,7 @@ symbol_file_clear (int from_tty)
       && from_tty
       && (symfile_objfile
          ? !query (_("Discard symbol table from `%s'? "),
-                   symfile_objfile->name)
+                   objfile_name (symfile_objfile))
          : !query (_("Discard symbol table? "))))
     error (_("Not confirmed."));
 
@@ -1284,7 +1300,7 @@ separate_debug_file_exists (const char *name, unsigned long crc,
      ".debug" suffix as "/usr/lib/debug/path/to/file" is a separate tree where
      the separate debug infos with the same basename can exist.  */
 
-  if (filename_cmp (name, parent_objfile->name) == 0)
+  if (filename_cmp (name, objfile_name (parent_objfile)) == 0)
     return 0;
 
   abfd = gdb_bfd_open_maybe_remote (name);
@@ -1341,7 +1357,7 @@ separate_debug_file_exists (const char *name, unsigned long crc,
       if (verified_as_different || parent_crc != file_crc)
        warning (_("the debug information found in \"%s\""
                   " does not match \"%s\" (CRC mismatch).\n"),
-                name, parent_objfile->name);
+                name, objfile_name (parent_objfile));
 
       return 0;
     }
@@ -1499,7 +1515,7 @@ find_separate_debug_file_by_debuglink (struct objfile *objfile)
     }
 
   cleanups = make_cleanup (xfree, debuglink);
-  dir = xstrdup (objfile->name);
+  dir = xstrdup (objfile_name (objfile));
   make_cleanup (xfree, dir);
   terminate_after_last_dir_separator (dir);
   canon_dir = lrealpath (dir);
@@ -1516,11 +1532,12 @@ find_separate_debug_file_by_debuglink (struct objfile *objfile)
 
       struct stat st_buf;
 
-      if (lstat (objfile->name, &st_buf) == 0 && S_ISLNK(st_buf.st_mode))
+      if (lstat (objfile_name (objfile), &st_buf) == 0
+         && S_ISLNK (st_buf.st_mode))
        {
          char *symlink_dir;
 
-         symlink_dir = lrealpath (objfile->name);
+         symlink_dir = lrealpath (objfile_name (objfile));
          if (symlink_dir != NULL)
            {
              make_cleanup (xfree, symlink_dir);
@@ -1616,11 +1633,11 @@ set_initial_language (void)
     lang = language_of_main;
   else
     {
-      const char *filename;
+      char *name = main_name ();
+      struct symbol *sym = lookup_symbol (name, NULL, VAR_DOMAIN, NULL);
 
-      filename = find_main_filename ();
-      if (filename != NULL)
-       lang = deduce_language_from_filename (filename);
+      if (sym != NULL)
+       lang = SYMBOL_LANGUAGE (sym);
     }
 
   if (lang == language_unknown)
@@ -1656,34 +1673,34 @@ gdb_bfd_open_maybe_remote (const char *name)
    absolute).  In case of trouble, error() is called.  */
 
 bfd *
-symfile_bfd_open (char *name)
+symfile_bfd_open (const char *cname)
 {
   bfd *sym_bfd;
   int desc;
-  char *absolute_name;
+  char *name, *absolute_name;
   struct cleanup *back_to;
 
-  if (remote_filename_p (name))
+  if (remote_filename_p (cname))
     {
-      sym_bfd = remote_bfd_open (name, gnutarget);
+      sym_bfd = remote_bfd_open (cname, gnutarget);
       if (!sym_bfd)
-       error (_("`%s': can't open to read symbols: %s."), name,
+       error (_("`%s': can't open to read symbols: %s."), cname,
               bfd_errmsg (bfd_get_error ()));
 
       if (!bfd_check_format (sym_bfd, bfd_object))
        {
          make_cleanup_bfd_unref (sym_bfd);
-         error (_("`%s': can't read symbols: %s."), name,
+         error (_("`%s': can't read symbols: %s."), cname,
                 bfd_errmsg (bfd_get_error ()));
        }
 
       return sym_bfd;
     }
 
-  name = tilde_expand (name);  /* Returns 1st new malloc'd copy.  */
+  name = tilde_expand (cname); /* Returns 1st new malloc'd copy.  */
 
   /* Look down path for it, allocate 2nd new malloc'd copy.  */
-  desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, name,
+  desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, name,
                O_RDONLY | O_BINARY, &absolute_name);
 #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__)
   if (desc < 0)
@@ -1691,8 +1708,8 @@ symfile_bfd_open (char *name)
       char *exename = alloca (strlen (name) + 5);
 
       strcat (strcpy (exename, name), ".exe");
-      desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename,
-                   O_RDONLY | O_BINARY, &absolute_name);
+      desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH,
+                   exename, O_RDONLY | O_BINARY, &absolute_name);
     }
 #endif
   if (desc < 0)
@@ -1737,14 +1754,18 @@ get_section_index (struct objfile *objfile, char *section_name)
     return -1;
 }
 
-/* Link SF into the global symtab_fns list.  Called on startup by the
-   _initialize routine in each object file format reader, to register
-   information about each format the reader is prepared to handle.  */
+/* Link SF into the global symtab_fns list.
+   FLAVOUR is the file format that SF handles.
+   Called on startup by the _initialize routine in each object file format
+   reader, to register information about each format the reader is prepared
+   to handle.  */
 
 void
-add_symtab_fns (const struct sym_fns *sf)
+add_symtab_fns (enum bfd_flavour flavour, const struct sym_fns *sf)
 {
-  VEC_safe_push (sym_fns_ptr, symtab_fns, sf);
+  registered_sym_fns fns = { flavour, sf };
+
+  VEC_safe_push (registered_sym_fns, symtab_fns, &fns);
 }
 
 /* Initialize OBJFILE to read symbols from its associated BFD.  It
@@ -1755,7 +1776,7 @@ add_symtab_fns (const struct sym_fns *sf)
 static const struct sym_fns *
 find_sym_fns (bfd *abfd)
 {
-  const struct sym_fns *sf;
+  registered_sym_fns *rsf;
   enum bfd_flavour our_flavour = bfd_get_flavour (abfd);
   int i;
 
@@ -1764,9 +1785,9 @@ find_sym_fns (bfd *abfd)
       || our_flavour == bfd_target_tekhex_flavour)
     return NULL;       /* No symbols.  */
 
-  for (i = 0; VEC_iterate (sym_fns_ptr, symtab_fns, i, sf); ++i)
-    if (our_flavour == sf->sym_flavour)
-      return sf;
+  for (i = 0; VEC_iterate (registered_sym_fns, symtab_fns, i, rsf); ++i)
+    if (our_flavour == rsf->sym_flavour)
+      return rsf->sym_fns;
 
   error (_("I'm sorry, Dave, I can't do that.  Symbol format `%s' unknown."),
         bfd_get_target (abfd));
@@ -2218,63 +2239,54 @@ add_symbol_file_command (char *args, int from_tty)
          filename = tilde_expand (arg);
          make_cleanup (xfree, filename);
        }
+      else if (argcnt == 1)
+       {
+         /* The second argument is always the text address at which
+            to load the program.  */
+         sect_opts[section_index].name = ".text";
+         sect_opts[section_index].value = arg;
+         if (++section_index >= num_sect_opts)
+           {
+             num_sect_opts *= 2;
+             sect_opts = ((struct sect_opt *)
+                          xrealloc (sect_opts,
+                                    num_sect_opts
+                                    * sizeof (struct sect_opt)));
+           }
+       }
       else
-       if (argcnt == 1)
-         {
-           /* The second argument is always the text address at which
-               to load the program.  */
-           sect_opts[section_index].name = ".text";
-           sect_opts[section_index].value = arg;
-           if (++section_index >= num_sect_opts)
-             {
-               num_sect_opts *= 2;
-               sect_opts = ((struct sect_opt *)
-                            xrealloc (sect_opts,
-                                      num_sect_opts
-                                      * sizeof (struct sect_opt)));
-             }
-         }
-       else
-         {
-           /* It's an option (starting with '-') or it's an argument
-              to an option.  */
-
-           if (*arg == '-')
-             {
-               if (strcmp (arg, "-readnow") == 0)
-                 flags |= OBJF_READNOW;
-               else if (strcmp (arg, "-s") == 0)
-                 {
-                   expecting_sec_name = 1;
-                   expecting_sec_addr = 1;
-                 }
-             }
-           else
-             {
-               if (expecting_sec_name)
-                 {
-                   sect_opts[section_index].name = arg;
-                   expecting_sec_name = 0;
-                 }
-               else
-                 if (expecting_sec_addr)
-                   {
-                     sect_opts[section_index].value = arg;
-                     expecting_sec_addr = 0;
-                     if (++section_index >= num_sect_opts)
-                       {
-                         num_sect_opts *= 2;
-                         sect_opts = ((struct sect_opt *)
-                                      xrealloc (sect_opts,
-                                                num_sect_opts
-                                                * sizeof (struct sect_opt)));
-                       }
-                   }
-                 else
-                   error (_("USAGE: add-symbol-file <filename> <textaddress>"
-                            " [-readnow] [-s <secname> <addr>]*"));
-             }
-         }
+       {
+         /* It's an option (starting with '-') or it's an argument
+            to an option.  */
+         if (expecting_sec_name)
+           {
+             sect_opts[section_index].name = arg;
+             expecting_sec_name = 0;
+           }
+         else if (expecting_sec_addr)
+           {
+             sect_opts[section_index].value = arg;
+             expecting_sec_addr = 0;
+             if (++section_index >= num_sect_opts)
+               {
+                 num_sect_opts *= 2;
+                 sect_opts = ((struct sect_opt *)
+                              xrealloc (sect_opts,
+                                        num_sect_opts
+                                        * sizeof (struct sect_opt)));
+               }
+           }
+         else if (strcmp (arg, "-readnow") == 0)
+           flags |= OBJF_READNOW;
+         else if (strcmp (arg, "-s") == 0)
+           {
+             expecting_sec_name = 1;
+             expecting_sec_addr = 1;
+           }
+         else
+           error (_("USAGE: add-symbol-file <filename> <textaddress>"
+                    " [-readnow] [-s <secname> <addr>]*"));
+       }
     }
 
   /* This command takes at least two arguments.  The first one is a
@@ -2356,7 +2368,6 @@ reread_symbols (void)
 
   for (objfile = object_files; objfile; objfile = objfile->next)
     {
-      /* solib-sunos.c creates one objfile with obfd.  */
       if (objfile->obfd == NULL)
        continue;
 
@@ -2371,12 +2382,12 @@ reread_symbols (void)
       if (objfile->obfd->my_archive)
        res = stat (objfile->obfd->my_archive->filename, &new_statbuf);
       else
-       res = stat (objfile->name, &new_statbuf);
+       res = stat (objfile_name (objfile), &new_statbuf);
       if (res != 0)
        {
          /* FIXME, should use print_sys_errmsg but it's not filtered.  */
          printf_unfiltered (_("`%s' has disappeared; keeping its symbols.\n"),
-                            objfile->name);
+                            objfile_name (objfile));
          continue;
        }
       new_modtime = new_statbuf.st_mtime;
@@ -2385,10 +2396,10 @@ reread_symbols (void)
          struct cleanup *old_cleanups;
          struct section_offsets *offsets;
          int num_offsets;
-         char *obfd_filename;
+         char *original_name;
 
          printf_unfiltered (_("`%s' has changed; re-reading symbols.\n"),
-                            objfile->name);
+                            objfile_name (objfile));
 
          /* There are various functions like symbol_file_add,
             symfile_bfd_open, syms_from_objfile, etc., which might
@@ -2439,6 +2450,7 @@ reread_symbols (void)
          /* Clean up any state BFD has sitting around.  */
          {
            struct bfd *obfd = objfile->obfd;
+           char *obfd_filename;
 
            obfd_filename = bfd_get_filename (objfile->obfd);
            /* Open the new BFD before freeing the old one, so that
@@ -2455,10 +2467,12 @@ reread_symbols (void)
            gdb_bfd_unref (obfd);
          }
 
-         objfile->name = bfd_get_filename (objfile->obfd);
+         original_name = xstrdup (objfile->original_name);
+         make_cleanup (xfree, original_name);
+
          /* bfd_openr sets cacheable to true, which is what we want.  */
          if (!bfd_check_format (objfile->obfd, bfd_object))
-           error (_("Can't read symbols from %s: %s."), objfile->name,
+           error (_("Can't read symbols from %s: %s."), objfile_name (objfile),
                   bfd_errmsg (bfd_get_error ()));
 
          /* Save the offsets, we will nuke them with the rest of the
@@ -2483,11 +2497,6 @@ reread_symbols (void)
          /* Free the obstacks for non-reusable objfiles.  */
          psymbol_bcache_free (objfile->psymbol_cache);
          objfile->psymbol_cache = psymbol_bcache_init ();
-         if (objfile->demangled_names_hash != NULL)
-           {
-             htab_delete (objfile->demangled_names_hash);
-             objfile->demangled_names_hash = NULL;
-           }
          obstack_free (&objfile->objfile_obstack, 0);
          objfile->sections = NULL;
          objfile->symtabs = NULL;
@@ -2508,6 +2517,16 @@ reread_symbols (void)
             empty.  We could use obstack_specify_allocation but
             gdb_obstack.h specifies the alloc/dealloc functions.  */
          obstack_init (&objfile->objfile_obstack);
+
+         objfile->original_name = obstack_copy0 (&objfile->objfile_obstack,
+                                                 original_name,
+                                                 strlen (original_name));
+
+         /* Reset the sym_fns pointer.  The ELF reader can change it
+            based on whether .gdb_index is present, and we need it to
+            start over.  PR symtab/15885  */
+         objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
+
          build_objfile_section_table (objfile);
          terminate_minimal_symbol_table (objfile);
 
@@ -2799,10 +2818,10 @@ allocate_symtab (const char *filename, struct objfile *objfile)
       static char *last_objfile_name = NULL;
 
       if (last_objfile_name == NULL
-         || strcmp (last_objfile_name, objfile->name) != 0)
+         || strcmp (last_objfile_name, objfile_name (objfile)) != 0)
        {
          xfree (last_objfile_name);
-         last_objfile_name = xstrdup (objfile->name);
+         last_objfile_name = xstrdup (objfile_name (objfile));
          fprintf_unfiltered (gdb_stdlog,
                              "Creating one or more symtabs for objfile %s ...\n",
                              last_objfile_name);
@@ -3403,7 +3422,8 @@ read_target_long_array (CORE_ADDR memaddr, unsigned int *myaddr,
 static int
 simple_read_overlay_table (void)
 {
-  struct minimal_symbol *novlys_msym, *ovly_table_msym;
+  struct minimal_symbol *novlys_msym;
+  struct bound_minimal_symbol ovly_table_msym;
   struct gdbarch *gdbarch;
   int word_size;
   enum bfd_endian byte_order;
@@ -3418,8 +3438,8 @@ simple_read_overlay_table (void)
       return 0;
     }
 
-  ovly_table_msym = lookup_minimal_symbol ("_ovly_table", NULL, NULL);
-  if (! ovly_table_msym)
+  ovly_table_msym = lookup_bound_minimal_symbol ("_ovly_table");
+  if (! ovly_table_msym.minsym)
     {
       error (_("Error reading inferior's overlay table: couldn't find "
              "`_ovly_table' array\n"
@@ -3427,7 +3447,7 @@ simple_read_overlay_table (void)
       return 0;
     }
 
-  gdbarch = get_objfile_arch (msymbol_objfile (ovly_table_msym));
+  gdbarch = get_objfile_arch (ovly_table_msym.objfile);
   word_size = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
   byte_order = gdbarch_byte_order (gdbarch);
 
@@ -3435,7 +3455,7 @@ simple_read_overlay_table (void)
                                      4, byte_order);
   cache_ovly_table
     = (void *) xmalloc (cache_novlys * sizeof (*cache_ovly_table));
-  cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym);
+  cache_ovly_table_base = SYMBOL_VALUE_ADDRESS (ovly_table_msym.minsym);
   read_target_long_array (cache_ovly_table_base,
                           (unsigned int *) cache_ovly_table,
                           cache_novlys * 4, word_size, byte_order);
This page took 0.032188 seconds and 4 git commands to generate.