| //===-- DWARFContext.h ------------------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFCONTEXT_H |
| #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFCONTEXT_H |
| |
| #include "DWARFDataExtractor.h" |
| #include "lldb/Core/Section.h" |
| #include "llvm/ADT/Optional.h" |
| #include "llvm/DebugInfo/DWARF/DWARFContext.h" |
| #include "llvm/Support/Threading.h" |
| #include <memory> |
| |
| namespace lldb_private { |
| class DWARFContext { |
| private: |
| SectionList *m_main_section_list; |
| SectionList *m_dwo_section_list; |
| mutable std::unique_ptr<llvm::DWARFContext> m_llvm_context; |
| |
| struct SectionData { |
| llvm::once_flag flag; |
| DWARFDataExtractor data; |
| }; |
| |
| SectionData m_data_debug_abbrev; |
| SectionData m_data_debug_addr; |
| SectionData m_data_debug_aranges; |
| SectionData m_data_debug_cu_index; |
| SectionData m_data_debug_info; |
| SectionData m_data_debug_line; |
| SectionData m_data_debug_line_str; |
| SectionData m_data_debug_loc; |
| SectionData m_data_debug_loclists; |
| SectionData m_data_debug_macro; |
| SectionData m_data_debug_ranges; |
| SectionData m_data_debug_rnglists; |
| SectionData m_data_debug_str; |
| SectionData m_data_debug_str_offsets; |
| SectionData m_data_debug_tu_index; |
| SectionData m_data_debug_types; |
| |
| const DWARFDataExtractor & |
| LoadOrGetSection(llvm::Optional<lldb::SectionType> main_section_type, |
| llvm::Optional<lldb::SectionType> dwo_section_type, |
| SectionData &data); |
| |
| const DWARFDataExtractor &getOrLoadCuIndexData(); |
| const DWARFDataExtractor &getOrLoadTuIndexData(); |
| |
| public: |
| explicit DWARFContext(SectionList *main_section_list, |
| SectionList *dwo_section_list) |
| : m_main_section_list(main_section_list), |
| m_dwo_section_list(dwo_section_list) {} |
| |
| const DWARFDataExtractor &getOrLoadAbbrevData(); |
| const DWARFDataExtractor &getOrLoadAddrData(); |
| const DWARFDataExtractor &getOrLoadArangesData(); |
| const DWARFDataExtractor &getOrLoadDebugInfoData(); |
| const DWARFDataExtractor &getOrLoadLineData(); |
| const DWARFDataExtractor &getOrLoadLineStrData(); |
| const DWARFDataExtractor &getOrLoadLocData(); |
| const DWARFDataExtractor &getOrLoadLocListsData(); |
| const DWARFDataExtractor &getOrLoadMacroData(); |
| const DWARFDataExtractor &getOrLoadRangesData(); |
| const DWARFDataExtractor &getOrLoadRngListsData(); |
| const DWARFDataExtractor &getOrLoadStrData(); |
| const DWARFDataExtractor &getOrLoadStrOffsetsData(); |
| const DWARFDataExtractor &getOrLoadDebugTypesData(); |
| |
| bool isDwo() { return m_dwo_section_list != nullptr; } |
| |
| llvm::DWARFContext &GetAsLLVM(); |
| }; |
| } // namespace lldb_private |
| |
| #endif |