|  | /* DWARF 2 low-level section code | 
|  |  | 
|  | Copyright (C) 1994-2023 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 */ |