| /* DWARF 2 low-level section code | 
 |  | 
 |    Copyright (C) 1994-2022 Free Software Foundation, Inc. | 
 |  | 
 |    Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, | 
 |    Inc.  with support from Florida State University (under contract | 
 |    with the Ada Joint Program Office), and Silicon Graphics, Inc. | 
 |    Initial contribution by Brent Benson, Harris Computer Systems, Inc., | 
 |    based on Fred Fish's (Cygnus Support) implementation of DWARF 1 | 
 |    support. | 
 |  | 
 |    This file is part of GDB. | 
 |  | 
 |    This program is free software; you can redistribute it and/or modify | 
 |    it under the terms of the GNU General Public License as published by | 
 |    the Free Software Foundation; either version 3 of the License, or | 
 |    (at your option) any later version. | 
 |  | 
 |    This program is distributed in the hope that it will be useful, | 
 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |    GNU General Public License for more details. | 
 |  | 
 |    You should have received a copy of the GNU General Public License | 
 |    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ | 
 |  | 
 | #ifndef GDB_DWARF2_SECTION_H | 
 | #define GDB_DWARF2_SECTION_H | 
 |  | 
 | /* A descriptor for dwarf sections. | 
 |  | 
 |    S.ASECTION, SIZE are typically initialized when the objfile is first | 
 |    scanned.  BUFFER, READIN are filled in later when the section is read. | 
 |    If the section contained compressed data then SIZE is updated to record | 
 |    the uncompressed size of the section. | 
 |  | 
 |    DWP file format V2 introduces a wrinkle that is easiest to handle by | 
 |    creating the concept of virtual sections contained within a real section. | 
 |    In DWP V2 the sections of the input DWO files are concatenated together | 
 |    into one section, but section offsets are kept relative to the original | 
 |    input section. | 
 |    If this is a virtual dwp-v2 section, S.CONTAINING_SECTION is a backlink to | 
 |    the real section this "virtual" section is contained in, and BUFFER,SIZE | 
 |    describe the virtual section.  */ | 
 |  | 
 | struct dwarf2_section_info | 
 | { | 
 |   /* Return the name of this section.  */ | 
 |   const char *get_name () const; | 
 |  | 
 |   /* Return the containing section of this section, which must be a | 
 |      virtual section.  */ | 
 |   struct dwarf2_section_info *get_containing_section () const; | 
 |  | 
 |   /* Return the bfd owner of this section.  */ | 
 |   struct bfd *get_bfd_owner () const; | 
 |  | 
 |   /* Return the bfd section of this section. | 
 |      Returns NULL if the section is not present.  */ | 
 |   asection *get_bfd_section () const; | 
 |  | 
 |   /* Return the name of the file this section is in.  */ | 
 |   const char *get_file_name () const; | 
 |  | 
 |   /* Return the id of this section. | 
 |      Returns 0 if this section doesn't exist.  */ | 
 |   int get_id () const; | 
 |  | 
 |   /* Return the flags of this section.  This section (or containing | 
 |      section if this is a virtual section) must exist.  */ | 
 |   int get_flags () const; | 
 |  | 
 |   /* Return true if this section does not exist or if it has no | 
 |      contents. */ | 
 |   bool empty () const; | 
 |  | 
 |   /* Read the contents of this section. | 
 |      OBJFILE is the main object file, but not necessarily the file where | 
 |      the section comes from.  E.g., for DWO files the bfd of INFO is the bfd | 
 |      of the DWO file. | 
 |      If the section is compressed, uncompress it before returning.  */ | 
 |   void read (struct objfile *objfile); | 
 |  | 
 |   /* A helper function that returns the size of a section in a safe way. | 
 |      If you are positive that the section has been read before using the | 
 |      size, then it is safe to refer to the dwarf2_section_info object's | 
 |      "size" field directly.  In other cases, you must call this | 
 |      function, because for compressed sections the size field is not set | 
 |      correctly until the section has been read.  */ | 
 |   bfd_size_type get_size (struct objfile *objfile) | 
 |   { | 
 |     if (!readin) | 
 |       read (objfile); | 
 |     return size; | 
 |   } | 
 |  | 
 |   /* Issue a complaint that something was outside the bounds of this | 
 |      buffer.  */ | 
 |   void overflow_complaint () const; | 
 |  | 
 |   /* Return pointer to string in this section at offset STR_OFFSET | 
 |      with error reporting string FORM_NAME.  */ | 
 |   const char *read_string (struct objfile *objfile, LONGEST str_offset, | 
 | 			   const char *form_name); | 
 |  | 
 |   union | 
 |   { | 
 |     /* If this is a real section, the bfd section.  */ | 
 |     asection *section; | 
 |     /* If this is a virtual section, pointer to the containing ("real") | 
 |        section.  */ | 
 |     struct dwarf2_section_info *containing_section; | 
 |   } s; | 
 |   /* Pointer to section data, only valid if readin.  */ | 
 |   const gdb_byte *buffer; | 
 |   /* The size of the section, real or virtual.  */ | 
 |   bfd_size_type size; | 
 |   /* If this is a virtual section, the offset in the real section. | 
 |      Only valid if is_virtual.  */ | 
 |   bfd_size_type virtual_offset; | 
 |   /* True if we have tried to read this section.  */ | 
 |   bool readin; | 
 |   /* True if this is a virtual section, False otherwise. | 
 |      This specifies which of s.section and s.containing_section to use.  */ | 
 |   bool is_virtual; | 
 | }; | 
 |  | 
 | #endif /* GDB_DWARF2_SECTION_H */ |