<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/64963>64963</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Provide for module unloading in Symbolizer Markup
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            tools:llvm-symbolizer
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            mysterymath
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          mysterymath
      </td>
    </tr>
</table>

<pre>
    [Symbolizer Markup](https://llvm.org/docs/SymbolizerMarkupFormat.html) provides mechanisms to record the loaded modules at a given time in a program and to reset this information.

When an event is to log something using symbolizer markup, the process layout needs to have been recorded for symbolization to be possible later. The simplest way to do so is to summarily reset the markup context, then list out the entirety of the current markup state. However, if multiple events are logged, this approach produces much redundant output; the process state is unlikely to change much between events. Instead, processes should be able to report only the changes to process state between events.

Additional module loads between events can be handled incrementally using the existing markup, but if a module were unloaded, the only way to represent this is to fully reset the markup and re-output the new state. Instead, the format should be extended to allow for selectively unloading modules.

My current thinking for the naming is `{reset:module:%i}`, with the effect of cancelling the effect of all previous contextual markup elements that refer to module ID `%i`, including the original module element.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsVc1u4zYQfhr6MljDpvwTH3xINjC6hwUKtEDPI3IssaFIgRzacZ--GEqOk20vChiS38z3wzHm7LpAdFTbF6X1cMtM6TYg90prtX1dYOE-puOnjUUb7U3O_3Eb2ujdP5TgJ6a3Mqrtq9JPPfOYVfOs9Enpk_eXYRlTp_TJRpOVPj2uTbdOMQ3Iy54Hr_QBxhQvzlKGgUyPweUhA0dIZGKywD2Bj2jJwhBt8ZQBGRA6d6EA7AYCFwAFpUs4AAY73c7EwL3L4MK5FnQxLNXqVa2ep-9fPQXAAHShwOBqUR87yHEg7l3ooGT55gfrYWKtv9e2xhQN5Qweb7EwBCJbQXq8ELREYeZAFs4xfeDUTuRcSzDGnF3rCTwypSX82RNkN4yeMsMVb3LMRshx7i-XYcDk_O2DIM1NgYmB6Z3n5gJ4lxmkLzlDgV0ivkE817UpKQnr-W5mZFrCb_FKF0oC4c4wFM9u9DQJlAGTONF1ZKcaLgOOY4poepHCFiMeFtNDIluCxVDrj4VV8_JFsFpOGJXg3Rv5SlO872gCaImvot9UeQk_QmbCWnfGoAy5j8VbURFFwWr6GBNDDIIoLCtkFe5r6V_wP6fi2VonBqGf81bTl3-5AgaDVO4xWE8WXDCJBgqM3t_m3FTd311mWTyS0xYWdfEOf6VEIkTN-D1alcLsf6JRzA73OFc-5-L_LwSS_kTfJtnrRqDr3d5PKsrO9Co-yUjvTEHSyhHQ-3idYkueDLuL2DS1WflMb_GLdD9vH7mS9_Mm5wShtoGDLF0GtVup_UvtXDXPE04dHlun9q-yq7_D1XE_CXg-k2GJrcFgyPsPZT820HsYE11cLPn-CorYN0lCvhqTgXtkSHSmJARn9X-81oak-FTZBeOLvVeJyXXuUxZmsOXCHht7aA64oON6d9CH1Wq33iz642GPT40542G73W53a9xtDmR29rBqtma_b9YLd9Qr3aye9Gb9tF6t9fLc7Fut293TVhvca1SbFQ3o_PI-SBcu50LH3eawaxYeW_J5Ht4co5fBKye_PcbUPMjTsf6_LV1Wm5WMg_zAZMeejr9Po7e6NDN8WOwC_GfgL0ryx6_zvnPcl3Zp4jAP__nPtzHFv8mw0qdKQH4JKod_AwAA___6UUx5">