LCOV - code coverage report
Current view: top level - include/llvm/DebugInfo/DWARF - DWARFAddressRange.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 4 4 100.0 %
Date: 2018-07-13 00:08:38 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- DWARFAddressRange.h --------------------------------------*- C++ -*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : 
      10             : #ifndef LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H
      11             : #define LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H
      12             : 
      13             : #include "llvm/DebugInfo/DIContext.h"
      14             : #include <cstdint>
      15             : #include <tuple>
      16             : #include <vector>
      17             : 
      18             : namespace llvm {
      19             : 
      20             : class raw_ostream;
      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(uint64_t LowPC, uint64_t HighPC, uint64_t SectionIndex = 0)
      31        1206 :       : LowPC(LowPC), HighPC(HighPC), SectionIndex(SectionIndex) {}
      32             : 
      33             :   /// Returns true if LowPC is smaller or equal to HighPC. This accounts for
      34             :   /// dead-stripped ranges.
      35             :   bool valid() const { return LowPC <= HighPC; }
      36             : 
      37             :   /// Returns true if [LowPC, HighPC) intersects with [RHS.LowPC, RHS.HighPC).
      38             :   bool intersects(const DWARFAddressRange &RHS) const {
      39             :     assert(valid() && RHS.valid());
      40             :     // Empty ranges can't intersect.
      41         291 :     if (LowPC == HighPC || RHS.LowPC == RHS.HighPC)
      42             :       return false;
      43         284 :     return LowPC < RHS.HighPC && RHS.LowPC < HighPC;
      44             :   }
      45             : 
      46             :   /// Returns true if [LowPC, HighPC) fully contains [RHS.LowPC, RHS.HighPC).
      47             :   bool contains(const DWARFAddressRange &RHS) const {
      48             :     assert(valid() && RHS.valid());
      49          83 :     return LowPC <= RHS.LowPC && RHS.HighPC <= HighPC;
      50             :   }
      51             : 
      52             :   void dump(raw_ostream &OS, uint32_t AddressSize,
      53             :             DIDumpOptions DumpOpts = {}) const;
      54             : };
      55             : 
      56             : static inline bool operator<(const DWARFAddressRange &LHS,
      57             :                              const DWARFAddressRange &RHS) {
      58             :   return std::tie(LHS.LowPC, LHS.HighPC) < std::tie(RHS.LowPC, RHS.HighPC);
      59             : }
      60             : 
      61             : raw_ostream &operator<<(raw_ostream &OS, const DWARFAddressRange &R);
      62             : 
      63             : /// DWARFAddressRangesVector - represents a set of absolute address ranges.
      64             : using DWARFAddressRangesVector = std::vector<DWARFAddressRange>;
      65             : 
      66             : } // end namespace llvm
      67             : 
      68             : #endif // LLVM_DEBUGINFO_DWARF_DWARFADDRESSRANGE_H

Generated by: LCOV version 1.13