1 //===-- DWARFDebugArangeSet.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 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGARANGESET_H 10 #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGARANGESET_H 11 12 #include "lldb/Core/dwarf.h" 13 #include <cstdint> 14 #include <vector> 15 16 class DWARFDebugArangeSet { 17 public: 18 struct Header { 19 /// The total length of the entries for that set, not including the length 20 /// field itself. 21 uint32_t length = 0; 22 /// The DWARF version number. 23 uint16_t version = 0; 24 /// The offset from the beginning of the .debug_info section of the 25 /// compilation unit entry referenced by the table. 26 uint32_t cu_offset = 0; 27 /// The size in bytes of an address on the target architecture. For 28 /// segmented addressing, this is the size of the offset portion of the 29 /// address. 30 uint8_t addr_size = 0; 31 /// The size in bytes of a segment descriptor on the target architecture. 32 /// If the target system uses a flat address space, this value is 0. 33 uint8_t seg_size = 0; 34 }; 35 36 struct Descriptor { 37 dw_addr_t address; 38 dw_addr_t length; 39 dw_addr_t end_address() const { return address + length; } 40 }; 41 42 DWARFDebugArangeSet(); 43 void Clear(); 44 void SetOffset(uint32_t offset) { m_offset = offset; } 45 llvm::Error extract(const lldb_private::DWARFDataExtractor &data, 46 lldb::offset_t *offset_ptr); 47 dw_offset_t FindAddress(dw_addr_t address) const; 48 size_t NumDescriptors() const { return m_arange_descriptors.size(); } 49 const Header &GetHeader() const { return m_header; } 50 dw_offset_t GetNextOffset() const { return m_next_offset; } 51 const Descriptor &GetDescriptorRef(uint32_t i) const { 52 return m_arange_descriptors[i]; 53 } 54 55 protected: 56 typedef std::vector<Descriptor> DescriptorColl; 57 typedef DescriptorColl::iterator DescriptorIter; 58 typedef DescriptorColl::const_iterator DescriptorConstIter; 59 60 dw_offset_t m_offset; 61 dw_offset_t m_next_offset; 62 Header m_header; 63 DescriptorColl m_arange_descriptors; 64 }; 65 66 #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGARANGESET_H 67