summaryrefslogtreecommitdiff
path: root/include/lldb/Core/AddressRange.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Core/AddressRange.h')
-rw-r--r--include/lldb/Core/AddressRange.h130
1 files changed, 47 insertions, 83 deletions
diff --git a/include/lldb/Core/AddressRange.h b/include/lldb/Core/AddressRange.h
index e3c820782aafa..4a019bfcfc3f4 100644
--- a/include/lldb/Core/AddressRange.h
+++ b/include/lldb/Core/AddressRange.h
@@ -1,9 +1,8 @@
//===-- AddressRange.h ------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
@@ -18,179 +17,159 @@
namespace lldb_private {
class SectionList;
-}
-namespace lldb_private {
class Stream;
-}
-namespace lldb_private {
class Target;
-}
-
-namespace lldb_private {
-//----------------------------------------------------------------------
-/// @class AddressRange AddressRange.h "lldb/Core/AddressRange.h"
+/// \class AddressRange AddressRange.h "lldb/Core/AddressRange.h"
/// A section + offset based address range class.
-//----------------------------------------------------------------------
class AddressRange {
public:
- //------------------------------------------------------------------
/// Default constructor.
///
/// Initialize with a invalid section (NULL), an invalid offset
/// (LLDB_INVALID_ADDRESS), and zero byte size.
- //------------------------------------------------------------------
AddressRange();
- //------------------------------------------------------------------
/// Construct with a section pointer, offset, and byte_size.
///
/// Initialize the address with the supplied \a section, \a offset and \a
/// byte_size.
///
- /// @param[in] section
+ /// \param[in] section
/// A section pointer to a valid lldb::Section, or NULL if the
/// address doesn't have a section or will get resolved later.
///
- /// @param[in] offset
+ /// \param[in] offset
/// The offset in bytes into \a section.
///
- /// @param[in] byte_size
+ /// \param[in] byte_size
/// The size in bytes of the address range.
- //------------------------------------------------------------------
AddressRange(const lldb::SectionSP &section, lldb::addr_t offset,
lldb::addr_t byte_size);
- //------------------------------------------------------------------
/// Construct with a virtual address, section list and byte size.
///
/// Initialize and resolve the address with the supplied virtual address \a
/// file_addr, and byte size \a byte_size.
///
- /// @param[in] file_addr
+ /// \param[in] file_addr
/// A virtual address.
///
- /// @param[in] byte_size
+ /// \param[in] byte_size
/// The size in bytes of the address range.
///
- /// @param[in] section_list
+ /// \param[in] section_list
/// A list of sections, one of which may contain the \a vaddr.
- //------------------------------------------------------------------
AddressRange(lldb::addr_t file_addr, lldb::addr_t byte_size,
const SectionList *section_list = nullptr);
- //------------------------------------------------------------------
/// Construct with a Address object address and byte size.
///
/// Initialize by copying the section offset address in \a so_addr, and
/// setting the byte size to \a byte_size.
///
- /// @param[in] so_addr
+ /// \param[in] so_addr
/// A section offset address object.
///
- /// @param[in] byte_size
+ /// \param[in] byte_size
/// The size in bytes of the address range.
- //------------------------------------------------------------------
AddressRange(const Address &so_addr, lldb::addr_t byte_size);
- //------------------------------------------------------------------
/// Destructor.
///
/// The destructor is virtual in case this class is subclassed.
- //------------------------------------------------------------------
~AddressRange();
- //------------------------------------------------------------------
/// Clear the object's state.
///
/// Sets the section to an invalid value (NULL), an invalid offset
/// (LLDB_INVALID_ADDRESS) and a zero byte size.
- //------------------------------------------------------------------
void Clear();
- //------------------------------------------------------------------
/// Check if a section offset address is contained in this range.
///
- /// @param[in] so_addr
+ /// \param[in] so_addr
/// A section offset address object reference.
///
- /// @return
+ /// \return
/// Returns \b true if \a so_addr is contained in this range,
/// \b false otherwise.
- //------------------------------------------------------------------
// bool
// Contains (const Address &so_addr) const;
- //------------------------------------------------------------------
/// Check if a section offset address is contained in this range.
///
- /// @param[in] so_addr_ptr
+ /// \param[in] so_addr_ptr
/// A section offset address object pointer.
///
- /// @return
+ /// \return
/// Returns \b true if \a so_addr is contained in this range,
/// \b false otherwise.
- //------------------------------------------------------------------
// bool
// Contains (const Address *so_addr_ptr) const;
- //------------------------------------------------------------------
/// Check if a section offset \a so_addr when represented as a file address
/// is contained within this object's file address range.
///
- /// @param[in] so_addr
+ /// \param[in] so_addr
/// A section offset address object reference.
///
- /// @return
+ /// \return
/// Returns \b true if both \a this and \a so_addr have
/// resolvable file address values and \a so_addr is contained
/// in the address range, \b false otherwise.
- //------------------------------------------------------------------
bool ContainsFileAddress(const Address &so_addr) const;
- //------------------------------------------------------------------
/// Check if the resolved file address \a file_addr is contained within this
/// object's file address range.
///
- /// @param[in] so_addr
+ /// \param[in] so_addr
/// A section offset address object reference.
///
- /// @return
+ /// \return
/// Returns \b true if both \a this has a resolvable file
/// address value and \a so_addr is contained in the address
/// range, \b false otherwise.
- //------------------------------------------------------------------
bool ContainsFileAddress(lldb::addr_t file_addr) const;
- //------------------------------------------------------------------
/// Check if a section offset \a so_addr when represented as a load address
/// is contained within this object's load address range.
///
- /// @param[in] so_addr
+ /// \param[in] so_addr
/// A section offset address object reference.
///
- /// @return
+ /// \return
/// Returns \b true if both \a this and \a so_addr have
/// resolvable load address values and \a so_addr is contained
/// in the address range, \b false otherwise.
- //------------------------------------------------------------------
bool ContainsLoadAddress(const Address &so_addr, Target *target) const;
- //------------------------------------------------------------------
/// Check if the resolved load address \a load_addr is contained within this
/// object's load address range.
///
- /// @param[in] so_addr
+ /// \param[in] so_addr
/// A section offset address object reference.
///
- /// @return
+ /// \return
/// Returns \b true if both \a this has a resolvable load
/// address value and \a so_addr is contained in the address
/// range, \b false otherwise.
- //------------------------------------------------------------------
bool ContainsLoadAddress(lldb::addr_t load_addr, Target *target) const;
//------------------------------------------------------------------
+ /// Extends this range with \b rhs_range if it overlaps this range on the
+ /// right side. The range overlaps on the right side if the base address
+ /// of \b rhs_range lies within this range or if it's contiguous on its
+ /// right side.
+ ///
+ /// @param[in] rhs_range
+ /// The range to extend at the right side.
+ ///
+ /// @return
+ /// Returns \b true if this range was extended, \b false otherwise.
+ //------------------------------------------------------------------
+ bool Extend(const AddressRange &rhs_range);
+
/// Dump a description of this object to a Stream.
///
/// Dump a description of the contents of this object to the supplied stream
@@ -198,25 +177,23 @@ public:
/// range, and \a style lets the user choose how the base address gets
/// displayed.
///
- /// @param[in] s
+ /// \param[in] s
/// The stream to which to dump the object description.
///
- /// @param[in] style
+ /// \param[in] style
/// The display style for the address.
///
- /// @return
+ /// \return
/// Returns \b true if the address was able to be displayed.
/// File and load addresses may be unresolved and it may not be
/// possible to display a valid value, \b false will be returned
/// in such cases.
///
- /// @see Address::DumpStyle
- //------------------------------------------------------------------
+ /// \see Address::DumpStyle
bool
Dump(Stream *s, Target *target, Address::DumpStyle style,
Address::DumpStyle fallback_style = Address::DumpStyleInvalid) const;
- //------------------------------------------------------------------
/// Dump a debug description of this object to a Stream.
///
/// Dump a debug description of the contents of this object to the supplied
@@ -225,59 +202,46 @@ public:
/// The debug description contains verbose internal state such and pointer
/// values, reference counts, etc.
///
- /// @param[in] s
+ /// \param[in] s
/// The stream to which to dump the object description.
- //------------------------------------------------------------------
void DumpDebug(Stream *s) const;
- //------------------------------------------------------------------
/// Get accessor for the base address of the range.
///
- /// @return
+ /// \return
/// A reference to the base address object.
- //------------------------------------------------------------------
Address &GetBaseAddress() { return m_base_addr; }
- //------------------------------------------------------------------
/// Get const accessor for the base address of the range.
///
- /// @return
+ /// \return
/// A const reference to the base address object.
- //------------------------------------------------------------------
const Address &GetBaseAddress() const { return m_base_addr; }
- //------------------------------------------------------------------
/// Get accessor for the byte size of this range.
///
- /// @return
+ /// \return
/// The size in bytes of this address range.
- //------------------------------------------------------------------
lldb::addr_t GetByteSize() const { return m_byte_size; }
- //------------------------------------------------------------------
/// Get the memory cost of this object.
///
- /// @return
+ /// \return
/// The number of bytes that this object occupies in memory.
- //------------------------------------------------------------------
size_t MemorySize() const {
// Noting special for the memory size of a single AddressRange object, it
// is just the size of itself.
return sizeof(AddressRange);
}
- //------------------------------------------------------------------
/// Set accessor for the byte size of this range.
///
- /// @param[in] byte_size
+ /// \param[in] byte_size
/// The new size in bytes of this address range.
- //------------------------------------------------------------------
void SetByteSize(lldb::addr_t byte_size) { m_byte_size = byte_size; }
protected:
- //------------------------------------------------------------------
// Member variables
- //------------------------------------------------------------------
Address m_base_addr; ///< The section offset base address of this range.
lldb::addr_t m_byte_size; ///< The size in bytes of this address range.
};