[ppdb] Update to spec version v1.0. Fix decoding of line number info.
authorZoltan Varga <vargaz@gmail.com>
Wed, 14 Oct 2015 20:25:29 +0000 (16:25 -0400)
committerZoltan Varga <vargaz@gmail.com>
Wed, 14 Oct 2015 20:25:29 +0000 (16:25 -0400)
mono/metadata/debug-mono-ppdb.c
mono/metadata/metadata.c
mono/metadata/row-indexes.h

index c92f15f2028c74e8f4fd15dfe7b4d73ed393e062..6e18389b3cfa7b6a487a741825b4fd1943c620a9 100644 (file)
@@ -258,9 +258,10 @@ mono_ppdb_lookup_location (MonoDebugMethodInfo *minfo, uint32_t offset)
 
        mono_metadata_decode_row (&tables [MONO_TABLE_METHODBODY], idx-1, cols, MONO_METHODBODY_SIZE);
 
+       docidx = cols [MONO_METHODBODY_DOCUMENT];
+
        // FIXME:
        g_assert (cols [MONO_METHODBODY_SEQ_POINTS]);
-
        ptr = mono_metadata_blob_heap (image, cols [MONO_METHODBODY_SEQ_POINTS]);
        size = mono_metadata_decode_blob_size (ptr, &ptr);
        end = ptr + size;
@@ -268,7 +269,8 @@ mono_ppdb_lookup_location (MonoDebugMethodInfo *minfo, uint32_t offset)
        /* Header */
        /* LocalSignature */
        mono_metadata_decode_value (ptr, &ptr);
-       docidx = mono_metadata_decode_value (ptr, &ptr);
+       if (docidx == 0)
+               docidx = mono_metadata_decode_value (ptr, &ptr);
        docname = get_docname (ppdb, image, docidx);
 
        iloffset = 0;
@@ -303,7 +305,7 @@ mono_ppdb_lookup_location (MonoDebugMethodInfo *minfo, uint32_t offset)
                        start_line += adv_line;
                        start_col += adv_col;
                }
-               first_non_hidden = TRUE;
+               first_non_hidden = FALSE;
        }
 
        location = g_new0 (MonoDebugSourceLocation, 1);
@@ -355,6 +357,8 @@ mono_ppdb_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file, GPtrAr
 
        mono_metadata_decode_row (&tables [MONO_TABLE_METHODBODY], method_idx-1, cols, MONO_METHODBODY_SIZE);
 
+       docidx = cols [MONO_METHODBODY_DOCUMENT];
+
        if (!cols [MONO_METHODBODY_SEQ_POINTS])
                return;
 
@@ -367,8 +371,10 @@ mono_ppdb_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file, GPtrAr
        /* Header */
        /* LocalSignature */
        mono_metadata_decode_value (ptr, &ptr);
-       docidx = mono_metadata_decode_value (ptr, &ptr);
+       if (docidx == 0)
+               docidx = mono_metadata_decode_value (ptr, &ptr);
        docinfo = get_docinfo (ppdb, image, docidx);
+
        if (sfiles)
                g_ptr_array_add (sfiles, docinfo);
 
@@ -408,7 +414,7 @@ mono_ppdb_get_seq_points (MonoDebugMethodInfo *minfo, char **source_file, GPtrAr
                        start_line += adv_line;
                        start_col += adv_col;
                }
-               first_non_hidden = TRUE;
+               first_non_hidden = FALSE;
 
                memset (&sp, 0, sizeof (sp));
                sp.il_offset = iloffset;
index f08f7fa0b8998b8dd4cbd9d0f992e98353bef5e2..69281fa3a516bd9cb0729e84639a5ad79d717fec 100644 (file)
@@ -376,10 +376,11 @@ const static unsigned char TableSchemas [] = {
        MONO_MT_END,
 
 #define METHODBODY_SCHEMA_OFFSET DOCUMENT_SCHEMA_OFFSET + 5
+       MONO_MT_TABLE_IDX,   /* Document */
        MONO_MT_BLOB_IDX,   /* SequencePoints */
        MONO_MT_END,
 
-#define LOCALSCOPE_SCHEMA_OFFSET METHODBODY_SCHEMA_OFFSET + 2
+#define LOCALSCOPE_SCHEMA_OFFSET METHODBODY_SCHEMA_OFFSET + 3
        MONO_MT_TABLE_IDX,   /* Method */
        MONO_MT_TABLE_IDX,   /* ImportScope */
        MONO_MT_TABLE_IDX,   /* VariableList */
@@ -664,6 +665,10 @@ mono_metadata_compute_size (MonoImage *meta, int tableindex, guint32 *result_bit
                                        break;
                                }
                                break;
+                       case MONO_TABLE_METHODBODY:
+                               g_assert (i == 0);
+                               field_size = idx_size (meta, MONO_TABLE_DOCUMENT);
+                               break;
                        default:
                                g_error ("Can't handle MONO_MT_TABLE_IDX for table %d element %d", tableindex, i);
                        }
index ccca123d00e372dbd30f25e19839e920cd3a807e..eff71fb54ad74484a3b7dabf4fdb464ec7873a68 100644 (file)
@@ -317,6 +317,7 @@ enum {
 };
 
 enum {
+       MONO_METHODBODY_DOCUMENT,
        MONO_METHODBODY_SEQ_POINTS,
        MONO_METHODBODY_SIZE
 };