From b230f6b9b5a47bcf6cfaabfad27e9c8dbbc31815 Mon Sep 17 00:00:00 2001 From: Kunshan Wang Date: Thu, 24 Sep 2026 12:04:50 +0800 Subject: [PATCH 1/4] Bump to Rust edition 2024 --- mmtk/Cargo.toml | 2 +- mmtk/rust-toolchain | 2 +- mmtk/src/api.rs | 112 +++++++++++++++++++++---------------------- mmtk/src/scanning.rs | 2 +- 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index 520cdea..f5a3e45 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -5,7 +5,7 @@ authors = [ "Kunshan Wang ", "Angus Atkinson <4848802+angussidney@users.noreply.github.com>", ] -edition = "2021" +edition = "2024" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/mmtk/rust-toolchain b/mmtk/rust-toolchain index 7f229af..5c87d60 100644 --- a/mmtk/rust-toolchain +++ b/mmtk/rust-toolchain @@ -1 +1 @@ -1.92.0 +1.98.1 diff --git a/mmtk/src/api.rs b/mmtk/src/api.rs index 17080c7..d329349 100644 --- a/mmtk/src/api.rs +++ b/mmtk/src/api.rs @@ -33,7 +33,7 @@ pub type RubyMutator = Mutator; /// Create an MMTKBuilder instance with default options. /// This instance shall be consumed by `mmtk_init_binding`. -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder { let mut builder = MMTKBuilder::new_no_env_vars(); // We don't use the Java-style finalization framework in mmtk-core. @@ -43,14 +43,14 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder { /// Let the MMTKBuilder read options from environment variables, /// such as `MMTK_THREADS`. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_builder_read_env_var_settings(builder: *mut MMTKBuilder) { let builder = unsafe { &mut *builder }; builder.options.read_env_var_settings(); } /// Set the GC trigger to dynamically adjust heap size. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_builder_set_dynamic_heap_size( builder: *mut MMTKBuilder, low: usize, @@ -64,7 +64,7 @@ pub unsafe extern "C" fn mmtk_builder_set_dynamic_heap_size( } /// Set the GC trigger to use a fixed heap size. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_builder_set_fixed_heap_size( builder: *mut MMTKBuilder, heap_size: usize, @@ -78,7 +78,7 @@ pub unsafe extern "C" fn mmtk_builder_set_fixed_heap_size( /// Set the plan. `plan_name` is a case-sensitive C-style ('\0'-terminated) string matching /// one of the cases of `enum PlanSelector`. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_builder_set_plan( builder: *mut MMTKBuilder, plan_name: *const libc::c_char, @@ -91,21 +91,21 @@ pub unsafe extern "C" fn mmtk_builder_set_plan( } /// Query if the selected plan is MarkSweep. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_builder_is_mark_sweep(builder: *mut MMTKBuilder) -> bool { let builder = unsafe { &mut *builder }; matches!(*builder.options.plan, PlanSelector::MarkSweep) } /// Query if the selected plan is Immix. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_builder_is_immix(builder: *mut MMTKBuilder) -> bool { let builder = unsafe { &mut *builder }; matches!(*builder.options.plan, PlanSelector::Immix) } /// Query if the selected plan is StickyImmix. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_builder_is_sticky_immix(builder: *mut MMTKBuilder) -> bool { let builder = unsafe { &mut *builder }; matches!(*builder.options.plan, PlanSelector::StickyImmix) @@ -117,7 +117,7 @@ pub unsafe extern "C" fn mmtk_builder_is_sticky_immix(builder: *mut MMTKBuilder) /// `mmtk_builder_default()` function, and the `MMTKBuilder` will be consumed after building /// the MMTk instance. /// - `upcalls` points to the struct that contains upcalls. It is allocated in C as static. -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_init_binding( builder: *mut MMTKBuilder, binding_options: *const RubyBindingOptions, @@ -137,18 +137,18 @@ pub unsafe extern "C" fn mmtk_init_binding( .unwrap_or_else(|_| panic!("Binding is already initialized")); } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_bind_mutator(tls: VMMutatorThread) -> *mut RubyMutator { Box::into_raw(memory_manager::bind_mutator(mmtk(), tls)) } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_destroy_mutator(mutator: *mut RubyMutator) { let mut boxed_mutator = unsafe { Box::from_raw(mutator) }; memory_manager::destroy_mutator(boxed_mutator.as_mut()) } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_alloc( mutator: *mut RubyMutator, size: usize, @@ -166,7 +166,7 @@ pub unsafe extern "C" fn mmtk_alloc( ) } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_post_alloc( mutator: *mut RubyMutator, refer: ObjectReference, @@ -176,85 +176,85 @@ pub unsafe extern "C" fn mmtk_post_alloc( memory_manager::post_alloc::(unsafe { &mut *mutator }, refer, bytes, semantics) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_will_never_move(object: ObjectReference) -> bool { !object.is_movable() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_initialize_collection(tls: VMThread) { memory_manager::initialize_collection(mmtk(), tls) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_prepare_to_fork() { mmtk().prepare_to_fork(); binding().join_all_gc_threads(); } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_after_fork(tls: VMThread) { mmtk().after_fork(tls); } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_enable_collection() -> bool { mmtk().enable_collection() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_disable_collection() -> bool { mmtk().disable_collection().is_ok() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_is_collection_enabled() -> bool { mmtk().is_collection_enabled() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_plan_name() -> *const libc::c_char { crate::binding().get_plan_name_c() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_used_bytes() -> usize { memory_manager::used_bytes(mmtk()) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_free_bytes() -> usize { memory_manager::free_bytes(mmtk()) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_total_bytes() -> usize { memory_manager::total_bytes(mmtk()) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_is_reachable(object: ObjectReference) -> bool { object.is_reachable() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_is_live_object(object: ObjectReference) -> bool { memory_manager::is_live_object(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_get_forwarded_object(object: ObjectReference) -> NullableObjectReference { object.get_forwarded_object().into() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_is_mmtk_object(addr: Address) -> bool { debug_assert!(!addr.is_zero()); debug_assert!(addr.is_aligned_to(mmtk::util::is_mmtk_object::VO_BIT_REGION_SIZE)); memory_manager::is_mmtk_object(addr).is_some() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_handle_user_collection_request( tls: VMMutatorThread, force: bool, @@ -263,82 +263,82 @@ pub extern "C" fn mmtk_handle_user_collection_request( crate::mmtk().handle_user_collection_request(tls, force, exhaustive); } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_harness_begin(tls: VMMutatorThread) { memory_manager::harness_begin(mmtk(), tls) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_harness_end(_tls: VMMutatorThread) { memory_manager::harness_end(mmtk()) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_starting_heap_address() -> Address { memory_manager::starting_heap_address() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_last_heap_address() -> Address { memory_manager::last_heap_address() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_add_obj_free_candidate(object: ObjectReference) { binding().weak_proc.add_obj_free_candidate(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_add_obj_free_candidates(objects: *const ObjectReference, len: usize) { let objects_slice = unsafe { std::slice::from_raw_parts(objects, len) }; binding().weak_proc.add_obj_free_candidates(objects_slice) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_get_all_obj_free_candidates() -> RawVecOfObjRef { let vec = binding().weak_proc.get_all_obj_free_candidates(); RawVecOfObjRef::from_vec(vec) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_free_raw_vec_of_obj_ref(raw_vec: RawVecOfObjRef) { unsafe { raw_vec.into_vec() }; } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_register_ppp(object: ObjectReference) { crate::binding().ppp_registry.register(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_register_ppps(objects: *const ObjectReference, len: usize) { let objects_slice = unsafe { std::slice::from_raw_parts(objects, len) }; crate::binding().ppp_registry.register_many(objects_slice) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_get_backwarded_object(object: ObjectReference) -> ObjectReference { let backwarding_table = crate::binding().backwarding_table.lock().unwrap(); backwarding_table.get(&object).copied().unwrap_or(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_get_vo_bit_log_region_size() -> usize { // TODO: Fix mmtk-core to make the log region size public mmtk::util::is_mmtk_object::VO_BIT_REGION_SIZE.trailing_zeros() as usize } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_get_vo_bit_base() -> usize { mmtk::util::metadata::side_metadata::vo_bit_side_metadata_addr().as_usize() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_gc_poll(tls: VMMutatorThread) { mmtk::memory_manager::gc_poll(mmtk(), tls) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_get_immix_bump_ptr_offset() -> usize { let AllocatorInfo::BumpPointer { bump_pointer_offset, @@ -349,32 +349,32 @@ pub extern "C" fn mmtk_get_immix_bump_ptr_offset() -> usize { bump_pointer_offset } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_pin_object(object: ObjectReference) -> bool { mmtk::memory_manager::pin_object(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_unpin_object(object: ObjectReference) -> bool { mmtk::memory_manager::unpin_object(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_is_pinned(object: ObjectReference) -> bool { mmtk::memory_manager::is_pinned(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_register_wb_unprotected_object(object: ObjectReference) { crate::binding().register_wb_unprotected_object(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_is_object_wb_unprotected(object: ObjectReference) -> bool { crate::binding().is_object_wb_unprotected(object) } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_object_reference_write_post( mutator: *mut RubyMutator, object: ObjectReference, @@ -391,7 +391,7 @@ pub unsafe extern "C" fn mmtk_object_reference_write_post( /// Enumerate objects. This function will call `callback(object, data)` for each object. It has /// undefined behavior if allocation or GC happens while this function is running. -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_enumerate_objects( callback: extern "C" fn(ObjectReference, *mut libc::c_void), data: *mut libc::c_void, @@ -401,26 +401,26 @@ pub extern "C" fn mmtk_enumerate_objects( }) } -#[no_mangle] +#[unsafe(no_mangle)] pub unsafe extern "C" fn mmtk_hidden_header_is_sane(hidden_header: *const HiddenHeader) -> bool { let hidden_header = unsafe { &*hidden_header }; hidden_header.is_sane() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_current_gc_may_move_object() -> bool { crate::mmtk().get_plan().current_gc_may_move_object() } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_current_gc_is_nursery() -> bool { crate::mmtk() .get_plan() .generational() - .is_some_and(|gen| gen.is_current_gc_nursery()) + .is_some_and(|gen_plan| gen_plan.is_current_gc_nursery()) } -#[no_mangle] +#[unsafe(no_mangle)] pub extern "C" fn mmtk_declare_weak_references(obj: ObjectReference) { crate::binding().weak_proc.declare_weak_references(obj) } diff --git a/mmtk/src/scanning.rs b/mmtk/src/scanning.rs index 1102a20..4814d9c 100644 --- a/mmtk/src/scanning.rs +++ b/mmtk/src/scanning.rs @@ -99,7 +99,7 @@ impl Scanning for VMScanning { 'gen_wb_unprotected_work: { let is_nursery_gc = (crate::mmtk().get_plan().generational()) - .is_some_and(|gen| gen.is_current_gc_nursery()); + .is_some_and(|gen_plan| gen_plan.is_current_gc_nursery()); if !is_nursery_gc { break 'gen_wb_unprotected_work; } From 8e5bfdf9281433b82b37954b94bfcd6449711bd6 Mon Sep 17 00:00:00 2001 From: Kunshan Wang Date: Thu, 24 Sep 2026 12:05:24 +0800 Subject: [PATCH 2/4] Cargo fmt --- mmtk/src/abi.rs | 2 +- mmtk/src/active_plan.rs | 4 ++-- mmtk/src/api.rs | 10 +++++----- mmtk/src/binding.rs | 4 ++-- mmtk/src/collection.rs | 2 +- mmtk/src/lib.rs | 4 ++-- mmtk/src/object_model.rs | 4 ++-- mmtk/src/ppp.rs | 5 ++--- mmtk/src/scanning.rs | 5 ++--- mmtk/src/weak_proc.rs | 11 ++++------- mmtk/src/weak_proc/concurrent_set_parallel.rs | 4 ++-- mmtk/src/weak_proc/st_table_parallel.rs | 6 +++--- mmtk/src/weak_proc/weak_global_tables.rs | 2 +- mmtk/src/yjit_support.rs | 2 +- 14 files changed, 30 insertions(+), 35 deletions(-) diff --git a/mmtk/src/abi.rs b/mmtk/src/abi.rs index f4ac4fc..ae76249 100644 --- a/mmtk/src/abi.rs +++ b/mmtk/src/abi.rs @@ -1,5 +1,5 @@ use crate::api::RubyMutator; -use crate::{extra_assert, upcalls, Ruby}; +use crate::{Ruby, extra_assert, upcalls}; use mmtk::scheduler::GCWorker; use mmtk::util::api_util::NullableObjectReference; use mmtk::util::{Address, ObjectReference, VMMutatorThread, VMWorkerThread}; diff --git a/mmtk/src/active_plan.rs b/mmtk/src/active_plan.rs index 80372a7..c859733 100644 --- a/mmtk/src/active_plan.rs +++ b/mmtk/src/active_plan.rs @@ -1,12 +1,12 @@ use std::collections::VecDeque; use std::marker::PhantomData; +use crate::Ruby; use crate::mmtk; use crate::upcalls; -use crate::Ruby; +use mmtk::Mutator; use mmtk::util::opaque_pointer::*; use mmtk::vm::ActivePlan; -use mmtk::Mutator; pub struct VMActivePlan {} diff --git a/mmtk/src/api.rs b/mmtk/src/api.rs index d329349..5e4d9b9 100644 --- a/mmtk/src/api.rs +++ b/mmtk/src/api.rs @@ -4,6 +4,8 @@ use std::ffi::CStr; +use crate::Ruby; +use crate::RubySlot; use crate::abi; use crate::abi::HiddenHeader; use crate::abi::RawVecOfObjRef; @@ -11,8 +13,9 @@ use crate::abi::RubyBindingOptions; use crate::binding; use crate::binding::RubyBinding; use crate::mmtk; -use crate::Ruby; -use crate::RubySlot; +use mmtk::AllocationSemantics; +use mmtk::MMTKBuilder; +use mmtk::Mutator; use mmtk::memory_manager; use mmtk::memory_manager::mmtk_init; use mmtk::util::alloc::AllocatorInfo; @@ -23,9 +26,6 @@ use mmtk::util::options::GCTriggerSelector; use mmtk::util::options::PlanSelector; use mmtk::util::{Address, ObjectReference}; use mmtk::util::{VMMutatorThread, VMThread}; -use mmtk::AllocationSemantics; -use mmtk::MMTKBuilder; -use mmtk::Mutator; // For cbindgen to generate simple type names. /// cbindgen:ignore diff --git a/mmtk/src/binding.rs b/mmtk/src/binding.rs index 9f52c88..d9c45c8 100644 --- a/mmtk/src/binding.rs +++ b/mmtk/src/binding.rs @@ -4,14 +4,14 @@ use std::str::FromStr; use std::sync::Mutex; use std::thread::JoinHandle; -use mmtk::util::ObjectReference; use mmtk::MMTK; +use mmtk::util::ObjectReference; +use crate::Ruby; use crate::abi; use crate::abi::RubyBindingOptions; use crate::ppp::PPPRegistry; use crate::weak_proc::WeakProcessor; -use crate::Ruby; pub struct RubyBindingFast {} diff --git a/mmtk/src/collection.rs b/mmtk/src/collection.rs index 9abb108..4c3c82d 100644 --- a/mmtk/src/collection.rs +++ b/mmtk/src/collection.rs @@ -1,7 +1,7 @@ use crate::abi::GCThreadTLS; use crate::api::RubyMutator; -use crate::{binding, mmtk, upcalls, Ruby}; +use crate::{Ruby, binding, mmtk, upcalls}; use mmtk::memory_manager; use mmtk::scheduler::*; use mmtk::util::{VMMutatorThread, VMThread, VMWorkerThread}; diff --git a/mmtk/src/lib.rs b/mmtk/src/lib.rs index d10a70e..58cc6d0 100644 --- a/mmtk/src/lib.rs +++ b/mmtk/src/lib.rs @@ -14,10 +14,10 @@ use std::thread::ThreadId; use abi::RubyUpcalls; use binding::{RubyBinding, RubyBindingFast, RubyBindingFastMut}; +use mmtk::MMTK; use mmtk::util::Address; -use mmtk::vm::slot::{SimpleSlot, UnimplementedMemorySlice}; use mmtk::vm::VMBinding; -use mmtk::MMTK; +use mmtk::vm::slot::{SimpleSlot, UnimplementedMemorySlice}; use once_cell::sync::OnceCell; pub mod abi; diff --git a/mmtk/src/object_model.rs b/mmtk/src/object_model.rs index bda2d4d..525c818 100644 --- a/mmtk/src/object_model.rs +++ b/mmtk/src/object_model.rs @@ -1,7 +1,7 @@ use std::ptr::copy_nonoverlapping; -use crate::abi::{RubyObjectAccess, MIN_OBJ_ALIGN, OBJREF_OFFSET}; -use crate::{abi, Ruby}; +use crate::abi::{MIN_OBJ_ALIGN, OBJREF_OFFSET, RubyObjectAccess}; +use crate::{Ruby, abi}; use mmtk::util::constants::BITS_IN_BYTE; use mmtk::util::copy::{CopySemantics, GCWorkerCopyContext}; use mmtk::util::{Address, ObjectReference}; diff --git a/mmtk/src/ppp.rs b/mmtk/src/ppp.rs index 7b911c7..99a8b71 100644 --- a/mmtk/src/ppp.rs +++ b/mmtk/src/ppp.rs @@ -1,13 +1,12 @@ use std::sync::Mutex; use mmtk::{ - memory_manager, + MMTK, memory_manager, scheduler::{GCWork, GCWorker, WorkBucketStage}, util::{ObjectReference, VMWorkerThread}, - MMTK, }; -use crate::{abi::GCThreadTLS, upcalls, Ruby}; +use crate::{Ruby, abi::GCThreadTLS, upcalls}; pub struct PPPRegistry { ppps: Mutex>, diff --git a/mmtk/src/scanning.rs b/mmtk/src/scanning.rs index 4814d9c..fe2a2d8 100644 --- a/mmtk/src/scanning.rs +++ b/mmtk/src/scanning.rs @@ -1,7 +1,7 @@ use crate::abi::GCThreadTLS; use crate::utils::ChunkedVecCollector; -use crate::{extra_assert, is_mmtk_object_safe, upcalls, Ruby, RubySlot}; +use crate::{Ruby, RubySlot, extra_assert, is_mmtk_object_safe, upcalls}; use mmtk::scheduler::{GCWork, GCWorker, WorkBucketStage}; use mmtk::util::{ObjectReference, VMWorkerThread}; use mmtk::vm::{ObjectTracer, ObjectTracerContext, RootsWorkFactory, Scanning, SlotVisitor}; @@ -52,8 +52,7 @@ impl Scanning for VMScanning { if forwarded_target != target_object { trace!( " Forwarded target {} -> {}", - target_object, - forwarded_target + target_object, forwarded_target ); } forwarded_target diff --git a/mmtk/src/weak_proc.rs b/mmtk/src/weak_proc.rs index 8cb3fb8..26b0120 100644 --- a/mmtk/src/weak_proc.rs +++ b/mmtk/src/weak_proc.rs @@ -7,13 +7,13 @@ use mmtk::{ }; use crate::{ + Ruby, abi::{self, GCThreadTLS}, extra_assert, is_mmtk_object_safe, upcalls, weak_proc::weak_global_tables::{ UpdateCiTable, UpdateFinalizerAndObjIdTables, UpdateFrozenStringsTable, UpdateGenericFieldsTbl, UpdateGlobalSymbolsTable, UpdateOverloadedCmeTable, }, - Ruby, }; pub mod concurrent_set_parallel; @@ -171,8 +171,7 @@ impl GCWork for ProcessObjFreeCandidates { let new_object = object.forward(); trace!( "Forwarding obj_free candidate: {} -> {}", - object, - new_object + object, new_object ); new_candidates.push(new_object); } else if (upcalls().obj_needs_cleanup_p)(object) { @@ -215,8 +214,7 @@ impl GCWork for UpdateWbUnprotectedObjectsList { let new_object = object.forward(); trace!( "Forwarding WB-unprotected object: {} -> {}", - object, - new_object + object, new_object ); objects.insert(new_object); } else { @@ -298,8 +296,7 @@ impl GCWork for ProcessWeakReferences { if let Some(forwarded_target) = target_object.get_forwarded_object() { trace!( " Forwarded target {} -> {}", - target_object, - forwarded_target + target_object, forwarded_target ); forwarded_target } else { diff --git a/mmtk/src/weak_proc/concurrent_set_parallel.rs b/mmtk/src/weak_proc/concurrent_set_parallel.rs index 0ae5b28..a45a7c4 100644 --- a/mmtk/src/weak_proc/concurrent_set_parallel.rs +++ b/mmtk/src/weak_proc/concurrent_set_parallel.rs @@ -1,6 +1,6 @@ use std::sync::{ - atomic::{AtomicUsize, Ordering}, Arc, + atomic::{AtomicUsize, Ordering}, }; use mmtk::{ @@ -8,7 +8,7 @@ use mmtk::{ util::ObjectReference, }; -use crate::{abi::ConcurrentSetStats, upcalls, weak_proc::WeakConcurrentSetKind, Ruby}; +use crate::{Ruby, abi::ConcurrentSetStats, upcalls, weak_proc::WeakConcurrentSetKind}; pub fn process_weak_concurrent_set_chunked( name: &'static str, diff --git a/mmtk/src/weak_proc/st_table_parallel.rs b/mmtk/src/weak_proc/st_table_parallel.rs index c694422..e1e98fd 100644 --- a/mmtk/src/weak_proc/st_table_parallel.rs +++ b/mmtk/src/weak_proc/st_table_parallel.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use mmtk::scheduler::{GCWork, GCWorker, WorkBucketStage}; -use crate::{abi::st_table, upcalls, utils::AfterAll, Ruby}; +use crate::{Ruby, abi::st_table, upcalls, utils::AfterAll}; pub fn process_weak_table_chunked( name: &'static str, @@ -18,8 +18,8 @@ pub fn process_weak_table_chunked( (upcalls().st_get_size_info)(table, &mut entries_start, &mut entries_bound, &mut bins_num); let num_entries = (upcalls().st_get_num_entries)(table); debug!( - "name: {name}, entries_start: {entries_start}, entries_bound: {entries_bound}, bins_num: {bins_num}, num_entries: {num_entries}" - ); + "name: {name}, entries_start: {entries_start}, entries_bound: {entries_bound}, bins_num: {bins_num}, num_entries: {num_entries}" + ); let table_name_ptr = name.as_ptr(); let table_name_len = name.len(); diff --git a/mmtk/src/weak_proc/weak_global_tables.rs b/mmtk/src/weak_proc/weak_global_tables.rs index 2377870..3c275e9 100644 --- a/mmtk/src/weak_proc/weak_global_tables.rs +++ b/mmtk/src/weak_proc/weak_global_tables.rs @@ -4,7 +4,7 @@ use mmtk::{ }; use crate::{ - abi::GCThreadTLS, extra_assert, is_mmtk_object_safe, upcalls, weak_proc::Forwardable, Ruby, + Ruby, abi::GCThreadTLS, extra_assert, is_mmtk_object_safe, upcalls, weak_proc::Forwardable, }; pub trait GlobalTableProcessingWork { diff --git a/mmtk/src/yjit_support.rs b/mmtk/src/yjit_support.rs index 6801a32..7e78eaa 100644 --- a/mmtk/src/yjit_support.rs +++ b/mmtk/src/yjit_support.rs @@ -3,7 +3,7 @@ use mmtk::{ util::VMWorkerThread, }; -use crate::{abi::GCThreadTLS, upcalls, Ruby}; +use crate::{Ruby, abi::GCThreadTLS, upcalls}; struct BeforeUpdatingJitCode; From 27b3783480afd13a502b88b43608f729742048d1 Mon Sep 17 00:00:00 2001 From: Kunshan Wang Date: Thu, 24 Sep 2026 15:03:31 +0800 Subject: [PATCH 3/4] Bump MMTk and deps --- mmtk/Cargo.lock | 127 +++++++++++++++++++++++------------------------- mmtk/Cargo.toml | 4 +- 2 files changed, 62 insertions(+), 69 deletions(-) diff --git a/mmtk/Cargo.lock b/mmtk/Cargo.lock index 22537a7..75a596d 100644 --- a/mmtk/Cargo.lock +++ b/mmtk/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -124,20 +124,20 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65693059b6b9c588b9f62fed1cedbf0a8b805631457ea162d68f0de186f3de5" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] name = "cc" -version = "1.4.0" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" +checksum = "0ad534f4357a5264cce5019c989cf66a4f0dc4e0d1b1d15f8aacec0ff7360273" dependencies = [ "find-msvc-tools", "jobserver", @@ -263,9 +263,9 @@ checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "either" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" [[package]] name = "enum-map" @@ -312,9 +312,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "getrandom" @@ -370,9 +370,9 @@ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" dependencies = [ "either", ] @@ -437,9 +437,9 @@ checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libgit2-sys" -version = "0.18.7+1.9.6" +version = "0.18.8+1.9.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c7391e4b9f4ffab1a624223cc1d7385ff9a678f490768add717de7ea2f4d89" +checksum = "7f7c568b25d7489bc3fb2988ed69ab111d2944d2f5fec3d5c987fe545ea97b50" dependencies = [ "cc", "libc", @@ -470,9 +470,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ceec5bc11778974d1bcb055b18002eba7f4b3518b6a0081b3af5f21666da9ad" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "memchr" @@ -483,7 +483,7 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mmtk" version = "0.33.0" -source = "git+https://github.com/mmtk/mmtk-core.git?rev=2feeaccb130d95376e248b0aee6bf8f83c56f0ea#2feeaccb130d95376e248b0aee6bf8f83c56f0ea" +source = "git+https://github.com/wks/mmtk-core.git?rev=e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38#e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38" dependencies = [ "atomic", "atomic-traits", @@ -518,7 +518,7 @@ dependencies = [ [[package]] name = "mmtk-macros" version = "0.33.0" -source = "git+https://github.com/mmtk/mmtk-core.git?rev=2feeaccb130d95376e248b0aee6bf8f83c56f0ea#2feeaccb130d95376e248b0aee6bf8f83c56f0ea" +source = "git+https://github.com/wks/mmtk-core.git?rev=e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38#e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38" dependencies = [ "proc-macro-error", "proc-macro2", @@ -601,15 +601,15 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "portable-atomic" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" @@ -688,9 +688,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.16" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -758,9 +758,9 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" [[package]] name = "spin" -version = "0.10.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" +checksum = "0134f9043ed38b087ac4f7d4af44c79e2c9e5094421fe3164f435ce585953b10" dependencies = [ "lock_api", ] @@ -773,15 +773,15 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strum" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +checksum = "9628de9b8791db39ceda2b119bbe13134770b56c138ec1d3af810d045c04f9bd" [[package]] name = "strum_macros" -version = "0.27.2" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +checksum = "ab85eea0270ee17587ed4156089e10b9e6880ee688791d45a905f5b1ca36f664" dependencies = [ "heck", "proc-macro2", @@ -823,9 +823,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.36.1" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "252800745060e7b9ffb7b2badbd8b31cfa4aa2e61af879d0a3bf2a317c20217d" +checksum = "92ab6a2f8bfe508deb3c6406578252e491d299cbbf3bc0529ecc3313aee4a52f" dependencies = [ "libc", "memchr", @@ -837,18 +837,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.19" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", @@ -903,47 +903,46 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.61.3" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" dependencies = [ "windows-collections", "windows-core", "windows-future", - "windows-link 0.1.3", "windows-numerics", ] [[package]] name = "windows-collections" -version = "0.2.0" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" dependencies = [ "windows-core", ] [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link 0.1.3", + "windows-link", "windows-result", "windows-strings", ] [[package]] name = "windows-future" -version = "0.2.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" dependencies = [ "windows-core", - "windows-link 0.1.3", + "windows-link", "windows-threading", ] @@ -969,12 +968,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "windows-link" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" - [[package]] name = "windows-link" version = "0.2.1" @@ -983,30 +976,30 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-numerics" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" dependencies = [ "windows-core", - "windows-link 0.1.3", + "windows-link", ] [[package]] name = "windows-result" -version = "0.3.4" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] name = "windows-strings" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] [[package]] @@ -1015,14 +1008,14 @@ version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-link 0.2.1", + "windows-link", ] [[package]] name = "windows-threading" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ - "windows-link 0.1.3", + "windows-link", ] diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index f5a3e45..dd7c98b 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -36,8 +36,8 @@ probe = "0.5" features = ["vo_bit", "object_pinning", "sticky_immix_non_moving_nursery"] # Uncomment the following lines to use mmtk-core from the official repository. -git = "https://github.com/mmtk/mmtk-core.git" -rev = "2feeaccb130d95376e248b0aee6bf8f83c56f0ea" +git = "https://github.com/wks/mmtk-core.git" +rev = "e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38" # Uncomment the following line to use mmtk-core from a local repository. #path = "../../mmtk-core" From c319c17c22393a53817642d6c096614f8fbfcaf5 Mon Sep 17 00:00:00 2001 From: Kunshan Wang Date: Mon, 28 Sep 2026 16:34:27 +0800 Subject: [PATCH 4/4] Bump mmtk-core revision --- mmtk/Cargo.lock | 28 ++++++++++++++++++++++++++-- mmtk/Cargo.toml | 2 +- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/mmtk/Cargo.lock b/mmtk/Cargo.lock index 75a596d..8e5bc88 100644 --- a/mmtk/Cargo.lock +++ b/mmtk/Cargo.lock @@ -483,7 +483,7 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "mmtk" version = "0.33.0" -source = "git+https://github.com/wks/mmtk-core.git?rev=e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38#e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38" +source = "git+https://github.com/wks/mmtk-core.git?rev=680729f0a9c9cceb73b41e77d8f468d5cc05726d#680729f0a9c9cceb73b41e77d8f468d5cc05726d" dependencies = [ "atomic", "atomic-traits", @@ -513,12 +513,13 @@ dependencies = [ "strum", "strum_macros", "sysinfo", + "yoke-derive", ] [[package]] name = "mmtk-macros" version = "0.33.0" -source = "git+https://github.com/wks/mmtk-core.git?rev=e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38#e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38" +source = "git+https://github.com/wks/mmtk-core.git?rev=680729f0a9c9cceb73b41e77d8f468d5cc05726d#680729f0a9c9cceb73b41e77d8f468d5cc05726d" dependencies = [ "proc-macro-error", "proc-macro2", @@ -821,6 +822,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + [[package]] name = "sysinfo" version = "0.38.4" @@ -1019,3 +1031,15 @@ checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" dependencies = [ "windows-link", ] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "synstructure", +] diff --git a/mmtk/Cargo.toml b/mmtk/Cargo.toml index dd7c98b..25a938f 100644 --- a/mmtk/Cargo.toml +++ b/mmtk/Cargo.toml @@ -37,7 +37,7 @@ features = ["vo_bit", "object_pinning", "sticky_immix_non_moving_nursery"] # Uncomment the following lines to use mmtk-core from the official repository. git = "https://github.com/wks/mmtk-core.git" -rev = "e3d6522cdbcd0e8fc10711d956a9fd9c7c0d3a38" +rev = "680729f0a9c9cceb73b41e77d8f468d5cc05726d" # Uncomment the following line to use mmtk-core from a local repository. #path = "../../mmtk-core"