[llvm-dev] Can creating new forms of debug info metadata be simplified? [formatting fixed]

Sohail Somani (Fizz Buzz Inc.) via llvm-dev llvm-dev at lists.llvm.org
Tue May 29 07:56:29 PDT 2018


[Resending due to accidental markdown rendering - sorry]

Hi list,

Let's talk about adding a new type of debug info metadata. Here are the
steps (at minimum - probably incomplete) one needs to take:
1. Create a new class in the hierarchy
2. Implement two forms of `MD_NODE_GET`
3. Specialize `MDNodeKeyImpl`
4. Modify `LLParser.cpp` and add serialization code for your
   special type5. Modify `AsmWriter.cpp` and add serialization code for your
   special type
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:
```
class DIMyFancyType : public MDNode {
  StringRef FileName;

  template<typename Visitor>
  void visit(Visitor & v) {   DINode::visit(s); // or not, if you stay
  true to boost.serialization     v.name("DIMyFancyType");
     v.property("FileName",FileName);
  }
};
```

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.
I imagine since there is now a `.def` 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.
Thanks for your time!

--
Sohail Somani
Fizz Buzz Inc.
Booking schedule: https://sohailsomani.youcanbook.me

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180529/e37bc47c/attachment.html>


More information about the llvm-dev mailing list