<div dir="ltr">It'd be great if an external lib could be used for the demangling.<div><br></div><div>Zooming out a little:</div><div>`Mangled::GetDemangledName(lldb::LanguageType language)` takes a language as parameter (unused), which to me looks like the plan was to move this into the language plugins?</div><div>Then D could have its own language plugin (possibly dynamically loaded). The D plugin could then do the dynamic loading of ddemangleCustom.</div><div><br></div><div>-Johan</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 22, 2016 at 1:13 AM, Greg Clayton via lldb-dev <span dir="ltr"><<a href="mailto:lldb-dev@lists.llvm.org" target="_blank">lldb-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">You could have a setting that allows you to specify prefix as the key with a dylib path as a value. Would you expect a function with certain name or would you need to specify the function name (probably mangled) as well? Let me know what you are thinking?<br>
<br>
Greg<br>
<div class="HOEnZb"><div class="h5"><br>
> On Sep 21, 2016, at 3:50 PM, Timothee Cour <<a href="mailto:timothee.cour2@gmail.com">timothee.cour2@gmail.com</a>> wrote:<br>
><br>
><br>
><br>
> On Wed, Sep 21, 2016 at 3:35 PM, Greg Clayton via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> Sounds like you could then make a setting that is a dictionary where you say what the prefix is (like maybe "_D") and the value is the path to the tool to use? This would be easy to implement. Demangling does tend to be one of the most expensive parts of symbol file and debug info parsing, so if you do this, you will want to make sure the shell tool can be spawned and kept running maybe?<br>
><br>
> Greg<br>
><br>
><br>
> where in the lldb code would be such entry point?<br>
><br>
> instead of a binary it can just be a library dynamically loaded via dlopen (as i wrote, though I should've called it LLDB_DEMANGLER_LIB instead of LLDB_DEMANGLER_EXE), and the dynamically loaded symbol be cached to make sure it's dlopen'd at most once per process.<br>
><br>
> Then it's easy enough for us to write a demangleCustom that is fast on the D side of things. It can also work with a binary instead of a dllib but would be a bit slower (could have a client server model, but that's more complex than the simple dllib solution i was proposing).<br>
><br>
> yes, we could use a prefix for that as well.<br>
><br>
><br>
> > On Sep 21, 2016, at 3:30 PM, Timothee Cour <<a href="mailto:timothee.cour2@gmail.com">timothee.cour2@gmail.com</a>> wrote:<br>
> ><br>
> ><br>
> ><br>
> > On Wed, Sep 21, 2016 at 3:10 PM, Greg Clayton <<a href="mailto:gclayton@apple.com">gclayton@apple.com</a>> wrote:<br>
> > There is no external demangling plug-in infrastructure at the moment, but you could add functionality that would allow it. No one is going to have D installed by default. Where do you expect your demangler dylib to live?<br>
> > Would you just add code that tries to locate the dylib in N places on the current system and try to dlopen it? Avoiding duplication and just not having the functionality at all unless something else is might not make it that useful. Is D stable? Is the mangling changing at all? Will you require a demangler to be vended with each new version of the tool? Are all previous demanglings still valid in newer versions? Can you figure out the version of the D from a compiled executable so that you might be able to locate one of 5 different installs of D and select the right one? Let me know what you use case is.<br>
> ><br>
> > Greg<br>
> ><br>
> ><br>
> > one simple flexible backward compatible option would be to have a generic environment variable:<br>
> ><br>
> > ```<br>
> > export LLDB_DEMANGLER_EXE="/usr/bin/<wbr>ddemangle"<br>
> > lldb myprog<br>
> > ```<br>
> ><br>
> > inside lldb (D-like pseudo code):<br>
> ><br>
> > ```<br>
> > bool demangle(string symbol, string* output){<br>
> >   auto path=env["LLDB_DEMANGLER_EXE"]<wbr>;<br>
> >   if(!path.empty) {<br>
> >      auto demangleCustom=cast(proper_<wbr>type) dlopen(path);<br>
> >      if(demangleCustom(symbol, output)) return true;<br>
> >      // fallsback to default code if custom code didn't handle symbol<br>
> >   }<br>
> >   return run_default_lldb_demangle(<wbr>symbol, output);<br>
> > }<br>
> > ```<br>
> ><br>
> > user defined demangler (eg D's demangler)<br>
> > ```<br>
> > // return true if can demangle symbol (ie it's a D symbol in our case)<br>
> > bool demangleCustom(string symbol, string* output);<br>
> ><br>
> > ```<br>
> ><br>
> > >> Is the mangling changing at all?<br>
> ><br>
> > yes, there's some ongoing work on making the mangling scheme produce much shorter symbols. The logic is complex, and it'd be a lot of work to reproduce this.<br>
> ><br>
> > Bottomline: this scheme is very flexible, and it'd be no less useful than current situation, where lldb just returns the symbol unchanged if it can't demangle.<br>
> ><br>
> ><br>
> ><br>
> ><br>
> > > On Sep 21, 2016, at 3:00 PM, Timothee Cour <<a href="mailto:thelastmammoth@gmail.com">thelastmammoth@gmail.com</a>> wrote:<br>
> > ><br>
> > > Is there a way to provide a hook (eg, via an extern(C) function, or using a dynamically loaded shared library) to do this, so as to simply reuse D's <a href="https://dlang.org/phobos/std_demangle.html" rel="noreferrer" target="_blank">https://dlang.org/phobos/std_<wbr>demangle.html</a> and make sure it's always in sync with D's demangling instead of duplicating code<br>
> > ><br>
> > > On Wed, Sep 21, 2016 at 10:24 AM, Greg Clayton via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> > > It might be nice to add demangling support to llvm and then use it by modifying "Mangled::GetDemangledName()" in Mangled.cpp. This is where all demangling happens. Hopefully you have a great prefix that won't conflict with other languages "_Z" for C++, "_T" for swift. But the code in Mangled::GetDemangledName() will look at the prefix and attempt to demangle the name based on what prefix it starts with.<br>
> > ><br>
> > ><br>
> > > > On Sep 21, 2016, at 5:52 AM, Johan Engelen via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
> > > ><br>
> > > > Hi all,<br>
> > > >   I recently looked into adding demangling support for D in LLDB, but got lost in the code.<br>
> > > > (right now, basic D support is there with: <a href="https://reviews.llvm.org/D24794" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D24794</a>)<br>
> > > ><br>
> > > > I'd like some pointers to where demangling is done for the other languages, and to where I should add D support for it.<br>
> > > ><br>
> > > > Thanks a lot,<br>
> > > >   Johan<br>
> > > ><br>
> > > > ______________________________<wbr>_________________<br>
> > > > lldb-dev mailing list<br>
> > > > <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> > > > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
> > ><br>
> > > ______________________________<wbr>_________________<br>
> > > lldb-dev mailing list<br>
> > > <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> > > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
> > ><br>
> ><br>
> ><br>
><br>
> ______________________________<wbr>_________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
><br>
<br>
______________________________<wbr>_________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
</div></div></blockquote></div><br></div>