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