From: svenpanne@chromium.org Date: Fri, 12 Apr 2013 11:10:19 +0000 (+0000) Subject: Unified the structure of VirtualMemory implementations across platforms a bit. X-Git-Tag: upstream/4.7.83~14597 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=79a13e63c0c26f37a8314489ff152bd5f8120654;p=platform%2Fupstream%2Fv8.git Unified the structure of VirtualMemory implementations across platforms a bit. This is just shuffling some code around to make comparing the platform files easier. Made cygwin/nullos support a bit more complete on the way. Review URL: https://codereview.chromium.org/14162004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14250 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/platform-cygwin.cc b/src/platform-cygwin.cc index 042b2e5..418a05e 100644 --- a/src/platform-cygwin.cc +++ b/src/platform-cygwin.cc @@ -319,15 +319,11 @@ int OS::StackWalk(Vector frames) { // This causes VirtualMemory::Commit to not always commit the memory region // specified. -bool VirtualMemory::IsReserved() { - return address_ != NULL; -} +VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } -VirtualMemory::VirtualMemory(size_t size) { - address_ = VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS); - size_ = size; -} +VirtualMemory::VirtualMemory(size_t size) + : address_(ReserveRegion(size)), size_(size) { } VirtualMemory::~VirtualMemory() { @@ -337,6 +333,17 @@ VirtualMemory::~VirtualMemory() { } +bool VirtualMemory::IsReserved() { + return address_ != NULL; +} + + +void VirtualMemory::Reset() { + address_ = NULL; + size_ = 0; +} + + bool VirtualMemory::Commit(void* address, size_t size, bool is_executable) { int prot = is_executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE; if (NULL == VirtualAlloc(address, size, MEM_COMMIT, prot)) { @@ -365,6 +372,29 @@ bool VirtualMemory::Guard(void* address) { } +void* VirtualMemory::ReserveRegion(size_t size) { + return VirtualAlloc(NULL, size, MEM_RESERVE, PAGE_NOACCESS); +} + + +bool VirtualMemory::CommitRegion(void* base, size_t size, bool is_executable) { + UNIMPLEMENTED(); + return false; +} + + +bool VirtualMemory::UncommitRegion(void* base, size_t size) { + UNIMPLEMENTED(); + return false; +} + + +bool VirtualMemory::ReleaseRegion(void* base, size_t size) { + UNIMPLEMENTED(); + return false; +} + + bool VirtualMemory::HasLazyCommits() { // TODO(alph): implement for the platform. return false; diff --git a/src/platform-freebsd.cc b/src/platform-freebsd.cc index baab471..e9db66d 100644 --- a/src/platform-freebsd.cc +++ b/src/platform-freebsd.cc @@ -358,12 +358,12 @@ int OS::StackWalk(Vector frames) { static const int kMmapFd = -1; static const int kMmapFdOffset = 0; + VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } -VirtualMemory::VirtualMemory(size_t size) { - address_ = ReserveRegion(size); - size_ = size; -} + +VirtualMemory::VirtualMemory(size_t size) + : address_(ReserveRegion(size)), size_(size) { } VirtualMemory::VirtualMemory(size_t size, size_t alignment) diff --git a/src/platform-linux.cc b/src/platform-linux.cc index af47d05..20d1be9 100644 --- a/src/platform-linux.cc +++ b/src/platform-linux.cc @@ -643,12 +643,12 @@ int OS::StackWalk(Vector frames) { static const int kMmapFd = -1; static const int kMmapFdOffset = 0; + VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } -VirtualMemory::VirtualMemory(size_t size) { - address_ = ReserveRegion(size); - size_ = size; -} + +VirtualMemory::VirtualMemory(size_t size) + : address_(ReserveRegion(size)), size_(size) { } VirtualMemory::VirtualMemory(size_t size, size_t alignment) diff --git a/src/platform-macos.cc b/src/platform-macos.cc index 898c93f..8327acf 100644 --- a/src/platform-macos.cc +++ b/src/platform-macos.cc @@ -408,12 +408,33 @@ VirtualMemory::~VirtualMemory() { } +bool VirtualMemory::IsReserved() { + return address_ != NULL; +} + + void VirtualMemory::Reset() { address_ = NULL; size_ = 0; } +bool VirtualMemory::Commit(void* address, size_t size, bool is_executable) { + return CommitRegion(address, size, is_executable); +} + + +bool VirtualMemory::Uncommit(void* address, size_t size) { + return UncommitRegion(address, size); +} + + +bool VirtualMemory::Guard(void* address) { + OS::Guard(address, OS::CommitPageSize()); + return true; +} + + void* VirtualMemory::ReserveRegion(size_t size) { void* result = mmap(OS::GetRandomMmapAddr(), size, @@ -428,22 +449,6 @@ void* VirtualMemory::ReserveRegion(size_t size) { } -bool VirtualMemory::IsReserved() { - return address_ != NULL; -} - - -bool VirtualMemory::Commit(void* address, size_t size, bool is_executable) { - return CommitRegion(address, size, is_executable); -} - - -bool VirtualMemory::Guard(void* address) { - OS::Guard(address, OS::CommitPageSize()); - return true; -} - - bool VirtualMemory::CommitRegion(void* address, size_t size, bool is_executable) { @@ -462,11 +467,6 @@ bool VirtualMemory::CommitRegion(void* address, } -bool VirtualMemory::Uncommit(void* address, size_t size) { - return UncommitRegion(address, size); -} - - bool VirtualMemory::UncommitRegion(void* address, size_t size) { return mmap(address, size, diff --git a/src/platform-nullos.cc b/src/platform-nullos.cc index 56d12ac..1b481f4 100644 --- a/src/platform-nullos.cc +++ b/src/platform-nullos.cc @@ -317,6 +317,16 @@ int OS::StackWalk(Vector frames) { } +VirtualMemory::VirtualMemory() { + UNIMPLEMENTED(); +} + + +VirtualMemory::VirtualMemory(size_t size) { + UNIMPLEMENTED(); +} + + VirtualMemory::VirtualMemory(size_t size, void* address_hint) { UNIMPLEMENTED(); } @@ -333,6 +343,11 @@ bool VirtualMemory::IsReserved() { } +void VirtualMemory::Reset() { + UNIMPLEMENTED(); +} + + bool VirtualMemory::Commit(void* address, size_t size, bool executable) { UNIMPLEMENTED(); return false; @@ -351,6 +366,30 @@ bool VirtualMemory::Guard(void* address) { } +void* VirtualMemory::ReserveRegion(size_t size) { + UNIMPLEMENTED(); + return NULL; +} + + +bool VirtualMemory::CommitRegion(void* base, size_t size, bool is_executable) { + UNIMPLEMENTED(); + return false; +} + + +bool VirtualMemory::UncommitRegion(void* base, size_t size) { + UNIMPLEMENTED(); + return false; +} + + +bool VirtualMemory::ReleaseRegion(void* base, size_t size) { + UNIMPLEMENTED(); + return false; +} + + bool VirtualMemory::HasLazyCommits() { // TODO(alph): implement for the platform. return false; diff --git a/src/platform-openbsd.cc b/src/platform-openbsd.cc index aca03be..4c29023 100644 --- a/src/platform-openbsd.cc +++ b/src/platform-openbsd.cc @@ -386,12 +386,12 @@ int OS::StackWalk(Vector frames) { static const int kMmapFd = -1; static const int kMmapFdOffset = 0; + VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } -VirtualMemory::VirtualMemory(size_t size) { - address_ = ReserveRegion(size); - size_ = size; -} + +VirtualMemory::VirtualMemory(size_t size) + : address_(ReserveRegion(size)), size_(size) { } VirtualMemory::VirtualMemory(size_t size, size_t alignment) diff --git a/src/platform-solaris.cc b/src/platform-solaris.cc index 392e73a..f2477eb 100644 --- a/src/platform-solaris.cc +++ b/src/platform-solaris.cc @@ -328,10 +328,9 @@ static const int kMmapFdOffset = 0; VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } -VirtualMemory::VirtualMemory(size_t size) { - address_ = ReserveRegion(size); - size_ = size; -} + +VirtualMemory::VirtualMemory(size_t size) + : address_(ReserveRegion(size)), size_(size) { } VirtualMemory::VirtualMemory(size_t size, size_t alignment) diff --git a/src/platform-win32.cc b/src/platform-win32.cc index da2b741..f4097f7 100644 --- a/src/platform-win32.cc +++ b/src/platform-win32.cc @@ -1518,7 +1518,7 @@ VirtualMemory::VirtualMemory(size_t size, size_t alignment) VirtualMemory::~VirtualMemory() { if (IsReserved()) { - bool result = ReleaseRegion(address_, size_); + bool result = ReleaseRegion(address(), size()); ASSERT(result); USE(result); } @@ -1551,6 +1551,17 @@ bool VirtualMemory::Uncommit(void* address, size_t size) { } +bool VirtualMemory::Guard(void* address) { + if (NULL == VirtualAlloc(address, + OS::CommitPageSize(), + MEM_COMMIT, + PAGE_READONLY | PAGE_GUARD)) { + return false; + } + return true; +} + + void* VirtualMemory::ReserveRegion(size_t size) { return RandomizedVirtualAlloc(size, MEM_RESERVE, PAGE_NOACCESS); } @@ -1567,17 +1578,6 @@ bool VirtualMemory::CommitRegion(void* base, size_t size, bool is_executable) { } -bool VirtualMemory::Guard(void* address) { - if (NULL == VirtualAlloc(address, - OS::CommitPageSize(), - MEM_COMMIT, - PAGE_READONLY | PAGE_GUARD)) { - return false; - } - return true; -} - - bool VirtualMemory::UncommitRegion(void* base, size_t size) { return VirtualFree(base, size, MEM_DECOMMIT) != 0; }