/** * \file * The cross-GC bridge. * * Copyright (C) 2015 Xamarin Inc * * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #ifndef __MONO_SGENBRIDGEINTERNAL_H__ #define __MONO_SGENBRIDGEINTERNAL_H__ #include "config.h" #ifdef HAVE_SGEN_GC #include "mono/utils/mono-compiler.h" #include "mono/sgen/sgen-gc.h" #include "mono/metadata/sgen-bridge.h" extern volatile gboolean bridge_processing_in_progress; extern MonoGCBridgeCallbacks bridge_callbacks; gboolean sgen_need_bridge_processing (void); void sgen_bridge_reset_data (void); void sgen_bridge_processing_stw_step (void); void sgen_bridge_processing_finish (int generation); gboolean sgen_is_bridge_object (GCObject *obj); MonoGCBridgeObjectKind sgen_bridge_class_kind (MonoClass *klass); void sgen_bridge_register_finalized_object (GCObject *object); void sgen_bridge_describe_pointer (GCObject *object); gboolean sgen_is_bridge_object (GCObject *obj); void sgen_mark_bridge_object (GCObject *obj); gboolean sgen_bridge_handle_gc_param (const char *opt); gboolean sgen_bridge_handle_gc_debug (const char *opt); void sgen_bridge_print_gc_debug_usage (void); typedef struct { char *dump_prefix; gboolean accounting; gboolean scc_precise_merge; // Used by Tarjan } SgenBridgeProcessorConfig; typedef struct { void (*reset_data) (void); void (*processing_stw_step) (void); void (*processing_build_callback_data) (int generation); void (*processing_after_callback) (int generation); MonoGCBridgeObjectKind (*class_kind) (MonoClass *klass); void (*register_finalized_object) (GCObject *object); void (*describe_pointer) (GCObject *object); /* Should be called once, immediately after init */ void (*set_config) (const SgenBridgeProcessorConfig *); /* * These are set by processing_build_callback_data(). */ int num_sccs; MonoGCBridgeSCC **api_sccs; int num_xrefs; MonoGCBridgeXRef *api_xrefs; } SgenBridgeProcessor; void sgen_old_bridge_init (SgenBridgeProcessor *collector); void sgen_new_bridge_init (SgenBridgeProcessor *collector); void sgen_tarjan_bridge_init (SgenBridgeProcessor *collector); void sgen_set_bridge_implementation (const char *name); void sgen_bridge_set_dump_prefix (const char *prefix); void sgen_init_bridge (void); #endif #endif