v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
lsan-page-allocator.h
Go to the documentation of this file.
1// Copyright 2018 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
5#ifndef V8_BASE_SANITIZER_LSAN_PAGE_ALLOCATOR_H_
6#define V8_BASE_SANITIZER_LSAN_PAGE_ALLOCATOR_H_
7
8#include <set>
9
10#include "include/v8-platform.h"
13#if defined(LEAK_SANITIZER)
15#endif
16
17namespace v8 {
18namespace base {
19
20// This is a v8::PageAllocator implementation that decorates provided page
21// allocator object with leak sanitizer notifications when LEAK_SANITIZER
22// is defined.
24 public:
25 explicit LsanPageAllocator(v8::PageAllocator* page_allocator);
26 ~LsanPageAllocator() override = default;
27
28 size_t AllocatePageSize() override { return allocate_page_size_; }
29
30 size_t CommitPageSize() override { return commit_page_size_; }
31
32 void SetRandomMmapSeed(int64_t seed) override {
34 }
35
36 void* GetRandomMmapAddr() override {
38 }
39
40 void* AllocatePages(void* address, size_t size, size_t alignment,
41 PageAllocator::Permission access) override;
42
43 std::unique_ptr<SharedMemory> AllocateSharedPages(
44 size_t size, const void* original_address) override;
45
46 bool CanAllocateSharedPages() override;
47
48 bool FreePages(void* address, size_t size) override;
49
50 bool ReleasePages(void* address, size_t size, size_t new_size) override;
51
52 bool SetPermissions(void* address, size_t size,
53 PageAllocator::Permission access) override {
54 return page_allocator_->SetPermissions(address, size, access);
55 }
56
57 bool RecommitPages(void* address, size_t size,
58 PageAllocator::Permission access) override {
59 return page_allocator_->RecommitPages(address, size, access);
60 }
61
62 bool DiscardSystemPages(void* address, size_t size) override {
63 return page_allocator_->DiscardSystemPages(address, size);
64 }
65
66 bool DecommitPages(void* address, size_t size) override {
67 return page_allocator_->DecommitPages(address, size);
68 }
69
70 private:
72 const size_t allocate_page_size_;
73 const size_t commit_page_size_;
74#if defined(LEAK_SANITIZER)
75 base::Mutex not_registered_regions_mutex_;
76 std::set<void*> not_registered_regions_;
77#endif
78};
79
80} // namespace base
81} // namespace v8
82#endif // V8_BASE_SANITIZER_LSAN_PAGE_ALLOCATOR_H_
#define V8_BASE_EXPORT
Definition base-export.h:26
virtual void * GetRandomMmapAddr()=0
virtual bool DecommitPages(void *address, size_t size)=0
virtual void SetRandomMmapSeed(int64_t seed)=0
virtual bool RecommitPages(void *address, size_t length, Permission permissions)
virtual bool SetPermissions(void *address, size_t length, Permission permissions)=0
virtual bool DiscardSystemPages(void *address, size_t size)
bool SetPermissions(void *address, size_t size, PageAllocator::Permission access) override
void SetRandomMmapSeed(int64_t seed) override
v8::PageAllocator *const page_allocator_
~LsanPageAllocator() override=default
bool RecommitPages(void *address, size_t size, PageAllocator::Permission access) override
bool DiscardSystemPages(void *address, size_t size) override
bool DecommitPages(void *address, size_t size) override
cppgc::PageAllocator * page_allocator_
Definition cpp-heap.cc:194