[profiler] Encode the address in TYPE_SAMPLE_UBIN as a pointer.
authorAlex Rønne Petersen <alexrp@xamarin.com>
Sun, 18 Jun 2017 03:51:43 +0000 (05:51 +0200)
committerAlex Rønne Petersen <alexrp@xamarin.com>
Mon, 19 Jun 2017 22:31:18 +0000 (00:31 +0200)
mono/profiler/log.c
mono/profiler/mprof-report.c

index ce507bdcb1b820848a374a8df32e8c921bf4b935..b8170a9b67e407cf20f6b9369ecde6e602d92308 100644 (file)
@@ -2468,7 +2468,7 @@ dump_ubin (MonoProfiler *prof, const char *filename, uintptr_t load_addr, uint64
        );
 
        emit_event (logbuffer, TYPE_SAMPLE | TYPE_SAMPLE_UBIN);
-       emit_svalue (logbuffer, load_addr);
+       emit_ptr (logbuffer, load_addr);
        emit_uvalue (logbuffer, offset);
        emit_uvalue (logbuffer, size);
        memcpy (logbuffer->cursor, filename, len);
index 1e60ec50a6ee06b24c8187e7acaf237431dbe526..a687f4540a0a9a2554b07a09fe8ded82f5ba585a 100644 (file)
@@ -2950,6 +2950,8 @@ decode_buffer (ProfContext *ctx)
                                /* un unmanaged binary loaded in memory */
                                uint64_t tdiff = decode_uleb128 (p + 1, &p);
                                uintptr_t addr = decode_sleb128 (p, &p);
+                               if (ctx->data_version > 13)
+                                       addr += ptr_base;
                                uint64_t offset G_GNUC_UNUSED = decode_uleb128 (p, &p);
                                uintptr_t size = decode_uleb128 (p, &p);
                                char *name;