[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