| Index: tools/grokdump.py
|
| diff --git a/tools/grokdump.py b/tools/grokdump.py
|
| index d09c042204cd6d8c6a1626c49737c392d11d6dbc..a5a2ae08a879b11447352a262e02222da4e7933b 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)
|
|
|
|
|
|
|