Commit | Line | Data |
---|---|---|
2c86cff9 TT |
1 | /* DWARF 2 low-level section code |
2 | ||
3 | Copyright (C) 1994-2020 Free Software Foundation, Inc. | |
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 | ||
46 | struct 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 */ |