From fd6996ffab3cd54342cebbde598c94b7edf26184 Mon Sep 17 00:00:00 2001 From: "jkummerow@chromium.org" Date: Fri, 31 Jan 2014 11:49:07 +0000 Subject: [PATCH] grokdump: Compute correct call destinations and display them in-place R=verwaest@chromium.org Review URL: https://codereview.chromium.org/148493008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18984 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- tools/grokdump.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/grokdump.py b/tools/grokdump.py index d09c04220..a5a2ae08a 100755 --- a/tools/grokdump.py +++ b/tools/grokdump.py @@ -881,6 +881,19 @@ def FormatDisasmLine(start, heap, line): if stack_slot: marker = "=>" code = AnnotateAddresses(heap, line[1]) + + # Compute the actual call target which the disassembler is too stupid + # to figure out (it adds the call offset to the disassembly offset rather + # than the absolute instruction address). + if heap.reader.arch == MD_CPU_ARCHITECTURE_X86: + if code.startswith("e8"): + words = code.split() + if len(words) > 6 and words[5] == "call": + offset = int(words[4] + words[3] + words[2] + words[1], 16) + target = (line_address + offset + 5) & 0xFFFFFFFF + code = code.replace(words[6], "0x%08x" % target) + # TODO(jkummerow): port this hack to ARM and x64. + return "%s%08x %08x: %s" % (marker, line_address, line[0], code) -- 2.34.1