diff options
author | Kunshan Wang <[email protected]> | 2025-05-28 14:28:19 +0800 |
---|---|---|
committer | git <[email protected]> | 2025-05-30 14:55:42 +0000 |
commit | 94688bdc7da3ac82f712d3cdc11859ace3bfa8ac (patch) | |
tree | 346f3aef5df9b665a7a3f6c93f98ab889cfde66f /gc/mmtk/src/api.rs | |
parent | d8774ec98fb723f5cc6872a5019ec588a8b5aef6 (diff) |
[ruby/mmtk] Fix clippy warnings and formatting.
We also enable `#![warn(unsafe_op_in_unsafe_fn)]` in the whole mmtk_ruby
crate.
https://github.com/ruby/mmtk/commit/8b8025f71a
Diffstat (limited to 'gc/mmtk/src/api.rs')
-rw-r--r-- | gc/mmtk/src/api.rs | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/gc/mmtk/src/api.rs b/gc/mmtk/src/api.rs index c15996727e..fff7a4a37c 100644 --- a/gc/mmtk/src/api.rs +++ b/gc/mmtk/src/api.rs @@ -1,5 +1,9 @@ -use std::sync::atomic::Ordering; +// Functions in this module are unsafe for one reason: +// They are called by C functions and they need to pass raw pointers to Rust. +#![allow(clippy::missing_safety_doc)] + use mmtk::util::options::PlanSelector; +use std::sync::atomic::Ordering; use crate::abi::RawVecOfObjRef; use crate::abi::RubyBindingOptions; @@ -7,10 +11,10 @@ use crate::abi::RubyUpcalls; use crate::binding; use crate::binding::RubyBinding; use crate::mmtk; -use crate::Ruby; -use crate::RubySlot; use crate::utils::default_heap_max; use crate::utils::parse_capacity; +use crate::Ruby; +use crate::RubySlot; use mmtk::memory_manager; use mmtk::memory_manager::mmtk_init; use mmtk::util::constants::MIN_OBJECT_SIZE; @@ -38,22 +42,18 @@ pub extern "C" fn mmtk_is_reachable(object: ObjectReference) -> bool { // =============== Bootup =============== fn mmtk_builder_default_parse_threads() -> usize { - let threads_str = std::env::var("MMTK_THREADS") - .unwrap_or("0".to_string()); + let threads_str = std::env::var("MMTK_THREADS").unwrap_or("0".to_string()); - threads_str - .parse::<usize>() - .unwrap_or_else(|_err| { - eprintln!("[FATAL] Invalid MMTK_THREADS {}", threads_str); - std::process::exit(1); - }) + threads_str.parse::<usize>().unwrap_or_else(|_err| { + eprintln!("[FATAL] Invalid MMTK_THREADS {}", threads_str); + std::process::exit(1); + }) } fn mmtk_builder_default_parse_heap_min() -> usize { const DEFAULT_HEAP_MIN: usize = 1 << 20; - let heap_min_str = std::env::var("MMTK_HEAP_MIN") - .unwrap_or(DEFAULT_HEAP_MIN.to_string()); + let heap_min_str = std::env::var("MMTK_HEAP_MIN").unwrap_or(DEFAULT_HEAP_MIN.to_string()); let size = parse_capacity(&heap_min_str, 0); if size == 0 { @@ -65,8 +65,7 @@ fn mmtk_builder_default_parse_heap_min() -> usize { } fn mmtk_builder_default_parse_heap_max() -> usize { - let heap_max_str = std::env::var("MMTK_HEAP_MAX") - .unwrap_or(default_heap_max().to_string()); + let heap_max_str = std::env::var("MMTK_HEAP_MAX").unwrap_or(default_heap_max().to_string()); let size = parse_capacity(&heap_max_str, 0); if size == 0 { @@ -78,8 +77,7 @@ fn mmtk_builder_default_parse_heap_max() -> usize { } fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCTriggerSelector { - let heap_mode_str = std::env::var("MMTK_HEAP_MODE") - .unwrap_or("dynamic".to_string()); + let heap_mode_str = std::env::var("MMTK_HEAP_MODE").unwrap_or("dynamic".to_string()); match heap_mode_str.as_str() { "fixed" => GCTriggerSelector::FixedHeapSize(heap_max), @@ -92,8 +90,7 @@ fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCT } fn mmtk_builder_default_parse_plan() -> PlanSelector { - let plan_str = std::env::var("MMTK_PLAN") - .unwrap_or("Immix".to_string()); + let plan_str = std::env::var("MMTK_PLAN").unwrap_or("Immix".to_string()); match plan_str.as_str() { "NoGC" => PlanSelector::NoGC, @@ -121,11 +118,17 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder { let heap_max = mmtk_builder_default_parse_heap_max(); if heap_min >= heap_max { - eprintln!("[FATAL] MMTK_HEAP_MIN({}) >= MMTK_HEAP_MAX({})", heap_min, heap_max); + eprintln!( + "[FATAL] MMTK_HEAP_MIN({}) >= MMTK_HEAP_MAX({})", + heap_min, heap_max + ); std::process::exit(1); } - builder.options.gc_trigger.set(mmtk_builder_default_parse_heap_mode(heap_min, heap_max)); + builder + .options + .gc_trigger + .set(mmtk_builder_default_parse_heap_mode(heap_min, heap_max)); builder.options.plan.set(mmtk_builder_default_parse_plan()); @@ -133,7 +136,7 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder { } #[no_mangle] -pub extern "C" fn mmtk_init_binding( +pub unsafe extern "C" fn mmtk_init_binding( builder: *mut MMTKBuilder, _binding_options: *const RubyBindingOptions, upcalls: *const RubyUpcalls, @@ -142,11 +145,19 @@ pub extern "C" fn mmtk_init_binding( crate::set_panic_hook(); let builder = unsafe { Box::from_raw(builder) }; - let binding_options = RubyBindingOptions {ractor_check_mode: false, suffix_size: 0}; + let binding_options = RubyBindingOptions { + ractor_check_mode: false, + suffix_size: 0, + }; let mmtk_boxed = mmtk_init(&builder); let mmtk_static = Box::leak(Box::new(mmtk_boxed)); - let binding = RubyBinding::new(mmtk_static, &binding_options, upcalls, weak_reference_dead_value); + let binding = RubyBinding::new( + mmtk_static, + &binding_options, + upcalls, + weak_reference_dead_value, + ); crate::BINDING .set(binding) @@ -164,7 +175,7 @@ pub extern "C" fn mmtk_bind_mutator(tls: VMMutatorThread) -> *mut RubyMutator { } #[no_mangle] -pub extern "C" fn mmtk_destroy_mutator(mutator: *mut RubyMutator) { +pub unsafe extern "C" fn mmtk_destroy_mutator(mutator: *mut RubyMutator) { // notify mmtk-core about destroyed mutator memory_manager::destroy_mutator(unsafe { &mut *mutator }); // turn the ptr back to a box, and let Rust properly reclaim it @@ -184,7 +195,9 @@ pub extern "C" fn mmtk_handle_user_collection_request( #[no_mangle] pub extern "C" fn mmtk_set_gc_enabled(enable: bool) { - crate::CONFIGURATION.gc_enabled.store(enable, Ordering::Relaxed); + crate::CONFIGURATION + .gc_enabled + .store(enable, Ordering::Relaxed); } #[no_mangle] @@ -195,7 +208,7 @@ pub extern "C" fn mmtk_gc_enabled_p() -> bool { // =============== Object allocation =============== #[no_mangle] -pub extern "C" fn mmtk_alloc( +pub unsafe extern "C" fn mmtk_alloc( mutator: *mut RubyMutator, size: usize, align: usize, @@ -213,7 +226,7 @@ pub extern "C" fn mmtk_alloc( } #[no_mangle] -pub extern "C" fn mmtk_post_alloc( +pub unsafe extern "C" fn mmtk_post_alloc( mutator: *mut RubyMutator, refer: ObjectReference, bytes: usize, @@ -243,7 +256,7 @@ pub extern "C" fn mmtk_remove_weak(ptr: &ObjectReference) { // =============== Write barriers =============== #[no_mangle] -pub extern "C" fn mmtk_object_reference_write_post( +pub unsafe extern "C" fn mmtk_object_reference_write_post( mutator: *mut RubyMutator, object: ObjectReference, ) { @@ -347,7 +360,7 @@ pub extern "C" fn mmtk_plan() -> *const u8 { PlanSelector::NoGC => NO_GC.as_ptr(), PlanSelector::MarkSweep => MARK_SWEEP.as_ptr(), PlanSelector::Immix => IMMIX.as_ptr(), - _ => panic!("Unknown plan") + _ => panic!("Unknown plan"), } } @@ -359,7 +372,7 @@ pub extern "C" fn mmtk_heap_mode() -> *const u8 { match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger { GCTriggerSelector::FixedHeapSize(_) => FIXED_HEAP.as_ptr(), GCTriggerSelector::DynamicHeapSize(_, _) => DYNAMIC_HEAP.as_ptr(), - _ => panic!("Unknown heap mode") + _ => panic!("Unknown heap mode"), } } @@ -368,7 +381,7 @@ pub extern "C" fn mmtk_heap_min() -> usize { match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger { GCTriggerSelector::FixedHeapSize(_) => 0, GCTriggerSelector::DynamicHeapSize(min_size, _) => min_size, - _ => panic!("Unknown heap mode") + _ => panic!("Unknown heap mode"), } } @@ -377,7 +390,7 @@ pub extern "C" fn mmtk_heap_max() -> usize { match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger { GCTriggerSelector::FixedHeapSize(max_size) => max_size, GCTriggerSelector::DynamicHeapSize(_, max_size) => max_size, - _ => panic!("Unknown heap mode") + _ => panic!("Unknown heap mode"), } } |