Make gc maps optional and disabled by default for AOT.
authorRodrigo Kumpera <kumpera@gmail.com>
Wed, 31 Oct 2012 21:52:10 +0000 (17:52 -0400)
committerRodrigo Kumpera <kumpera@gmail.com>
Wed, 31 Oct 2012 21:52:43 +0000 (17:52 -0400)
mono/mini/aot-compiler.c
mono/mini/mini-gc.c
mono/mini/mini-gc.h

index 9502e543c77e61f9e22497bc883a6b1bb815ffe6..1c197fd6c63deb5bf50a4f656b23825c8ec60bb7 100644 (file)
@@ -65,6 +65,7 @@
 #include "mini.h"
 #include "image-writer.h"
 #include "dwarfwriter.h"
+#include "mini-gc.h"
 
 #if !defined(DISABLE_AOT) && !defined(DISABLE_JIT)
 
@@ -5260,6 +5261,8 @@ mono_aot_parse_options (const char *aot_options, MonoAotOptions *opts)
                } else if (str_begins_with (arg, "info")) {
                        printf ("AOT target setup: %s.\n", AOT_TARGET_STR);
                        exit (0);
+               } else if (str_begins_with (arg, "gc-maps")) {
+                       mini_gc_enable_gc_maps_for_aot ();
                } else if (str_begins_with (arg, "help") || str_begins_with (arg, "?")) {
                        printf ("Supported options for --aot:\n");
                        printf ("    outfile=\n");
@@ -5281,6 +5284,7 @@ mono_aot_parse_options (const char *aot_options, MonoAotOptions *opts)
                        printf ("    tool-prefix=\n");
                        printf ("    readonly-value=\n");
                        printf ("    soft-debug\n");
+                       printf ("    gc-maps\n");
                        printf ("    print-skipped\n");
                        printf ("    stats\n");
                        printf ("    info\n");
index 088225e4b15aa36c3ba33fb158e1f532b5197a90..f1121d079a3e42400d7006b3181255c18a410b75 100644 (file)
@@ -262,6 +262,14 @@ static JITGCStats stats;
 
 static FILE *logfile;
 
+static gboolean enable_gc_maps_for_aot;
+
+void
+mini_gc_enable_gc_maps_for_aot (void)
+{
+       enable_gc_maps_for_aot = TRUE;
+}
+
 // FIXME: Move these to a shared place
 
 static inline void
@@ -1210,7 +1218,10 @@ mini_gc_init_gc_map (MonoCompile *cfg)
        if (!mono_gc_is_moving ())
                return;
 
-       if (!cfg->compile_aot && !mono_gc_precise_stack_mark_enabled ())
+       if (cfg->compile_aot) {
+               if (!enable_gc_maps_for_aot)
+                       return;
+       } else if (!mono_gc_precise_stack_mark_enabled ())
                return;
 
 #if 1
index 4e6355021c0a0ae6bc57ca8bcf32e74345e584a3..63366bb16cd6531af4fbb04e5fb9326bdb518174 100644 (file)
@@ -22,6 +22,8 @@ void mini_gc_init (void) MONO_INTERNAL;
 
 void mini_gc_init_cfg (MonoCompile *cfg) MONO_INTERNAL;
 
+void mini_gc_enable_gc_maps_for_aot (void) MONO_INTERNAL;
+
 void mini_gc_create_gc_map (MonoCompile *cfg) MONO_INTERNAL;
 
 void mini_gc_set_slot_type_from_fp (MonoCompile *cfg, int slot_offset, GCSlotType type) MONO_INTERNAL;