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

Reply via email to