2 * sgen-protocol.h: Binary protocol of internal activity, to aid
5 * Copyright 2001-2003 Ximian, Inc
6 * Copyright 2003-2010 Novell, Inc.
7 * Copyright (C) 2012 Xamarin Inc
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public
11 * License 2.0 as published by the Free Software Foundation;
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License 2.0 along with this library; if not, write to the Free
20 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 #ifndef __MONO_SGENPROTOCOL_H__
24 #define __MONO_SGENPROTOCOL_H__
29 SGEN_PROTOCOL_COLLECTION_FORCE
,
30 SGEN_PROTOCOL_COLLECTION_BEGIN
,
31 SGEN_PROTOCOL_COLLECTION_END
,
32 SGEN_PROTOCOL_CONCURRENT_START
,
33 SGEN_PROTOCOL_CONCURRENT_UPDATE_FINISH
,
34 SGEN_PROTOCOL_WORLD_STOPPING
,
35 SGEN_PROTOCOL_WORLD_STOPPED
,
36 SGEN_PROTOCOL_WORLD_RESTARTING
,
37 SGEN_PROTOCOL_WORLD_RESTARTED
,
42 SGEN_PROTOCOL_SCAN_BEGIN
,
43 SGEN_PROTOCOL_SCAN_VTYPE_BEGIN
,
44 SGEN_PROTOCOL_WBARRIER
,
45 SGEN_PROTOCOL_GLOBAL_REMSET
,
46 SGEN_PROTOCOL_PTR_UPDATE
,
47 SGEN_PROTOCOL_CLEANUP
,
49 SGEN_PROTOCOL_THREAD_SUSPEND
,
50 SGEN_PROTOCOL_THREAD_RESTART
,
51 SGEN_PROTOCOL_THREAD_REGISTER
,
52 SGEN_PROTOCOL_THREAD_UNREGISTER
,
53 SGEN_PROTOCOL_MISSING_REMSET
,
54 SGEN_PROTOCOL_ALLOC_PINNED
,
55 SGEN_PROTOCOL_ALLOC_DEGRADED
,
56 SGEN_PROTOCOL_CARD_SCAN
,
58 SGEN_PROTOCOL_CEMENT_RESET
,
59 SGEN_PROTOCOL_DISLINK_UPDATE
,
60 SGEN_PROTOCOL_DISLINK_UPDATE_STAGED
,
61 SGEN_PROTOCOL_DISLINK_PROCESS_STAGED
,
62 SGEN_PROTOCOL_DOMAIN_UNLOAD_BEGIN
,
63 SGEN_PROTOCOL_DOMAIN_UNLOAD_END
,
64 SGEN_PROTOCOL_GRAY_ENQUEUE
,
65 SGEN_PROTOCOL_GRAY_DEQUEUE
,
70 } SGenProtocolCollectionForce
;
73 int index
, generation
;
74 } SGenProtocolCollection
;
78 } SGenProtocolWorldStopping
;
82 long long total_major_cards
;
83 long long marked_major_cards
;
84 long long total_los_cards
;
85 long long marked_los_cards
;
86 } SGenProtocolWorldStopped
;
91 long long total_major_cards
;
92 long long marked_major_cards
;
93 long long total_los_cards
;
94 long long marked_los_cards
;
95 } SGenProtocolWorldRestarting
;
100 } SGenProtocolWorldRestarted
;
131 } SGenProtocolScanBegin
;
136 } SGenProtocolScanVTypeBegin
;
141 gpointer value_vtable
;
142 } SGenProtocolWBarrier
;
147 gpointer value_vtable
;
148 } SGenProtocolGlobalRemset
;
156 } SGenProtocolPtrUpdate
;
162 } SGenProtocolCleanup
;
170 gpointer thread
, stopped_ip
;
171 } SGenProtocolThreadSuspend
;
175 } SGenProtocolThreadRestart
;
179 } SGenProtocolThreadRegister
;
183 } SGenProtocolThreadUnregister
;
190 gpointer value_vtable
;
192 } SGenProtocolMissingRemset
;
197 } SGenProtocolCardScan
;
203 } SGenProtocolCement
;
210 } SGenProtocolDislinkUpdate
;
217 } SGenProtocolDislinkUpdateStaged
;
223 } SGenProtocolDislinkProcessStaged
;
227 } SGenProtocolDomainUnload
;
233 } SGenProtocolGrayQueue
;
235 /* missing: finalizers, roots, non-store wbarriers */
237 void binary_protocol_init (const char *filename
) MONO_INTERNAL
;
238 gboolean
binary_protocol_is_enabled (void) MONO_INTERNAL
;
240 void binary_protocol_flush_buffers (gboolean force
) MONO_INTERNAL
;
242 void binary_protocol_collection_force (int generation
) MONO_INTERNAL
;
243 void binary_protocol_collection_begin (int index
, int generation
) MONO_INTERNAL
;
244 void binary_protocol_collection_end (int index
, int generation
) MONO_INTERNAL
;
245 void binary_protocol_concurrent_start (void) MONO_INTERNAL
;
246 void binary_protocol_concurrent_update_finish (void) MONO_INTERNAL
;
247 void binary_protocol_world_stopping (long long timestamp
) MONO_INTERNAL
;
248 void binary_protocol_world_stopped (long long timestamp
, long long total_major_cards
,
249 long long marked_major_cards
, long long total_los_cards
, long long marked_los_cards
) MONO_INTERNAL
;
250 void binary_protocol_world_restarting (int generation
, long long timestamp
,
251 long long total_major_cards
, long long marked_major_cards
, long long total_los_cards
, long long marked_los_cards
) MONO_INTERNAL
;
252 void binary_protocol_world_restarted (int generation
, long long timestamp
) MONO_INTERNAL
;
254 void binary_protocol_thread_suspend (gpointer thread
, gpointer stopped_ip
) MONO_INTERNAL
;
255 void binary_protocol_thread_restart (gpointer thread
) MONO_INTERNAL
;
256 void binary_protocol_thread_register (gpointer thread
) MONO_INTERNAL
;
257 void binary_protocol_thread_unregister (gpointer thread
) MONO_INTERNAL
;
258 void binary_protocol_missing_remset (gpointer obj
, gpointer obj_vtable
, int offset
,
259 gpointer value
, gpointer value_vtable
, int value_pinned
) MONO_INTERNAL
;
261 void binary_protocol_cement (gpointer ptr
, gpointer vtable
, int size
) MONO_INTERNAL
;
262 void binary_protocol_cement_reset (void) MONO_INTERNAL
;
264 void binary_protocol_domain_unload_begin (gpointer domain
) MONO_INTERNAL
;
265 void binary_protocol_domain_unload_end (gpointer domain
) MONO_INTERNAL
;
267 #ifdef SGEN_HEAVY_BINARY_PROTOCOL
269 #define binary_protocol_is_heavy_enabled() binary_protocol_is_enabled ()
271 void binary_protocol_alloc (gpointer obj
, gpointer vtable
, int size
) MONO_INTERNAL
;
272 void binary_protocol_alloc_pinned (gpointer obj
, gpointer vtable
, int size
) MONO_INTERNAL
;
273 void binary_protocol_alloc_degraded (gpointer obj
, gpointer vtable
, int size
) MONO_INTERNAL
;
274 void binary_protocol_copy (gpointer from
, gpointer to
, gpointer vtable
, int size
) MONO_INTERNAL
;
275 void binary_protocol_pin (gpointer obj
, gpointer vtable
, int size
) MONO_INTERNAL
;
276 void binary_protocol_mark (gpointer obj
, gpointer vtable
, int size
) MONO_INTERNAL
;
277 void binary_protocol_scan_begin (gpointer obj
, gpointer vtable
, int size
) MONO_INTERNAL
;
278 void binary_protocol_scan_vtype_begin (gpointer start
, int size
) MONO_INTERNAL
;
279 void binary_protocol_wbarrier (gpointer ptr
, gpointer value
, gpointer value_vtable
) MONO_INTERNAL
;
280 void binary_protocol_global_remset (gpointer ptr
, gpointer value
, gpointer value_vtable
) MONO_INTERNAL
;
281 void binary_protocol_ptr_update (gpointer ptr
, gpointer old_value
, gpointer new_value
, gpointer vtable
, int size
) MONO_INTERNAL
;
282 void binary_protocol_cleanup (gpointer ptr
, gpointer vtable
, int size
) MONO_INTERNAL
;
283 void binary_protocol_empty (gpointer start
, int size
) MONO_INTERNAL
;
284 void binary_protocol_card_scan (gpointer start
, int size
) MONO_INTERNAL
;
285 void binary_protocol_dislink_update (gpointer link
, gpointer obj
, int track
, int staged
) MONO_INTERNAL
;
286 void binary_protocol_dislink_update_staged (gpointer link
, gpointer obj
, int track
, int index
) MONO_INTERNAL
;
287 void binary_protocol_dislink_process_staged (gpointer link
, gpointer obj
, int index
) MONO_INTERNAL
;
288 void binary_protocol_gray_enqueue (gpointer queue
, gpointer cursor
, gpointer value
) MONO_INTERNAL
;
289 void binary_protocol_gray_dequeue (gpointer queue
, gpointer cursor
, gpointer value
) MONO_INTERNAL
;
293 #define binary_protocol_is_heavy_enabled() FALSE
295 #define binary_protocol_alloc(obj, vtable, size)
296 #define binary_protocol_alloc_pinned(obj, vtable, size)
297 #define binary_protocol_alloc_degraded(obj, vtable, size)
298 #define binary_protocol_copy(from, to, vtable, size)
299 #define binary_protocol_pin(obj, vtable, size)
300 #define binary_protocol_mark(obj, vtable, size)
301 #define binary_protocol_scan_begin(obj, vtable, size)
302 #define binary_protocol_scan_vtype_begin(obj, size)
303 #define binary_protocol_wbarrier(ptr, value, value_vtable)
304 #define binary_protocol_global_remset(ptr, value, value_vtable)
305 #define binary_protocol_ptr_update(ptr, old_value, new_value, vtable, size)
306 #define binary_protocol_cleanup(ptr, vtable, size)
307 #define binary_protocol_empty(start, size)
308 #define binary_protocol_card_scan(start, size)
309 #define binary_protocol_dislink_update(link,obj,track,staged)
310 #define binary_protocol_dislink_update_staged(link,obj,track,index)
311 #define binary_protocol_dislink_process_staged(link,obj,index)
312 #define binary_protocol_gray_enqueue(queue,cursor,value)
313 #define binary_protocol_gray_dequeue(queue,cursor,value)