1 //===- DWARFAddressRange.h --------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H
10 #define LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H
12 #include "llvm/DebugInfo/DIContext.h"
21 struct DWARFAddressRange
{
24 uint64_t SectionIndex
;
26 DWARFAddressRange() = default;
28 /// Used for unit testing.
29 DWARFAddressRange(uint64_t LowPC
, uint64_t HighPC
, uint64_t SectionIndex
= 0)
30 : LowPC(LowPC
), HighPC(HighPC
), SectionIndex(SectionIndex
) {}
32 /// Returns true if LowPC is smaller or equal to HighPC. This accounts for
33 /// dead-stripped ranges.
34 bool valid() const { return LowPC
<= HighPC
; }
36 /// Returns true if [LowPC, HighPC) intersects with [RHS.LowPC, RHS.HighPC).
37 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
)
42 return LowPC
< RHS
.HighPC
&& RHS
.LowPC
< HighPC
;
45 /// Returns true if [LowPC, HighPC) fully contains [RHS.LowPC, RHS.HighPC).
46 bool contains(const DWARFAddressRange
&RHS
) const {
47 assert(valid() && RHS
.valid());
48 return LowPC
<= RHS
.LowPC
&& RHS
.HighPC
<= HighPC
;
51 void dump(raw_ostream
&OS
, uint32_t AddressSize
,
52 DIDumpOptions DumpOpts
= {}) const;
55 static inline bool operator<(const DWARFAddressRange
&LHS
,
56 const DWARFAddressRange
&RHS
) {
57 return std::tie(LHS
.LowPC
, LHS
.HighPC
) < std::tie(RHS
.LowPC
, RHS
.HighPC
);
60 raw_ostream
&operator<<(raw_ostream
&OS
, const DWARFAddressRange
&R
);
62 /// DWARFAddressRangesVector - represents a set of absolute address ranges.
63 using DWARFAddressRangesVector
= std::vector
<DWARFAddressRange
>;
65 } // end namespace llvm
67 #endif // LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H