Ruby 4.1.0dev (2026-10-28 revision 130c9ec44bd35c7319cdc99c301419188510e3a9)
mmtk.h
1#ifndef MMTK_H
2#define MMTK_H
3
4/* Warning, this file is autogenerated by cbindgen from the mmtk-ruby repository. Don't modify this manually. */
5
6#include <stdarg.h>
7#include <stdbool.h>
8#include <stddef.h>
9#include <stdint.h>
10#include <stdlib.h>
11
12typedef struct MMTk_Builder MMTk_Builder;
13typedef struct MMTk_Mutator MMTk_Mutator;
14
15typedef struct MMTk_ractor_cache *MMTk_VMThread;
18typedef void *MMTk_Address;
19typedef void *MMTk_ObjectReference;
20typedef void *MMTk_NullableObjectReference;
21typedef uint32_t MMTk_AllocationSemantics;
22
23typedef struct MMTk_BumpPointer {
24 uintptr_t cursor;
25 uintptr_t limit;
27
28
29#define MMTk_OBJREF_OFFSET 8
30
31#define MMTk_MIN_OBJ_ALIGN 8
32
33#define MMTk_GC_THREAD_KIND_WORKER 1
34
36 size_t suffix_size;
38
39typedef struct MMTk_RawVecOfObjRef {
40 MMTk_ObjectReference *ptr;
41 size_t len;
42 size_t capa;
44
45typedef MMTk_ObjectReference (*MMTk_ObjectClosureFunction)(void*, void*, MMTk_ObjectReference, bool);
46
47typedef struct MMTk_ObjectClosure {
51 MMTk_ObjectClosureFunction c_function;
57
58typedef struct MMTk_GCThreadTLS {
59 int kind;
60 void *gc_context;
61 struct MMTk_ObjectClosure object_closure;
63
64bool mmtk_is_live_object(MMTk_ObjectReference object);
65
66bool mmtk_is_reachable(MMTk_ObjectReference object);
67
68MMTk_Builder *mmtk_builder_default(void);
69
70void mmtk_init_binding(MMTk_Builder *builder,
71 const struct MMTk_RubyBindingOptions *binding_options);
72
73size_t mmtk_get_vo_bit_log_region_size(void);
74
75size_t mmtk_get_vo_bit_base_addr(void);
76
77void mmtk_initialize_collection(MMTk_VMThread tls);
78
79MMTk_Mutator *mmtk_bind_mutator(MMTk_VMMutatorThread tls);
80
81MMTk_BumpPointer *mmtk_get_bump_pointer_allocator(MMTk_Mutator *m);
82
83void mmtk_destroy_mutator(MMTk_Mutator *mutator);
84
85void mmtk_handle_user_collection_request(MMTk_VMMutatorThread tls, bool force, bool exhaustive);
86
87void mmtk_set_gc_enabled(bool enable);
88
89bool mmtk_gc_enabled_p(void);
90
91size_t mmtk_max_non_los_default_alloc_bytes(void);
92
93MMTk_Address mmtk_alloc(MMTk_Mutator *mutator,
94 size_t size,
95 size_t align,
96 size_t offset,
97 MMTk_AllocationSemantics semantics);
98
99void mmtk_post_alloc(MMTk_Mutator *mutator,
100 MMTk_ObjectReference refer,
101 size_t bytes,
102 MMTk_AllocationSemantics semantics);
103
104void mmtk_add_obj_free_candidates(const MMTk_ObjectReference *objects,
105 size_t count,
106 bool can_parallel_free);
107
108void mmtk_declare_weak_references(MMTk_ObjectReference object);
109
110bool mmtk_weak_references_alive_p(MMTk_ObjectReference object);
111
112size_t mmtk_weak_references_count(void);
113
114void mmtk_register_pinning_obj(MMTk_ObjectReference obj);
115
116bool mmtk_is_pinned(MMTk_ObjectReference object);
117
118void mmtk_object_reference_write_post(MMTk_Mutator *mutator, MMTk_ObjectReference object);
119
120void mmtk_register_wb_unprotected_object(MMTk_ObjectReference object);
121
122bool mmtk_object_wb_unprotected_p(MMTk_ObjectReference object);
123
124void mmtk_enumerate_objects(void (*callback)(MMTk_ObjectReference, void*), void *data);
125
126struct MMTk_RawVecOfObjRef mmtk_get_all_obj_free_candidates(void);
127
128void mmtk_free_raw_vec_of_obj_ref(struct MMTk_RawVecOfObjRef raw_vec);
129
130void mmtk_before_fork(void);
131
132void mmtk_after_fork(MMTk_VMThread tls);
133
134size_t mmtk_total_bytes(void);
135
136size_t mmtk_used_bytes(void);
137
138size_t mmtk_free_bytes(void);
139
140MMTk_Address mmtk_starting_heap_address(void);
141
142MMTk_Address mmtk_last_heap_address(void);
143
144size_t mmtk_worker_count(void);
145
146const uint8_t *mmtk_plan(void);
147
148const uint8_t *mmtk_heap_mode(void);
149
150size_t mmtk_heap_min(void);
151
152size_t mmtk_heap_max(void);
153
154bool mmtk_is_mmtk_object(MMTk_Address addr);
155
156extern void rb_mmtk_init_gc_worker_thread(struct MMTk_GCThreadTLS *gc_worker_tls);
157
158extern bool rb_mmtk_is_mutator(void);
159
160extern void rb_mmtk_stop_the_world(void);
161
162extern void rb_mmtk_resume_mutators(bool gc_may_move);
163
164extern void rb_mmtk_block_for_gc(MMTk_VMMutatorThread tls);
165
166extern void rb_mmtk_before_updating_jit_code(void);
167
168extern void rb_mmtk_after_updating_jit_code(void);
169
170extern size_t rb_mmtk_number_of_mutators(void);
171
172extern void rb_mmtk_get_mutators(void (*visit_mutator)(MMTk_Mutator*, void*), void *data);
173
174extern void rb_mmtk_scan_gc_roots(void);
175
176extern void rb_mmtk_scan_objspace(void);
177
178extern void rb_mmtk_move_obj_during_marking(MMTk_ObjectReference from, MMTk_ObjectReference to);
179
180extern size_t rb_mmtk_obj_optimal_size(MMTk_ObjectReference object);
181
182extern void rb_mmtk_update_object_references(MMTk_ObjectReference object);
183
184extern void rb_mmtk_call_gc_mark_children(MMTk_ObjectReference object);
185
186extern void rb_mmtk_handle_weak_references(MMTk_ObjectReference object, bool moving);
187
188extern void rb_mmtk_call_obj_free(MMTk_ObjectReference object);
189
190extern size_t rb_mmtk_vm_live_bytes(void);
191
192extern void rb_mmtk_update_global_tables(int tbl_idx, bool moving);
193
194extern int rb_mmtk_global_tables_count(void);
195
196extern void rb_mmtk_update_finalizer_table(void);
197
198extern void rb_mmtk_mutator_thread_panic_handler(void);
199
200extern void rb_mmtk_gc_thread_panic_handler(void);
201
202#endif /* MMTK_H */
Defines old _.
C99 shim for <stdbool.h>
void * rust_closure
The pointer to the Rust-level closure object.
Definition mmtk.h:55
MMTk_ObjectClosureFunction c_function
The function to be called from C.
Definition mmtk.h:51