Commit 8754a251 authored by verwaest@chromium.org's avatar verwaest@chromium.org

Fix string and descriptor array decoding in grokdump.

BUG=
R=mstarzinger@chromium.org

Review URL: https://chromiumcodereview.appspot.com/23465027

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16818 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent baf6add9
...@@ -1029,7 +1029,8 @@ class Map(HeapObject): ...@@ -1029,7 +1029,8 @@ class Map(HeapObject):
class String(HeapObject): class String(HeapObject):
def LengthOffset(self): def LengthOffset(self):
return self.heap.PointerSize() # First word after the map is the hash, the second is the length.
return self.heap.PointerSize() * 2
def __init__(self, heap, map, address): def __init__(self, heap, map, address):
HeapObject.__init__(self, heap, map, address) HeapObject.__init__(self, heap, map, address)
...@@ -1215,18 +1216,18 @@ class DescriptorArray(object): ...@@ -1215,18 +1216,18 @@ class DescriptorArray(object):
def Deleted(self, value): def Deleted(self, value):
return self.Decode(6, 1, value) == 1 return self.Decode(6, 1, value) == 1
def Storage(self, value): def FieldIndex(self, value):
return self.Decode(7, 11, value) return self.Decode(20, 11, value)
def Pointer(self, value): def Pointer(self, value):
return self.Decode(18, 11, value) return self.Decode(6, 11, value)
def Details(self, di, value): def Details(self, di, value):
return ( return (
di, di,
self.Type(value), self.Type(value),
self.Attributes(value), self.Attributes(value),
self.Storage(value), self.FieldIndex(value),
self.Pointer(value) self.Pointer(value)
) )
...@@ -1242,7 +1243,7 @@ class DescriptorArray(object): ...@@ -1242,7 +1243,7 @@ class DescriptorArray(object):
i = 2 + di * 3 i = 2 + di * 3
p.Print("0x%x" % (array.address + array.MemberOffset(i))) p.Print("0x%x" % (array.address + array.MemberOffset(i)))
p.Print("[%i] name: %s" % (di, array.Get(i + 0))) p.Print("[%i] name: %s" % (di, array.Get(i + 0)))
p.Print("[%i] details: %s %s enum %i pointer %i" % \ p.Print("[%i] details: %s %s field-index %i pointer %i" % \
self.Details(di, array.Get(i + 1))) self.Details(di, array.Get(i + 1)))
p.Print("[%i] value: %s" % (di, array.Get(i + 2))) p.Print("[%i] value: %s" % (di, array.Get(i + 2)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment