<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style>
</head>
<body><div class="markdown-here-wrapper" defang_data-md-url="www.fastmail.com" style=""><p style="margin: 0px 0px 1.2em !important;">Hi list,</p>
<p style="margin: 0px 0px 1.2em !important;">Let’s talk about adding a new type of debug info metadata. Here are the steps (at minimum - probably incomplete) one needs to take:</p>
<ol style="margin: 1.2em 0px;padding-left: 2em;">
<li style="margin: 0.5em 0px;">Create a new class in the hierarchy</li>
<li style="margin: 0.5em 0px;">Implement two forms of <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">MD_NODE_GET</code></li>
<li style="margin: 0.5em 0px;">Specialize <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">MDNodeKeyImpl</code></li>
<li style="margin: 0.5em 0px;">Modify <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">LLParser.cpp</code> and add serialization code for your special type</li>
<li style="margin: 0.5em 0px;">Modify <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">AsmWriter.cpp</code> and add serialization code for your special type </li>
</ol>
<p style="margin: 0px 0px 1.2em !important;">I believe we can accomplish everything needed for debug info with just step 1 using a pattern found in Boost Serialization. Imagine a new API based on this concept:</p>
<pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code defang_class="hljs language-c++" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline; white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important; display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248); text-size-adjust: none;"><span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">class</span> DIMyFancyType : <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">public</span> MDNode {
  StringRef FileName;

  <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">template</span><<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">typename</span> Visitor>
  <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">void</span> visit(Visitor & v) {
     DINode::visit(s); <span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;">// or not, if you stay true to boost.serialization</span>
     v.name(<span class="hljs-string" style="color: rgb(221, 17, 68);">"DIMyFancyType"</span>);
     v.property(<span class="hljs-string" style="color: rgb(221, 17, 68);">"FileName"</span>,FileName);
  }
};
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">With this, we could implement steps 2-5 using a little bit of template meta-programming and we could also implement escape hatches where needed to get more specific, allowing us to keep many things in one place.</p>
<p style="margin: 0px 0px 1.2em !important;">I imagine since there is now a <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">.def</code> file for the metadata (very useful!) that this is on somebody’s mind and not just my own, so I’m curious about what people think. I realize that “new forms of debug metadata” is possibly not a very popular use case as there has been only one new kind added in the last few years. However, in my humble opinion, it would make it easier to add richer information allowing those of us extending LLVM to create better debuggers/debugging experiences.</p>
<p style="margin: 0px 0px 1.2em !important;">Thanks for your time!</p>
<p style="margin: 0px 0px 1.2em !important;">—<br>Sohail Somani<br>Fizz Buzz Inc.<br>Booking schedule: <a href="https://sohailsomani.youcanbook.me">https://sohailsomani.youcanbook.me</a></p>
<div title="MDH:PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij5IaSBsaXN0LDxicj48L2Rpdj48ZGl2IHN0&#x0a;eWxlPSJmb250LWZhbWlseTpBcmlhbDsiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWls&#x0a;eTpBcmlhbDsiPkxldCdzIHRhbGsgYWJvdXQgYWRkaW5nIGEgbmV3IHR5cGUgb2YgZGVidWcgaW5m&#x0a;byBtZXRhZGF0YS4gSGVyZSBhcmUgdGhlIHN0ZXBzIChhdCBtaW5pbXVtIC0gcHJvYmFibHkgaW5j&#x0a;b21wbGV0ZSkgb25lIG5lZWRzIHRvIHRha2U6PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFt&#x0a;aWx5OkFyaWFsOyI+PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+MS4g&#x0a;Q3JlYXRlIGEgbmV3IGNsYXNzIGluIHRoZSBoaWVyYXJjaHk8YnI+PC9kaXY+PGRpdiBzdHlsZT0i&#x0a;Zm9udC1mYW1pbHk6QXJpYWw7Ij4yLiBJbXBsZW1lbnQgdHdvIGZvcm1zIG9mIGBNRF9OT0RFX0dF&#x0a;VGA8YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij4zLiBTcGVjaWFsaXpl&#x0a;IGBNRE5vZGVLZXlJbXBsYDxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDsi&#x0a;PjQuIE1vZGlmeSBgTExQYXJzZXIuY3BwYCBhbmQgYWRkIHNlcmlhbGl6YXRpb24gY29kZSBmb3Ig&#x0a;eW91ciBzcGVjaWFsIHR5cGU8YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7&#x0a;Ij41LiBNb2RpZnkgYEFzbVdyaXRlci5jcHBgIGFuZCBhZGQgc2VyaWFsaXphdGlvbiBjb2RlIGZv&#x0a;ciB5b3VyIHNwZWNpYWwgdHlwZSZuYnNwOzxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWls&#x0a;eTpBcmlhbDsiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDsiPkkgYmVs&#x0a;aWV2ZSB3ZSBjYW4gYWNjb21wbGlzaCBldmVyeXRoaW5nIG5lZWRlZCBmb3IgZGVidWcgaW5mbyB3&#x0a;aXRoIGp1c3Qgc3RlcCAxIHVzaW5nIGEgcGF0dGVybiBmb3VuZCBpbiBCb29zdCBTZXJpYWxpemF0&#x0a;aW9uLiBJbWFnaW5lIGEgbmV3IEFQSSBiYXNlZCBvbiB0aGlzIGNvbmNlcHQ6PGJyPjwvZGl2Pjxk&#x0a;aXYgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQt&#x0a;ZmFtaWx5OkFyaWFsOyI+YGBgYysrPGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkFy&#x0a;aWFsOyI+Y2xhc3MgRElNeUZhbmN5VHlwZSA6IHB1YmxpYyBNRE5vZGUgezxicj48L2Rpdj48ZGl2&#x0a;IHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDsiPiZuYnNwOyBTdHJpbmdSZWYgRmlsZU5hbWU7PGJy&#x0a;PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+PGJyPjwvZGl2PjxkaXYgc3R5&#x0a;bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+Jm5ic3A7IHRlbXBsYXRlJmx0O3R5cGVuYW1lIFZpc2l0&#x0a;b3ImZ3Q7PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+Jm5ic3A7IHZv&#x0a;aWQgdmlzaXQoVmlzaXRvciAmYW1wOyB2KSB7PGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7RElOb2Rl&#x0a;Ojp2aXNpdChzKTsgLy8gb3Igbm90LCBpZiB5b3Ugc3RheSB0cnVlIHRvIGJvb3N0LnNlcmlhbGl6&#x0a;YXRpb248L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTpBcmlhbDsiPiZuYnNwOyAmbmJzcDsg&#x0a;Jm5ic3A7di5uYW1lKCJESU15RmFuY3lUeXBlIik7PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1p&#x0a;bHk6QXJpYWw7Ij4mbmJzcDsgJm5ic3A7ICZuYnNwO3YucHJvcGVydHkoIkZpbGVOYW1lIixGaWxl&#x0a;TmFtZSk7PGJyPiZuYnNwOyB9PGJyPn07PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJp&#x0a;YWw7Ij5gYGA8YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij48YnI+PC9k&#x0a;aXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij5XaXRoIHRoaXMsIHdlIGNvdWxkIGlt&#x0a;cGxlbWVudCBzdGVwcyAyLTUgdXNpbmcgYSBsaXR0bGUgYml0IG9mIHRlbXBsYXRlIG1ldGEtcHJv&#x0a;Z3JhbW1pbmcgYW5kIHdlIGNvdWxkIGFsc28gaW1wbGVtZW50IGVzY2FwZSBoYXRjaGVzIHdoZXJl&#x0a;IG5lZWRlZCB0byBnZXQgbW9yZSBzcGVjaWZpYywgYWxsb3dpbmcgdXMgdG8ga2VlcCBtYW55IHRo&#x0a;aW5ncyBpbiBvbmUgcGxhY2UuPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij48&#x0a;YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij5JIGltYWdpbmUgc2luY2Ug&#x0a;dGhlcmUgaXMgbm93IGEgYC5kZWZgIGZpbGUgZm9yIHRoZSBtZXRhZGF0YSAodmVyeSB1c2VmdWwh&#x0a;KSB0aGF0IHRoaXMgaXMgb24gc29tZWJvZHkncyBtaW5kIGFuZCBub3QganVzdCBteSBvd24sIHNv&#x0a;IEknbSBjdXJpb3VzIGFib3V0IHdoYXQgcGVvcGxlIHRoaW5rLiBJIHJlYWxpemUgdGhhdCAibmV3&#x0a;IGZvcm1zIG9mIGRlYnVnIG1ldGFkYXRhIiBpcyBwb3NzaWJseSBub3QgYSB2ZXJ5IHBvcHVsYXIg&#x0a;dXNlIGNhc2UgYXMgdGhlcmUgaGFzIGJlZW4gb25seSBvbmUgbmV3IGtpbmQgYWRkZWQgaW4gdGhl&#x0a;IGxhc3QgZmV3IHllYXJzLiBIb3dldmVyLCBpbiBteSBodW1ibGUgb3BpbmlvbiwgaXQgd291bGQg&#x0a;bWFrZSBpdCBlYXNpZXIgdG8gYWRkIHJpY2hlciBpbmZvcm1hdGlvbiBhbGxvd2luZyB0aG9zZSBv&#x0a;ZiB1cyBleHRlbmRpbmcgTExWTSB0byBjcmVhdGUgYmV0dGVyIGRlYnVnZ2Vycy9kZWJ1Z2dpbmcg&#x0a;ZXhwZXJpZW5jZXMuPGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+PGJy&#x0a;PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsOyI+VGhhbmtzIGZvciB5b3VyIHRp&#x0a;bWUhPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij48YnI+PC9kaXY+PGRpdiBp&#x0a;ZD0ic2lnNjY0MzM3MjgiPjxkaXYgY2xhc3M9InNpZ25hdHVyZSI+LS08YnI+PC9kaXY+PGRpdiBj&#x0a;bGFzcz0ic2lnbmF0dXJlIj5Tb2hhaWwgU29tYW5pPGJyPjwvZGl2PjxkaXYgY2xhc3M9InNpZ25h&#x0a;dHVyZSI+Rml6eiBCdXp6IEluYy48YnI+PC9kaXY+PGRpdiBjbGFzcz0ic2lnbmF0dXJlIj5Cb29r&#x0a;aW5nIHNjaGVkdWxlOiZuYnNwOzxhIGhyZWY9Imh0dHBzOi8vc29oYWlsc29tYW5pLnlvdWNhbmJv&#x0a;b2subWUiPmh0dHBzOi8vc29oYWlsc29tYW5pLnlvdWNhbmJvb2subWU8L2E+PC9kaXY+PC9kaXY+&#x0a;PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWw7Ij48YnI+PC9kaXY+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>