path: root/src/gc/env/gcenv.base.h
diff options
authorKoundinya Veluri <>2016-01-07 11:21:27 -0800
committerKoundinya Veluri <>2016-04-12 16:29:38 -0700
commitc235ae17cd3a87f8032948bdcb838641d8e6c055 (patch)
treecc2c3756157456898b4720709c9efbfc4c90ccd8 /src/gc/env/gcenv.base.h
parent7f95d79740d5f5b13d6a0df1b94654e622053a5f (diff)
Implement software write watch and make concurrent GC functional outside Windows
- Implemented software write watch using write barriers - A new set of write barriers is introduced, each corresponding to an existing one, but which also updates the write watch table. The GC switches to a write watch barrier during concurrent GC, and switches back to a non write watch barrier after the final query for dirty pages. - The write watch table is alloacted along with the card table - Since the card table is used differently, different synchonization is used for the write watch table. The runtime is suspended during resize since that is the most infrequently occuring operation, of that, ResetWriteWatch, and GetWriteWatch. - ResetWriteWatch() doesn't need a suspend, but since the software WW version is much faster than the Windows version, moved it into the suspended region to avoid some synchronization that would otherwise be required - The background calls to GetWriteWatch() don't need or do a suspend. They only need to synchronize with the resize path, not for the purpose of correct functionality, but to not miss dirty pages such that concurrent GC is effective. Miscellaneous: - Fixed to copy mscorlib.dll and delete the Windows version of
Diffstat (limited to 'src/gc/env/gcenv.base.h')
1 files changed, 4 insertions, 2 deletions
diff --git a/src/gc/env/gcenv.base.h b/src/gc/env/gcenv.base.h
index f3317fc79e..96d6917696 100644
--- a/src/gc/env/gcenv.base.h
+++ b/src/gc/env/gcenv.base.h
@@ -244,6 +244,8 @@ typedef uintptr_t TADDR;
extern type var
#define GVAL_IMPL(type, var) \
type var
+#define GVAL_IMPL_INIT(type, var, init) \
+ type var = init
#define GPTR_DECL(type, var) \
extern type* var
@@ -543,8 +545,8 @@ void LogSpewAlways(const char *fmt, ...);
// -----------------------------------------------------------------------------------------------------------
-void StompWriteBarrierEphemeral();
-void StompWriteBarrierResize(bool bReqUpperBoundsCheck);
+void StompWriteBarrierEphemeral(bool isRuntimeSuspended);
+void StompWriteBarrierResize(bool isRuntimeSuspended, bool bReqUpperBoundsCheck);
class CLRConfig