| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Platform-specific code for Cygwin goes here. For the POSIX-compatible | 5 // Platform-specific code for Cygwin goes here. For the POSIX-compatible |
| 6 // parts, the implementation is in platform-posix.cc. | 6 // parts, the implementation is in platform-posix.cc. |
| 7 | 7 |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <pthread.h> | 9 #include <pthread.h> |
| 10 #include <semaphore.h> | 10 #include <semaphore.h> |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 time_t tv = static_cast<time_t>(std::floor(time/msPerSecond)); | 31 time_t tv = static_cast<time_t>(std::floor(time/msPerSecond)); |
| 32 struct tm* t = localtime(&tv); | 32 struct tm* t = localtime(&tv); |
| 33 if (NULL == t) return ""; | 33 if (NULL == t) return ""; |
| 34 return tzname[0]; // The location of the timezone string on Cygwin. | 34 return tzname[0]; // The location of the timezone string on Cygwin. |
| 35 } | 35 } |
| 36 | 36 |
| 37 | 37 |
| 38 double OS::LocalTimeOffset(TimezoneCache* cache) { | 38 double OS::LocalTimeOffset(TimezoneCache* cache) { |
| 39 // On Cygwin, struct tm does not contain a tm_gmtoff field. | 39 // On Cygwin, struct tm does not contain a tm_gmtoff field. |
| 40 time_t utc = time(NULL); | 40 time_t utc = time(NULL); |
| 41 ASSERT(utc != -1); | 41 DCHECK(utc != -1); |
| 42 struct tm* loc = localtime(&utc); | 42 struct tm* loc = localtime(&utc); |
| 43 ASSERT(loc != NULL); | 43 DCHECK(loc != NULL); |
| 44 // time - localtime includes any daylight savings offset, so subtract it. | 44 // time - localtime includes any daylight savings offset, so subtract it. |
| 45 return static_cast<double>((mktime(loc) - utc) * msPerSecond - | 45 return static_cast<double>((mktime(loc) - utc) * msPerSecond - |
| 46 (loc->tm_isdst > 0 ? 3600 * msPerSecond : 0)); | 46 (loc->tm_isdst > 0 ? 3600 * msPerSecond : 0)); |
| 47 } | 47 } |
| 48 | 48 |
| 49 | 49 |
| 50 void* OS::Allocate(const size_t requested, | 50 void* OS::Allocate(const size_t requested, |
| 51 size_t* allocated, | 51 size_t* allocated, |
| 52 bool is_executable) { | 52 bool is_executable) { |
| 53 const size_t msize = RoundUp(requested, sysconf(_SC_PAGESIZE)); | 53 const size_t msize = RoundUp(requested, sysconf(_SC_PAGESIZE)); |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 | 198 |
| 199 VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } | 199 VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } |
| 200 | 200 |
| 201 | 201 |
| 202 VirtualMemory::VirtualMemory(size_t size) | 202 VirtualMemory::VirtualMemory(size_t size) |
| 203 : address_(ReserveRegion(size)), size_(size) { } | 203 : address_(ReserveRegion(size)), size_(size) { } |
| 204 | 204 |
| 205 | 205 |
| 206 VirtualMemory::VirtualMemory(size_t size, size_t alignment) | 206 VirtualMemory::VirtualMemory(size_t size, size_t alignment) |
| 207 : address_(NULL), size_(0) { | 207 : address_(NULL), size_(0) { |
| 208 ASSERT(IsAligned(alignment, static_cast<intptr_t>(OS::AllocateAlignment()))); | 208 DCHECK(IsAligned(alignment, static_cast<intptr_t>(OS::AllocateAlignment()))); |
| 209 size_t request_size = RoundUp(size + alignment, | 209 size_t request_size = RoundUp(size + alignment, |
| 210 static_cast<intptr_t>(OS::AllocateAlignment())); | 210 static_cast<intptr_t>(OS::AllocateAlignment())); |
| 211 void* address = ReserveRegion(request_size); | 211 void* address = ReserveRegion(request_size); |
| 212 if (address == NULL) return; | 212 if (address == NULL) return; |
| 213 uint8_t* base = RoundUp(static_cast<uint8_t*>(address), alignment); | 213 uint8_t* base = RoundUp(static_cast<uint8_t*>(address), alignment); |
| 214 // Try reducing the size by freeing and then reallocating a specific area. | 214 // Try reducing the size by freeing and then reallocating a specific area. |
| 215 bool result = ReleaseRegion(address, request_size); | 215 bool result = ReleaseRegion(address, request_size); |
| 216 USE(result); | 216 USE(result); |
| 217 ASSERT(result); | 217 DCHECK(result); |
| 218 address = VirtualAlloc(base, size, MEM_RESERVE, PAGE_NOACCESS); | 218 address = VirtualAlloc(base, size, MEM_RESERVE, PAGE_NOACCESS); |
| 219 if (address != NULL) { | 219 if (address != NULL) { |
| 220 request_size = size; | 220 request_size = size; |
| 221 ASSERT(base == static_cast<uint8_t*>(address)); | 221 DCHECK(base == static_cast<uint8_t*>(address)); |
| 222 } else { | 222 } else { |
| 223 // Resizing failed, just go with a bigger area. | 223 // Resizing failed, just go with a bigger area. |
| 224 address = ReserveRegion(request_size); | 224 address = ReserveRegion(request_size); |
| 225 if (address == NULL) return; | 225 if (address == NULL) return; |
| 226 } | 226 } |
| 227 address_ = address; | 227 address_ = address; |
| 228 size_ = request_size; | 228 size_ = request_size; |
| 229 } | 229 } |
| 230 | 230 |
| 231 | 231 |
| 232 VirtualMemory::~VirtualMemory() { | 232 VirtualMemory::~VirtualMemory() { |
| 233 if (IsReserved()) { | 233 if (IsReserved()) { |
| 234 bool result = ReleaseRegion(address_, size_); | 234 bool result = ReleaseRegion(address_, size_); |
| 235 ASSERT(result); | 235 DCHECK(result); |
| 236 USE(result); | 236 USE(result); |
| 237 } | 237 } |
| 238 } | 238 } |
| 239 | 239 |
| 240 | 240 |
| 241 bool VirtualMemory::IsReserved() { | 241 bool VirtualMemory::IsReserved() { |
| 242 return address_ != NULL; | 242 return address_ != NULL; |
| 243 } | 243 } |
| 244 | 244 |
| 245 | 245 |
| 246 void VirtualMemory::Reset() { | 246 void VirtualMemory::Reset() { |
| 247 address_ = NULL; | 247 address_ = NULL; |
| 248 size_ = 0; | 248 size_ = 0; |
| 249 } | 249 } |
| 250 | 250 |
| 251 | 251 |
| 252 bool VirtualMemory::Commit(void* address, size_t size, bool is_executable) { | 252 bool VirtualMemory::Commit(void* address, size_t size, bool is_executable) { |
| 253 return CommitRegion(address, size, is_executable); | 253 return CommitRegion(address, size, is_executable); |
| 254 } | 254 } |
| 255 | 255 |
| 256 | 256 |
| 257 bool VirtualMemory::Uncommit(void* address, size_t size) { | 257 bool VirtualMemory::Uncommit(void* address, size_t size) { |
| 258 ASSERT(IsReserved()); | 258 DCHECK(IsReserved()); |
| 259 return UncommitRegion(address, size); | 259 return UncommitRegion(address, size); |
| 260 } | 260 } |
| 261 | 261 |
| 262 | 262 |
| 263 void* VirtualMemory::ReserveRegion(size_t size) { | 263 void* VirtualMemory::ReserveRegion(size_t size) { |
| 264 return RandomizedVirtualAlloc(size, MEM_RESERVE, PAGE_NOACCESS); | 264 return RandomizedVirtualAlloc(size, MEM_RESERVE, PAGE_NOACCESS); |
| 265 } | 265 } |
| 266 | 266 |
| 267 | 267 |
| 268 bool VirtualMemory::CommitRegion(void* base, size_t size, bool is_executable) { | 268 bool VirtualMemory::CommitRegion(void* base, size_t size, bool is_executable) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 294 return VirtualFree(base, 0, MEM_RELEASE) != 0; | 294 return VirtualFree(base, 0, MEM_RELEASE) != 0; |
| 295 } | 295 } |
| 296 | 296 |
| 297 | 297 |
| 298 bool VirtualMemory::HasLazyCommits() { | 298 bool VirtualMemory::HasLazyCommits() { |
| 299 // TODO(alph): implement for the platform. | 299 // TODO(alph): implement for the platform. |
| 300 return false; | 300 return false; |
| 301 } | 301 } |
| 302 | 302 |
| 303 } } // namespace v8::base | 303 } } // namespace v8::base |
| OLD | NEW |