Automatic date update in version.in
[binutils-gdb.git] / gdb / psympriv.h
index 943d6c13919596764bf95a9b1ea56ff5145d42d6..59dd66f57e5d58dc94f1bd5935a4fd74ac3a15d2 100644 (file)
@@ -111,20 +111,25 @@ enum class psymbol_placement
 
 struct partial_symtab
 {
-  /* Allocate a new partial symbol table associated with OBJFILE.
+  /* Allocate a new partial symbol table.
+
      FILENAME (which must be non-NULL) is the filename of this partial
      symbol table; it is copied into the appropriate storage.  The
      partial symtab will also be installed using
      psymtab_storage::install.  */
 
-  partial_symtab (const char *filename, struct objfile *objfile)
+  partial_symtab (const char *filename,
+                 psymtab_storage *partial_symtabs,
+                 objfile_per_bfd_storage *objfile_per_bfd)
     ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
 
   /* Like the above, but also sets the initial text low and text high
      from the ADDR argument, and sets the global- and
      static-offsets.  */
 
-  partial_symtab (const char *filename, struct objfile *objfile,
+  partial_symtab (const char *filename,
+                 psymtab_storage *partial_symtabs,
+                 objfile_per_bfd_storage *objfile_per_bfd,
                  CORE_ADDR addr)
     ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
 
@@ -236,6 +241,7 @@ struct partial_symtab
                    psymbol_placement where,
                    CORE_ADDR coreaddr,
                    enum language language,
+                   psymtab_storage *partial_symtabs,
                    struct objfile *objfile);
 
   /* Add a symbol to this partial symbol table of OBJFILE.  The psymbol
@@ -244,6 +250,7 @@ struct partial_symtab
 
   void add_psymbol (const partial_symbol &psym,
                    psymbol_placement where,
+                   psymtab_storage *partial_symtabs,
                    struct objfile *objfile);
 
 
@@ -361,14 +368,18 @@ struct partial_symtab
    object.  */
 struct standard_psymtab : public partial_symtab
 {
-  standard_psymtab (const char *filename, struct objfile *objfile)
-    : partial_symtab (filename, objfile)
+  standard_psymtab (const char *filename,
+                   psymtab_storage *partial_symtabs,
+                   objfile_per_bfd_storage *objfile_per_bfd)
+    : partial_symtab (filename, partial_symtabs, objfile_per_bfd)
   {
   }
 
-  standard_psymtab (const char *filename, struct objfile *objfile,
+  standard_psymtab (const char *filename,
+                   psymtab_storage *partial_symtabs,
+                   objfile_per_bfd_storage *objfile_per_bfd,
                    CORE_ADDR addr)
-    : partial_symtab (filename, objfile, addr)
+    : partial_symtab (filename, partial_symtabs, objfile_per_bfd, addr)
   {
   }
 
@@ -399,14 +410,18 @@ struct standard_psymtab : public partial_symtab
 
 struct legacy_psymtab : public standard_psymtab
 {
-  legacy_psymtab (const char *filename, struct objfile *objfile)
-    : standard_psymtab (filename, objfile)
+  legacy_psymtab (const char *filename,
+                 psymtab_storage *partial_symtabs,
+                 objfile_per_bfd_storage *objfile_per_bfd)
+    : standard_psymtab (filename, partial_symtabs, objfile_per_bfd)
   {
   }
 
-  legacy_psymtab (const char *filename, struct objfile *objfile,
+  legacy_psymtab (const char *filename,
+                 psymtab_storage *partial_symtabs,
+                 objfile_per_bfd_storage *objfile_per_bfd,
                  CORE_ADDR addr)
-    : standard_psymtab (filename, objfile, addr)
+    : standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr)
   {
   }
 
@@ -476,21 +491,22 @@ class psymtab_discarder
    partial symbols.  */
 struct psymbol_functions : public quick_symbol_functions
 {
+  explicit psymbol_functions (const std::shared_ptr<psymtab_storage> &storage)
+    : m_partial_symtabs (storage)
+  {
+  }
+
+  psymbol_functions ()
+    : m_partial_symtabs (new psymtab_storage)
+  {
+  }
+
   bool has_symbols (struct objfile *objfile) override;
 
   struct symtab *find_last_source_symtab (struct objfile *objfile) override;
 
   void forget_cached_source_info (struct objfile *objfile) override;
 
-  bool map_symtabs_matching_filename
-    (struct objfile *objfile, const char *name, const char *real_path,
-     gdb::function_view<bool (symtab *)> callback) override;
-
-  struct compunit_symtab *lookup_symbol (struct objfile *objfile,
-                                        block_enum block_index,
-                                        const char *name,
-                                        domain_enum domain) override;
-
   enum language lookup_global_symbol_language (struct objfile *objfile,
                                               const char *name,
                                               domain_enum domain,
@@ -500,28 +516,23 @@ struct psymbol_functions : public quick_symbol_functions
 
   void dump (struct objfile *objfile) override;
 
-  void expand_symtabs_for_function (struct objfile *objfile,
-                                   const char *func_name) override;
-
   void expand_all_symtabs (struct objfile *objfile) override;
 
-  void expand_symtabs_with_fullname (struct objfile *objfile,
-                                    const char *fullname) override;
-
-  void map_matching_symbols
+  void expand_matching_symbols
     (struct objfile *,
      const lookup_name_info &lookup_name,
      domain_enum domain,
      int global,
-     gdb::function_view<symbol_found_callback_ftype> callback,
      symbol_compare_ftype *ordered_compare) override;
 
-  void expand_symtabs_matching
+  bool expand_symtabs_matching
     (struct objfile *objfile,
      gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
      const lookup_name_info *lookup_name,
      gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
      gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
+     block_search_flags search_flags,
+     domain_enum domain,
      enum search_domain kind) override;
 
   struct compunit_symtab *find_pc_sect_compunit_symtab
@@ -532,21 +543,57 @@ struct psymbol_functions : public quick_symbol_functions
     (struct objfile *objfile, CORE_ADDR address) override;
 
   void map_symbol_filenames (struct objfile *objfile,
-                            symbol_filename_ftype *fun, void *data,
-                            int need_fullname) override;
+                            gdb::function_view<symbol_filename_ftype> fun,
+                            bool need_fullname) override;
 
   void relocated () override
   {
     m_psymbol_map.clear ();
   }
 
+  /* Ensure the partial symbols for OBJFILE have been loaded.  Return
+     a range adapter for the psymtabs.  */
+  psymtab_storage::partial_symtab_range require_partial_symbols
+       (struct objfile *objfile);
+
+  /* Return the partial symbol storage associated with this
+     object.  */
+  const std::shared_ptr<psymtab_storage> &get_partial_symtabs () const
+  {
+    return m_partial_symtabs;
+  }
+
+  /* Replace the partial symbol table storage in this object with
+     SYMS.  */
+  void set_partial_symtabs (const std::shared_ptr<psymtab_storage> &syms)
+  {
+    m_partial_symtabs = syms;
+  }
+
+  /* Find which partial symtab contains PC and SECTION.  Return NULL if
+     none.  We return the psymtab that contains a symbol whose address
+     exactly matches PC, or, if we cannot find an exact match, the
+     psymtab that contains a symbol whose address is closest to PC.  */
+
+  struct partial_symtab *find_pc_sect_psymtab
+       (struct objfile *objfile,
+       CORE_ADDR pc,
+       struct obj_section *section,
+       struct bound_minimal_symbol msymbol);
+
 private:
 
+  /* Count the number of partial symbols in *THIS.  */
+  int count_psyms ();
+
   void fill_psymbol_map (struct objfile *objfile,
                         struct partial_symtab *psymtab,
                         std::set<CORE_ADDR> *seen_addrs,
                         const std::vector<partial_symbol *> &symbols);
 
+  /* Storage for the partial symbols.  */
+  std::shared_ptr<psymtab_storage> m_partial_symtabs;
+
   /* Map symbol addresses to the partial symtab that defines the
      object at that address.  */