Merge pull request #3328 from BrzVlad/finalizer-thread-exited2
[mono.git] / mono / mini / debug-mini.c
index 2ef1c93fd5622f3d085f4457decf9523038b0664..41e241a33a8bf1a14ee1b64f4f07f5773fac4a0e 100644 (file)
@@ -240,29 +240,32 @@ mono_debug_close_method (MonoCompile *cfg)
        jit->code_start = cfg->native_code;
        jit->epilogue_begin = cfg->epilog_begin;
        jit->code_size = cfg->code_len;
+       jit->has_var_info = debug_options.mdb_optimizations != 0;
 
        if (jit->epilogue_begin)
                   record_line_number (info, jit->epilogue_begin, header->code_size);
 
-       jit->num_params = sig->param_count;
-       jit->params = g_new0 (MonoDebugVarInfo, jit->num_params);
+       if (jit->has_var_info) {
+               jit->num_params = sig->param_count;
+               jit->params = g_new0 (MonoDebugVarInfo, jit->num_params);
 
-       for (i = 0; i < jit->num_locals; i++)
-               write_variable (cfg->locals [i], &jit->locals [i]);
+               for (i = 0; i < jit->num_locals; i++)
+                       write_variable (cfg->locals [i], &jit->locals [i]);
 
-       if (sig->hasthis) {
-               jit->this_var = g_new0 (MonoDebugVarInfo, 1);
-               write_variable (cfg->args [0], jit->this_var);
-       }
+               if (sig->hasthis) {
+                       jit->this_var = g_new0 (MonoDebugVarInfo, 1);
+                       write_variable (cfg->args [0], jit->this_var);
+               }
 
-       for (i = 0; i < jit->num_params; i++)
-               write_variable (cfg->args [i + sig->hasthis], &jit->params [i]);
+               for (i = 0; i < jit->num_params; i++)
+                       write_variable (cfg->args [i + sig->hasthis], &jit->params [i]);
 
-       if (cfg->gsharedvt_info_var) {
-               jit->gsharedvt_info_var = g_new0 (MonoDebugVarInfo, 1);
-               jit->gsharedvt_locals_var = g_new0 (MonoDebugVarInfo, 1);
-               write_variable (cfg->gsharedvt_info_var, jit->gsharedvt_info_var);
-               write_variable (cfg->gsharedvt_locals_var, jit->gsharedvt_locals_var);
+               if (cfg->gsharedvt_info_var) {
+                       jit->gsharedvt_info_var = g_new0 (MonoDebugVarInfo, 1);
+                       jit->gsharedvt_locals_var = g_new0 (MonoDebugVarInfo, 1);
+                       write_variable (cfg->gsharedvt_info_var, jit->gsharedvt_info_var);
+                       write_variable (cfg->gsharedvt_locals_var, jit->gsharedvt_locals_var);
+               }
        }
 
        jit->num_line_numbers = info->line_numbers->len;
@@ -457,22 +460,25 @@ mono_debug_serialize_debug_info (MonoCompile *cfg, guint8 **out_buf, guint32 *bu
        encode_value (jit->epilogue_begin, p, &p);
        encode_value (jit->prologue_end, p, &p);
        encode_value (jit->code_size, p, &p);
+       encode_value (jit->has_var_info, p, &p);
 
-       for (i = 0; i < jit->num_params; ++i)
-               serialize_variable (&jit->params [i], p, &p);
+       if (jit->has_var_info) {
+               for (i = 0; i < jit->num_params; ++i)
+                       serialize_variable (&jit->params [i], p, &p);
 
-       if (mono_method_signature (cfg->method)->hasthis)
-               serialize_variable (jit->this_var, p, &p);
+               if (jit->this_var)
+                       serialize_variable (jit->this_var, p, &p);
 
-       for (i = 0; i < jit->num_locals; i++)
-               serialize_variable (&jit->locals [i], p, &p);
+               for (i = 0; i < jit->num_locals; i++)
+                       serialize_variable (&jit->locals [i], p, &p);
 
-       if (jit->gsharedvt_info_var) {
-               encode_value (1, p, &p);
-               serialize_variable (jit->gsharedvt_info_var, p, &p);
-               serialize_variable (jit->gsharedvt_locals_var, p, &p);
-       } else {
-               encode_value (0, p, &p);
+               if (jit->gsharedvt_info_var) {
+                       encode_value (1, p, &p);
+                       serialize_variable (jit->gsharedvt_info_var, p, &p);
+                       serialize_variable (jit->gsharedvt_locals_var, p, &p);
+               } else {
+                       encode_value (0, p, &p);
+               }
        }
 
        encode_value (jit->num_line_numbers, p, &p);
@@ -535,32 +541,36 @@ deserialize_debug_info (MonoMethod *method, guint8 *code_start, guint8 *buf, gui
 
        jit = g_new0 (MonoDebugMethodJitInfo, 1);
        jit->code_start = code_start;
-       jit->num_locals = header->num_locals;
-       jit->locals = g_new0 (MonoDebugVarInfo, jit->num_locals);
-       jit->num_params = mono_method_signature (method)->param_count;
-       jit->params = g_new0 (MonoDebugVarInfo, jit->num_params);
 
        p = buf;
        jit->epilogue_begin = decode_value (p, &p);
        jit->prologue_end = decode_value (p, &p);
        jit->code_size = decode_value (p, &p);
+       jit->has_var_info = decode_value (p, &p);
 
-       for (i = 0; i < jit->num_params; ++i)
-               deserialize_variable (&jit->params [i], p, &p);
+       if (jit->has_var_info) {
+               jit->num_locals = header->num_locals;
+               jit->num_params = mono_method_signature (method)->param_count;
+               jit->params = g_new0 (MonoDebugVarInfo, jit->num_params);
+               jit->locals = g_new0 (MonoDebugVarInfo, jit->num_locals);
 
-       if (mono_method_signature (method)->hasthis) {
-               jit->this_var = g_new0 (MonoDebugVarInfo, 1);
-               deserialize_variable (jit->this_var, p, &p);
-       }
+               for (i = 0; i < jit->num_params; ++i)
+                       deserialize_variable (&jit->params [i], p, &p);
 
-       for (i = 0; i < jit->num_locals; i++)
-               deserialize_variable (&jit->locals [i], p, &p);
+               if (mono_method_signature (method)->hasthis) {
+                       jit->this_var = g_new0 (MonoDebugVarInfo, 1);
+                       deserialize_variable (jit->this_var, p, &p);
+               }
+
+               for (i = 0; i < jit->num_locals; i++)
+                       deserialize_variable (&jit->locals [i], p, &p);
 
-       if (decode_value (p, &p)) {
-               jit->gsharedvt_info_var = g_new0 (MonoDebugVarInfo, 1);
-               jit->gsharedvt_locals_var = g_new0 (MonoDebugVarInfo, 1);
-               deserialize_variable (jit->gsharedvt_info_var, p, &p);
-               deserialize_variable (jit->gsharedvt_locals_var, p, &p);
+               if (decode_value (p, &p)) {
+                       jit->gsharedvt_info_var = g_new0 (MonoDebugVarInfo, 1);
+                       jit->gsharedvt_locals_var = g_new0 (MonoDebugVarInfo, 1);
+                       deserialize_variable (jit->gsharedvt_info_var, p, &p);
+                       deserialize_variable (jit->gsharedvt_locals_var, p, &p);
+               }
        }
 
        jit->num_line_numbers = decode_value (p, &p);