124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- AddressRange.h ------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_AddressRange_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_AddressRange_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Address.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class AddressRange AddressRange.h "lldb/Core/AddressRange.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A section + offset based address range class.
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass AddressRange
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Default constructor.
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Initialize with a invalid section (NULL), an invalid
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// offset (LLDB_INVALID_ADDRESS), and zero byte size.
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddressRange ();
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Construct with a section pointer, offset, and byte_size.
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Initialize the address with the supplied \a section, \a
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// offset and \a byte_size.
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] section
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section pointer to a valid lldb::Section, or NULL if the
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     address doesn't have a section or will get resolved later.
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] offset
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The offset in bytes into \a section.
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] byte_size
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The size in bytes of the address range.
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
483508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton    AddressRange (const lldb::SectionSP &section, lldb::addr_t offset, lldb::addr_t byte_size);
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Construct with a virtual address, section list and byte size.
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Initialize and resolve the address with the supplied virtual
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// address \a file_addr, and byte size \a byte_size.
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] file_addr
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A virtual address.
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] byte_size
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The size in bytes of the address range.
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] section_list
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A list of sections, one of which may contain the \a vaddr.
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddressRange (lldb::addr_t file_addr, lldb::addr_t byte_size, const SectionList *section_list = NULL);
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Construct with a Address object address and byte size.
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Initialize by copying the section offset address in \a so_addr,
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// and setting the byte size to \a byte_size.
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] so_addr
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section offset address object.
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] byte_size
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The size in bytes of the address range.
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    AddressRange (const Address& so_addr, lldb::addr_t byte_size);
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Destructor.
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// The destructor is virtual in case this class is subclassed.
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~AddressRange ();
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Clear the object's state.
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Sets the section to an invalid value (NULL), an invalid offset
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// (LLDB_INVALID_ADDRESS) and a zero byte size.
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear ();
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Check if a section offset address is contained in this range.
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] so_addr
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section offset address object reference.
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if \a so_addr is contained in this range,
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \b false otherwise.
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    bool
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    Contains (const Address &so_addr) const;
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Check if a section offset address is contained in this range.
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] so_addr_ptr
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section offset address object pointer.
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if \a so_addr is contained in this range,
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     \b false otherwise.
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    bool
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//    Contains (const Address *so_addr_ptr) const;
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Check if a section offset \a so_addr when represented as a file
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// address is contained within this object's file address range.
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] so_addr
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section offset address object reference.
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if both \a this and \a so_addr have
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     resolvable file address values and \a so_addr is contained
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     in the address range, \b false otherwise.
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ContainsFileAddress (const Address &so_addr) const;
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Check if the resolved file address \a file_addr is contained
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// within this object's file address range.
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] so_addr
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section offset address object reference.
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if both \a this has a resolvable file
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     address value and \a so_addr is contained in the address
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     range, \b false otherwise.
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ContainsFileAddress (lldb::addr_t file_addr) const;
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Check if a section offset \a so_addr when represented as a load
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// address is contained within this object's load address range.
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] so_addr
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section offset address object reference.
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if both \a this and \a so_addr have
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     resolvable load address values and \a so_addr is contained
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     in the address range, \b false otherwise.
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
166eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton    ContainsLoadAddress (const Address &so_addr, Target *target) const;
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Check if the resolved load address \a load_addr is contained
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// within this object's load address range.
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] so_addr
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A section offset address object reference.
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if both \a this has a resolvable load
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     address value and \a so_addr is contained in the address
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     range, \b false otherwise.
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
181eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton    ContainsLoadAddress (lldb::addr_t load_addr, Target *target) const;
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a description of this object to a Stream.
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a description of the contents of this object to the
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// supplied stream \a s. There are many ways to display a section
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// offset based address range, and \a style lets the user choose
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// how the base address gets displayed.
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] s
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The stream to which to dump the object descripton.
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] style
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The display style for the address.
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if the address was able to be displayed.
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     File and load addresses may be unresolved and it may not be
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     possible to display a valid value, \b false will be returned
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     in such cases.
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see Address::DumpStyle
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
206eea264007bc5fb42c8f3239726a9d28ae42e1b7bGreg Clayton    Dump (Stream *s, Target *target, Address::DumpStyle style, Address::DumpStyle fallback_style = Address::DumpStyleInvalid) const;
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a debug description of this object to a Stream.
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Dump a debug description of the contents of this object to the
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// supplied stream \a s.
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// The debug description contains verbose internal state such
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// and pointer values, reference counts, etc.
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] s
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The stream to which to dump the object descripton.
21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DumpDebug (Stream *s) const;
22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get accessor for the base address of the range.
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A reference to the base address object.
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Address &
230f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer    GetBaseAddress() { return m_base_addr; }
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get const accessor for the base address of the range.
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A const reference to the base address object.
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const Address &
239f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer    GetBaseAddress() const { return m_base_addr; }
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get accessor for the byte size of this range.
24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The size in bytes of this address range.
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t
248f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer    GetByteSize () const { return m_byte_size; }
24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Get the memory cost of this object.
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of bytes that this object occupies in memory.
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
257f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer    MemorySize () const {
258f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer        // Noting special for the memory size of a single AddressRange object,
259f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer        // it is just the size of itself.
260f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer        return sizeof(AddressRange);
261f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer    }
26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Set accessor for the byte size of this range.
26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] byte_size
26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The new size in bytes of this address range.
26824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
270f9a232b8befaf0e1584906ed7b862d64b6fedb6dBenjamin Kramer    SetByteSize (lldb::addr_t byte_size) { m_byte_size = byte_size; }
27124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
27224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Member variables
27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Address m_base_addr;    ///< The section offset base address of this range.
27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::addr_t  m_byte_size;    ///< The size in bytes of this address range.
27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//bool operator== (const AddressRange& lhs, const AddressRange& rhs);
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_AddressRange_h_
285