write_sleb128 (lne->il_offset, ptr, &ptr);
write_sleb128 (lne->native_offset, ptr, &ptr);
}
-
- *ptr++ = jit->this_var ? 1 : 0;
- if (jit->this_var)
- write_variable (jit->this_var, ptr, &ptr);
-
- write_leb128 (jit->num_params, ptr, &ptr);
- for (i = 0; i < jit->num_params; i++)
- write_variable (&jit->params [i], ptr, &ptr);
-
- write_leb128 (jit->num_locals, ptr, &ptr);
- for (i = 0; i < jit->num_locals; i++)
- write_variable (&jit->locals [i], ptr, &ptr);
-
- *ptr++ = jit->gsharedvt_info_var ? 1 : 0;
- if (jit->gsharedvt_info_var) {
- write_variable (jit->gsharedvt_info_var, ptr, &ptr);
- write_variable (jit->gsharedvt_locals_var, ptr, &ptr);
+ write_leb128 (jit->has_var_info, ptr, &ptr);
+ if (jit->has_var_info) {
+ *ptr++ = jit->this_var ? 1 : 0;
+ if (jit->this_var)
+ write_variable (jit->this_var, ptr, &ptr);
+
+ write_leb128 (jit->num_params, ptr, &ptr);
+ for (i = 0; i < jit->num_params; i++)
+ write_variable (&jit->params [i], ptr, &ptr);
+
+ write_leb128 (jit->num_locals, ptr, &ptr);
+ for (i = 0; i < jit->num_locals; i++)
+ write_variable (&jit->locals [i], ptr, &ptr);
+
+ *ptr++ = jit->gsharedvt_info_var ? 1 : 0;
+ if (jit->gsharedvt_info_var) {
+ write_variable (jit->gsharedvt_info_var, ptr, &ptr);
+ write_variable (jit->gsharedvt_locals_var, ptr, &ptr);
+ }
}
size = ptr - oldptr;
lne->il_offset = read_sleb128 (ptr, &ptr);
lne->native_offset = read_sleb128 (ptr, &ptr);
}
+ jit->has_var_info = read_leb128 (ptr, &ptr);
+ if (jit->has_var_info) {
+ if (*ptr++) {
+ jit->this_var = g_new0 (MonoDebugVarInfo, 1);
+ read_variable (jit->this_var, ptr, &ptr);
+ }
- if (*ptr++) {
- jit->this_var = g_new0 (MonoDebugVarInfo, 1);
- read_variable (jit->this_var, ptr, &ptr);
- }
-
- jit->num_params = read_leb128 (ptr, &ptr);
- jit->params = g_new0 (MonoDebugVarInfo, jit->num_params);
- for (i = 0; i < jit->num_params; i++)
- read_variable (&jit->params [i], ptr, &ptr);
-
- jit->num_locals = read_leb128 (ptr, &ptr);
- jit->locals = g_new0 (MonoDebugVarInfo, jit->num_locals);
- for (i = 0; i < jit->num_locals; i++)
- read_variable (&jit->locals [i], ptr, &ptr);
-
- if (*ptr++) {
- jit->gsharedvt_info_var = g_new0 (MonoDebugVarInfo, 1);
- jit->gsharedvt_locals_var = g_new0 (MonoDebugVarInfo, 1);
- read_variable (jit->gsharedvt_info_var, ptr, &ptr);
- read_variable (jit->gsharedvt_locals_var, ptr, &ptr);
+ jit->num_params = read_leb128 (ptr, &ptr);
+ jit->params = g_new0 (MonoDebugVarInfo, jit->num_params);
+ for (i = 0; i < jit->num_params; i++)
+ read_variable (&jit->params [i], ptr, &ptr);
+
+ jit->num_locals = read_leb128 (ptr, &ptr);
+ jit->locals = g_new0 (MonoDebugVarInfo, jit->num_locals);
+ for (i = 0; i < jit->num_locals; i++)
+ read_variable (&jit->locals [i], ptr, &ptr);
+
+ if (*ptr++) {
+ jit->gsharedvt_info_var = g_new0 (MonoDebugVarInfo, 1);
+ jit->gsharedvt_locals_var = g_new0 (MonoDebugVarInfo, 1);
+ read_variable (jit->gsharedvt_info_var, ptr, &ptr);
+ read_variable (jit->gsharedvt_locals_var, ptr, &ptr);
+ }
}
return jit;
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;
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);
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);