Ruby 4.1.0dev (2026-05-15 revision 11de89ca1a94899535875ea594962c79713615b1)
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 MMTk_ObjectReference (*MMTk_ObjectClosureFunction)(void*, void*, MMTk_ObjectReference, bool);
40
41typedef struct MMTk_ObjectClosure {
45 MMTk_ObjectClosureFunction c_function;
51
52typedef struct MMTk_GCThreadTLS {
53 int kind;
54 void *gc_context;
55 struct MMTk_ObjectClosure object_closure;
57
58typedef struct MMTk_RubyUpcalls {
59 void (*init_gc_worker_thread)(struct MMTk_GCThreadTLS *gc_worker_tls);
60 bool (*is_mutator)(void);
61 void (*stop_the_world)(void);
62 void (*resume_mutators)(bool gc_may_move);
63 void (*block_for_gc)(MMTk_VMMutatorThread tls);
64 void (*before_updating_jit_code)(void);
65 void (*after_updating_jit_code)(void);
66 size_t (*number_of_mutators)(void);
67 void (*get_mutators)(void (*visit_mutator)(MMTk_Mutator*, void*), void *data);
68 void (*scan_gc_roots)(void);
69 void (*scan_objspace)(void);
70 void (*move_obj_during_marking)(MMTk_ObjectReference from, MMTk_ObjectReference to);
71 void (*update_object_references)(MMTk_ObjectReference object);
72 void (*call_gc_mark_children)(MMTk_ObjectReference object);
73 void (*handle_weak_references)(MMTk_ObjectReference object, bool moving);
74 void (*call_obj_free)(MMTk_ObjectReference object);
75 size_t (*vm_live_bytes)(void);
76 void (*update_global_tables)(int tbl_idx, bool moving);
77 int (*global_tables_count)(void);
78 void (*update_finalizer_table)(void);
79 bool (*special_const_p)(MMTk_ObjectReference object);
80 void (*mutator_thread_panic_handler)(void);
81 void (*gc_thread_panic_handler)(void);
83
84typedef struct MMTk_RawVecOfObjRef {
85 MMTk_ObjectReference *ptr;
86 size_t len;
87 size_t capa;
89
90bool mmtk_is_live_object(MMTk_ObjectReference object);
91
92bool mmtk_is_reachable(MMTk_ObjectReference object);
93
94MMTk_Builder *mmtk_builder_default(void);
95
96void mmtk_init_binding(MMTk_Builder *builder,
97 const struct MMTk_RubyBindingOptions *binding_options,
98 const struct MMTk_RubyUpcalls *upcalls);
99
100void mmtk_initialize_collection(MMTk_VMThread tls);
101
102MMTk_Mutator *mmtk_bind_mutator(MMTk_VMMutatorThread tls);
103
104MMTk_BumpPointer *mmtk_get_bump_pointer_allocator(MMTk_Mutator *m);
105
106void mmtk_destroy_mutator(MMTk_Mutator *mutator);
107
108void mmtk_handle_user_collection_request(MMTk_VMMutatorThread tls, bool force, bool exhaustive);
109
110void mmtk_set_gc_enabled(bool enable);
111
112bool mmtk_gc_enabled_p(void);
113
114MMTk_Address mmtk_alloc(MMTk_Mutator *mutator,
115 size_t size,
116 size_t align,
117 size_t offset,
118 MMTk_AllocationSemantics semantics);
119
120void mmtk_post_alloc(MMTk_Mutator *mutator,
121 MMTk_ObjectReference refer,
122 size_t bytes,
123 MMTk_AllocationSemantics semantics);
124
125void mmtk_add_obj_free_candidates(const MMTk_ObjectReference *objects,
126 size_t count,
127 bool can_parallel_free);
128
129void mmtk_declare_weak_references(MMTk_ObjectReference object);
130
131bool mmtk_weak_references_alive_p(MMTk_ObjectReference object);
132
133size_t mmtk_weak_references_count(void);
134
135void mmtk_register_pinning_obj(MMTk_ObjectReference obj);
136
137void mmtk_object_reference_write_post(MMTk_Mutator *mutator, MMTk_ObjectReference object);
138
139void mmtk_register_wb_unprotected_object(MMTk_ObjectReference object);
140
141bool mmtk_object_wb_unprotected_p(MMTk_ObjectReference object);
142
143void mmtk_enumerate_objects(void (*callback)(MMTk_ObjectReference, void*), void *data);
144
145struct MMTk_RawVecOfObjRef mmtk_get_all_obj_free_candidates(void);
146
147void mmtk_free_raw_vec_of_obj_ref(struct MMTk_RawVecOfObjRef raw_vec);
148
149void mmtk_before_fork(void);
150
151void mmtk_after_fork(MMTk_VMThread tls);
152
153size_t mmtk_total_bytes(void);
154
155size_t mmtk_used_bytes(void);
156
157size_t mmtk_free_bytes(void);
158
159MMTk_Address mmtk_starting_heap_address(void);
160
161MMTk_Address mmtk_last_heap_address(void);
162
163size_t mmtk_worker_count(void);
164
165const uint8_t *mmtk_plan(void);
166
167const uint8_t *mmtk_heap_mode(void);
168
169size_t mmtk_heap_min(void);
170
171size_t mmtk_heap_max(void);
172
173bool mmtk_is_mmtk_object(MMTk_Address addr);
174
175#endif /* MMTK_H */
Defines old _.
C99 shim for <stdbool.h>
void * rust_closure
The pointer to the Rust-level closure object.
Definition mmtk.h:49
MMTk_ObjectClosureFunction c_function
The function to be called from C.
Definition mmtk.h:45