1212typedef struct MMTk_Builder MMTk_Builder ;
1313typedef struct MMTk_Mutator MMTk_Mutator ;
1414
15- struct rb_thread_struct ;
16- typedef struct rb_thread_struct rb_thread_t ;
17- typedef rb_thread_t * MMTk_VMThread ;
18- typedef rb_thread_t * MMTk_VMMutatorThread ;
15+ typedef struct MMTk_ractor_cache * MMTk_VMThread ;
16+ typedef struct MMTk_ractor_cache * MMTk_VMMutatorThread ;
1917typedef struct MMTk_GCThreadTLS * MMTk_VMWorkerThread ;
2018typedef void * MMTk_Address ;
2119typedef void * MMTk_ObjectReference ;
@@ -29,8 +27,6 @@ typedef uint32_t MMTk_AllocationSemantics;
2927
3028#define MMTk_GC_THREAD_KIND_WORKER 1
3129
32- typedef struct MMTk_st_table MMTk_st_table ;
33-
3430typedef struct MMTk_RubyBindingOptions {
3531 bool ractor_check_mode ;
3632 size_t suffix_size ;
@@ -57,52 +53,24 @@ typedef struct MMTk_GCThreadTLS {
5753
5854typedef struct MMTk_RubyUpcalls {
5955 void (* init_gc_worker_thread )(struct MMTk_GCThreadTLS * gc_worker_tls );
60- struct MMTk_GCThreadTLS * (* get_gc_thread_tls )(void );
6156 bool (* is_mutator )(void );
62- void (* stop_the_world )(MMTk_VMWorkerThread tls );
63- void (* resume_mutators )(MMTk_VMWorkerThread tls );
57+ void (* stop_the_world )(void );
58+ void (* resume_mutators )(void );
6459 void (* block_for_gc )(MMTk_VMMutatorThread tls );
6560 size_t (* number_of_mutators )(void );
6661 void (* get_mutators )(void (* visit_mutator )(MMTk_Mutator * , void * ), void * data );
67- void (* scan_vm_roots )(void );
68- void (* scan_finalizer_tbl_roots )(void );
69- void (* scan_end_proc_roots )(void );
70- void (* scan_global_tbl_roots )(void );
71- void (* scan_obj_to_id_tbl_roots )(void );
72- void (* scan_misc_roots )(void );
73- void (* scan_final_jobs_roots )(void );
62+ void (* scan_gc_roots )(void );
63+ void (* scan_objspace )(void );
7464 void (* scan_roots_in_mutator_thread )(MMTk_VMMutatorThread mutator_tls ,
7565 MMTk_VMWorkerThread worker_tls );
7666 void (* scan_object_ruby_style )(MMTk_ObjectReference object );
7767 void (* call_gc_mark_children )(MMTk_ObjectReference object );
7868 void (* call_obj_free )(MMTk_ObjectReference object );
79- void (* cleanup_generic_iv_tbl )(void );
80- void * (* get_original_givtbl )(MMTk_ObjectReference object );
81- void (* move_givtbl )(MMTk_ObjectReference old_objref , MMTk_ObjectReference new_objref );
8269 size_t (* vm_live_bytes )(void );
83- void (* update_frozen_strings_table )(void );
70+ void (* update_global_tables )(int tbl_idx );
71+ int (* global_tables_count )(void );
8472 void (* update_finalizer_table )(void );
8573 void (* update_obj_id_tables )(void );
86- void (* update_global_symbols_table )(void );
87- void (* update_overloaded_cme_table )(void );
88- void (* update_ci_table )(void );
89- struct MMTk_st_table * (* get_frozen_strings_table )(void );
90- struct MMTk_st_table * (* get_finalizer_table )(void );
91- struct MMTk_st_table * (* get_obj_id_tables )(void );
92- struct MMTk_st_table * (* get_global_symbols_table )(void );
93- struct MMTk_st_table * (* get_overloaded_cme_table )(void );
94- struct MMTk_st_table * (* get_ci_table )(void );
95- void (* st_get_size_info )(const struct MMTk_st_table * table ,
96- size_t * entries_start ,
97- size_t * entries_bound ,
98- size_t * bins_num );
99- void (* st_update_entries_range )(struct MMTk_st_table * table ,
100- size_t begin ,
101- size_t end ,
102- bool weak_keys ,
103- bool weak_records ,
104- bool forward );
105- void (* st_update_bins_range )(struct MMTk_st_table * table , size_t begin , size_t end );
10674} MMTk_RubyUpcalls ;
10775
10876typedef struct MMTk_RawVecOfObjRef {
@@ -111,14 +79,29 @@ typedef struct MMTk_RawVecOfObjRef {
11179 size_t capa ;
11280} MMTk_RawVecOfObjRef ;
11381
82+ bool mmtk_is_live_object (MMTk_ObjectReference object );
83+
84+ bool mmtk_is_reachable (MMTk_ObjectReference object );
85+
11486MMTk_Builder * mmtk_builder_default (void );
11587
11688void mmtk_init_binding (MMTk_Builder * builder ,
11789 const struct MMTk_RubyBindingOptions * _binding_options ,
118- const struct MMTk_RubyUpcalls * upcalls );
90+ const struct MMTk_RubyUpcalls * upcalls ,
91+ MMTk_ObjectReference weak_reference_dead_value );
92+
93+ void mmtk_initialize_collection (MMTk_VMThread tls );
11994
12095MMTk_Mutator * mmtk_bind_mutator (MMTk_VMMutatorThread tls );
12196
97+ void mmtk_destroy_mutator (MMTk_Mutator * mutator );
98+
99+ void mmtk_handle_user_collection_request (MMTk_VMMutatorThread tls );
100+
101+ void mmtk_set_gc_enabled (bool enable );
102+
103+ bool mmtk_gc_enabled_p (void );
104+
122105MMTk_Address mmtk_alloc (MMTk_Mutator * mutator ,
123106 size_t size ,
124107 size_t align ,
@@ -132,10 +115,36 @@ void mmtk_post_alloc(MMTk_Mutator *mutator,
132115
133116void mmtk_add_obj_free_candidate (MMTk_ObjectReference object );
134117
118+ void mmtk_mark_weak (MMTk_ObjectReference * ptr );
119+
120+ void mmtk_remove_weak (const MMTk_ObjectReference * ptr );
121+
122+ void mmtk_object_reference_write_post (MMTk_Mutator * mutator , MMTk_ObjectReference object );
123+
124+ void mmtk_register_wb_unprotected_object (MMTk_ObjectReference object );
125+
126+ bool mmtk_object_wb_unprotected_p (MMTk_ObjectReference object );
127+
135128void mmtk_enumerate_objects (void (* callback )(MMTk_ObjectReference , void * ), void * data );
136129
137130struct MMTk_RawVecOfObjRef mmtk_get_all_obj_free_candidates (void );
138131
139132void mmtk_free_raw_vec_of_obj_ref (struct MMTk_RawVecOfObjRef raw_vec );
140133
141- #endif /* MMTK_H */
134+ void mmtk_before_fork (void );
135+
136+ void mmtk_after_fork (MMTk_VMThread tls );
137+
138+ size_t mmtk_total_bytes (void );
139+
140+ size_t mmtk_used_bytes (void );
141+
142+ size_t mmtk_free_bytes (void );
143+
144+ MMTk_Address mmtk_starting_heap_address (void );
145+
146+ MMTk_Address mmtk_last_heap_address (void );
147+
148+ bool mmtk_is_mmtk_object (MMTk_Address addr );
149+
150+ #endif /* MMTK_H */
0 commit comments