Author: toshok
Date: 2005-02-24 00:50:42 -0500 (Thu, 24 Feb 2005)
New Revision: 41135
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/debug-mono-symfile.c
trunk/mono/mono/metadata/debug-mono-symfile.h
trunk/mono/mono/metadata/mono-debug.c
trunk/mono/mono/metadata/mono-debug.h
Log:
2005-02-23 Chris Toshok <[EMAIL PROTECTED]>
Part of fix for #72827.
* mono-debug.c (mono_debug_add_method): add lexical block data to
the info we write. Kind of a hack at the moment - we copy the
lexical block info from the MonoDebugMethodInfo to the
MonoDebugMethodJitInfo here, before writing it.
(mono_debug_read_method): read the lexical block info.
* mono-debug.h (_MonoDebugMethodJitInfo): add lexical block slots.
* debug-mono-symfile.h: add lexical block support.
* debug-mono-symfile.c (mono_debug_find_method): add lexical block
support.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2005-02-24 05:38:11 UTC (rev 41134)
+++ trunk/mono/mono/metadata/ChangeLog 2005-02-24 05:50:42 UTC (rev 41135)
@@ -1,3 +1,19 @@
+2005-02-23 Chris Toshok <[EMAIL PROTECTED]>
+
+ Part of fix for #72827.
+ * mono-debug.c (mono_debug_add_method): add lexical block data to
+ the info we write. Kind of a hack at the moment - we copy the
+ lexical block info from the MonoDebugMethodInfo to the
+ MonoDebugMethodJitInfo here, before writing it.
+ (mono_debug_read_method): read the lexical block info.
+
+ * mono-debug.h (_MonoDebugMethodJitInfo): add lexical block slots.
+
+ * debug-mono-symfile.h: add lexical block support.
+
+ * debug-mono-symfile.c (mono_debug_find_method): add lexical block
+ support.
+
2005-02-23 Zoltan Varga <[EMAIL PROTECTED]>
* loader.c (mono_lookup_pinvoke_call): Fix warning.
Modified: trunk/mono/mono/metadata/debug-mono-symfile.c
===================================================================
--- trunk/mono/mono/metadata/debug-mono-symfile.c 2005-02-24 05:38:11 UTC
(rev 41134)
+++ trunk/mono/mono/metadata/debug-mono-symfile.c 2005-02-24 05:50:42 UTC
(rev 41135)
@@ -301,6 +301,9 @@
minfo->num_il_offsets = read32(&(me->_num_line_numbers));
minfo->il_offsets = (MonoSymbolFileLineNumberEntry *)
(symfile->raw_contents +
read32(&(me->_line_number_table_offset)));
+ minfo->num_lexical_blocks = read32(&(me->_num_lexical_blocks));
+ minfo->lexical_blocks = (MonoSymbolFileLexicalBlockEntry *)
+ (symfile->raw_contents +
read32(&(me->_lexical_block_table_offset)));
minfo->entry = me;
g_hash_table_insert (symfile->method_hash, method, minfo);
Modified: trunk/mono/mono/metadata/debug-mono-symfile.h
===================================================================
--- trunk/mono/mono/metadata/debug-mono-symfile.h 2005-02-24 05:38:11 UTC
(rev 41134)
+++ trunk/mono/mono/metadata/debug-mono-symfile.h 2005-02-24 05:50:42 UTC
(rev 41135)
@@ -21,7 +21,6 @@
typedef struct MonoSymbolFileLexicalBlockEntry MonoSymbolFileLexicalBlockEntry;
typedef struct MonoDebugMethodInfo MonoDebugMethodInfo;
-typedef struct MonoDebugLexicalBlockEntry MonoDebugLexicalBlockEntry;
/* Keep in sync with OffsetTable in
mcs/class/Mono.CSharp.Debugger/MonoSymbolTable.cs */
struct MonoSymbolFileOffsetTable {
@@ -81,6 +80,7 @@
guint32 type_table_offset;
guint32 num_line_numbers;
guint32 line_number_offset;
+ guint32 num_lexical_blocks;
guint32 lexical_block_table_offset;
guint8 data [MONO_ZERO_LEN_ARRAY];
};
@@ -101,12 +101,16 @@
guint32 index;
guint32 num_il_offsets;
MonoSymbolFileLineNumberEntry *il_offsets;
+ guint32 num_lexical_blocks;
+ MonoSymbolFileLexicalBlockEntry *lexical_blocks;
MonoSymbolFileMethodEntry *entry;
};
-struct MonoDebugLexicalBlockEntry {
- guint32 start_address;
- guint32 end_address;
+struct _MonoDebugLexicalBlockEntry {
+ guint32 il_start_offset;
+ guint32 native_start_offset;
+ guint32 il_end_offset;
+ guint32 native_end_offset;
};
struct _MonoDebugLineNumberEntry {
Modified: trunk/mono/mono/metadata/mono-debug.c
===================================================================
--- trunk/mono/mono/metadata/mono-debug.c 2005-02-24 05:38:11 UTC (rev
41134)
+++ trunk/mono/mono/metadata/mono-debug.c 2005-02-24 05:50:42 UTC (rev
41135)
@@ -377,7 +377,7 @@
return NULL;
}
- max_size = 24 + 8 * jit->num_line_numbers + 20 * (1 + jit->num_params +
jit->num_locals);
+ max_size = 24 + 8 * jit->num_line_numbers + 16 *
minfo->num_lexical_blocks + 20 * (1 + jit->num_params + jit->num_locals);
if (max_size > BUFSIZ)
ptr = oldptr = g_malloc (max_size);
else
@@ -397,6 +397,38 @@
last_native_offset = lne->native_offset;
}
+ jit->num_lexical_blocks = minfo->num_lexical_blocks;
+ jit->lexical_blocks = g_new0 (MonoDebugLexicalBlockEntry,
jit->num_lexical_blocks);
+ for (i = 0; i < jit->num_lexical_blocks; i ++) {
+ MonoDebugLexicalBlockEntry *jit_lbe = &jit->lexical_blocks [i];
+ MonoSymbolFileLexicalBlockEntry *minfo_lbe =
&minfo->lexical_blocks [i];
+
+ jit_lbe->il_start_offset = minfo_lbe->_start_offset;
+ jit_lbe->native_start_offset =
_mono_debug_address_from_il_offset (jit, jit_lbe->il_start_offset);
+
+ jit_lbe->il_end_offset = minfo_lbe->_end_offset;
+ jit_lbe->native_end_offset = _mono_debug_address_from_il_offset
(jit, jit_lbe->il_end_offset);
+ }
+
+ last_il_offset = 0;
+ last_native_offset = 0;
+ write_leb128 (jit->num_lexical_blocks, ptr, &ptr);
+ for (i = 0; i < jit->num_lexical_blocks; i++) {
+ MonoDebugLexicalBlockEntry *lbe = &jit->lexical_blocks [i];
+
+ write_sleb128 (lbe->il_start_offset - last_il_offset, ptr,
&ptr);
+ write_sleb128 (lbe->native_start_offset - last_native_offset,
ptr, &ptr);
+
+ last_il_offset = lbe->il_start_offset;
+ last_native_offset = lbe->native_start_offset;
+
+ write_sleb128 (lbe->il_end_offset - last_il_offset, ptr, &ptr);
+ write_sleb128 (lbe->native_end_offset - last_native_offset,
ptr, &ptr);
+
+ last_il_offset = lbe->il_end_offset;
+ last_native_offset = lbe->native_end_offset;
+ }
+
*ptr++ = jit->this_var ? 1 : 0;
if (jit->this_var)
write_variable (jit->this_var, ptr, &ptr);
@@ -533,6 +565,26 @@
lne->native_offset = native_offset;
}
+ il_offset = 0;
+ native_offset = 0;
+ jit->num_lexical_blocks = read_leb128 (ptr, &ptr);
+ jit->lexical_blocks = g_new0 (MonoDebugLexicalBlockEntry,
jit->num_lexical_blocks);
+ for (i = 0; i < jit->num_lexical_blocks; i ++) {
+ MonoDebugLexicalBlockEntry *lbe = &jit->lexical_blocks [i];
+
+ il_offset += read_sleb128 (ptr, &ptr);
+ native_offset += read_sleb128 (ptr, &ptr);
+
+ lbe->il_start_offset = il_offset;
+ lbe->native_start_offset = native_offset;
+
+ il_offset += read_sleb128 (ptr, &ptr);
+ native_offset += read_sleb128 (ptr, &ptr);
+
+ lbe->il_end_offset = il_offset;
+ lbe->native_end_offset = native_offset;
+ }
+
if (*ptr++) {
jit->this_var = g_new0 (MonoDebugVarInfo, 1);
read_variable (jit->this_var, ptr, &ptr);
Modified: trunk/mono/mono/metadata/mono-debug.h
===================================================================
--- trunk/mono/mono/metadata/mono-debug.h 2005-02-24 05:38:11 UTC (rev
41134)
+++ trunk/mono/mono/metadata/mono-debug.h 2005-02-24 05:50:42 UTC (rev
41135)
@@ -19,6 +19,7 @@
typedef struct _MonoDebugHandlePriv MonoDebugHandlePriv;
typedef struct _MonoDebugLineNumberEntry MonoDebugLineNumberEntry;
+typedef struct _MonoDebugLexicalBlockEntry MonoDebugLexicalBlockEntry;
typedef struct _MonoDebugVarInfo MonoDebugVarInfo;
typedef struct _MonoDebugMethodJitInfo MonoDebugMethodJitInfo;
@@ -113,6 +114,8 @@
const guint8 *wrapper_addr;
guint32 num_line_numbers;
MonoDebugLineNumberEntry *line_numbers;
+ guint32 num_lexical_blocks;
+ MonoDebugLexicalBlockEntry *lexical_blocks;
guint32 num_params;
MonoDebugVarInfo *this_var;
MonoDebugVarInfo *params;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches