• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef COMMON_COMPONENTS_BASE_RUNTIME_HOOKS_H
17 #define COMMON_COMPONENTS_BASE_RUNTIME_HOOKS_H
18 
19 #include <cstdint>
20 
21 #include "common_interfaces/heap/heap_visitor.h"
22 #include "common_interfaces/thread/mutator_base.h"
23 
24 // Visitor that iterate all `RefField`s in a TaggedObject and add them to
25 // `WorkStack` Should be moved to BaseRT and panda namespace later
26 namespace common {
27 // Roots in BaseRuntime
28 PUBLIC_API void VisitBaseRoots(const RefFieldVisitor &visitor);
29 // Dynamic VM Roots scanning
30 PUBLIC_API void VisitDynamicGlobalRoots(const RefFieldVisitor &visitor);
31 PUBLIC_API void VisitDynamicWeakGlobalRoots(const WeakRefFieldVisitor &visitorFunc);
32 PUBLIC_API void VisitDynamicWeakGlobalRootsOld(const WeakRefFieldVisitor &visitorFunc);
33 PUBLIC_API void VisitDynamicLocalRoots(const RefFieldVisitor &visitor);
34 PUBLIC_API void VisitDynamicWeakLocalRoots(const WeakRefFieldVisitor &visitorFunc);
35 PUBLIC_API void VisitDynamicPreforwardRoots(const RefFieldVisitor &visitorFunc);
36 // Inlcude concurrent local and concurrent global roots
37 PUBLIC_API void VisitDynamicConcurrentRoots(const RefFieldVisitor &visitorFunc);
38 
39 PUBLIC_API void InvokeSharedNativePointerCallbacks();
40 
41 // Visit roots of specific local thread.
42 PUBLIC_API void VisitDynamicThreadRoot(const RefFieldVisitor &visitorFunc, void *vm);
43 PUBLIC_API void VisitDynamicWeakThreadRoot(const WeakRefFieldVisitor &visitorFunc, void *vm);
44 PUBLIC_API void VisitDynamicThreadPreforwardRoot(const RefFieldVisitor &visitorFunc, void *vm);
45 
46 PUBLIC_API void VisitJSThread(void *jsThread, CommonRootVisitor visitor);
47 PUBLIC_API void SynchronizeGCPhaseToJSThread(void *jsThread, GCPhase gcPhase);
48 
49 // CMC-GC dependent interface
50 PUBLIC_API void FillFreeObject(void *object, size_t size);
51 PUBLIC_API void SetBaseAddress(uintptr_t base);
52 PUBLIC_API void JSGCCallback(void *ecmaVM);
53 PUBLIC_API bool IsPostForked();
54 
55 // Jit interfaces
56 PUBLIC_API void SweepThreadLocalJitFort();
57 PUBLIC_API bool IsMachineCodeObject(uintptr_t obj);
58 PUBLIC_API void JitFortUnProt(size_t size, void* base);
59 PUBLIC_API void MarkThreadLocalJitFortInstalled(void *thread, void *machineCode);
60 
61 } // namespace common
62 #endif // COMMON_COMPONENTS_BASE_RUNTIME_HOOKS_H
63