12typedef struct MMTk_Builder MMTk_Builder;
13typedef struct MMTk_Mutator MMTk_Mutator;
18typedef void *MMTk_Address;
19typedef void *MMTk_ObjectReference;
20typedef void *MMTk_NullableObjectReference;
21typedef uint32_t MMTk_AllocationSemantics;
29#define MMTk_OBJREF_OFFSET 8
31#define MMTk_MIN_OBJ_ALIGN 8
33#define MMTk_GC_THREAD_KIND_WORKER 1
40 MMTk_ObjectReference *ptr;
45typedef MMTk_ObjectReference (*MMTk_ObjectClosureFunction)(
void*,
void*, MMTk_ObjectReference, bool);
64bool mmtk_is_live_object(MMTk_ObjectReference
object);
66bool mmtk_is_reachable(MMTk_ObjectReference
object);
68MMTk_Builder *mmtk_builder_default(
void);
70void mmtk_init_binding(MMTk_Builder *builder,
73size_t mmtk_get_vo_bit_log_region_size(
void);
75size_t mmtk_get_vo_bit_base_addr(
void);
83void mmtk_destroy_mutator(MMTk_Mutator *mutator);
87void mmtk_set_gc_enabled(
bool enable);
89bool mmtk_gc_enabled_p(
void);
91size_t mmtk_max_non_los_default_alloc_bytes(
void);
93MMTk_Address mmtk_alloc(MMTk_Mutator *mutator,
97 MMTk_AllocationSemantics semantics);
99void mmtk_post_alloc(MMTk_Mutator *mutator,
100 MMTk_ObjectReference refer,
102 MMTk_AllocationSemantics semantics);
104void mmtk_add_obj_free_candidates(
const MMTk_ObjectReference *objects,
106 bool can_parallel_free);
108void mmtk_declare_weak_references(MMTk_ObjectReference
object);
110bool mmtk_weak_references_alive_p(MMTk_ObjectReference
object);
112size_t mmtk_weak_references_count(
void);
114void mmtk_register_pinning_obj(MMTk_ObjectReference obj);
116bool mmtk_is_pinned(MMTk_ObjectReference
object);
118void mmtk_object_reference_write_post(MMTk_Mutator *mutator, MMTk_ObjectReference
object);
120void mmtk_register_wb_unprotected_object(MMTk_ObjectReference
object);
122bool mmtk_object_wb_unprotected_p(MMTk_ObjectReference
object);
124void mmtk_enumerate_objects(
void (*callback)(MMTk_ObjectReference,
void*),
void *data);
130void mmtk_before_fork(
void);
134size_t mmtk_total_bytes(
void);
136size_t mmtk_used_bytes(
void);
138size_t mmtk_free_bytes(
void);
140MMTk_Address mmtk_starting_heap_address(
void);
142MMTk_Address mmtk_last_heap_address(
void);
144size_t mmtk_worker_count(
void);
146const uint8_t *mmtk_plan(
void);
148const uint8_t *mmtk_heap_mode(
void);
150size_t mmtk_heap_min(
void);
152size_t mmtk_heap_max(
void);
154bool mmtk_is_mmtk_object(MMTk_Address addr);
156extern void rb_mmtk_init_gc_worker_thread(
struct MMTk_GCThreadTLS *gc_worker_tls);
158extern bool rb_mmtk_is_mutator(
void);
160extern void rb_mmtk_stop_the_world(
void);
162extern void rb_mmtk_resume_mutators(
bool gc_may_move);
166extern void rb_mmtk_before_updating_jit_code(
void);
168extern void rb_mmtk_after_updating_jit_code(
void);
170extern size_t rb_mmtk_number_of_mutators(
void);
172extern void rb_mmtk_get_mutators(
void (*visit_mutator)(MMTk_Mutator*,
void*),
void *data);
174extern void rb_mmtk_scan_gc_roots(
void);
176extern void rb_mmtk_scan_objspace(
void);
178extern void rb_mmtk_move_obj_during_marking(MMTk_ObjectReference from, MMTk_ObjectReference to);
180extern size_t rb_mmtk_obj_optimal_size(MMTk_ObjectReference
object);
182extern void rb_mmtk_update_object_references(MMTk_ObjectReference
object);
184extern void rb_mmtk_call_gc_mark_children(MMTk_ObjectReference
object);
186extern void rb_mmtk_handle_weak_references(MMTk_ObjectReference
object,
bool moving);
188extern void rb_mmtk_call_obj_free(MMTk_ObjectReference
object);
190extern size_t rb_mmtk_vm_live_bytes(
void);
192extern void rb_mmtk_update_global_tables(
int tbl_idx,
bool moving);
194extern int rb_mmtk_global_tables_count(
void);
196extern void rb_mmtk_update_finalizer_table(
void);
198extern void rb_mmtk_mutator_thread_panic_handler(
void);
200extern void rb_mmtk_gc_thread_panic_handler(
void);
void * rust_closure
The pointer to the Rust-level closure object.
MMTk_ObjectClosureFunction c_function
The function to be called from C.