1061da546Spatrick //===-- DWARFContext.h ------------------------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFCONTEXT_H 10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFCONTEXT_H 11061da546Spatrick 12061da546Spatrick #include "DWARFDataExtractor.h" 13061da546Spatrick #include "lldb/Core/Section.h" 14061da546Spatrick #include "llvm/DebugInfo/DWARF/DWARFContext.h" 15061da546Spatrick #include "llvm/Support/Threading.h" 16061da546Spatrick #include <memory> 17*f6aab3d8Srobert #include <optional> 18061da546Spatrick 19061da546Spatrick namespace lldb_private { 20061da546Spatrick class DWARFContext { 21061da546Spatrick private: 22061da546Spatrick SectionList *m_main_section_list; 23061da546Spatrick SectionList *m_dwo_section_list; 24061da546Spatrick mutable std::unique_ptr<llvm::DWARFContext> m_llvm_context; 25061da546Spatrick 26061da546Spatrick struct SectionData { 27061da546Spatrick llvm::once_flag flag; 28061da546Spatrick DWARFDataExtractor data; 29061da546Spatrick }; 30061da546Spatrick 31061da546Spatrick SectionData m_data_debug_abbrev; 32061da546Spatrick SectionData m_data_debug_addr; 33061da546Spatrick SectionData m_data_debug_aranges; 34dda28197Spatrick SectionData m_data_debug_cu_index; 35061da546Spatrick SectionData m_data_debug_info; 36061da546Spatrick SectionData m_data_debug_line; 37061da546Spatrick SectionData m_data_debug_line_str; 38061da546Spatrick SectionData m_data_debug_loc; 39061da546Spatrick SectionData m_data_debug_loclists; 40061da546Spatrick SectionData m_data_debug_macro; 41061da546Spatrick SectionData m_data_debug_ranges; 42061da546Spatrick SectionData m_data_debug_rnglists; 43061da546Spatrick SectionData m_data_debug_str; 44061da546Spatrick SectionData m_data_debug_str_offsets; 45dda28197Spatrick SectionData m_data_debug_tu_index; 46061da546Spatrick SectionData m_data_debug_types; 47061da546Spatrick 48061da546Spatrick const DWARFDataExtractor & 49*f6aab3d8Srobert LoadOrGetSection(std::optional<lldb::SectionType> main_section_type, 50*f6aab3d8Srobert std::optional<lldb::SectionType> dwo_section_type, 51061da546Spatrick SectionData &data); 52061da546Spatrick 53dda28197Spatrick const DWARFDataExtractor &getOrLoadCuIndexData(); 54dda28197Spatrick const DWARFDataExtractor &getOrLoadTuIndexData(); 55dda28197Spatrick 56061da546Spatrick public: DWARFContext(SectionList * main_section_list,SectionList * dwo_section_list)57061da546Spatrick explicit DWARFContext(SectionList *main_section_list, 58061da546Spatrick SectionList *dwo_section_list) 59061da546Spatrick : m_main_section_list(main_section_list), 60061da546Spatrick m_dwo_section_list(dwo_section_list) {} 61061da546Spatrick 62061da546Spatrick const DWARFDataExtractor &getOrLoadAbbrevData(); 63061da546Spatrick const DWARFDataExtractor &getOrLoadAddrData(); 64061da546Spatrick const DWARFDataExtractor &getOrLoadArangesData(); 65061da546Spatrick const DWARFDataExtractor &getOrLoadDebugInfoData(); 66061da546Spatrick const DWARFDataExtractor &getOrLoadLineData(); 67061da546Spatrick const DWARFDataExtractor &getOrLoadLineStrData(); 68061da546Spatrick const DWARFDataExtractor &getOrLoadLocData(); 69061da546Spatrick const DWARFDataExtractor &getOrLoadLocListsData(); 70061da546Spatrick const DWARFDataExtractor &getOrLoadMacroData(); 71061da546Spatrick const DWARFDataExtractor &getOrLoadRangesData(); 72061da546Spatrick const DWARFDataExtractor &getOrLoadRngListsData(); 73061da546Spatrick const DWARFDataExtractor &getOrLoadStrData(); 74061da546Spatrick const DWARFDataExtractor &getOrLoadStrOffsetsData(); 75061da546Spatrick const DWARFDataExtractor &getOrLoadDebugTypesData(); 76061da546Spatrick isDwo()77061da546Spatrick bool isDwo() { return m_dwo_section_list != nullptr; } 78061da546Spatrick 79061da546Spatrick llvm::DWARFContext &GetAsLLVM(); 80061da546Spatrick }; 81061da546Spatrick } // namespace lldb_private 82061da546Spatrick 83061da546Spatrick #endif 84