]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/dwarf2/section.h
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / dwarf2 / section.h
CommitLineData
2c86cff9
TT
1/* DWARF 2 low-level section code
2
3666a048 3 Copyright (C) 1994-2021 Free Software Foundation, Inc.
2c86cff9
TT
4
5 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
6 Inc. with support from Florida State University (under contract
7 with the Ada Joint Program Office), and Silicon Graphics, Inc.
8 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
9 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
10 support.
11
12 This file is part of GDB.
13
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 3 of the License, or
17 (at your option) any later version.
18
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with this program. If not, see <http://www.gnu.org/licenses/>. */
26
27#ifndef GDB_DWARF2_SECTION_H
28#define GDB_DWARF2_SECTION_H
29
30/* A descriptor for dwarf sections.
31
32 S.ASECTION, SIZE are typically initialized when the objfile is first
33 scanned. BUFFER, READIN are filled in later when the section is read.
34 If the section contained compressed data then SIZE is updated to record
35 the uncompressed size of the section.
36
37 DWP file format V2 introduces a wrinkle that is easiest to handle by
38 creating the concept of virtual sections contained within a real section.
39 In DWP V2 the sections of the input DWO files are concatenated together
40 into one section, but section offsets are kept relative to the original
41 input section.
42 If this is a virtual dwp-v2 section, S.CONTAINING_SECTION is a backlink to
43 the real section this "virtual" section is contained in, and BUFFER,SIZE
44 describe the virtual section. */
45
46struct dwarf2_section_info
47{
96b79293
TT
48 /* Return the name of this section. */
49 const char *get_name () const;
50
51 /* Return the containing section of this section, which must be a
52 virtual section. */
53 struct dwarf2_section_info *get_containing_section () const;
54
55 /* Return the bfd owner of this section. */
56 struct bfd *get_bfd_owner () const;
57
58 /* Return the bfd section of this section.
59 Returns NULL if the section is not present. */
60 asection *get_bfd_section () const;
61
62 /* Return the name of the file this section is in. */
63 const char *get_file_name () const;
64
65 /* Return the id of this section.
66 Returns 0 if this section doesn't exist. */
67 int get_id () const;
68
69 /* Return the flags of this section. This section (or containing
70 section if this is a virtual section) must exist. */
71 int get_flags () const;
72
73 /* Return true if this section does not exist or if it has no
74 contents. */
75 bool empty () const;
76
77 /* Read the contents of this section.
78 OBJFILE is the main object file, but not necessarily the file where
79 the section comes from. E.g., for DWO files the bfd of INFO is the bfd
80 of the DWO file.
81 If the section is compressed, uncompress it before returning. */
82 void read (struct objfile *objfile);
83
2c7d5afc
TT
84 /* A helper function that returns the size of a section in a safe way.
85 If you are positive that the section has been read before using the
86 size, then it is safe to refer to the dwarf2_section_info object's
87 "size" field directly. In other cases, you must call this
88 function, because for compressed sections the size field is not set
89 correctly until the section has been read. */
90 bfd_size_type get_size (struct objfile *objfile)
91 {
92 if (!readin)
93 read (objfile);
94 return size;
95 }
96
a0194fa8
TT
97 /* Issue a complaint that something was outside the bounds of this
98 buffer. */
99 void overflow_complaint () const;
100
4f44ae6c
TT
101 /* Return pointer to string in this section at offset STR_OFFSET
102 with error reporting string FORM_NAME. */
103 const char *read_string (struct objfile *objfile, LONGEST str_offset,
104 const char *form_name);
105
2c86cff9
TT
106 union
107 {
108 /* If this is a real section, the bfd section. */
109 asection *section;
110 /* If this is a virtual section, pointer to the containing ("real")
111 section. */
112 struct dwarf2_section_info *containing_section;
113 } s;
114 /* Pointer to section data, only valid if readin. */
115 const gdb_byte *buffer;
116 /* The size of the section, real or virtual. */
117 bfd_size_type size;
118 /* If this is a virtual section, the offset in the real section.
119 Only valid if is_virtual. */
120 bfd_size_type virtual_offset;
121 /* True if we have tried to read this section. */
122 bool readin;
123 /* True if this is a virtual section, False otherwise.
124 This specifies which of s.section and s.containing_section to use. */
125 bool is_virtual;
126};
127
2c86cff9 128#endif /* GDB_DWARF2_SECTION_H */