Skip to content

Commit eace6bc

Browse files
committed
Bump to Rust 2024 edition
1 parent 3f94f90 commit eace6bc

6 files changed

Lines changed: 56 additions & 100 deletions

File tree

‎gc/mmtk/Cargo.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "mmtk_ruby"
33
version = "0.1.0"
44
authors = []
5-
edition = "2021"
5+
edition = "2024"
66

77
[lib]
88
name = "mmtk_ruby"

‎gc/mmtk/src/api.rs‎

Lines changed: 48 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ use mmtk::Mutator;
3636

3737
pub type RubyMutator = Mutator<Ruby>;
3838

39-
#[no_mangle]
39+
#[unsafe(no_mangle)]
4040
pub extern "C" fn mmtk_is_live_object(object: ObjectReference) -> bool {
4141
memory_manager::is_live_object(object)
4242
}
4343

44-
#[no_mangle]
44+
#[unsafe(no_mangle)]
4545
pub extern "C" fn mmtk_is_reachable(object: ObjectReference) -> bool {
4646
binding::object_survives_current_gc(object)
4747
}
@@ -106,25 +106,14 @@ fn parse_float_env_var(key: &str, default: f64, min: f64, max: f64) -> f64 {
106106
.unwrap_or(default)
107107
}
108108

109-
fn mmtk_builder_default_parse_heap_mode(
110-
heap_min: usize,
111-
heap_max: usize,
112-
plan: PlanSelector,
113-
) -> GCTriggerSelector {
109+
fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCTriggerSelector {
114110
let make_fixed = || GCTriggerSelector::FixedHeapSize(heap_max);
115111
let make_dynamic = || GCTriggerSelector::DynamicHeapSize(heap_min, heap_max);
116112

117113
parse_env_var_with("MMTK_HEAP_MODE", |s| match s {
118114
"fixed" => Some(make_fixed()),
119115
"dynamic" => Some(make_dynamic()),
120116
"ruby" => {
121-
if plan == PlanSelector::NoGC {
122-
eprintln!(
123-
"[WARN] Cannot use ruby heap mode with NoGC. Using fixed heap mode instead."
124-
);
125-
return Some(make_fixed());
126-
}
127-
128117
let min_ratio = parse_float_env_var("RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO", 0.2, 0.0, 1.0);
129118
let goal_ratio =
130119
parse_float_env_var("RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO", 0.4, min_ratio, 1.0);
@@ -144,13 +133,6 @@ fn mmtk_builder_default_parse_heap_mode(
144133
Some(GCTriggerSelector::Delegated)
145134
}
146135
"cpu" => {
147-
if plan == PlanSelector::NoGC {
148-
eprintln!(
149-
"[WARN] Cannot use cpu heap mode with NoGC. Using fixed heap mode instead."
150-
);
151-
return Some(make_fixed());
152-
}
153-
154136
// CPU-overhead-driven heap sizing based on Tavakolisomeh et al.,
155137
// "Heap Size Adjustment with CPU Control", MPLR '23.
156138
//
@@ -202,17 +184,15 @@ fn mmtk_builder_default_parse_plan() -> PlanSelector {
202184
.unwrap_or(PlanSelector::Immix)
203185
}
204186

205-
#[no_mangle]
187+
#[unsafe(no_mangle)]
206188
pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
207189
let mut builder = MMTKBuilder::new_no_env_vars();
208190
builder.options.no_finalizer.set(true);
209191

210-
if let Some(threads) = mmtk_builder_default_parse_threads() {
211-
if !builder.options.threads.set(threads) {
212-
// MMTk will validate it and reject 0.
213-
eprintln!("[FATAL] Failed to set the number of MMTk threads to {threads}");
214-
std::process::exit(1);
215-
}
192+
if let Some(threads) = mmtk_builder_default_parse_threads() && !builder.options.threads.set(threads) {
193+
// MMTk will validate it and reject 0.
194+
eprintln!("[FATAL] Failed to set the number of MMTk threads to {threads}");
195+
std::process::exit(1);
216196
}
217197

218198
let heap_min = mmtk_builder_default_parse_heap_min();
@@ -224,21 +204,17 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
224204
std::process::exit(1);
225205
}
226206

227-
let plan = mmtk_builder_default_parse_plan();
228-
229-
builder.options.plan.set(plan);
230-
231207
builder
232208
.options
233209
.gc_trigger
234-
.set(mmtk_builder_default_parse_heap_mode(
235-
heap_min, heap_max, plan,
236-
));
210+
.set(mmtk_builder_default_parse_heap_mode(heap_min, heap_max));
211+
212+
builder.options.plan.set(mmtk_builder_default_parse_plan());
237213

238214
Box::into_raw(Box::new(builder))
239215
}
240216

241-
#[no_mangle]
217+
#[unsafe(no_mangle)]
242218
pub unsafe extern "C" fn mmtk_init_binding(
243219
builder: *mut MMTKBuilder,
244220
binding_options: *const RubyBindingOptions,
@@ -265,27 +241,27 @@ pub unsafe extern "C" fn mmtk_init_binding(
265241
.unwrap_or_else(|_| panic!("Binding is already initialized"));
266242
}
267243

268-
#[no_mangle]
244+
#[unsafe(no_mangle)]
269245
pub extern "C" fn mmtk_get_vo_bit_log_region_size() -> usize {
270246
mmtk::util::is_mmtk_object::VO_BIT_REGION_SIZE.trailing_zeros() as usize
271247
}
272248

273-
#[no_mangle]
249+
#[unsafe(no_mangle)]
274250
pub extern "C" fn mmtk_get_vo_bit_base_addr() -> usize {
275251
mmtk::util::metadata::side_metadata::vo_bit_side_metadata_addr().as_usize()
276252
}
277253

278-
#[no_mangle]
254+
#[unsafe(no_mangle)]
279255
pub extern "C" fn mmtk_initialize_collection(tls: VMThread) {
280256
memory_manager::initialize_collection(mmtk(), tls)
281257
}
282258

283-
#[no_mangle]
259+
#[unsafe(no_mangle)]
284260
pub extern "C" fn mmtk_bind_mutator(tls: VMMutatorThread) -> *mut RubyMutator {
285261
Box::into_raw(memory_manager::bind_mutator(mmtk(), tls))
286262
}
287263

288-
#[no_mangle]
264+
#[unsafe(no_mangle)]
289265
pub unsafe extern "C" fn mmtk_get_bump_pointer_allocator(m: *mut RubyMutator) -> *mut BumpPointer {
290266
match *crate::BINDING.get().unwrap().mmtk.get_options().plan {
291267
PlanSelector::Immix | PlanSelector::StickyImmix => {
@@ -303,7 +279,7 @@ pub unsafe extern "C" fn mmtk_get_bump_pointer_allocator(m: *mut RubyMutator) ->
303279
}
304280
}
305281

306-
#[no_mangle]
282+
#[unsafe(no_mangle)]
307283
pub unsafe extern "C" fn mmtk_destroy_mutator(mutator: *mut RubyMutator) {
308284
// notify mmtk-core about destroyed mutator
309285
memory_manager::destroy_mutator(unsafe { &mut *mutator });
@@ -313,7 +289,7 @@ pub unsafe extern "C" fn mmtk_destroy_mutator(mutator: *mut RubyMutator) {
313289

314290
// =============== GC ===============
315291

316-
#[no_mangle]
292+
#[unsafe(no_mangle)]
317293
pub extern "C" fn mmtk_handle_user_collection_request(
318294
tls: VMMutatorThread,
319295
force: bool,
@@ -339,7 +315,7 @@ pub extern "C" fn mmtk_handle_user_collection_request(
339315
}
340316
}
341317

342-
#[no_mangle]
318+
#[unsafe(no_mangle)]
343319
pub extern "C" fn mmtk_set_gc_enabled(enable: bool) {
344320
if enable {
345321
crate::mmtk().enable_collection();
@@ -357,22 +333,22 @@ pub extern "C" fn mmtk_set_gc_enabled(enable: bool) {
357333
}
358334
}
359335

360-
#[no_mangle]
336+
#[unsafe(no_mangle)]
361337
pub extern "C" fn mmtk_gc_enabled_p() -> bool {
362338
crate::mmtk().is_collection_enabled()
363339
}
364340

365341
// =============== Object allocation ===============
366342

367-
#[no_mangle]
343+
#[unsafe(no_mangle)]
368344
pub extern "C" fn mmtk_max_non_los_default_alloc_bytes() -> usize {
369345
mmtk()
370346
.get_plan()
371347
.constraints()
372348
.max_non_los_default_alloc_bytes
373349
}
374350

375-
#[no_mangle]
351+
#[unsafe(no_mangle)]
376352
pub unsafe extern "C" fn mmtk_alloc(
377353
mutator: *mut RubyMutator,
378354
size: usize,
@@ -390,7 +366,7 @@ pub unsafe extern "C" fn mmtk_alloc(
390366
)
391367
}
392368

393-
#[no_mangle]
369+
#[unsafe(no_mangle)]
394370
pub unsafe extern "C" fn mmtk_post_alloc(
395371
mutator: *mut RubyMutator,
396372
refer: ObjectReference,
@@ -400,7 +376,7 @@ pub unsafe extern "C" fn mmtk_post_alloc(
400376
memory_manager::post_alloc::<Ruby>(unsafe { &mut *mutator }, refer, bytes, semantics)
401377
}
402378

403-
#[no_mangle]
379+
#[unsafe(no_mangle)]
404380
pub unsafe extern "C" fn mmtk_add_obj_free_candidates(
405381
objects: *const ObjectReference,
406382
count: usize,
@@ -414,31 +390,31 @@ pub unsafe extern "C" fn mmtk_add_obj_free_candidates(
414390

415391
// =============== Weak references ===============
416392

417-
#[no_mangle]
393+
#[unsafe(no_mangle)]
418394
pub extern "C" fn mmtk_declare_weak_references(object: ObjectReference) {
419395
binding().weak_proc.add_weak_reference(object);
420396
}
421397

422-
#[no_mangle]
398+
#[unsafe(no_mangle)]
423399
pub extern "C" fn mmtk_weak_references_alive_p(object: ObjectReference) -> bool {
424400
binding::object_survives_current_gc(object)
425401
}
426402

427-
#[no_mangle]
403+
#[unsafe(no_mangle)]
428404
pub extern "C" fn mmtk_weak_references_count() -> usize {
429405
binding().weak_proc.weak_references_count()
430406
}
431407

432408
// =============== Compaction ===============
433409

434-
#[no_mangle]
410+
#[unsafe(no_mangle)]
435411
pub extern "C" fn mmtk_register_pinning_obj(obj: ObjectReference) {
436412
crate::binding().pinning_registry.register(obj);
437413
}
438414

439415
// =============== Write barriers ===============
440416

441-
#[no_mangle]
417+
#[unsafe(no_mangle)]
442418
pub unsafe extern "C" fn mmtk_object_reference_write_post(
443419
mutator: *mut RubyMutator,
444420
object: ObjectReference,
@@ -453,19 +429,19 @@ pub unsafe extern "C" fn mmtk_object_reference_write_post(
453429
)
454430
}
455431

456-
#[no_mangle]
432+
#[unsafe(no_mangle)]
457433
pub extern "C" fn mmtk_register_wb_unprotected_object(object: ObjectReference) {
458434
crate::binding().register_wb_unprotected_object(object)
459435
}
460436

461-
#[no_mangle]
437+
#[unsafe(no_mangle)]
462438
pub extern "C" fn mmtk_object_wb_unprotected_p(object: ObjectReference) -> bool {
463439
crate::binding().object_wb_unprotected_p(object)
464440
}
465441

466442
// =============== Heap walking ===============
467443

468-
#[no_mangle]
444+
#[unsafe(no_mangle)]
469445
pub extern "C" fn mmtk_enumerate_objects(
470446
callback: extern "C" fn(ObjectReference, *mut libc::c_void),
471447
data: *mut libc::c_void,
@@ -477,63 +453,63 @@ pub extern "C" fn mmtk_enumerate_objects(
477453

478454
// =============== Finalizers ===============
479455

480-
#[no_mangle]
456+
#[unsafe(no_mangle)]
481457
pub extern "C" fn mmtk_get_all_obj_free_candidates() -> RawVecOfObjRef {
482458
let vec = binding().weak_proc.get_all_obj_free_candidates();
483459
RawVecOfObjRef::from_vec(vec)
484460
}
485461

486-
#[no_mangle]
462+
#[unsafe(no_mangle)]
487463
pub extern "C" fn mmtk_free_raw_vec_of_obj_ref(raw_vec: RawVecOfObjRef) {
488464
unsafe { raw_vec.into_vec() };
489465
}
490466

491467
// =============== Forking ===============
492468

493-
#[no_mangle]
469+
#[unsafe(no_mangle)]
494470
pub extern "C" fn mmtk_before_fork() {
495471
mmtk().prepare_to_fork();
496472
binding().join_all_gc_threads();
497473
}
498474

499-
#[no_mangle]
475+
#[unsafe(no_mangle)]
500476
pub extern "C" fn mmtk_after_fork(tls: VMThread) {
501477
mmtk().after_fork(tls);
502478
}
503479

504480
// =============== Statistics ===============
505481

506-
#[no_mangle]
482+
#[unsafe(no_mangle)]
507483
pub extern "C" fn mmtk_total_bytes() -> usize {
508484
memory_manager::total_bytes(mmtk())
509485
}
510486

511-
#[no_mangle]
487+
#[unsafe(no_mangle)]
512488
pub extern "C" fn mmtk_used_bytes() -> usize {
513489
memory_manager::used_bytes(mmtk())
514490
}
515491

516-
#[no_mangle]
492+
#[unsafe(no_mangle)]
517493
pub extern "C" fn mmtk_free_bytes() -> usize {
518494
memory_manager::free_bytes(mmtk())
519495
}
520496

521-
#[no_mangle]
497+
#[unsafe(no_mangle)]
522498
pub extern "C" fn mmtk_starting_heap_address() -> Address {
523499
memory_manager::starting_heap_address()
524500
}
525501

526-
#[no_mangle]
502+
#[unsafe(no_mangle)]
527503
pub extern "C" fn mmtk_last_heap_address() -> Address {
528504
memory_manager::last_heap_address()
529505
}
530506

531-
#[no_mangle]
507+
#[unsafe(no_mangle)]
532508
pub extern "C" fn mmtk_worker_count() -> usize {
533509
memory_manager::num_of_workers(mmtk())
534510
}
535511

536-
#[no_mangle]
512+
#[unsafe(no_mangle)]
537513
pub extern "C" fn mmtk_plan() -> *const u8 {
538514
static NO_GC: &[u8] = b"NoGC\0";
539515
static MARK_SWEEP: &[u8] = b"MarkSweep\0";
@@ -549,7 +525,7 @@ pub extern "C" fn mmtk_plan() -> *const u8 {
549525
}
550526
}
551527

552-
#[no_mangle]
528+
#[unsafe(no_mangle)]
553529
pub extern "C" fn mmtk_heap_mode() -> *const u8 {
554530
static FIXED_HEAP: &[u8] = b"fixed\0";
555531
static DYNAMIC_HEAP: &[u8] = b"dynamic\0";
@@ -571,7 +547,7 @@ pub extern "C" fn mmtk_heap_mode() -> *const u8 {
571547
}
572548
}
573549

574-
#[no_mangle]
550+
#[unsafe(no_mangle)]
575551
pub extern "C" fn mmtk_heap_min() -> usize {
576552
match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger {
577553
GCTriggerSelector::FixedHeapSize(_) => 0,
@@ -591,7 +567,7 @@ pub extern "C" fn mmtk_heap_min() -> usize {
591567
}
592568
}
593569

594-
#[no_mangle]
570+
#[unsafe(no_mangle)]
595571
pub extern "C" fn mmtk_heap_max() -> usize {
596572
match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger {
597573
GCTriggerSelector::FixedHeapSize(max_size) => max_size,
@@ -613,7 +589,7 @@ pub extern "C" fn mmtk_heap_max() -> usize {
613589

614590
// =============== Miscellaneous ===============
615591

616-
#[no_mangle]
592+
#[unsafe(no_mangle)]
617593
pub extern "C" fn mmtk_is_mmtk_object(addr: Address) -> bool {
618594
debug_assert!(!addr.is_zero());
619595
debug_assert!(addr.is_aligned_to(mmtk::util::is_mmtk_object::VO_BIT_REGION_SIZE));

‎gc/mmtk/src/binding.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ pub(crate) fn object_survives_current_gc(object: ObjectReference) -> bool {
113113

114114
let is_nursery_gc = plan
115115
.generational()
116-
.is_some_and(|gen| gen.is_current_gc_nursery());
116+
.is_some_and(|gen_plan| gen_plan.is_current_gc_nursery());
117117

118118
if !is_nursery_gc {
119119
return object.is_reachable();

0 commit comments

Comments
 (0)