Skip to content

Commit 810f897

Browse files
committed
Add mmtk_heap_mode to GC.config
1 parent 67da9ea commit 810f897

File tree

4 files changed

+23
-0
lines changed

4 files changed

+23
-0
lines changed

gc/mmtk/mmtk.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,7 @@ rb_gc_impl_config_get(void *objspace_ptr)
634634

635635
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_worker_count")), RB_ULONG2NUM(mmtk_worker_count()));
636636
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_plan")), rb_str_new_cstr((const char *)mmtk_plan()));
637+
rb_hash_aset(hash, ID2SYM(rb_intern_const("mmtk_heap_mode")), rb_str_new_cstr((const char *)mmtk_heap_mode()));
637638

638639
return hash;
639640
}

gc/mmtk/mmtk.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ size_t mmtk_worker_count(void);
149149

150150
const uint8_t *mmtk_plan(void);
151151

152+
const uint8_t *mmtk_heap_mode(void);
153+
152154
bool mmtk_is_mmtk_object(MMTk_Address addr);
153155

154156
#endif /* MMTK_H */

gc/mmtk/src/api.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,18 @@ pub extern "C" fn mmtk_plan() -> *const u8 {
347347
}
348348
}
349349

350+
#[no_mangle]
351+
pub extern "C" fn mmtk_heap_mode() -> *const u8 {
352+
static FIXED_HEAP: &[u8] = b"fixed\0";
353+
static DYNAMIC_HEAP: &[u8] = b"dynamic\0";
354+
355+
match *crate::BINDING.get().unwrap().mmtk.get_options().gc_trigger {
356+
GCTriggerSelector::FixedHeapSize(_) => FIXED_HEAP.as_ptr(),
357+
GCTriggerSelector::DynamicHeapSize(_, _) => DYNAMIC_HEAP.as_ptr(),
358+
_ => panic!("Unknown heap mode")
359+
}
360+
}
361+
350362
// =============== Miscellaneous ===============
351363

352364
#[no_mangle]

test/mmtk/test_configuration.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ def test_MMTK_THREADS
2121
end
2222
end
2323

24+
%w(fixed dynamic).each do |heap|
25+
define_method(:"test_MMTK_HEAP_MODE_#{heap}") do
26+
assert_separately([{ "MMTK_HEAP_MODE" => heap }], <<~RUBY)
27+
assert_equal("#{heap}", GC.config[:mmtk_heap_mode])
28+
RUBY
29+
end
30+
end
31+
2432
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX MMTK_HEAP_MODE MMTK_PLAN).each do |var|
2533
define_method(:"test_invalid_#{var}") do
2634
exit_code = assert_in_out_err(

0 commit comments

Comments
 (0)