• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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