Update year range in copyright notice of all files owned by the GDB project.
[deliverable/binutils-gdb.git] / gdb / psymtab.c
index 8f2de2ae729909ecef2e1fad86cf33d36b4572fc..592efd7d785c79667c83463ea5f32e7bfb41df6c 100644 (file)
@@ -1,6 +1,6 @@
 /* Partial symbol tables.
    
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -21,7 +21,6 @@
 #include "symtab.h"
 #include "psympriv.h"
 #include "objfiles.h"
-#include "gdb_assert.h"
 #include "block.h"
 #include "filenames.h"
 #include "source.h"
@@ -68,8 +67,8 @@ static struct partial_symbol *find_pc_sect_psymbol (struct objfile *,
 static void fixup_psymbol_section (struct partial_symbol *psym,
                                   struct objfile *objfile);
 
-static struct symtab *psymtab_to_symtab (struct objfile *objfile,
-                                        struct partial_symtab *pst);
+static struct compunit_symtab *psymtab_to_symtab (struct objfile *objfile,
+                                                 struct partial_symtab *pst);
 
 /* Ensure that the partial symbols for OBJFILE have been loaded.  This
    function always returns its argument, as a convenience.  */
@@ -125,7 +124,7 @@ require_partial_symbols (struct objfile *objfile, int verbose)
   ALL_OBJFILES (objfile)        \
     ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, p)
 
-/* Helper function for partial_map_symtabs_matching_filename that
+/* Helper function for psym_map_symtabs_matching_filename that
    expands the symtabs and calls the iterator.  */
 
 static int
@@ -136,7 +135,7 @@ partial_map_expand_apply (struct objfile *objfile,
                          int (*callback) (struct symtab *, void *),
                          void *data)
 {
-  struct symtab *last_made = objfile->symtabs;
+  struct compunit_symtab *last_made = objfile->compunit_symtabs;
 
   /* Shared psymtabs should never be seen here.  Instead they should
      be handled properly by the caller.  */
@@ -151,18 +150,19 @@ partial_map_expand_apply (struct objfile *objfile,
   psymtab_to_symtab (objfile, pst);
 
   return iterate_over_some_symtabs (name, real_path, callback, data,
-                                   objfile->symtabs, last_made);
+                                   objfile->compunit_symtabs, last_made);
 }
 
-/* Implementation of the map_symtabs_matching_filename method.  */
+/*  Psymtab version of map_symtabs_matching_filename.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
 
 static int
-partial_map_symtabs_matching_filename (struct objfile *objfile,
-                                      const char *name,
-                                      const char *real_path,
-                                      int (*callback) (struct symtab *,
-                                                       void *),
-                                      void *data)
+psym_map_symtabs_matching_filename (struct objfile *objfile,
+                                   const char *name,
+                                   const char *real_path,
+                                   int (*callback) (struct symtab *,
+                                                    void *),
+                                   void *data)
 {
   struct partial_symtab *pst;
   const char *name_basename = lbasename (name);
@@ -371,11 +371,15 @@ find_pc_sect_psymtab (struct objfile *objfile, CORE_ADDR pc,
   return NULL;
 }
 
-static struct symtab *
-find_pc_sect_symtab_from_partial (struct objfile *objfile,
-                                 struct bound_minimal_symbol msymbol,
-                                 CORE_ADDR pc, struct obj_section *section,
-                                 int warn_if_readin)
+/*  Psymtab version of find_pc_sect_compunit_symtab.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
+static struct compunit_symtab *
+psym_find_pc_sect_compunit_symtab (struct objfile *objfile,
+                                  struct bound_minimal_symbol msymbol,
+                                  CORE_ADDR pc,
+                                  struct obj_section *section,
+                                  int warn_if_readin)
 {
   struct partial_symtab *ps = find_pc_sect_psymtab (objfile, pc, section,
                                                    msymbol);
@@ -389,7 +393,7 @@ find_pc_sect_symtab_from_partial (struct objfile *objfile,
 (Internal error: pc %s in read in psymtab, but not in symtab.)\n"),
                 paddress (get_objfile_arch (objfile), pc));
       psymtab_to_symtab (objfile, ps);
-      return ps->symtab;
+      return ps->compunit_symtab;
     }
   return NULL;
 }
@@ -495,14 +499,17 @@ fixup_psymbol_section (struct partial_symbol *psym, struct objfile *objfile)
   fixup_section (&psym->ginfo, addr, objfile);
 }
 
-static struct symtab *
-lookup_symbol_aux_psymtabs (struct objfile *objfile,
-                           int block_index, const char *name,
-                           const domain_enum domain)
+/*  Psymtab version of lookup_symbol.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
+static struct compunit_symtab *
+psym_lookup_symbol (struct objfile *objfile,
+                   int block_index, const char *name,
+                   const domain_enum domain)
 {
   struct partial_symtab *ps;
   const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
-  struct symtab *stab_best = NULL;
+  struct compunit_symtab *stab_best = NULL;
 
   ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, ps)
   {
@@ -510,18 +517,17 @@ lookup_symbol_aux_psymtabs (struct objfile *objfile,
                                              psymtab_index, domain))
       {
        struct symbol *sym = NULL;
-       struct symtab *stab = psymtab_to_symtab (objfile, ps);
+       struct compunit_symtab *stab = psymtab_to_symtab (objfile, ps);
+       /* Note: While psymtab_to_symtab can return NULL if the partial symtab
+          is empty, we can assume it won't here because lookup_partial_symbol
+          succeeded.  */
+       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
+       struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
 
        /* Some caution must be observed with overloaded functions
           and methods, since the psymtab will not contain any overload
           information (but NAME might contain it).  */
-       if (stab->primary)
-         {
-           struct blockvector *bv = BLOCKVECTOR (stab);
-           struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
-           sym = lookup_block_symbol (block, name, domain);
-         }
+       sym = block_lookup_symbol (block, name, domain);
 
        if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
          {
@@ -594,7 +600,8 @@ match_partial_symbol (struct objfile *objfile,
       while (top <= real_top
             && match (SYMBOL_SEARCH_NAME (*top), name) == 0)
        {
-         if (SYMBOL_DOMAIN (*top) == domain)
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*top),
+                                    SYMBOL_DOMAIN (*top), domain))
            return *top;
          top++;
        }
@@ -607,7 +614,8 @@ match_partial_symbol (struct objfile *objfile,
     {
       for (psym = start; psym < start + length; psym++)
        {
-         if (SYMBOL_DOMAIN (*psym) == domain
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*psym),
+                                    SYMBOL_DOMAIN (*psym), domain)
              && match (SYMBOL_SEARCH_NAME (*psym), name) == 0)
            return *psym;
        }
@@ -632,13 +640,13 @@ psymtab_search_name (const char *name)
     case language_cplus:
     case language_java:
       {
-       if (strchr (name, '('))
-         {
-           char *ret = cp_remove_params (name);
+       if (strchr (name, '('))
+         {
+           char *ret = cp_remove_params (name);
 
-           if (ret)
-             return ret;
-         }
+           if (ret)
+             return ret;
+         }
       }
       break;
 
@@ -723,7 +731,8 @@ lookup_partial_symbol (struct objfile *objfile,
 
       while (top <= real_top && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name))
        {
-         if (SYMBOL_DOMAIN (*top) == domain)
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*top),
+                                    SYMBOL_DOMAIN (*top), domain))
            {
              do_cleanups (cleanup);
              return (*top);
@@ -739,7 +748,8 @@ lookup_partial_symbol (struct objfile *objfile,
     {
       for (psym = start; psym < start + length; psym++)
        {
-         if (SYMBOL_DOMAIN (*psym) == domain
+         if (symbol_matches_domain (SYMBOL_LANGUAGE (*psym),
+                                    SYMBOL_DOMAIN (*psym), domain)
              && SYMBOL_MATCHES_SEARCH_NAME (*psym, search_name))
            {
              do_cleanups (cleanup);
@@ -753,9 +763,12 @@ lookup_partial_symbol (struct objfile *objfile,
 }
 
 /* Get the symbol table that corresponds to a partial_symtab.
-   This is fast after the first time you do it.  */
+   This is fast after the first time you do it.
+   The result will be NULL if the primary symtab has no symbols,
+   which can happen.  Otherwise the result is the primary symtab
+   that contains PST.  */
 
-static struct symtab *
+static struct compunit_symtab *
 psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
 {
   /* If it is a shared psymtab, find an unshared psymtab that includes
@@ -764,8 +777,8 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
     pst = pst->user;
 
   /* If it's been looked up before, return it.  */
-  if (pst->symtab)
-    return pst->symtab;
+  if (pst->compunit_symtab)
+    return pst->compunit_symtab;
 
   /* If it has not yet been read in, read it.  */
   if (!pst->readin)
@@ -776,13 +789,16 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
       do_cleanups (back_to);
     }
 
-  return pst->symtab;
+  return pst->compunit_symtab;
 }
 
+/*  Psymtab version of relocate.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-relocate_psymtabs (struct objfile *objfile,
-                  const struct section_offsets *new_offsets,
-                  const struct section_offsets *delta)
+psym_relocate (struct objfile *objfile,
+              const struct section_offsets *new_offsets,
+              const struct section_offsets *delta)
 {
   struct partial_symbol **psym;
   struct partial_symtab *p;
@@ -813,8 +829,11 @@ relocate_psymtabs (struct objfile *objfile,
     }
 }
 
+/*  Psymtab version of find_last_source_symtab.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static struct symtab *
-find_last_source_symtab_from_partial (struct objfile *ofp)
+psym_find_last_source_symtab (struct objfile *ofp)
 {
   struct partial_symtab *ps;
   struct partial_symtab *cs_pst = 0;
@@ -838,13 +857,22 @@ find_last_source_symtab_from_partial (struct objfile *ofp)
                          "readin pst found and no symtabs."));
        }
       else
-       return psymtab_to_symtab (ofp, cs_pst);
+       {
+         struct compunit_symtab *cust = psymtab_to_symtab (ofp, cs_pst);
+
+         if (cust == NULL)
+           return NULL;
+         return compunit_primary_filetab (cust);
+       }
     }
   return NULL;
 }
 
+/*  Psymtab version of forget_cached_source_info.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-forget_cached_source_info_partial (struct objfile *objfile)
+psym_forget_cached_source_info (struct objfile *objfile)
 {
   struct partial_symtab *pst;
 
@@ -978,7 +1006,7 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
     {
       fprintf_filtered (outfile,
                        "  Full symtab was read (at ");
-      gdb_print_host_address (psymtab->symtab, outfile);
+      gdb_print_host_address (psymtab->compunit_symtab, outfile);
       fprintf_filtered (outfile, " by function at ");
       gdb_print_host_address (psymtab->read_symtab, outfile);
       fprintf_filtered (outfile, ")\n");
@@ -1035,8 +1063,11 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab,
   fprintf_filtered (outfile, "\n");
 }
 
+/*  Psymtab version of print_stats.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-print_psymtab_stats_for_objfile (struct objfile *objfile)
+psym_print_stats (struct objfile *objfile)
 {
   int i;
   struct partial_symtab *ps;
@@ -1050,8 +1081,11 @@ print_psymtab_stats_for_objfile (struct objfile *objfile)
   printf_filtered (_("  Number of psym tables (not yet expanded): %d\n"), i);
 }
 
+/*  Psymtab version of dump.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-dump_psymtabs_for_objfile (struct objfile *objfile)
+psym_dump (struct objfile *objfile)
 {
   struct partial_symtab *psymtab;
 
@@ -1072,11 +1106,12 @@ dump_psymtabs_for_objfile (struct objfile *objfile)
     }
 }
 
-/* Look through the partial symtabs for all symbols which begin
-   by matching FUNC_NAME.  Make sure we read that symbol table in.  */
+/*  Psymtab version of expand_symtabs_for_function.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
 
 static void
-read_symtabs_for_function (struct objfile *objfile, const char *func_name)
+psym_expand_symtabs_for_function (struct objfile *objfile,
+                                 const char *func_name)
 {
   struct partial_symtab *ps;
 
@@ -1093,8 +1128,11 @@ read_symtabs_for_function (struct objfile *objfile, const char *func_name)
   }
 }
 
+/*  Psymtab version of expand_all_symtabs.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-expand_partial_symbol_tables (struct objfile *objfile)
+psym_expand_all_symtabs (struct objfile *objfile)
 {
   struct partial_symtab *psymtab;
 
@@ -1104,8 +1142,12 @@ expand_partial_symbol_tables (struct objfile *objfile)
     }
 }
 
+/*  Psymtab version of expand_symtabs_with_fullname.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-read_psymtabs_with_fullname (struct objfile *objfile, const char *fullname)
+psym_expand_symtabs_with_fullname (struct objfile *objfile,
+                                  const char *fullname)
 {
   struct partial_symtab *p;
 
@@ -1124,10 +1166,13 @@ read_psymtabs_with_fullname (struct objfile *objfile, const char *fullname)
     }
 }
 
+/*  Psymtab version of map_symbol_filenames.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-map_symbol_filenames_psymtab (struct objfile *objfile,
-                             symbol_filename_ftype *fun, void *data,
-                             int need_fullname)
+psym_map_symbol_filenames (struct objfile *objfile,
+                          symbol_filename_ftype *fun, void *data,
+                          int need_fullname)
 {
   struct partial_symtab *ps;
 
@@ -1219,7 +1264,8 @@ map_block (const char *name, domain_enum namespace, struct objfile *objfile,
   for (sym = block_iter_match_first (block, name, match, &iter);
        sym != NULL; sym = block_iter_match_next (name, match, &iter))
     {
-      if (SYMBOL_DOMAIN (sym) == namespace)
+      if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), 
+                                SYMBOL_DOMAIN (sym), namespace))
        {
          if (callback (block, sym, data))
            return 1;
@@ -1233,14 +1279,14 @@ map_block (const char *name, domain_enum namespace, struct objfile *objfile,
     the definition of quick_symbol_functions in symfile.h.  */
 
 static void
-map_matching_symbols_psymtab (struct objfile *objfile,
-                             const char *name, domain_enum namespace,
-                             int global,
-                             int (*callback) (struct block *,
-                                              struct symbol *, void *),
-                             void *data,
-                             symbol_compare_ftype *match,
-                             symbol_compare_ftype *ordered_compare)
+psym_map_matching_symbols (struct objfile *objfile,
+                          const char *name, domain_enum namespace,
+                          int global,
+                          int (*callback) (struct block *,
+                                           struct symbol *, void *),
+                          void *data,
+                          symbol_compare_ftype *match,
+                          symbol_compare_ftype *ordered_compare)
 {
   const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
   struct partial_symtab *ps;
@@ -1252,12 +1298,12 @@ map_matching_symbols_psymtab (struct objfile *objfile,
          || match_partial_symbol (objfile, ps, global, name, namespace, match,
                                   ordered_compare))
        {
-         struct symtab *s = psymtab_to_symtab (objfile, ps);
+         struct compunit_symtab *cust = psymtab_to_symtab (objfile, ps);
          struct block *block;
 
-         if (s == NULL || !s->primary)
+         if (cust == NULL)
            continue;
-         block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), block_kind);
+         block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind);
          if (map_block (name, namespace, objfile, block,
                         callback, data, match))
            return;
@@ -1267,7 +1313,7 @@ map_matching_symbols_psymtab (struct objfile *objfile,
     }
 }          
 
-/* A helper for expand_symtabs_matching_via_partial that handles
+/* A helper for psym_expand_symtabs_matching that handles
    searching included psymtabs.  This returns 1 if a symbol is found,
    and zero otherwise.  It also updates the 'searched_flag' on the
    various psymtabs that it searches.  */
@@ -1355,8 +1401,11 @@ recursively_search_psymtabs (struct partial_symtab *ps,
   return result == PST_SEARCHED_AND_FOUND;
 }
 
+/*  Psymtab version of expand_symtabs_matching.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static void
-expand_symtabs_matching_via_partial
+psym_expand_symtabs_matching
   (struct objfile *objfile,
    expand_symtabs_file_matcher_ftype *file_matcher,
    expand_symtabs_symbol_matcher_ftype *symbol_matcher,
@@ -1406,29 +1455,32 @@ expand_symtabs_matching_via_partial
     }
 }
 
+/*  Psymtab version of has_symbols.  See its definition in
+    the definition of quick_symbol_functions in symfile.h.  */
+
 static int
-objfile_has_psyms (struct objfile *objfile)
+psym_has_symbols (struct objfile *objfile)
 {
   return objfile->psymtabs != NULL;
 }
 
 const struct quick_symbol_functions psym_functions =
 {
-  objfile_has_psyms,
-  find_last_source_symtab_from_partial,
-  forget_cached_source_info_partial,
-  partial_map_symtabs_matching_filename,
-  lookup_symbol_aux_psymtabs,
-  print_psymtab_stats_for_objfile,
-  dump_psymtabs_for_objfile,
-  relocate_psymtabs,
-  read_symtabs_for_function,
-  expand_partial_symbol_tables,
-  read_psymtabs_with_fullname,
-  map_matching_symbols_psymtab,
-  expand_symtabs_matching_via_partial,
-  find_pc_sect_symtab_from_partial,
-  map_symbol_filenames_psymtab
+  psym_has_symbols,
+  psym_find_last_source_symtab,
+  psym_forget_cached_source_info,
+  psym_map_symtabs_matching_filename,
+  psym_lookup_symbol,
+  psym_print_stats,
+  psym_dump,
+  psym_relocate,
+  psym_expand_symtabs_for_function,
+  psym_expand_all_symtabs,
+  psym_expand_symtabs_with_fullname,
+  psym_map_matching_symbols,
+  psym_expand_symtabs_matching,
+  psym_find_pc_sect_compunit_symtab,
+  psym_map_symbol_filenames
 };
 
 \f
@@ -1739,7 +1791,7 @@ allocate_psymtab (const char *filename, struct objfile *objfile)
   memset (psymtab, 0, sizeof (struct partial_symtab));
   psymtab->filename = bcache (filename, strlen (filename) + 1,
                              objfile->per_bfd->filename_cache);
-  psymtab->symtab = NULL;
+  psymtab->compunit_symtab = NULL;
 
   /* Prepend it to the psymtab list for the objfile it belongs to.
      Psymtabs are searched in most recent inserted -> least recent
@@ -1996,9 +2048,9 @@ maintenance_check_psymtabs (char *ignore, int from_tty)
 {
   struct symbol *sym;
   struct partial_symbol **psym;
-  struct symtab *s = NULL;
+  struct compunit_symtab *cust = NULL;
   struct partial_symtab *ps;
-  struct blockvector *bv;
+  const struct blockvector *bv;
   struct objfile *objfile;
   struct block *b;
   int length;
@@ -2010,7 +2062,7 @@ maintenance_check_psymtabs (char *ignore, int from_tty)
     /* We don't call psymtab_to_symtab here because that may cause symtab
        expansion.  When debugging a problem it helps if checkers leave
        things unchanged.  */
-    s = ps->symtab;
+    cust = ps->compunit_symtab;
 
     /* First do some checks that don't require the associated symtab.  */
     if (ps->texthigh < ps->textlow)
@@ -2026,15 +2078,15 @@ maintenance_check_psymtabs (char *ignore, int from_tty)
       }
 
     /* Now do checks requiring the associated symtab.  */
-    if (s == NULL)
+    if (cust == NULL)
       continue;
-    bv = BLOCKVECTOR (s);
+    bv = COMPUNIT_BLOCKVECTOR (cust);
     b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
     psym = objfile->static_psymbols.list + ps->statics_offset;
     length = ps->n_static_syms;
     while (length--)
       {
-       sym = lookup_block_symbol (b, SYMBOL_LINKAGE_NAME (*psym),
+       sym = block_lookup_symbol (b, SYMBOL_LINKAGE_NAME (*psym),
                                   SYMBOL_DOMAIN (*psym));
        if (!sym)
          {
@@ -2051,7 +2103,7 @@ maintenance_check_psymtabs (char *ignore, int from_tty)
     length = ps->n_global_syms;
     while (length--)
       {
-       sym = lookup_block_symbol (b, SYMBOL_LINKAGE_NAME (*psym),
+       sym = block_lookup_symbol (b, SYMBOL_LINKAGE_NAME (*psym),
                                   SYMBOL_DOMAIN (*psym));
        if (!sym)
          {
This page took 0.033481 seconds and 4 git commands to generate.