Merge pull request #1412 from esdrubal/stackframe
[mono.git] / mono / mini / aot-compiler.c
index bc9c01f401fc9f688c25190250d77ad4a934f8cd..283489f8d26dfafe23fa4ea3e3ba2906b7d57486 100644 (file)
@@ -52,6 +52,7 @@
 #include <mono/utils/mono-mmap.h>
 
 #include "mini.h"
+#include "seq-points.h"
 #include "image-writer.h"
 #include "dwarfwriter.h"
 #include "mini-gc.h"
@@ -5322,7 +5323,7 @@ emit_exception_debug_info (MonoAotCompile *acfg, MonoCompile *cfg)
 {
        MonoMethod *method;
        int i, k, buf_size, method_index;
-       guint32 debug_info_size;
+       guint32 debug_info_size, seq_points_size;
        guint8 *code;
        MonoMethodHeader *header;
        guint8 *p, *buf, *debug_info;
@@ -5346,7 +5347,9 @@ emit_exception_debug_info (MonoAotCompile *acfg, MonoCompile *cfg)
 
        seq_points = cfg->seq_point_info;
 
-       buf_size = header->num_clauses * 256 + debug_info_size + 2048 + (seq_points ? (seq_points->len * 128) : 0) + cfg->gc_map_size;
+       seq_points_size = seq_point_info_get_write_size (seq_points);
+
+       buf_size = header->num_clauses * 256 + debug_info_size + 2048 + seq_points_size + cfg->gc_map_size;
        p = buf = g_malloc (buf_size);
 
        use_unwind_ops = cfg->unwind_ops != NULL;
@@ -5552,27 +5555,9 @@ emit_exception_debug_info (MonoAotCompile *acfg, MonoCompile *cfg)
                }
        }
 
-       if (seq_points) {
-               int il_offset, native_offset, last_il_offset, last_native_offset, j;
-
-               encode_value (seq_points->len, p, &p);
-               last_il_offset = last_native_offset = 0;
-               for (i = 0; i < seq_points->len; ++i) {
-                       SeqPoint *sp = &seq_points->seq_points [i];
-                       il_offset = sp->il_offset;
-                       native_offset = sp->native_offset;
-                       encode_value (il_offset - last_il_offset, p, &p);
-                       encode_value (native_offset - last_native_offset, p, &p);
-                       last_il_offset = il_offset;
-                       last_native_offset = native_offset;
+       if (seq_points)
+               p += seq_point_info_write (seq_points, p);
 
-                       encode_value (sp->flags, p, &p);
-                       encode_value (sp->next_len, p, &p);
-                       for (j = 0; j < sp->next_len; ++j)
-                               encode_value (sp->next [j], p, &p);
-               }
-       }
-               
        g_assert (debug_info_size < buf_size);
 
        encode_value (debug_info_size, p, &p);
@@ -8855,7 +8840,7 @@ mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
                MonoDebugOptions *opt = mini_get_debug_options ();
 
                opt->mdb_optimizations = TRUE;
-               opt->gen_seq_points = TRUE;
+               opt->gen_seq_points_debug_data = TRUE;
 
                if (!mono_debug_enabled ()) {
                        aot_printerrf (acfg, "The soft-debug AOT option requires the --debug option.\n");