gdbserver/gdbsupport: Add .dir-locals.el file
[deliverable/binutils-gdb.git] / gdb / psympriv.h
index dc89db2ff6492014348bf7eafb1c9e89a1495078..0effedc4ec2ae608d457b2ce12b2c5484182fb18 100644 (file)
@@ -99,18 +99,52 @@ enum psymtab_search_status
    They are all chained on partial symtab lists.
 
    Even after the source file has been read into a symtab, the
-   partial_symtab remains around.  They are allocated on an obstack,
-   objfile_obstack.  */
+   partial_symtab remains around.  */
 
 struct partial_symtab
 {
-  partial_symtab ()
-    : searched_flag (PST_NOT_SEARCHED),
-      text_low_valid (0),
-      text_high_valid (0)
+  /* Allocate a new partial symbol table associated with OBJFILE.
+     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)
+    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,
+                 CORE_ADDR addr)
+    ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3);
+
+  virtual ~partial_symtab ()
   {
   }
 
+  /* Read the full symbol table corresponding to this partial symbol
+     table.  */
+  virtual void read_symtab (struct objfile *) = 0;
+
+  /* Psymtab expansion is done in two steps.  The first step is a call
+     to read_symtab; but while that is in progress, calls to
+     expand_psymtab can be made.  */
+  virtual void expand_psymtab (struct objfile *) = 0;
+
+  /* Ensure that all the dependencies are read in.  */
+  void read_dependencies (struct objfile *);
+
+  /* Return true if the symtab corresponding to this psymtab has been
+     readin.  */
+  virtual bool readin_p () const = 0;
+
+  /* Return a pointer to the compunit allocated for this source file.
+     Return nullptr if !readin or if there was no symtab.  */
+  virtual struct compunit_symtab *get_compunit_symtab () const = 0;
+
+
   /* Return the raw low text address of this partial_symtab.  */
   CORE_ADDR raw_text_low () const
   {
@@ -239,21 +273,15 @@ struct partial_symtab
   int statics_offset = 0;
   int n_static_syms = 0;
 
-  /* Non-zero if the symtab corresponding to this psymtab has been
-     readin.  This is located here so that this structure packs better
-     on 64-bit systems.  */
-
-  unsigned char readin = 0;
-
   /* True iff objfile->psymtabs_addrmap is properly populated for this
      partial_symtab.  For discontiguous overlapping psymtabs is the only usable
      info in PSYMTABS_ADDRMAP.  */
 
-  unsigned char psymtabs_addrmap_supported = 0;
+  bool psymtabs_addrmap_supported = false;
 
   /* True if the name of this partial symtab is not a source file name.  */
 
-  unsigned char anonymous = 0;
+  bool anonymous = false;
 
   /* A flag that is temporarily used when searching psymtabs.  */
 
@@ -263,16 +291,84 @@ struct partial_symtab
 
   unsigned int text_low_valid : 1;
   unsigned int text_high_valid : 1;
+};
+
+/* A partial symtab that tracks the "readin" and "compunit_symtab"
+   information in the ordinary way -- by storing it directly in this
+   object.  */
+struct standard_psymtab : public partial_symtab
+{
+  standard_psymtab (const char *filename, struct objfile *objfile)
+    : partial_symtab (filename, objfile)
+  {
+  }
+
+  standard_psymtab (const char *filename, struct objfile *objfile,
+                   CORE_ADDR addr)
+    : partial_symtab (filename, objfile, addr)
+  {
+  }
+
+  bool readin_p () const override
+  {
+    return readin;
+  }
+
+  /* Return a pointer to the compunit allocated for this source file.
+     Return nullptr if !readin or if there was no symtab.  */
+  struct compunit_symtab *get_compunit_symtab () const override
+  {
+    return compunit_symtab;
+  }
+
+  /* True if the symtab corresponding to this psymtab has been
+     readin.  */
+
+  bool readin = false;
 
   /* Pointer to compunit eventually allocated for this source file, 0 if
      !readin or if we haven't looked for the symtab after it was readin.  */
 
   struct compunit_symtab *compunit_symtab = nullptr;
+};
+
+/* A partial_symtab that works in the historical db way.  This should
+   not be used in new code, but exists to transition the somewhat
+   unmaintained "legacy" debug formats.  */
+
+struct legacy_psymtab : public standard_psymtab
+{
+  legacy_psymtab (const char *filename, struct objfile *objfile)
+    : standard_psymtab (filename, objfile)
+  {
+  }
+
+  legacy_psymtab (const char *filename, struct objfile *objfile,
+                 CORE_ADDR addr)
+    : standard_psymtab (filename, objfile, addr)
+  {
+  }
+
+  void read_symtab (struct objfile *objf) override
+  {
+    if (legacy_read_symtab)
+      (*legacy_read_symtab) (this, objf);
+  }
+
+  void expand_psymtab (struct objfile *objf) override
+  {
+    (*legacy_expand_psymtab) (this, objf);
+  }
 
   /* Pointer to function which will read in the symtab corresponding to
      this psymtab.  */
 
-  void (*read_symtab) (struct partial_symtab *, struct objfile *) = nullptr;
+  void (*legacy_read_symtab) (legacy_psymtab *, struct objfile *) = nullptr;
+
+  /* Pointer to function which will actually expand this psymtab into
+     a full symtab.  */
+
+  void (*legacy_expand_psymtab) (legacy_psymtab *, struct objfile *) = nullptr;
 
   /* Information that lets read_symtab() locate the part of the symbol table
      that this psymtab corresponds to.  This information is private to the
@@ -324,21 +420,8 @@ extern void add_psymbol_to_list (gdb::string_view name,
 
 extern void init_psymbol_list (struct objfile *objfile, int total_symbols);
 
-extern struct partial_symtab *start_psymtab_common (struct objfile *,
-                                                   const char *, CORE_ADDR);
-
 extern void end_psymtab_common (struct objfile *, struct partial_symtab *);
 
-/* Allocate a new partial symbol table associated with OBJFILE.
-   FILENAME (which must be non-NULL) is the filename of this partial
-   symbol table; it is copied into the appropriate storage.  A new
-   partial symbol table is returned; aside from "next" and "filename",
-   its fields are initialized to zero.  */
-
-extern struct partial_symtab *allocate_psymtab (const char *filename,
-                                               struct objfile *objfile)
-  ATTRIBUTE_NONNULL (1);
-
 static inline void
 discard_psymtab (struct objfile *objfile, struct partial_symtab *pst)
 {
This page took 0.027482 seconds and 4 git commands to generate.