1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/allocator/partition_allocator/pointers/raw_ptr_hookable_impl.h"
6
7 #include <atomic>
8 #include <cstdint>
9
10 namespace base::internal {
11
12 namespace {
13
DefaultWrapPtrHook(uintptr_t address)14 void DefaultWrapPtrHook(uintptr_t address) {}
DefaultReleaseWrappedPtrHook(uintptr_t address)15 void DefaultReleaseWrappedPtrHook(uintptr_t address) {}
DefaultUnwrapForDereferenceHook(uintptr_t address)16 void DefaultUnwrapForDereferenceHook(uintptr_t address) {}
DefaultUnwrapForExtractionHook(uintptr_t address)17 void DefaultUnwrapForExtractionHook(uintptr_t address) {}
DefaultUnwrapForComparisonHook(uintptr_t address)18 void DefaultUnwrapForComparisonHook(uintptr_t address) {}
DefaultAdvanceHook(uintptr_t old_address,uintptr_t new_address)19 void DefaultAdvanceHook(uintptr_t old_address, uintptr_t new_address) {}
DefaultDuplicateHook(uintptr_t address)20 void DefaultDuplicateHook(uintptr_t address) {}
21
22 constexpr RawPtrHooks default_hooks = {
23 DefaultWrapPtrHook,
24 DefaultReleaseWrappedPtrHook,
25 DefaultUnwrapForDereferenceHook,
26 DefaultUnwrapForExtractionHook,
27 DefaultUnwrapForComparisonHook,
28 DefaultAdvanceHook,
29 DefaultDuplicateHook,
30 };
31
32 } // namespace
33
34 std::atomic<const RawPtrHooks*> g_hooks{&default_hooks};
35
GetRawPtrHooks()36 const RawPtrHooks* GetRawPtrHooks() {
37 return g_hooks.load(std::memory_order_relaxed);
38 }
39
InstallRawPtrHooks(const RawPtrHooks * hooks)40 void InstallRawPtrHooks(const RawPtrHooks* hooks) {
41 g_hooks.store(hooks, std::memory_order_relaxed);
42 }
43
ResetRawPtrHooks()44 void ResetRawPtrHooks() {
45 InstallRawPtrHooks(&default_hooks);
46 }
47
48 } // namespace base::internal
49