summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
new file mode 100644
index 00000000000..d8a44ccacb9
--- /dev/null
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFContext.cpp
@@ -0,0 +1,43 @@
+//===-- DWARFContext.cpp ----------------------------------------*- 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "DWARFContext.h"
+
+#include "lldb/Core/Section.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+static const DWARFDataExtractor *
+LoadOrGetSection(Module &module, SectionType section_type,
+ llvm::Optional<DWARFDataExtractor> &extractor) {
+ if (extractor.hasValue())
+ return extractor->GetByteSize() > 0 ? extractor.getPointer() : nullptr;
+
+ // Initialize to an empty extractor so that we always take the fast path going
+ // forward.
+ extractor.emplace();
+
+ const SectionList *section_list = module.GetSectionList();
+ if (!section_list)
+ return nullptr;
+
+ auto section_sp = section_list->FindSectionByType(section_type, true);
+ if (!section_sp)
+ return nullptr;
+
+ section_sp->GetSectionData(*extractor);
+ return extractor.getPointer();
+}
+
+DWARFContext::DWARFContext(Module &module) : m_module(module) {}
+
+const DWARFDataExtractor *DWARFContext::getOrLoadArangesData() {
+ return LoadOrGetSection(m_module, eSectionTypeDWARFDebugAranges,
+ m_data_debug_aranges);
+}
OpenPOWER on IntegriCloud