1#![allow(non_camel_case_types)]
2#[allow(unused)]
3use crate::{Char, Value};
4
5#[repr(C)]
6#[derive(Debug, Copy, Clone)]
7pub struct caml_ref_table {
8 pub _address: u8,
9}
10#[repr(C)]
11#[derive(Debug, Copy, Clone)]
12pub struct caml_ephe_ref_table {
13 pub _address: u8,
14}
15#[repr(C)]
16#[derive(Debug, Copy, Clone)]
17pub struct caml_custom_table {
18 pub _address: u8,
19}
20#[repr(C)]
21#[derive(Debug, Copy, Clone)]
22pub struct longjmp_buffer {
23 pub _address: u8,
24}
25
26pub type backtrace_slot = *mut ::core::ffi::c_void;
27
28#[repr(C)]
29#[derive(Debug)]
30#[cfg(not(feature = "ocaml5"))]
31pub struct caml_domain_state {
32 pub _young_ptr: *mut Value,
33 pub _young_limit: *mut Value,
34 pub _exception_pointer: *mut Char,
35 pub _young_base: *mut ::core::ffi::c_void,
36 pub _young_start: *mut Value,
37 pub _young_end: *mut Value,
38 pub _young_alloc_start: *mut Value,
39 pub _young_alloc_end: *mut Value,
40 pub _young_alloc_mid: *mut Value,
41 pub _young_trigger: *mut Value,
42 pub _minor_heap_wsz: usize,
43 pub _in_minor_collection: isize,
44 pub _extra_heap_resources_minor: f64,
45 pub _ref_table: *mut caml_ref_table,
46 pub _ephe_ref_table: *mut caml_ephe_ref_table,
47 pub _custom_table: *mut caml_custom_table,
48 pub _stack_low: *mut Value,
49 pub _stack_high: *mut Value,
50 pub _stack_threshold: *mut Value,
51 pub _extern_sp: *mut Value,
52 pub _trapsp: *mut Value,
53 pub _trap_barrier: *mut Value,
54 pub _external_raise: *mut longjmp_buffer,
55 pub _exn_bucket: Value,
56 pub _top_of_stack: *mut Char,
57 pub _bottom_of_stack: *mut Char,
58 pub _last_return_address: usize,
59 pub _gc_regs: *mut Value,
60 pub _backtrace_active: isize,
61 pub _backtrace_pos: isize,
62 pub _backtrace_buffer: *mut backtrace_slot,
63 pub _backtrace_last_exn: Value,
64 pub _compare_unordered: isize,
65 pub _requested_major_slice: isize,
66 pub _requested_minor_gc: isize,
67 pub _local_roots: *mut crate::memory::CamlRootsBlock,
68 pub _stat_minor_words: f64,
69 pub _stat_promoted_words: f64,
70 pub _stat_major_words: f64,
71 pub _stat_minor_collections: isize,
72 pub _stat_major_collections: isize,
73 pub _stat_heap_wsz: isize,
74 pub _stat_top_heap_wsz: isize,
75 pub _stat_compactions: isize,
76 pub _stat_heap_chunks: isize,
77}
78
79#[repr(C)]
80#[derive(Debug)]
81#[cfg(feature = "ocaml5")]
82pub struct caml_domain_state {
83 pub _young_limit: core::sync::atomic::AtomicUsize,
84 pub _young_ptr: *mut Value,
85 pub _exception_pointer: *mut Char,
86 pub _young_start: *mut Value,
87 pub _young_end: *mut Value,
88 pub _current_stack: *mut core::ffi::c_void, pub _exn_handler: *mut core::ffi::c_void,
90 pub _action_pending: core::ffi::c_int,
91 pub _c_stack: *mut core::ffi::c_void, pub _stack_cache: *mut *mut core::ffi::c_void,
93 pub _gc_regs_buckets: *mut Value,
94 pub _gc_regs: *mut Value,
95 pub _minor_tables: *mut core::ffi::c_void, pub _mark_stack: *mut core::ffi::c_void, pub _marking_done: crate::Uintnat,
98 pub _sweeping_done: crate::Uintnat,
99 pub _allocated_words: crate::Uintnat,
100 pub _swept_words: crate::Uintnat,
101 pub _major_work_computed: crate::Intnat,
102 pub _major_work_todo: crate::Intnat,
103 pub _major_gc_clock: f64,
104 pub _local_roots: *mut crate::memory::CamlRootsBlock,
105 pub _ephe_info: *mut core::ffi::c_void,
106 pub _final_info: *mut core::ffi::c_void,
107 pub _backtrace_pos: crate::Intnat,
108 pub _backtrace_active: crate::Intnat,
109 pub _backtrace_buffer: *mut backtrace_slot,
110 pub _backtrace_last_exn: Value,
111 pub _compare_unordered: crate::Intnat,
112 pub _oo_next_id_local: crate::Uintnat,
113 pub _requested_major_slice: crate::Uintnat,
114 pub _requested_minor_slice: crate::Uintnat,
115 pub _requested_minor_gc: crate::Uintnat,
116 pub _requested_external_interrupt: core::sync::atomic::AtomicUsize,
117 pub _parser_trace: core::ffi::c_int,
118 pub _minor_heap_wsz: usize,
119 pub _shared_heap: *mut core::ffi::c_void,
120 pub _id: core::ffi::c_int,
121 pub _unique_id: core::ffi::c_int,
122 pub _dls_root: Value,
123 pub _extra_heap_resources: f64,
124 pub _extra_heap_resources_minor: f64,
125 pub _dependent_size: crate::Uintnat,
126 pub _dependent_allocated: crate::Uintnat,
127 pub _caml_extern_state: *mut core::ffi::c_void,
128 pub _caml_intern_state: *mut core::ffi::c_void,
129 pub _stat_minor_words: crate::Uintnat,
130 pub _stat_promoted_words: crate::Uintnat,
131 pub _stat_major_words: crate::Uintnat,
132 pub _stat_minor_collections: crate::Intnat,
133 pub _stat_forced_major_collections: crate::Intnat,
134 pub _stat_blocks_marked: crate::Uintnat,
135 pub _inside_stw_handler: core::ffi::c_int,
136 pub _trap_sp_off: crate::Intnat,
137 pub _trap_barrier_off: crate::Intnat,
138 pub _trap_barrier_block: i64,
139 pub _external_raise: *mut core::ffi::c_void,
140 pub _extra_params_area: [u8; 0],
141}
142
143extern "C" {
144 #[doc(hidden)]
145 pub fn caml_sys_get_domain_state() -> *mut caml_domain_state;
146}
147
148#[doc(hidden)]
149pub unsafe fn local_roots() -> *mut crate::memory::CamlRootsBlock {
150 (*caml_sys_get_domain_state())._local_roots
151}
152
153#[doc(hidden)]
154pub unsafe fn set_local_roots(x: *mut crate::memory::CamlRootsBlock) {
155 (*caml_sys_get_domain_state())._local_roots = x
156}