aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/System
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/System')
-rw-r--r--include/llvm/System/Memory.h56
1 files changed, 33 insertions, 23 deletions
diff --git a/include/llvm/System/Memory.h b/include/llvm/System/Memory.h
index 5b3c884..3b319cb 100644
--- a/include/llvm/System/Memory.h
+++ b/include/llvm/System/Memory.h
@@ -11,38 +11,48 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_SYSTEM_PATH_H
-#define LLVM_SYSTEM_PATH_H
-
-#include <string>
+#ifndef LLVM_SYSTEM_MEMORY_H
+#define LLVM_SYSTEM_MEMORY_H
namespace llvm {
namespace sys {
- /// This class provides an abstraction for various memory handling functions
+ /// This class encapsulates the notion of a memory block which has an address
+ /// and a size. It is used by the Memory class (a friend) as the result of
+ /// various memory allocation operations.
+ /// @see Memory
+ /// @brief Memory block abstraction.
+ class MemoryBlock {
+ public:
+ void* base() const { return Address; }
+ unsigned size() const { return Size; }
+ private:
+ void * Address; ///< Address of first byte of memory area
+ unsigned Size; ///< Size, in bytes of the memory area
+ friend class Memory;
+ };
+
+ /// This class provides various memory handling functions that manipulate
+ /// MemoryBlock instances.
/// @since 1.4
- /// @brief An abstraction for operating system paths.
+ /// @brief An abstraction for memory operations.
class Memory {
/// @name Functions
/// @{
public:
- Memory() { Address = 0; AllocSize = 0; }
- ~Memory() { ReleaseRWX(*this); }
-
- /// @throws std::string if an error occurred
- static void* AllocateRWX(Memory& block, unsigned NumBytes);
-
- /// @throws std::string if an error occurred
- static void ReleaseRWX(Memory& block);
-
- char* base() const { return reinterpret_cast<char*>(Address); }
- unsigned size() const { return AllocSize; }
- /// @}
- /// @name Data
- /// @{
- private:
- void * Address; // Address of first byte of memory area
- unsigned AllocSize; // Size, in bytes of the memory area
+ /// This method allocates a block of Read/Write/Execute memory that is
+ /// suitable for executing dynamically generated code (e.g. JIT). An
+ /// attempt to allocate \p NumBytes bytes of virtual memory is made.
+ /// @throws std::string if an error occurred.
+ /// @brief Allocate Read/Write/Execute memory.
+ static MemoryBlock AllocateRWX(unsigned NumBytes);
+
+ /// This method releases a block of Read/Write/Execute memory that was
+ /// allocated with the AllocateRWX method. It should not be used to release
+ /// any memory block allocated any other way.
+ /// @throws std::string if an error occurred.
+ /// @brief Release Read/Write/Execute memory.
+ static void ReleaseRWX(MemoryBlock& block);
/// @}
};
}