[Lldb-commits] [PATCH] D39307: Fix global data symbol resolution

Jim Ingham via lldb-commits lldb-commits at lists.llvm.org
Mon Oct 30 11:02:43 PDT 2017



> On Oct 26, 2017, at 9:34 AM, Zachary Turner <zturner at google.com <mailto:zturner at google.com>> wrote:
> 
> Note that $ is a valid character in a MSVC-mangled symbol name.  So, I don't think it will work for that reason alone.  FWIW, I also don't like the {,,} syntax very much, but if you read on there's a simpler ! syntax that is pretty nice.
> 
> libfoo!symbolname

lldb uses the initial $ to distinguish keep user defined and result variables and keep them from colliding with program variables (well beyond this particular requirement).  For instance, lldb uses the fact that you did:

(lldb) expr int $my_string_ptr = nullptr

to tell itself that this is a persistent result variable that you can refer to in other expressions.  So this is a well established practice in lldb.  The proposal to extend it to scoping is just a natural extension of that.

Are mangled names with initial $’s common in Windows?  If so we may need to abstract this initial character and choose a different one for Windows.  Or at least we’ll have to add code to look up the name (or try to demangle it) before deciding it is a persistent variable.  Again, it doesn’t matter if $ can be used internally, we always trigger off an initial $.

Note that it is also possible to allow $’s in regular symbol names with a clang compiler flag.  But we’ve always treated that as a caveat emptor type thing, and we haven’t gotten any reports of this causing real problems.

Jim

> 
> 
> On Thu, Oct 26, 2017 at 9:30 AM Greg Clayton <clayborg at gmail.com <mailto:clayborg at gmail.com>> wrote:
> 
>> On Oct 25, 2017, at 6:05 PM, Zachary Turner <zturner at google.com <mailto:zturner at google.com>> wrote:
>> 
>> 
>> 
>> On Wed, Oct 25, 2017 at 4:59 PM Jim Ingham via Phabricator <reviews at reviews.llvm.org <mailto:reviews at reviews.llvm.org>> wrote:
>> jingham added a comment.
>> 
>> Note, BTW, we absolutely need some way to say "this symbol from this library".  But first of all, if we're going to do this you need to be able to mix & match within an expression which you can't do with a flag to expr.   Instead you need something like:
>> 
>> (lldb) expr $$MyDylib$my_symbol + $$MyOtherDylib$my_other_symbol
>> 
>> That syntax is ugly, we should try to think of something better.  But the main point is this should only be necessary when lldb can't find a unique symbol.  When we can no intervention should be required.
>> 
>> +1, this is very useful.  The Microsoft syntax for this is here:
>> 
>> https://docs.microsoft.com/en-us/visualstudio/debugger/context-operator-cpp <https://docs.microsoft.com/en-us/visualstudio/debugger/context-operator-cpp>
>> 
>> Which is pretty nice imo
> 
> The main reason for using $ decorated names is because clang will accept them as identifiers and ask us about them. So "$$MyOtherDylib$my_other_symbol" is just a valid identifier and would result in a find external lexical decl call that we can fill in with whatever we want. 
> 
> We don't really want to muck with clang by overloading stuff with symbols that would hose up clang (like the MSVC examples "{,,EXAMPLE.dll}SomeFunction", "EXAMPLE.dll!SomeFunction", and "{,,"a long, long, library name.dll"}g_Var". The { } and , characters would hose up the expression parser. So I would vote to use the $ decoration as Jim suggested.
> 
> Greg

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20171030/950ea53f/attachment.html>


More information about the lldb-commits mailing list