1 //===- DWARFAddressRange.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 LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H 10 #define LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H 11 12 #include "llvm/DebugInfo/DIContext.h" 13 #include <cstdint> 14 #include <tuple> 15 #include <vector> 16 17 namespace llvm { 18 19 class raw_ostream; 20 21 struct DWARFAddressRange { 22 uint64_t LowPC; 23 uint64_t HighPC; 24 uint64_t SectionIndex; 25 26 DWARFAddressRange() = default; 27 28 /// Used for unit testing. 29 DWARFAddressRange(uint64_t LowPC, uint64_t HighPC, uint64_t SectionIndex = 0) LowPCDWARFAddressRange30 : LowPC(LowPC), HighPC(HighPC), SectionIndex(SectionIndex) {} 31 32 /// Returns true if LowPC is smaller or equal to HighPC. This accounts for 33 /// dead-stripped ranges. validDWARFAddressRange34 bool valid() const { return LowPC <= HighPC; } 35 36 /// Returns true if [LowPC, HighPC) intersects with [RHS.LowPC, RHS.HighPC). intersectsDWARFAddressRange37 bool intersects(const DWARFAddressRange &RHS) const { 38 assert(valid() && RHS.valid()); 39 // Empty ranges can't intersect. 40 if (LowPC == HighPC || RHS.LowPC == RHS.HighPC) 41 return false; 42 return LowPC < RHS.HighPC && RHS.LowPC < HighPC; 43 } 44 45 void dump(raw_ostream &OS, uint32_t AddressSize, 46 DIDumpOptions DumpOpts = {}) const; 47 }; 48 49 static inline bool operator<(const DWARFAddressRange &LHS, 50 const DWARFAddressRange &RHS) { 51 return std::tie(LHS.LowPC, LHS.HighPC) < std::tie(RHS.LowPC, RHS.HighPC); 52 } 53 54 raw_ostream &operator<<(raw_ostream &OS, const DWARFAddressRange &R); 55 56 /// DWARFAddressRangesVector - represents a set of absolute address ranges. 57 using DWARFAddressRangesVector = std::vector<DWARFAddressRange>; 58 59 } // end namespace llvm 60 61 #endif // LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H 62