[DAG] TransformFPLoadStorePair - early out if we're not loading a simple type
[llvm-project.git] / lldb / source / Plugins / SymbolFile / DWARF / DWARFDebugAranges.h
blob99e2108b85c67d398e501748b193d3de7c4fc95d
1 //===-- DWARFDebugAranges.h -------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGARANGES_H
10 #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGARANGES_H
12 #include "lldb/Core/dwarf.h"
13 #include "lldb/Utility/RangeMap.h"
14 #include "llvm/Support/Error.h"
16 namespace lldb_private::plugin {
17 namespace dwarf {
18 class DWARFDebugAranges {
19 protected:
20 typedef RangeDataVector<dw_addr_t, uint32_t, dw_offset_t> RangeToDIE;
22 public:
23 typedef RangeToDIE::Entry Range;
24 typedef std::vector<RangeToDIE::Entry> RangeColl;
26 DWARFDebugAranges();
28 void Clear() { m_aranges.Clear(); }
30 void extract(const DWARFDataExtractor &debug_aranges_data);
32 // Use append range multiple times and then call sort
33 void AppendRange(dw_offset_t cu_offset, dw_addr_t low_pc, dw_addr_t high_pc);
35 void Sort(bool minimize);
37 void Dump(Log *log) const;
39 dw_offset_t FindAddress(dw_addr_t address) const;
41 bool IsEmpty() const { return m_aranges.IsEmpty(); }
42 size_t GetNumRanges() const { return m_aranges.GetSize(); }
44 dw_offset_t OffsetAtIndex(uint32_t idx) const {
45 const Range *range = m_aranges.GetEntryAtIndex(idx);
46 if (range)
47 return range->data;
48 return DW_INVALID_OFFSET;
51 protected:
52 RangeToDIE m_aranges;
54 } // namespace dwarf
55 } // namespace lldb_private::plugin
57 #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGARANGES_H