1 // D import file generated from 'src/gc.c'
2 
3 /// See: https://issues.dlang.org/show_bug.cgi?id=23812
4 module cimport;
5 
6 @nogc nothrow:
7 extern (C)
8 {
9 	alias GC_PTR = void*;
10 	alias GC_word = ulong;
11 	alias GC_signed_word = long;
12 	extern uint GC_get_version();
13 	extern __gshared ulong GC_gc_no;
14 	extern ulong GC_get_gc_no();
15 	alias GC_oom_func = void* function(ulong);
16 	extern __gshared void* function(ulong) GC_oom_fn;
17 	extern void GC_set_oom_fn(scope void* function(ulong));
18 	extern void* function(ulong) GC_get_oom_fn();
19 	alias GC_on_heap_resize_proc = void function(ulong);
20 	extern __gshared void function(ulong) GC_on_heap_resize;
21 	extern void GC_set_on_heap_resize(void function(ulong));
22 	extern void function(ulong) GC_get_on_heap_resize();
23 	enum GC_EventType
24 	{
25 		GC_EVENT_START,
26 		GC_EVENT_MARK_START,
27 		GC_EVENT_MARK_END,
28 		GC_EVENT_RECLAIM_START,
29 		GC_EVENT_RECLAIM_END,
30 		GC_EVENT_END,
31 		GC_EVENT_PRE_STOP_WORLD,
32 		GC_EVENT_POST_STOP_WORLD,
33 		GC_EVENT_PRE_START_WORLD,
34 		GC_EVENT_POST_START_WORLD,
35 		GC_EVENT_THREAD_SUSPENDED,
36 		GC_EVENT_THREAD_UNSUSPENDED,
37 	}
38 
39 	alias GC_EVENT_START = GC_EventType.GC_EVENT_START;
40 	alias GC_EVENT_MARK_START = GC_EventType.GC_EVENT_MARK_START;
41 	alias GC_EVENT_MARK_END = GC_EventType.GC_EVENT_MARK_END;
42 	alias GC_EVENT_RECLAIM_START = GC_EventType.GC_EVENT_RECLAIM_START;
43 	alias GC_EVENT_RECLAIM_END = GC_EventType.GC_EVENT_RECLAIM_END;
44 	alias GC_EVENT_END = GC_EventType.GC_EVENT_END;
45 	alias GC_EVENT_PRE_STOP_WORLD = GC_EventType.GC_EVENT_PRE_STOP_WORLD;
46 	alias GC_EVENT_POST_STOP_WORLD = GC_EventType.GC_EVENT_POST_STOP_WORLD;
47 	alias GC_EVENT_PRE_START_WORLD = GC_EventType.GC_EVENT_PRE_START_WORLD;
48 	alias GC_EVENT_POST_START_WORLD = GC_EventType.GC_EVENT_POST_START_WORLD;
49 	alias GC_EVENT_THREAD_SUSPENDED = GC_EventType.GC_EVENT_THREAD_SUSPENDED;
50 	alias GC_EVENT_THREAD_UNSUSPENDED = GC_EventType.GC_EVENT_THREAD_UNSUSPENDED;
51 	alias GC_on_collection_event_proc = void function(GC_EventType);
52 	extern void GC_set_on_collection_event(void function(GC_EventType));
53 	extern void function(GC_EventType) GC_get_on_collection_event();
54 	extern __gshared int GC_find_leak;
55 	extern void GC_set_find_leak(int);
56 	extern int GC_get_find_leak();
57 	extern __gshared int GC_all_interior_pointers;
58 	extern void GC_set_all_interior_pointers(int);
59 	extern int GC_get_all_interior_pointers();
60 	extern __gshared int GC_finalize_on_demand;
61 	extern void GC_set_finalize_on_demand(int);
62 	extern int GC_get_finalize_on_demand();
63 	extern __gshared int GC_java_finalization;
64 	extern void GC_set_java_finalization(int);
65 	extern int GC_get_java_finalization();
66 	alias GC_finalizer_notifier_proc = void function();
67 	extern __gshared void function() GC_finalizer_notifier;
68 	extern void GC_set_finalizer_notifier(void function());
69 	extern void function() GC_get_finalizer_notifier();
70 	extern __gshared int GC_dont_gc;
71 	extern __gshared int GC_dont_expand;
72 	extern void GC_set_dont_expand(int);
73 	extern int GC_get_dont_expand();
74 	extern __gshared int GC_use_entire_heap;
75 	extern __gshared int GC_full_freq;
76 	extern void GC_set_full_freq(int);
77 	extern int GC_get_full_freq();
78 	extern __gshared ulong GC_non_gc_bytes;
79 	extern void GC_set_non_gc_bytes(ulong);
80 	extern ulong GC_get_non_gc_bytes();
81 	extern __gshared int GC_no_dls;
82 	extern void GC_set_no_dls(int);
83 	extern int GC_get_no_dls();
84 	extern __gshared ulong GC_free_space_divisor;
85 	extern void GC_set_free_space_divisor(ulong);
86 	extern ulong GC_get_free_space_divisor();
87 	extern __gshared ulong GC_max_retries;
88 	extern void GC_set_max_retries(ulong);
89 	extern ulong GC_get_max_retries();
90 	extern __gshared char* GC_stackbottom;
91 	extern __gshared int GC_dont_precollect;
92 	extern void GC_set_dont_precollect(int);
93 	extern int GC_get_dont_precollect();
94 	extern __gshared ulong GC_time_limit;
95 	extern void GC_set_time_limit(ulong);
96 	extern ulong GC_get_time_limit();
97 	struct GC_timeval_s
98 	{
99 		ulong tv_ms = void;
100 		ulong tv_nsec = void;
101 	}
102 
103 	extern void GC_set_time_limit_tv(GC_timeval_s);
104 	extern GC_timeval_s GC_get_time_limit_tv();
105 	extern void GC_set_allocd_bytes_per_finalizer(ulong);
106 	extern ulong GC_get_allocd_bytes_per_finalizer();
107 	extern void GC_start_performance_measurement();
108 	extern ulong GC_get_full_gc_total_time();
109 	extern void GC_set_pages_executable(int);
110 	extern int GC_get_pages_executable();
111 	extern void GC_set_min_bytes_allocd(ulong);
112 	extern ulong GC_get_min_bytes_allocd();
113 	extern void GC_set_rate(int);
114 	extern int GC_get_rate();
115 	extern void GC_set_max_prior_attempts(int);
116 	extern int GC_get_max_prior_attempts();
117 	extern void GC_set_disable_automatic_collection(int);
118 	extern int GC_get_disable_automatic_collection();
119 	extern void GC_set_handle_fork(int);
120 	extern void GC_atfork_prepare();
121 	extern void GC_atfork_parent();
122 	extern void GC_atfork_child();
123 	extern void GC_init();
124 	extern int GC_is_init_called();
125 	extern void GC_deinit();
126 	extern void* GC_malloc(ulong);
127 	extern void* GC_malloc_atomic(ulong);
128 	extern char* GC_strdup(scope const(char)*);
129 	extern char* GC_strndup(scope const(char)*, ulong);
130 	extern void* GC_malloc_uncollectable(ulong);
131 	extern void* GC_malloc_stubborn(ulong);
132 	extern void* GC_memalign(ulong, ulong);
133 	extern int GC_posix_memalign(scope void**, ulong, ulong);
134 	extern void GC_free(scope void*);
135 	extern void GC_change_stubborn(scope const(void)*);
136 	extern void GC_end_stubborn_change(scope const(void)*);
137 	extern void* GC_base(scope void*);
138 	extern int GC_is_heap_ptr(scope const(void)*);
139 	extern ulong GC_size(scope const(void)*);
140 	extern void* GC_realloc(scope void*, ulong);
141 	extern int GC_expand_hp(ulong);
142 	extern void GC_set_max_heap_size(ulong);
143 	extern void GC_exclude_static_roots(scope void*, scope void*);
144 	extern void GC_clear_exclusion_table();
145 	extern void GC_clear_roots();
146 	extern void GC_add_roots(scope void*, scope void*);
147 	extern void GC_remove_roots(scope void*, scope void*);
148 	extern void GC_register_displacement(ulong);
149 	extern void GC_debug_register_displacement(ulong);
150 	extern void GC_gcollect();
151 	extern void GC_gcollect_and_unmap();
152 	alias GC_stop_func = int function();
153 	extern int GC_try_to_collect(int function());
154 	extern void GC_set_stop_func(int function());
155 	extern int function() GC_get_stop_func();
156 	extern ulong GC_get_heap_size();
157 	extern ulong GC_get_free_bytes();
158 	extern ulong GC_get_unmapped_bytes();
159 	extern ulong GC_get_bytes_since_gc();
160 	extern ulong GC_get_expl_freed_bytes_since_gc();
161 	extern ulong GC_get_total_bytes();
162 	extern ulong GC_get_obtained_from_os_bytes();
163 	extern void GC_get_heap_usage_safe(scope ulong*, scope ulong*, scope ulong*, scope ulong*, scope ulong*);
164 	struct GC_prof_stats_s
165 	{
166 		ulong heapsize_full = void;
167 		ulong free_bytes_full = void;
168 		ulong unmapped_bytes = void;
169 		ulong bytes_allocd_since_gc = void;
170 		ulong allocd_bytes_before_gc = void;
171 		ulong non_gc_bytes = void;
172 		ulong gc_no = void;
173 		ulong markers_m1 = void;
174 		ulong bytes_reclaimed_since_gc = void;
175 		ulong reclaimed_bytes_before_gc = void;
176 		ulong expl_freed_bytes_since_gc = void;
177 		ulong obtained_from_os_bytes = void;
178 	}
179 
180 	extern ulong GC_get_prof_stats(GC_prof_stats_s*, ulong);
181 	extern ulong GC_get_size_map_at(int i);
182 	extern ulong GC_get_memory_use();
183 	extern void GC_disable();
184 	extern int GC_is_disabled();
185 	extern void GC_enable();
186 	extern void GC_set_manual_vdb_allowed(int);
187 	extern int GC_get_manual_vdb_allowed();
188 	extern void GC_enable_incremental();
189 	extern int GC_is_incremental_mode();
190 	extern int GC_incremental_protection_needs();
191 	extern void GC_start_incremental_collection();
192 	extern int GC_collect_a_little();
193 	extern void* GC_malloc_ignore_off_page(ulong);
194 	extern void* GC_malloc_atomic_ignore_off_page(ulong);
195 	extern void* GC_malloc_atomic_uncollectable(ulong);
196 	extern void* GC_debug_malloc_atomic_uncollectable(ulong, scope const(char)* s, int i);
197 	extern void* GC_debug_malloc(ulong, scope const(char)* s, int i);
198 	extern void* GC_debug_malloc_atomic(ulong, scope const(char)* s, int i);
199 	extern char* GC_debug_strdup(scope const(char)*, scope const(char)* s, int i);
200 	extern char* GC_debug_strndup(scope const(char)*, ulong, scope const(char)* s, int i);
201 	extern void* GC_debug_malloc_uncollectable(ulong, scope const(char)* s, int i);
202 	extern void* GC_debug_malloc_stubborn(ulong, scope const(char)* s, int i);
203 	extern void* GC_debug_malloc_ignore_off_page(ulong, scope const(char)* s, int i);
204 	extern void* GC_debug_malloc_atomic_ignore_off_page(ulong, scope const(char)* s, int i);
205 	extern void GC_debug_free(scope void*);
206 	extern void* GC_debug_realloc(scope void*, ulong, scope const(char)* s, int i);
207 	extern void GC_debug_change_stubborn(scope const(void)*);
208 	extern void GC_debug_end_stubborn_change(scope const(void)*);
209 	extern void* GC_debug_malloc_replacement(ulong);
210 	extern void* GC_debug_realloc_replacement(scope void*, ulong);
211 	alias GC_finalization_proc = void function(scope void*, scope void*);
212 	extern void GC_register_finalizer(scope void*, void function(scope void*, scope void*), scope void*, void function(
213 			scope void*, scope void*)*, scope void**);
214 	extern void GC_debug_register_finalizer(scope void*, void function(scope void*, scope void*), scope void*, void function(
215 			scope void*, scope void*)*, scope void**);
216 	extern void GC_register_finalizer_ignore_self(scope void*, void function(scope void*, scope void*), scope void*, void function(
217 			void*, scope void*)*, scope void**);
218 	extern void GC_debug_register_finalizer_ignore_self(scope void*, void function(scope void*, scope void*), scope void*, void function(
219 			void*, scope void*)*, scope void**);
220 	extern void GC_register_finalizer_no_order(scope void*, void function(scope void*, scope void*), scope void*, void function(
221 			scope void*, scope void*)*, scope void**);
222 	extern void GC_debug_register_finalizer_no_order(scope void*, void function(scope void*, scope void*), scope void*, void function(
223 			void*, scope void*)*, scope void**);
224 	extern void GC_register_finalizer_unreachable(scope void*, void function(scope void*, scope void*), scope void*, void function(
225 			void*, scope void*)*, scope void**);
226 	extern void GC_debug_register_finalizer_unreachable(scope void*, void function(scope void*, scope void*), scope void*, void function(
227 			void*, scope void*)*, scope void**);
228 	extern int GC_register_disappearing_link(scope void**);
229 	extern int GC_general_register_disappearing_link(scope void**, scope const(void)*);
230 	extern int GC_move_disappearing_link(scope void**, scope void**);
231 	extern int GC_unregister_disappearing_link(scope void**);
232 	extern int GC_register_long_link(scope void**, scope const(void)*);
233 	extern int GC_move_long_link(scope void**, scope void**);
234 	extern int GC_unregister_long_link(scope void**);
235 	enum GC_ToggleRefStatus
236 	{
237 		GC_TOGGLE_REF_DROP,
238 		GC_TOGGLE_REF_STRONG,
239 		GC_TOGGLE_REF_WEAK,
240 	}
241 
242 	alias GC_TOGGLE_REF_DROP = GC_ToggleRefStatus.GC_TOGGLE_REF_DROP;
243 	alias GC_TOGGLE_REF_STRONG = GC_ToggleRefStatus.GC_TOGGLE_REF_STRONG;
244 	alias GC_TOGGLE_REF_WEAK = GC_ToggleRefStatus.GC_TOGGLE_REF_WEAK;
245 	alias GC_toggleref_func = GC_ToggleRefStatus function(scope void*);
246 	extern void GC_set_toggleref_func(GC_ToggleRefStatus function(scope void*));
247 	extern GC_ToggleRefStatus function(scope void*) GC_get_toggleref_func();
248 	extern int GC_toggleref_add(scope void*, int);
249 	alias GC_await_finalize_proc = void function(scope void*);
250 	extern void GC_set_await_finalize_proc(void function(scope void*));
251 	extern void function(scope void*) GC_get_await_finalize_proc();
252 	extern int GC_should_invoke_finalizers();
253 	extern int GC_invoke_finalizers();
254 	alias GC_warn_proc = void function(char*, ulong);
255 	extern void GC_set_warn_proc(void function(char*, ulong));
256 	extern void function(char*, ulong) GC_get_warn_proc();
257 	extern void GC_ignore_warn_proc(char*, ulong);
258 	extern void GC_set_log_fd(int);
259 	alias GC_abort_func = void function(scope const(char)*);
260 	extern void GC_set_abort_func(void function(scope const(char)*));
261 	extern void function(scope const(char)*) GC_get_abort_func();
262 	extern void GC_abort_on_oom();
263 	alias GC_hidden_pointer = ulong;
264 	alias GC_fn_type = void* function(scope void*);
265 	extern void* GC_call_with_alloc_lock(scope void* function(scope void*), scope void*);
266 	struct GC_stack_base
267 	{
268 		void* mem_base = void;
269 	}
270 
271 	alias GC_stack_base_func = void* function(GC_stack_base*, scope void*);
272 	extern void* GC_call_with_stack_base(scope void* function(GC_stack_base*, scope void*), scope void*);
273 	extern void GC_start_mark_threads();
274 	extern void* GC_do_blocking(scope void* function(scope void*), scope void*);
275 	extern void* GC_call_with_gc_active(scope void* function(scope void*), scope void*);
276 	extern int GC_get_stack_base(GC_stack_base*);
277 	extern void* GC_get_my_stackbottom(GC_stack_base*);
278 	extern void GC_set_stackbottom(scope void*, const GC_stack_base*);
279 	extern void* GC_same_obj(scope void*, scope void*);
280 	extern void* GC_pre_incr(scope void**, long);
281 	extern void* GC_post_incr(scope void**, long);
282 	extern void* GC_is_visible(scope void*);
283 	extern void* GC_is_valid_displacement(scope void*);
284 	extern void GC_dump();
285 	extern void GC_dump_named(scope const(char)*);
286 	extern void GC_dump_regions();
287 	extern void GC_dump_finalization();
288 	extern void GC_ptr_store_and_dirty(scope void*, scope const(void)*);
289 	extern void GC_debug_ptr_store_and_dirty(scope void*, scope const(void)*);
290 	extern __gshared void function(scope void*, scope void*) GC_same_obj_print_proc;
291 	extern __gshared void function(scope void*) GC_is_valid_displacement_print_proc;
292 	extern __gshared void function(scope void*) GC_is_visible_print_proc;
293 	extern void* GC_malloc_many(ulong);
294 	alias GC_has_static_roots_func = int function(scope const(char)*, void*, ulong);
295 	extern void GC_register_has_static_roots_callback(int function(scope const(char)*, scope void*, ulong));
296 	extern void GC_set_force_unmap_on_gcollect(int);
297 	extern int GC_get_force_unmap_on_gcollect();
298 	extern void GC_win32_free_heap();
299 
300 	enum int GC_TIME_UNLIMITED = 999999;
301 	auto GC_MALLOC_STUBBORN(__MP101)(__MP101 sz)
302 	{
303 		return GC_MALLOC(sz);
304 	}
305 
306 	auto GC_NEW_STUBBORN(__MP102)(__MP102 t)
307 	{
308 		return GC_NEW(t);
309 	}
310 
311 	auto GC_CHANGE_STUBBORN(__MP103)(__MP103 p)
312 	{
313 		return GC_change_stubborn(p);
314 	}
315 
316 	enum int GC_PROTECTS_POINTER_HEAP = 1;
317 	enum int GC_PROTECTS_PTRFREE_HEAP = 2;
318 	enum int GC_PROTECTS_STATIC_DATA = 4;
319 	enum int GC_PROTECTS_STACK = 8;
320 	enum int GC_PROTECTS_NONE = 0;
321 	auto GC_MALLOC(__MP104)(__MP104 sz)
322 	{
323 		return GC_malloc(sz);
324 	}
325 
326 	auto GC_REALLOC(__MP105, __MP106)(__MP105 old, __MP106 sz)
327 	{
328 		return GC_realloc(old, sz);
329 	}
330 
331 	auto GC_MALLOC_ATOMIC(__MP107)(__MP107 sz)
332 	{
333 		return GC_malloc_atomic(sz);
334 	}
335 
336 	auto GC_STRDUP(__MP108)(__MP108 s)
337 	{
338 		return GC_strdup(s);
339 	}
340 
341 	auto GC_STRNDUP(__MP109, __MP110)(__MP109 s, __MP110 sz)
342 	{
343 		return GC_strndup(s, sz);
344 	}
345 
346 	auto GC_MALLOC_ATOMIC_UNCOLLECTABLE(__MP111)(__MP111 sz)
347 	{
348 		return GC_malloc_atomic_uncollectable(sz);
349 	}
350 
351 	auto GC_MALLOC_UNCOLLECTABLE(__MP112)(__MP112 sz)
352 	{
353 		return GC_malloc_uncollectable(sz);
354 	}
355 
356 	auto GC_MALLOC_IGNORE_OFF_PAGE(__MP113)(__MP113 sz)
357 	{
358 		return GC_malloc_ignore_off_page(sz);
359 	}
360 
361 	auto GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(__MP114)(__MP114 sz)
362 	{
363 		return GC_malloc_atomic_ignore_off_page(sz);
364 	}
365 
366 	auto GC_FREE(__MP115)(__MP115 p)
367 	{
368 		return GC_free(p);
369 	}
370 
371 	auto GC_REGISTER_FINALIZER(__MP116, __MP117, __MP118, __MP119, __MP120)(__MP116 p, __MP117 f, __MP118 d, __MP119 of, __MP120 od)
372 	{
373 		return GC_register_finalizer(p, f, d, of, od);
374 	}
375 
376 	auto GC_REGISTER_FINALIZER_IGNORE_SELF(__MP121, __MP122, __MP123, __MP124, __MP125)(
377 		__MP121 p, __MP122 f, __MP123 d, __MP124 of, __MP125 od)
378 	{
379 		return GC_register_finalizer_ignore_self(p, f, d, of, od);
380 	}
381 
382 	auto GC_REGISTER_FINALIZER_NO_ORDER(__MP126, __MP127, __MP128, __MP129, __MP130)(
383 		__MP126 p, __MP127 f, __MP128 d, __MP129 of, __MP130 od)
384 	{
385 		return GC_register_finalizer_no_order(p, f, d, of, od);
386 	}
387 
388 	auto GC_REGISTER_FINALIZER_UNREACHABLE(__MP131, __MP132, __MP133, __MP134, __MP135)(
389 		__MP131 p, __MP132 f, __MP133 d, __MP134 of, __MP135 od)
390 	{
391 		return GC_register_finalizer_unreachable(p, f, d, of, od);
392 	}
393 
394 	auto GC_END_STUBBORN_CHANGE(__MP136)(__MP136 p)
395 	{
396 		return GC_end_stubborn_change(p);
397 	}
398 
399 	auto GC_PTR_STORE_AND_DIRTY(__MP137, __MP138)(__MP137 p, __MP138 q)
400 	{
401 		return GC_ptr_store_and_dirty(p, q);
402 	}
403 
404 	auto GC_GENERAL_REGISTER_DISAPPEARING_LINK(__MP139, __MP140)(__MP139 link, __MP140 obj)
405 	{
406 		return GC_general_register_disappearing_link(link, obj);
407 	}
408 
409 	auto GC_REGISTER_LONG_LINK(__MP141, __MP142)(__MP141 link, __MP142 obj)
410 	{
411 		return GC_register_long_link(link, obj);
412 	}
413 
414 	auto GC_REGISTER_DISPLACEMENT(__MP143)(__MP143 n)
415 	{
416 		return GC_register_displacement(n);
417 	}
418 
419 	enum int GC_NO_MEMORY = 2;
420 	auto GC_HIDE_POINTER(__MP148)(__MP148 p)
421 	{
422 		return ~cast(ulong) p;
423 	}
424 
425 	auto GC_REVEAL_POINTER(__MP149)(__MP149 p)
426 	{
427 		return cast(void*) GC_HIDE_POINTER(p);
428 	}
429 
430 	auto GC_alloc_lock()()
431 	{
432 		return cast(void) 0;
433 	}
434 
435 	auto GC_alloc_unlock()()
436 	{
437 		return cast(void) 0;
438 	}
439 
440 	enum int GC_SUCCESS = 0;
441 	enum int GC_DUPLICATE = 1;
442 	enum int GC_NO_THREADS = 2;
443 	enum int GC_UNIMPLEMENTED = 3;
444 	enum int GC_NOT_FOUND = 4;
445 	auto GC_PTR_ADD(__MP150, __MP151)(__MP150 x, __MP151 n)
446 	{
447 		return x + n;
448 	}
449 
450 	auto GC_PRE_INCR(__MP152, __MP153)(__MP152 x, __MP153 n)
451 	{
452 		return x += n;
453 	}
454 
455 	auto GC_POST_INCR(__MP154)(__MP154 x)
456 	{
457 		return x++;
458 	}
459 
460 	auto GC_POST_DECR(__MP155)(__MP155 x)
461 	{
462 		return x--;
463 	}
464 
465 	auto GC_PTR_STORE(__MP156, __MP157)(__MP156 p, __MP157 q)
466 	{
467 		return *cast(void**) p = cast(void*) q;
468 	}
469 
470 	auto GC_NEXT(__MP158)(__MP158 p)
471 	{
472 		return *cast(void**) p;
473 	}
474 }