v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
lsan-virtual-address-space.cc
Go to the documentation of this file.
1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
8#include "src/base/logging.h"
9
10#if defined(LEAK_SANITIZER)
11#include <sanitizer/lsan_interface.h>
12#endif
13
14namespace v8 {
15namespace base {
16
18 std::unique_ptr<v8::VirtualAddressSpace> vas)
19 : VirtualAddressSpace(vas->page_size(), vas->allocation_granularity(),
20 vas->base(), vas->size(),
21 vas->max_page_permissions()),
22 vas_(std::move(vas)) {
24}
25
27 size_t alignment,
28 PagePermissions permissions) {
29 Address result = vas_->AllocatePages(hint, size, alignment, permissions);
30#if defined(LEAK_SANITIZER)
31 if (result) {
32 __lsan_register_root_region(reinterpret_cast<void*>(result), size);
33 }
34#endif // defined(LEAK_SANITIZER)
35 return result;
36}
37
38void LsanVirtualAddressSpace::FreePages(Address address, size_t size) {
39 vas_->FreePages(address, size);
40#if defined(LEAK_SANITIZER)
41 __lsan_unregister_root_region(reinterpret_cast<void*>(address), size);
42#endif // defined(LEAK_SANITIZER)
43}
44
46 Address hint, size_t size, PagePermissions permissions,
47 PlatformSharedMemoryHandle handle, uint64_t offset) {
49 vas_->AllocateSharedPages(hint, size, permissions, handle, offset);
50#if defined(LEAK_SANITIZER)
51 if (result) {
52 __lsan_register_root_region(reinterpret_cast<void*>(result), size);
53 }
54#endif // defined(LEAK_SANITIZER)
55 return result;
56}
57
59 vas_->FreeSharedPages(address, size);
60#if defined(LEAK_SANITIZER)
61 __lsan_unregister_root_region(reinterpret_cast<void*>(address), size);
62#endif // defined(LEAK_SANITIZER)
63}
64
65std::unique_ptr<VirtualAddressSpace> LsanVirtualAddressSpace::AllocateSubspace(
66 Address hint, size_t size, size_t alignment,
67 PagePermissions max_page_permissions) {
68 auto subspace =
69 vas_->AllocateSubspace(hint, size, alignment, max_page_permissions);
70#if defined(LEAK_SANITIZER)
71 if (subspace) {
72 subspace = std::make_unique<LsanVirtualAddressSpace>(std::move(subspace));
73 }
74#endif // defined(LEAK_SANITIZER)
75 return subspace;
76}
77
78} // namespace base
79} // namespace v8
virtual void FreePages(Address address, size_t size)=0
virtual V8_WARN_UNUSED_RESULT Address AllocatePages(Address hint, size_t size, size_t alignment, PagePermissions permissions)=0
virtual void FreeSharedPages(Address address, size_t size)=0
PagePermissions max_page_permissions() const
virtual V8_WARN_UNUSED_RESULT Address AllocateSharedPages(Address hint, size_t size, PagePermissions permissions, PlatformSharedMemoryHandle handle, uint64_t offset)=0
virtual std::unique_ptr< VirtualAddressSpace > AllocateSubspace(Address hint, size_t size, size_t alignment, PagePermissions max_page_permissions)=0
std::unique_ptr< v8::VirtualAddressSpace > vas_
LsanVirtualAddressSpace(std::unique_ptr< v8::VirtualAddressSpace > vas)
Address AllocateSharedPages(Address hint, size_t size, PagePermissions permissions, PlatformSharedMemoryHandle handle, uint64_t offset) override
std::unique_ptr< VirtualAddressSpace > AllocateSubspace(Address hint, size_t size, size_t alignment, PagePermissions max_page_permissions) override
void FreeSharedPages(Address address, size_t size) override
Address AllocatePages(Address hint, size_t size, size_t alignment, PagePermissions permissions) override
void FreePages(Address address, size_t size) override
int32_t offset
ZoneVector< RpoNumber > & result
STL namespace.
intptr_t PlatformSharedMemoryHandle
PagePermissions
#define DCHECK_NOT_NULL(val)
Definition logging.h:492