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 MacOS goes here. For the POSIX-compatible | 5 // Platform-specific code for MacOS 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 <dlfcn.h> | 8 #include <dlfcn.h> |
9 #include <mach/mach_init.h> | 9 #include <mach/mach_init.h> |
10 #include <mach-o/dyld.h> | 10 #include <mach-o/dyld.h> |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include <semaphore.h> | 24 #include <semaphore.h> |
25 #include <signal.h> | 25 #include <signal.h> |
26 #include <stdarg.h> | 26 #include <stdarg.h> |
27 #include <stdlib.h> | 27 #include <stdlib.h> |
28 #include <string.h> | 28 #include <string.h> |
29 #include <sys/resource.h> | 29 #include <sys/resource.h> |
30 #include <sys/sysctl.h> | 30 #include <sys/sysctl.h> |
31 #include <sys/time.h> | 31 #include <sys/time.h> |
32 #include <sys/types.h> | 32 #include <sys/types.h> |
33 | 33 |
| 34 #include <cmath> |
| 35 |
34 #undef MAP_TYPE | 36 #undef MAP_TYPE |
35 | 37 |
36 #include "src/v8.h" | |
37 | |
38 #include "src/platform.h" | 38 #include "src/platform.h" |
| 39 #include "src/utils.h" |
39 | 40 |
40 | 41 |
41 namespace v8 { | 42 namespace v8 { |
42 namespace internal { | 43 namespace internal { |
43 | 44 |
44 | 45 |
45 // Constants used for mmap. | 46 // Constants used for mmap. |
46 // kMmapFd is used to pass vm_alloc flags to tag the region with the user | 47 // kMmapFd is used to pass vm_alloc flags to tag the region with the user |
47 // defined tag 255 This helps identify V8-allocated regions in memory analysis | 48 // defined tag 255 This helps identify V8-allocated regions in memory analysis |
48 // tools like vmmap(1). | 49 // tools like vmmap(1). |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 size_t request_size = RoundUp(size + alignment, | 188 size_t request_size = RoundUp(size + alignment, |
188 static_cast<intptr_t>(OS::AllocateAlignment())); | 189 static_cast<intptr_t>(OS::AllocateAlignment())); |
189 void* reservation = mmap(OS::GetRandomMmapAddr(), | 190 void* reservation = mmap(OS::GetRandomMmapAddr(), |
190 request_size, | 191 request_size, |
191 PROT_NONE, | 192 PROT_NONE, |
192 MAP_PRIVATE | MAP_ANON | MAP_NORESERVE, | 193 MAP_PRIVATE | MAP_ANON | MAP_NORESERVE, |
193 kMmapFd, | 194 kMmapFd, |
194 kMmapFdOffset); | 195 kMmapFdOffset); |
195 if (reservation == MAP_FAILED) return; | 196 if (reservation == MAP_FAILED) return; |
196 | 197 |
197 Address base = static_cast<Address>(reservation); | 198 uint8_t* base = static_cast<uint8_t*>(reservation); |
198 Address aligned_base = RoundUp(base, alignment); | 199 uint8_t* aligned_base = RoundUp(base, alignment); |
199 ASSERT_LE(base, aligned_base); | 200 ASSERT_LE(base, aligned_base); |
200 | 201 |
201 // Unmap extra memory reserved before and after the desired block. | 202 // Unmap extra memory reserved before and after the desired block. |
202 if (aligned_base != base) { | 203 if (aligned_base != base) { |
203 size_t prefix_size = static_cast<size_t>(aligned_base - base); | 204 size_t prefix_size = static_cast<size_t>(aligned_base - base); |
204 OS::Free(base, prefix_size); | 205 OS::Free(base, prefix_size); |
205 request_size -= prefix_size; | 206 request_size -= prefix_size; |
206 } | 207 } |
207 | 208 |
208 size_t aligned_size = RoundUp(size, OS::AllocateAlignment()); | 209 size_t aligned_size = RoundUp(size, OS::AllocateAlignment()); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 bool VirtualMemory::ReleaseRegion(void* address, size_t size) { | 301 bool VirtualMemory::ReleaseRegion(void* address, size_t size) { |
301 return munmap(address, size) == 0; | 302 return munmap(address, size) == 0; |
302 } | 303 } |
303 | 304 |
304 | 305 |
305 bool VirtualMemory::HasLazyCommits() { | 306 bool VirtualMemory::HasLazyCommits() { |
306 return false; | 307 return false; |
307 } | 308 } |
308 | 309 |
309 } } // namespace v8::internal | 310 } } // namespace v8::internal |
OLD | NEW |