| /* DWARF DWZ handling for GDB. |
| |
| Copyright (C) 2003-2021 Free Software Foundation, Inc. |
| |
| 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_DWZ_H |
| #define GDB_DWARF2_DWZ_H |
| |
| #include "gdb_bfd.h" |
| #include "dwarf2/index-cache.h" |
| #include "dwarf2/section.h" |
| |
| struct dwarf2_per_bfd; |
| |
| /* This represents a '.dwz' file. */ |
| |
| struct dwz_file |
| { |
| dwz_file (gdb_bfd_ref_ptr &&bfd) |
| : dwz_bfd (std::move (bfd)) |
| { |
| } |
| |
| const char *filename () const |
| { |
| return bfd_get_filename (this->dwz_bfd.get ()); |
| } |
| |
| /* A dwz file can only contain a few sections. */ |
| struct dwarf2_section_info abbrev {}; |
| struct dwarf2_section_info info {}; |
| struct dwarf2_section_info str {}; |
| struct dwarf2_section_info line {}; |
| struct dwarf2_section_info macro {}; |
| struct dwarf2_section_info gdb_index {}; |
| struct dwarf2_section_info debug_names {}; |
| |
| /* The dwz's BFD. */ |
| gdb_bfd_ref_ptr dwz_bfd; |
| |
| /* If we loaded the index from an external file, this contains the |
| resources associated to the open file, memory mapping, etc. */ |
| std::unique_ptr<index_cache_resource> index_cache_res; |
| |
| /* Read a string at offset STR_OFFSET in the .debug_str section from |
| this dwz file. Throw an error if the offset is too large. If |
| the string consists of a single NUL byte, return NULL; otherwise |
| return a pointer to the string. */ |
| |
| const char *read_string (struct objfile *objfile, LONGEST str_offset); |
| }; |
| |
| /* Open the separate '.dwz' debug file, if needed. If there is no |
| .gnu_debugaltlink section in the file, then the result depends on |
| REQUIRE: if REQUIRE is true, then error; if REQUIRE is false, |
| return NULL. Always error if there is such a section but the file |
| cannot be found. */ |
| |
| extern dwz_file *dwarf2_get_dwz_file (dwarf2_per_bfd *per_bfd, |
| bool require = false); |
| |
| #endif /* GDB_DWARF2_DWZ_H */ |