[LLVMdev] C++ demangling in LLVM

bigcheesegs at gmail.com bigcheesegs at gmail.com
Thu Jul 5 00:10:49 PDT 2012


On Jul 5, 2012, at 1:08 AM, Chandler Carruth <chandlerc at google.com> wrote:

> In the same way that the core LLVM libraries have support routines for DWARF, I think that both mangling and demangling should be provided as well.

How would LLVM provide support for mangling? And what tools actually need it? I also wonder if we need more from a demangler than just a string. I know linker diagnostics would benefit from a deeper understanding of the name without having to parse C++ decls.

> I suspect that the 'Support' library is the best we have, although eventually we need to split this library up a bit. That's not really your problem though.
> 

I don't see anywhere to split Support. We already merged System and Support because of the circular deps. However I agree that demangling can be in another library.

> The bigger problem is that we don't have any good way of sharing code between runtime libraries (such as libcxxabi, sanitizer runtimes, etc) and LLVM.
> 
> One somewhat interesting question, would the APIs exposed by libcxxabi be sufficient for the sanitizer runtimes?
> 
> AFAICT, the only other way forward is to:
> 
> 1) Move/re-implement the demangling (and hopefully the mangling as well) into llvm/Support, following proper style and writing proper unittests as we go.
> 2) Write my object-file-scrubber so that we can statically link llvm/Support into a runtime without collision issues.
> 3) Potentially split up llvm/Support (and other libraries) enough to have depending upon it not burden or bloat the runtime libraries unnecessarily.
> 
> 
> All of these options seem... moderately painful. My inclination is to start paving the way for better code sharing in runtime libraries sooner rather than later. Other thoughts? Chris?
> 
> 
> On Wed, Jul 4, 2012 at 9:53 PM, Alexey Samsonov <samsonov at google.com> wrote:
> 
> 
> On Wed, Jul 4, 2012 at 11:43 PM, Michael Spencer <bigcheesegs at gmail.com> wrote:
> On Wed, Jul 4, 2012 at 8:33 AM, Alexey Samsonov <samsonov at google.com> wrote:
> > Hello!
> >
> > We want to implement in-process symbolizer for {Address,Thread}Sanitizer
> > testing tools that would be based on LLVM libraries.
> > I've noticed that llvm-nm (as well as other tools) doesn't demangle C++
> > names. Is it true, that LLVM doesn't have the code that is capable
> > of that, and if yes, are there any plans to add it?
> > Depending on something like libiberty.a doesn't seem like a good or portable
> > solution.
> >
> > --
> > Alexey Samsonov, MSK
> >
> 
> Yes, LLVM currently has no C++ demangler, and it needs one. Although I
> have no idea where it should live. It would be nice if it could live
> in clang next to the mangler, but clang doesn't even need a demangler.
> llvm tools, lld, and compiler-rt do.
> 
> llvm/Support?
> 
> It's not that clear how libcxxabi could be used in llvm tools, as IIUC this library is built independently.
> The demangler implementation there is 10 KLOC which are rather far from LLVM style.
> 
> -- 
> Alexey Samsonov, MSK
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120705/37cd6568/attachment.html>


More information about the llvm-dev mailing list