Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1221)

Side by Side Diff: src/platform-macos.cc

Issue 53004: Add basic infrastructure for protecting V8's heap when leaving the VM... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 } 224 }
225 225
226 226
227 size_t OS::AllocateAlignment() { 227 size_t OS::AllocateAlignment() {
228 return getpagesize(); 228 return getpagesize();
229 } 229 }
230 230
231 231
232 void* OS::Allocate(const size_t requested, 232 void* OS::Allocate(const size_t requested,
233 size_t* allocated, 233 size_t* allocated,
234 bool executable) { 234 bool is_executable) {
235 const size_t msize = RoundUp(requested, getpagesize()); 235 const size_t msize = RoundUp(requested, getpagesize());
236 int prot = PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0); 236 int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
237 void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANON, -1, 0); 237 void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
238 if (mbase == MAP_FAILED) { 238 if (mbase == MAP_FAILED) {
239 LOG(StringEvent("OS::Allocate", "mmap failed")); 239 LOG(StringEvent("OS::Allocate", "mmap failed"));
240 return NULL; 240 return NULL;
241 } 241 }
242 *allocated = msize; 242 *allocated = msize;
243 UpdateAllocatedSpaceLimits(mbase, msize); 243 UpdateAllocatedSpaceLimits(mbase, msize);
244 return mbase; 244 return mbase;
245 } 245 }
246 246
247 247
248 void OS::Free(void* buf, const size_t length) { 248 void OS::Free(void* address, const size_t size) {
249 // TODO(1240712): munmap has a return value which is ignored here. 249 // TODO(1240712): munmap has a return value which is ignored here.
250 munmap(buf, length); 250 munmap(address, size);
251 } 251 }
252 252
253 253
254 #ifdef ENABLE_HEAP_PROTECTION
255
256 void OS::Protect(void* address, size_t size) {
257 UNIMPLEMENTED();
258 }
259
260
261 void OS::Unprotect(void* address, size_t size, bool is_executable) {
262 UNIMPLEMENTED();
263 }
264
265 #endif
266
267
254 void OS::Sleep(int milliseconds) { 268 void OS::Sleep(int milliseconds) {
255 usleep(1000 * milliseconds); 269 usleep(1000 * milliseconds);
256 } 270 }
257 271
258 272
259 void OS::Abort() { 273 void OS::Abort() {
260 // Redirect to std abort to signal abnormal program termination 274 // Redirect to std abort to signal abnormal program termination
261 abort(); 275 abort();
262 } 276 }
263 277
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 if (0 == munmap(address(), size())) address_ = MAP_FAILED; 380 if (0 == munmap(address(), size())) address_ = MAP_FAILED;
367 } 381 }
368 } 382 }
369 383
370 384
371 bool VirtualMemory::IsReserved() { 385 bool VirtualMemory::IsReserved() {
372 return address_ != MAP_FAILED; 386 return address_ != MAP_FAILED;
373 } 387 }
374 388
375 389
376 bool VirtualMemory::Commit(void* address, size_t size, bool executable) { 390 bool VirtualMemory::Commit(void* address, size_t size, bool is_executable) {
377 int prot = PROT_READ | PROT_WRITE | (executable ? PROT_EXEC : 0); 391 int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0);
378 if (MAP_FAILED == mmap(address, size, prot, 392 if (MAP_FAILED == mmap(address, size, prot,
379 MAP_PRIVATE | MAP_ANON | MAP_FIXED, 393 MAP_PRIVATE | MAP_ANON | MAP_FIXED,
380 kMmapFd, kMmapFdOffset)) { 394 kMmapFd, kMmapFdOffset)) {
381 return false; 395 return false;
382 } 396 }
383 397
384 UpdateAllocatedSpaceLimits(address, size); 398 UpdateAllocatedSpaceLimits(address, size);
385 return true; 399 return true;
386 } 400 }
387 401
388 402
389 bool VirtualMemory::Uncommit(void* address, size_t size) { 403 bool VirtualMemory::Uncommit(void* address, size_t size) {
390 return mmap(address, size, PROT_NONE, 404 return mmap(address, size, PROT_NONE,
391 MAP_PRIVATE | MAP_ANON | MAP_NORESERVE, 405 MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
392 kMmapFd, kMmapFdOffset) != MAP_FAILED; 406 kMmapFd, kMmapFdOffset) != MAP_FAILED;
393 } 407 }
394 408
409
395 class ThreadHandle::PlatformData : public Malloced { 410 class ThreadHandle::PlatformData : public Malloced {
396 public: 411 public:
397 explicit PlatformData(ThreadHandle::Kind kind) { 412 explicit PlatformData(ThreadHandle::Kind kind) {
398 Initialize(kind); 413 Initialize(kind);
399 } 414 }
400 415
401 void Initialize(ThreadHandle::Kind kind) { 416 void Initialize(ThreadHandle::Kind kind) {
402 switch (kind) { 417 switch (kind) {
403 case ThreadHandle::SELF: thread_ = pthread_self(); break; 418 case ThreadHandle::SELF: thread_ = pthread_self(); break;
404 case ThreadHandle::INVALID: thread_ = kNoThread; break; 419 case ThreadHandle::INVALID: thread_ = kNoThread; break;
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 } 848 }
834 849
835 // This sampler is no longer the active sampler. 850 // This sampler is no longer the active sampler.
836 active_sampler_ = NULL; 851 active_sampler_ = NULL;
837 active_ = false; 852 active_ = false;
838 } 853 }
839 854
840 #endif // ENABLE_LOGGING_AND_PROFILING 855 #endif // ENABLE_LOGGING_AND_PROFILING
841 856
842 } } // namespace v8::internal 857 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698