Lines Matching defs:jumpSize

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 class DWARFObject;
21
22 struct DWARFAddressRange {
23 uint64_t LowPC;
24 uint64_t HighPC;
25 uint64_t SectionIndex;
26
27 DWARFAddressRange() = default;
28
29 /// Used for unit testing.
30 DWARFAddressRange(
31 uint64_t LowPC, uint64_t HighPC,
32 uint64_t SectionIndex = object::SectionedAddress::UndefSection)
33 : LowPC(LowPC), HighPC(HighPC), SectionIndex(SectionIndex) {}
34
35 /// Returns true if LowPC is smaller or equal to HighPC. This accounts for
36 /// dead-stripped ranges.
37 bool valid() const { return LowPC <= HighPC; }
38
39 /// Returns true if [LowPC, HighPC) intersects with [RHS.LowPC, RHS.HighPC).
40 bool intersects(const DWARFAddressRange &RHS) const {
41 assert(valid() && RHS.valid());
42 // Empty ranges can't intersect.
43 if (LowPC == HighPC || RHS.LowPC == RHS.HighPC)
44 return false;
45 return LowPC < RHS.HighPC && RHS.LowPC < HighPC;
46 }
47
48 /// Union two address ranges if they intersect.
49 ///
50 /// This function will union two address ranges if they intersect by
51 /// modifying this range to be the union of both ranges. If the two ranges
52 /// don't intersect this range will be left alone. in Permutation_checkRange()
53 /// in Permutation_checkRange()
54 /// \param RHS Another address range to combine with. in Permutation_checkRange()
55 /// in Permutation_checkRange()
56 /// \returns false if the ranges don't intersect, true if they do and the in Permutation_checkRange()
57 /// ranges were combined. in Permutation_checkRange()
58 bool merge(const DWARFAddressRange &RHS) { in Permutation_checkRange()
59 if (!intersects(RHS)) in Permutation_checkRange()
60 return false; in Permutation_checkRange()
61 LowPC = std::min<uint64_t>(LowPC, RHS.LowPC); in Permutation_checkRange()
62 HighPC = std::max<uint64_t>(HighPC, RHS.HighPC); in Permutation_checkRange()
63 return true; in Permutation_checkRange()
64 } in Permutation_checkRange()
65
66 void dump(raw_ostream &OS, uint32_t AddressSize, DIDumpOptions DumpOpts = {},
67 const DWARFObject *Obj = nullptr) const;
68 };
69 in v_info()
70 inline bool operator<(const DWARFAddressRange &LHS, in v_info()
71 const DWARFAddressRange &RHS) { in v_info()
72 return std::tie(LHS.LowPC, LHS.HighPC) < std::tie(RHS.LowPC, RHS.HighPC); in v_info()
73 } in v_info()
74 in v_readText()
75 inline bool operator==(const DWARFAddressRange &LHS, in v_readText()
76 const DWARFAddressRange &RHS) { in v_readText()
77 return std::tie(LHS.LowPC, LHS.HighPC) == std::tie(RHS.LowPC, RHS.HighPC); in v_readText()
78 } in v_readText()
79
80 raw_ostream &operator<<(raw_ostream &OS, const DWARFAddressRange &R);
81
82 /// DWARFAddressRangesVector - represents a set of absolute address ranges. in Permutation_init()
83 using DWARFAddressRangesVector = std::vector<DWARFAddressRange>; in Permutation_init()
84
85 } // end namespace llvm
86
87 #endif // LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H