<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Add Heap verification infrastructure"
   href="https://bugs.webkit.org/show_bug.cgi?id=138851">138851</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Add Heap verification infrastructure
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>WebKit
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>528+ (Nightly build)
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Unspecified
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>Normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P2
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>JavaScriptCore
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>webkit-unassigned@lists.webkit.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>mark.lam@apple.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>This is debugging code I wrote for a prior debugging session.  Just cleaning it up for landing so that we can reuse / build on it in the future as needed.

The code is always build in but disabled by default.  When disabled, the cost is minimal:
1. Heap has a m_verifier field.
2. GC does a few "if (m_verifier)" checks that should fail.
3. HeapVerifier takes up code space though not used.

When enabled:
1. The HeapVerifier will keep N number of GC pass data.
   Each GC pass will contain a "before marking" and "after marking" live object list.
   The GC passes is a circular buffer.  Only data for the last N GC passes will be retained.
2. During GC, the current GC pass' live objects lists will be populated before and after marking.
3. The current GC pass' live object lists will be validated before GC, after marking, and after GC.

Currently, the only validation being done is to verify that object butterflies are allocated from valid blocks in the Storage (aka Copied) space.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>