Fix string and descriptor array decoding in grokdump.
authorverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 19 Sep 2013 09:37:31 +0000 (09:37 +0000)
committerverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 19 Sep 2013 09:37:31 +0000 (09:37 +0000)
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

tools/grokdump.py

index 317a7d6a911fe4dd0bd0014af19bdde1585c3770..d09c042204cd6d8c6a1626c49737c392d11d6dbc 100755 (executable)
@@ -1029,7 +1029,8 @@ class Map(HeapObject):
 
 class String(HeapObject):
   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):
     HeapObject.__init__(self, heap, map, address)
@@ -1215,18 +1216,18 @@ class DescriptorArray(object):
   def Deleted(self, value):
     return self.Decode(6, 1, value) == 1
 
-  def Storage(self, value):
-    return self.Decode(7, 11, value)
+  def FieldIndex(self, value):
+    return self.Decode(20, 11, value)
 
   def Pointer(self, value):
-    return self.Decode(18, 11, value)
+    return self.Decode(6, 11, value)
 
   def Details(self, di, value):
     return (
         di,
         self.Type(value),
         self.Attributes(value),
-        self.Storage(value),
+        self.FieldIndex(value),
         self.Pointer(value)
     )
 
@@ -1242,7 +1243,7 @@ class DescriptorArray(object):
       i = 2 + di * 3
       p.Print("0x%x" % (array.address + array.MemberOffset(i)))
       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)))
       p.Print("[%i] value:   %s" % (di, array.Get(i + 2)))