summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2021-09-04 13:47:52 +0300
committerIvan Maidanski <ivmai@mail.ru>2021-09-04 13:47:52 +0300
commit7d17f2cdad1ebc3f2330c0602076e763da0b106b (patch)
treea56e6a4295ef11e0845ead26f75a98888c2cc83d /tests
parentdc254e10b44ddc1b8fa58526073c57a30361dd1e (diff)
downloadbdwgc-7d17f2cdad1ebc3f2330c0602076e763da0b106b.tar.gz
Fall back to mprotect-based VDB at runtime if no soft-dirty bit in kernel
Issue #265 (bdwgc). * doc/README.environment (GC_USE_GETWRITEWATCH): Update documentation. * doc/README.macros (GC_PREFER_MPROTECT_VDB): Likewise. * include/private/gc_priv.h [!NO_VDB_FOR_STATIC_ROOTS && !PROC_VDB] (GC_is_vdb_for_static_roots): Declare GC_INNER function. * include/private/gcconfig.h [(I386 || POWERPC || X86_64) && LINUX && __GLIBC__ && !__UCLIBC__ && !SOFT_VDB && !DEFAULT_VDB]: Do not include linux/version.h if NO_SOFT_VDB. * include/private/gcconfig.h [(I386 || POWERPC || X86_64) && LINUX && __GLIBC__ && !__UCLIBC__ && !SOFT_VDB && !DEFAULT_VDB] (SOFT_VDB): Do not define if NO_SOFT_VDB; do not depend on GC_PREFER_MPROTECT_VDB. * include/private/gcconfig.h [MPROTECT_VDB && GC_PREFER_MPROTECT_VDB] (SOFT_VDB): Do not undefine. * include/private/gcconfig.h (MPROTECT_VDB): Do not undefine if SOFT_VDB; update comment. * mark.c [!GC_DISABLE_INCREMENTAL && !NO_VDB_FOR_STATIC_ROOTS && !PROC_VDB] (GC_static_page_was_dirty): Do not examine GC_manual_vdb value; update comment * mark.c [!GC_DISABLE_INCREMENTAL && !NO_VDB_FOR_STATIC_ROOTS && !PROC_VDB] (GC_push_conditional_static): Call GC_push_all() unless GC_is_vdb_for_static_roots(). * os_dep.c: Update comment about SOFT_VDB implementation. * os_dep.c [!OS2 && !GWW_VDB && SOFT_VDB] (GC_GWW_AVAILABLE): Implement to check clear_refs_fd value. * os_dep.c [MPROTECT_VDB && !DARWIN && SOFT_VDB] (soft_dirty_init): Declare static function. * os_dep.c [MPROTECT_VDB && !DARWIN && (GWW_VDB || MSWIN32 || MSWINCE)] (GC_dirty_init): Move code upper (to be right after checking of GC_page_size). * os_dep.c [MPROTECT_VDB && !DARWIN && SOFT_VDB] (GC_dirty_init): Return true if soft_dirty_init(). * os_dep.c [SOFT_VDB] (GC_dirty_init): Rename to soft_dirty_init (and make it static) if MPROTECT_VDB; do not set soft_vdb_buf if already non-null; remove TODO about MPROTECT_VDB. * os_dep.c [SOFT_VDB && MPROTECT_VDB] (soft_dirty_init): Check GC_USE_GETWRITEWATCH environment variable (and return false if the client requested to prefer mprotect-based VDB). * os_dep.c [!GC_DISABLE_INCREMENTAL && !NO_VDB_FOR_STATIC_ROOTS && !PROC_VDB] (GC_is_vdb_for_static_roots): Implement. * tests/test.c [!GC_DISABLE_INCREMENTAL && (TEST_DEFAULT_VDB || !DEFAULT_VDB) && MPROTECT_VDB && SOFT_VDB] (enable_incremental_mode): Print message similar to the case of GWW_VDB and MPROTECT_VDB.
Diffstat (limited to 'tests')
-rw-r--r--tests/test.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/tests/test.c b/tests/test.c
index 0e02b408..5081ff9a 100644
--- a/tests/test.c
+++ b/tests/test.c
@@ -1899,12 +1899,14 @@ void enable_incremental_mode(void)
GC_printf("Reading dirty bits from /proc\n");
# elif defined(GWW_VDB)
GC_printf("Using GetWriteWatch-based implementation\n");
-# ifdef MPROTECT_VDB
+# endif
+# ifdef MPROTECT_VDB
+# if defined(GWW_VDB) || defined(SOFT_VDB)
GC_printf("Or emulating dirty bits with mprotect/signals\n");
+# else
+ GC_printf("Emulating dirty bits with mprotect/signals\n");
# endif
-# elif defined(MPROTECT_VDB)
- GC_printf("Emulating dirty bits with mprotect/signals\n");
-# endif
+# endif /* MPROTECT_VDB */
}
}
# endif