]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Core/DataBufferMemoryMap.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Core / DataBufferMemoryMap.h
1 //===-- DataBufferMemoryMap.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 liblldb_DataBufferMemoryMap_h_
11 #define liblldb_DataBufferMemoryMap_h_
12 #if defined(__cplusplus)
13
14
15 #include "lldb/lldb-private.h"
16 #include "lldb/Core/DataBuffer.h"
17 #include "lldb/Core/Error.h"
18 #include <string>
19
20 namespace lldb_private {
21
22 //----------------------------------------------------------------------
23 /// @class DataBufferMemoryMap DataBufferMemoryMap.h "lldb/Core/DataBufferMemoryMap.h"
24 /// @brief A subclass of DataBuffer that memory maps data.
25 ///
26 /// This class memory maps data and stores any needed data for the
27 /// memory mapping in its internal state. Memory map requests are not
28 /// required to have any alignment or size constraints, this class will
29 /// work around any host OS issues regarding such things.
30 ///
31 /// This class is designed to allow pages to be faulted in as needed and
32 /// works well data from large files that won't be accessed all at once.
33 //----------------------------------------------------------------------
34 class DataBufferMemoryMap : public DataBuffer
35 {
36 public:
37     //------------------------------------------------------------------
38     /// Default Constructor
39     //------------------------------------------------------------------
40     DataBufferMemoryMap ();
41
42     //------------------------------------------------------------------
43     /// Destructor.
44     ///
45     /// Virtual destructor since this class inherits from a pure virtual
46     /// base class #DataBuffer.
47     //------------------------------------------------------------------
48     virtual
49     ~DataBufferMemoryMap ();
50
51     //------------------------------------------------------------------
52     /// Reverts this object to an empty state by unmapping any memory
53     /// that is currently owned.
54     //------------------------------------------------------------------
55     void
56     Clear ();
57
58     //------------------------------------------------------------------
59     /// @copydoc DataBuffer::GetBytes()
60     //------------------------------------------------------------------
61     virtual uint8_t *
62     GetBytes ();
63
64     //------------------------------------------------------------------
65     /// @copydoc DataBuffer::GetBytes() const
66     //------------------------------------------------------------------
67     virtual const uint8_t *
68     GetBytes () const;
69
70     //------------------------------------------------------------------
71     /// @copydoc DataBuffer::GetByteSize() const
72     //------------------------------------------------------------------
73     virtual lldb::offset_t
74     GetByteSize () const;
75
76     //------------------------------------------------------------------
77     /// Error get accessor.
78     ///
79     /// @return
80     ///     A const reference to Error object in case memory mapping
81     ///     fails.
82     //------------------------------------------------------------------
83     const Error &
84     GetError() const;
85
86     //------------------------------------------------------------------
87     /// Memory map all or part of a file.
88     ///
89     /// Memory map \a length bytes from \a file starting \a offset
90     /// bytes into the file. If \a length is set to \c SIZE_MAX,
91     /// then map as many bytes as possible.
92     ///
93     /// @param[in] file
94     ///     The file specification from which to map data.
95     ///
96     /// @param[in] offset
97     ///     The offset in bytes from the beginning of the file where
98     ///     memory mapping should begin.
99     ///
100     /// @param[in] length
101     ///     The size in bytes that should be mapped starting \a offset
102     ///     bytes into the file. If \a length is \c SIZE_MAX, map
103     ///     as many bytes as possible.
104     ///
105     /// @return
106     ///     The number of bytes mapped starting from the \a offset.
107     //------------------------------------------------------------------
108     size_t
109     MemoryMapFromFileSpec (const FileSpec* file,
110                            lldb::offset_t offset = 0,
111                            lldb::offset_t length = SIZE_MAX,
112                            bool writeable = false);
113
114     //------------------------------------------------------------------
115     /// Memory map all or part of a file.
116     ///
117     /// Memory map \a length bytes from an opened file descriptor \a fd
118     /// starting \a offset bytes into the file. If \a length is set to
119     /// \c SIZE_MAX, then map as many bytes as possible.
120     ///
121     /// @param[in] fd
122     ///     The posix file descriptor for an already opened file
123     ///     from which to map data.
124     ///
125     /// @param[in] offset
126     ///     The offset in bytes from the beginning of the file where
127     ///     memory mapping should begin.
128     ///
129     /// @param[in] length
130     ///     The size in bytes that should be mapped starting \a offset
131     ///     bytes into the file. If \a length is \c SIZE_MAX, map
132     ///     as many bytes as possible.
133     ///
134     /// @return
135     ///     The number of bytes mapped starting from the \a offset.
136     //------------------------------------------------------------------
137     size_t
138     MemoryMapFromFileDescriptor (int fd, 
139                                  lldb::offset_t offset,
140                                  lldb::offset_t length,
141                                  bool write,
142                                  bool fd_is_file);
143
144 protected:
145     //------------------------------------------------------------------
146     // Classes that inherit from DataBufferMemoryMap can see and modify these
147     //------------------------------------------------------------------
148     uint8_t * m_mmap_addr;  ///< The actual pointer that was returned from \c mmap()
149     size_t m_mmap_size;     ///< The actual number of bytes that were mapped when \c mmap() was called
150     uint8_t *m_data;        ///< The data the user requested somewhere within the memory mapped data.
151     lldb::offset_t m_size;  ///< The size of the data the user got when data was requested
152
153 private:
154     DISALLOW_COPY_AND_ASSIGN (DataBufferMemoryMap);
155 };
156
157 } // namespace lldb_private
158
159 #endif  // #if defined(__cplusplus)
160 #endif  // liblldb_DataBufferMemoryMap_h_