aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/System
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2004-09-13 22:38:11 +0000
committerReid Spencer <rspencer@reidspencer.com>2004-09-13 22:38:11 +0000
commit33189e787b98c79bd03be466ec19dfb2f65eb65f (patch)
tree5a89a9849c359508b329a3cdf9876b33eae45d5d /include/llvm/System
parent2565943289cf53ff1b8dd1dfa13b6068e4d31681 (diff)
downloadexternal_llvm-33189e787b98c79bd03be466ec19dfb2f65eb65f.zip
external_llvm-33189e787b98c79bd03be466ec19dfb2f65eb65f.tar.gz
external_llvm-33189e787b98c79bd03be466ec19dfb2f65eb65f.tar.bz2
Simplify the sys::Memory interface per Chris' request.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16318 91177308-0d34-0410-b5e6-96231b3b80d8
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);
/// @}
};
}