summaryrefslogtreecommitdiff
path: root/src/gc/gcenv.ee.standalone.inl
diff options
context:
space:
mode:
Diffstat (limited to 'src/gc/gcenv.ee.standalone.inl')
-rw-r--r--src/gc/gcenv.ee.standalone.inl176
1 files changed, 176 insertions, 0 deletions
diff --git a/src/gc/gcenv.ee.standalone.inl b/src/gc/gcenv.ee.standalone.inl
new file mode 100644
index 0000000000..3b64586d70
--- /dev/null
+++ b/src/gc/gcenv.ee.standalone.inl
@@ -0,0 +1,176 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#ifndef __GCTOENV_EE_STANDALONE_INL__
+#define __GCTOENV_EE_STANDALONE_INL__
+
+#include "env/gcenv.ee.h"
+
+// The singular interface instance. All calls in GCToEEInterface
+// will be fowarded to this interface instance.
+extern IGCToCLR* g_theGCToCLR;
+
+// When we are building the GC in a standalone environment, we
+// will be dispatching virtually against g_theGCToCLR to call
+// into the EE. This class provides an identical API to the existing
+// GCToEEInterface, but only forwards the call onto the global
+// g_theGCToCLR instance.
+inline void GCToEEInterface::SuspendEE(SUSPEND_REASON reason)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->SuspendEE(reason);
+}
+
+inline void GCToEEInterface::RestartEE(bool bFinishedGC)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->RestartEE(bFinishedGC);
+}
+
+inline void GCToEEInterface::GcScanRoots(promote_func* fn, int condemned, int max_gen, ScanContext* sc)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->GcScanRoots(fn, condemned, max_gen, sc);
+}
+
+inline void GCToEEInterface::GcStartWork(int condemned, int max_gen)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->GcStartWork(condemned, max_gen);
+}
+
+inline void GCToEEInterface::AfterGcScanRoots(int condemned, int max_gen, ScanContext* sc)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->AfterGcScanRoots(condemned, max_gen, sc);
+}
+
+inline void GCToEEInterface::GcBeforeBGCSweepWork()
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->GcBeforeBGCSweepWork();
+}
+
+inline void GCToEEInterface::GcDone(int condemned)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->GcDone(condemned);
+}
+
+inline bool GCToEEInterface::RefCountedHandleCallbacks(Object * pObject)
+{
+ assert(g_theGCToCLR != nullptr);
+ return g_theGCToCLR->RefCountedHandleCallbacks(pObject);
+}
+
+inline void GCToEEInterface::SyncBlockCacheWeakPtrScan(HANDLESCANPROC scanProc, uintptr_t lp1, uintptr_t lp2)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->SyncBlockCacheWeakPtrScan(scanProc, lp1, lp2);
+}
+
+inline void GCToEEInterface::SyncBlockCacheDemote(int max_gen)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->SyncBlockCacheDemote(max_gen);
+}
+
+inline void GCToEEInterface::SyncBlockCachePromotionsGranted(int max_gen)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->SyncBlockCachePromotionsGranted(max_gen);
+}
+
+inline bool GCToEEInterface::IsPreemptiveGCDisabled(Thread * pThread)
+{
+ assert(g_theGCToCLR != nullptr);
+ return g_theGCToCLR->IsPreemptiveGCDisabled(pThread);
+}
+
+
+inline void GCToEEInterface::EnablePreemptiveGC(Thread * pThread)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->EnablePreemptiveGC(pThread);
+}
+
+inline void GCToEEInterface::DisablePreemptiveGC(Thread * pThread)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->DisablePreemptiveGC(pThread);
+}
+
+inline gc_alloc_context * GCToEEInterface::GetAllocContext(Thread * pThread)
+{
+ assert(g_theGCToCLR != nullptr);
+ return g_theGCToCLR->GetAllocContext(pThread);
+}
+
+inline bool GCToEEInterface::CatchAtSafePoint(Thread * pThread)
+{
+ assert(g_theGCToCLR != nullptr);
+ return g_theGCToCLR->CatchAtSafePoint(pThread);
+}
+
+inline void GCToEEInterface::GcEnumAllocContexts(enum_alloc_context_func* fn, void* param)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->GcEnumAllocContexts(fn, param);
+}
+
+inline Thread* GCToEEInterface::CreateBackgroundThread(GCBackgroundThreadFunction threadStart, void* arg)
+{
+ assert(g_theGCToCLR != nullptr);
+ return g_theGCToCLR->CreateBackgroundThread(threadStart, arg);
+}
+
+inline void GCToEEInterface::DiagGCStart(int gen, bool isInduced)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->DiagGCStart(gen, isInduced);
+}
+
+inline void GCToEEInterface::DiagUpdateGenerationBounds()
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->DiagUpdateGenerationBounds();
+}
+
+inline void GCToEEInterface::DiagGCEnd(size_t index, int gen, int reason, bool fConcurrent)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->DiagGCEnd(index, gen, reason, fConcurrent);
+}
+
+inline void GCToEEInterface::DiagWalkFReachableObjects(void* gcContext)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->DiagWalkFReachableObjects(gcContext);
+}
+
+inline void GCToEEInterface::DiagWalkSurvivors(void* gcContext)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->DiagWalkSurvivors(gcContext);
+}
+
+inline void GCToEEInterface::DiagWalkLOHSurvivors(void* gcContext)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->DiagWalkLOHSurvivors(gcContext);
+}
+
+inline void GCToEEInterface::DiagWalkBGCSurvivors(void* gcContext)
+{
+ assert(g_theGCToCLR != nullptr);
+ return g_theGCToCLR->DiagWalkBGCSurvivors(gcContext);
+}
+
+inline void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
+{
+ assert(g_theGCToCLR != nullptr);
+ g_theGCToCLR->StompWriteBarrier(args);
+}
+
+#endif // __GCTOENV_EE_STANDALONE_INL__