![]() |
v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
|
#include <lsan-virtual-address-space.h>
Public Member Functions | |
LsanVirtualAddressSpace (std::unique_ptr< v8::VirtualAddressSpace > vas) | |
~LsanVirtualAddressSpace () override=default | |
void | SetRandomSeed (int64_t seed) override |
Address | RandomPageAddress () override |
Address | AllocatePages (Address hint, size_t size, size_t alignment, PagePermissions permissions) override |
void | FreePages (Address address, size_t size) override |
Address | AllocateSharedPages (Address hint, size_t size, PagePermissions permissions, PlatformSharedMemoryHandle handle, uint64_t offset) override |
void | FreeSharedPages (Address address, size_t size) override |
bool | SetPagePermissions (Address address, size_t size, PagePermissions permissions) override |
bool | RecommitPages (Address address, size_t size, PagePermissions permissions) override |
bool | AllocateGuardRegion (Address address, size_t size) override |
void | FreeGuardRegion (Address address, size_t size) override |
bool | CanAllocateSubspaces () override |
std::unique_ptr< VirtualAddressSpace > | AllocateSubspace (Address hint, size_t size, size_t alignment, PagePermissions max_page_permissions) override |
bool | DiscardSystemPages (Address address, size_t size) override |
bool | DecommitPages (Address address, size_t size) override |
![]() | |
VirtualAddressSpace (size_t page_size, size_t allocation_granularity, Address base, size_t size, PagePermissions max_page_permissions) | |
virtual | ~VirtualAddressSpace ()=default |
size_t | page_size () const |
size_t | allocation_granularity () const |
Address | base () const |
size_t | size () const |
PagePermissions | max_page_permissions () const |
bool | Contains (Address address) const |
Private Attributes | |
std::unique_ptr< v8::VirtualAddressSpace > | vas_ |
Additional Inherited Members | |
![]() | |
using | Address = uintptr_t |
![]() | |
static constexpr Address | kNoHint = 0 |
Definition at line 20 of file lsan-virtual-address-space.h.
|
explicit |
Definition at line 17 of file lsan-virtual-address-space.cc.
|
overridedefault |
|
inlineoverridevirtual |
Creates a guard region at the specified address.
Guard regions are guaranteed to cause a fault when accessed and generally do not count towards any memory consumption limits. Further, allocating guard regions can usually not fail in subspaces if the region does not overlap with another region, subspace, or page allocation.
address | The start address of the guard region. Must be aligned to the allocation_granularity(). |
size | The size of the guard region in bytes. Must be a multiple of the allocation_granularity(). |
Implements v8::VirtualAddressSpace.
Definition at line 55 of file lsan-virtual-address-space.h.
|
overridevirtual |
Implements v8::VirtualAddressSpace.
Definition at line 26 of file lsan-virtual-address-space.cc.
|
overridevirtual |
Allocates shared memory pages with the given permissions.
hint | Placement hint. See AllocatePages. |
size | The size of the allocation in bytes. Must be a multiple of the allocation_granularity(). |
permissions | The page permissions of the newly allocated pages. |
handle | A platform-specific handle to a shared memory object. See the SharedMemoryHandleFromX routines above for ways to obtain these. |
offset | The offset in the shared memory object at which the mapping should start. Must be a multiple of the allocation_granularity(). |
Implements v8::VirtualAddressSpace.
Definition at line 45 of file lsan-virtual-address-space.cc.
|
overridevirtual |
Implements v8::VirtualAddressSpace.
Definition at line 65 of file lsan-virtual-address-space.cc.
|
inlineoverridevirtual |
Whether this instance can allocate subspaces or not.
Implements v8::VirtualAddressSpace.
Definition at line 63 of file lsan-virtual-address-space.h.
|
inlineoverridevirtual |
Decommits any wired memory pages in the given range, allowing the OS to reclaim them, and marks the region as inacessible (kNoAccess). The address range stays reserved and can be accessed again later by changing its permissions. However, in that case the memory content is guaranteed to be zero-initialized again. The memory must have been previously allocated by a call to AllocatePages.
Implements v8::VirtualAddressSpace.
Definition at line 73 of file lsan-virtual-address-space.h.
|
inlineoverridevirtual |
Frees memory in the given [address, address + size) range. address and size should be aligned to the page_size(). The next write to this memory area brings the memory transparently back. This should be treated as a hint to the OS that the pages are no longer needed. It does not guarantee that the pages will be discarded immediately or at all.
Reimplemented from v8::VirtualAddressSpace.
Definition at line 69 of file lsan-virtual-address-space.h.
|
inlineoverridevirtual |
Frees an existing guard region.
This function will terminate the process on failure as this implies a bug in the client. As such, there is no return value.
address | The start address of the guard region to free. This address must have previously been used as address parameter in a successful invocation of AllocateGuardRegion. |
size | The size in bytes of the guard region to free. This must match the size passed to AllocateGuardRegion when the region was created. |
Implements v8::VirtualAddressSpace.
Definition at line 59 of file lsan-virtual-address-space.h.
|
overridevirtual |
Frees previously allocated pages.
This function will terminate the process on failure as this implies a bug in the client. As such, there is no return value.
address | The start address of the pages to free. This address must have been obtained through a call to AllocatePages. |
size | The size in bytes of the region to free. This must match the size passed to AllocatePages when the pages were allocated. |
Implements v8::VirtualAddressSpace.
Definition at line 38 of file lsan-virtual-address-space.cc.
|
overridevirtual |
Frees previously allocated shared pages.
This function will terminate the process on failure as this implies a bug in the client. As such, there is no return value.
address | The start address of the pages to free. This address must have been obtained through a call to AllocateSharedPages. |
size | The size in bytes of the region to free. This must match the size passed to AllocateSharedPages when the pages were allocated. |
Implements v8::VirtualAddressSpace.
Definition at line 58 of file lsan-virtual-address-space.cc.
|
inlineoverridevirtual |
Returns a random address inside this address space, suitable for page allocations hints.
Implements v8::VirtualAddressSpace.
Definition at line 31 of file lsan-virtual-address-space.h.
|
inlineoverridevirtual |
Recommits discarded pages in the given range with given permissions. Discarded pages must be recommitted with their original permissions before they are used again.
address | The start address of the range. Must be aligned to page_size(). |
size | The size in bytes of the range. Must be a multiple of page_size(). |
permissions | The permissions for the range that the pages must have. |
Implements v8::VirtualAddressSpace.
Definition at line 50 of file lsan-virtual-address-space.h.
|
inlineoverridevirtual |
Sets permissions of all allocated pages in the given range.
This operation can fail due to OOM, in which case false is returned. If the operation fails for a reason other than OOM, this function will terminate the process as this implies a bug in the client.
address | The start address of the range. Must be aligned to page_size(). |
size | The size in bytes of the range. Must be a multiple of page_size(). |
permissions | The new permissions for the range. |
Implements v8::VirtualAddressSpace.
Definition at line 45 of file lsan-virtual-address-space.h.
|
inlineoverridevirtual |
Sets the random seed so that GetRandomPageAddress() will generate repeatable sequences of random addresses.
The | seed for the PRNG. |
Implements v8::VirtualAddressSpace.
Definition at line 27 of file lsan-virtual-address-space.h.
|
private |
Definition at line 78 of file lsan-virtual-address-space.h.