From 32662e9fc88527cdc78fe87c4fe220904169cefe Mon Sep 17 00:00:00 2001 From: playX18 Date: Sat, 15 Feb 2025 19:55:06 +0700 Subject: [PATCH] add VM::ALWAYS_TRACE --- vmkit/src/lib.rs | 5 +++++ vmkit/src/mm/scanning.rs | 3 +++ 2 files changed, 8 insertions(+) diff --git a/vmkit/src/lib.rs b/vmkit/src/lib.rs index 7248887..8ab3633 100644 --- a/vmkit/src/lib.rs +++ b/vmkit/src/lib.rs @@ -29,6 +29,11 @@ pub trait VirtualMachine: Sized + 'static + Send + Sync { type Slot: SlotExtra; type MemorySlice: MemorySlice; + + /// Should we always trace objects? If `true` then `support_slot_enqueing` will always return + /// false to MMTk and we will always work through `ObjectTracer` to trace objects. + const ALWAYS_TRACE: bool = false; + /*#[cfg(feature = "address_based_hashing")] const HASH_STATE_SPEC: VMLocalHashStateSpec = VMLocalHashStateSpec::in_header(61);*/ /// 1-word local metadata for spaces that may copy objects. diff --git a/vmkit/src/mm/scanning.rs b/vmkit/src/mm/scanning.rs index 83678cf..c5739ef 100644 --- a/vmkit/src/mm/scanning.rs +++ b/vmkit/src/mm/scanning.rs @@ -124,6 +124,9 @@ impl Scanning> for VMKitScanning { _tls: mmtk::util::VMWorkerThread, object: mmtk::util::ObjectReference, ) -> bool { + if VM::ALWAYS_TRACE { + return true; + } let object = VMKitObject::from(object); let metadata = object.header::().metadata();