Merge pull request #1412 from esdrubal/stackframe
[mono.git] / mono / mini / aot-runtime.c
index 757b730e655ab0cc3c9f95dfa3d87eda897f3d77..7158952a2ec6ca57bf03dc33978d6a317ef18b30 100644 (file)
@@ -58,6 +58,7 @@
 #include <mono/utils/mono-digest.h>
 
 #include "mini.h"
+#include "seq-points.h"
 #include "version.h"
 
 #ifndef DISABLE_AOT
@@ -2770,30 +2771,8 @@ decode_exception_debug_info (MonoAotModule *amodule, MonoDomain *domain,
 
        if (method && has_seq_points) {
                MonoSeqPointInfo *seq_points;
-               int il_offset, native_offset, last_il_offset, last_native_offset, j;
 
-               int len = decode_value (p, &p);
-
-               seq_points = g_malloc0 (sizeof (MonoSeqPointInfo) + (len - MONO_ZERO_LEN_ARRAY) * sizeof (SeqPoint));
-               seq_points->len = len;
-               last_il_offset = last_native_offset = 0;
-               for (i = 0; i < len; ++i) {
-                       SeqPoint *sp = &seq_points->seq_points [i];
-                       il_offset = last_il_offset + decode_value (p, &p);
-                       native_offset = last_native_offset + decode_value (p, &p);
-
-                       sp->il_offset = il_offset;
-                       sp->native_offset = native_offset;
-                       
-                       sp->flags = decode_value (p, &p);
-                       sp->next_len = decode_value (p, &p);
-                       sp->next = g_new (int, sp->next_len);
-                       for (j = 0; j < sp->next_len; ++j)
-                               sp->next [j] = decode_value (p, &p);
-
-                       last_il_offset = il_offset;
-                       last_native_offset = native_offset;
-               }
+               p += seq_point_info_read (&seq_points, p, FALSE);
 
                mono_domain_lock (domain);
                g_hash_table_insert (domain_jit_info (domain)->seq_points, method, seq_points);