Re: [lldb-dev] Symtab for PECOFF

2018-08-31 Thread Aleksandr Urakov via lldb-dev
Thanks for the reply!

Yes, the function search is implemented in the way similar to what you have
described (and even the search in a symbol file is done before the search
in a symtab). But for Module::FindSymbolsWithNameAndType function I can't
find any relevant function in the SymbolFile. Do you mean that we need to
extend the SymbolFile interface with such a function (which will search all
public symbols by the name and the type), and then implement it in derived
classes?

On Thu, Aug 30, 2018 at 6:03 PM Zachary Turner  wrote:

> It seems reasonable to me to say that if the symbol is not found in the
> executables symtab, it will fall back to searching in the symbol file..
> this logic doesn’t even need to be specific to PDB
> On Thu, Aug 30, 2018 at 7:00 AM Aleksandr Urakov via lldb-dev <
> lldb-dev@lists.llvm.org> wrote:
>
>> Hello!
>>
>> I'm working on an expressions evaluation on Windows, and currently I'm
>> trying to make a JIT evaluation working.
>>
>> When I'm trying to evaluate the next expression:
>>
>> print S::x
>>
>>
>> on the next code:
>>
>> struct S {
>>   static int x;
>>   void foo() { }
>> };
>> int S::x = 5;
>>
>> int main() {
>>   S().foo(); // here
>>   return 0;
>> }
>>
>>
>> the evaluation requires JIT (but printing of global variables requires
>> not, and I can't figure out what is the key difference between a class
>> static variable and a global variable in the case?).
>>
>> During symbols resolving IRExecutionUnit::FindInSymbols is used, and it
>> searches a symbol among functions (which is not our case), and then calls
>> Module::FindSymbolsWithNameAndType for each module in the list. This
>> function looks symbols up in a Symtab, which is retrieved through a
>> SymbolVendor, and it retrieves one from an ObjectFile. ELF files contain
>> symbols for such a variables in their symbol tables, but the problem is
>> that PE files usually contain info about exported (and imported) symbols
>> only, so the lookup in Symtab fails.
>>
>> I think that we need somehow to retrieve a symbols info from a symbol
>> file. I thought that we can emit a Symtab from a SymbolFile just like
>> from an ObjectFile (and for now implement it for SymbolFilePDB only),
>> but I'm not sure if this solution is good. How can we solve the problem
>> else?
>>
>> --
>> Aleksandr Urakov
>> Software Developer
>> JetBrains
>> http://www.jetbrains.com
>> The Drive to Develop
>> ___
>> lldb-dev mailing list
>> lldb-dev@lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>
>

-- 
Aleksandr Urakov
Software Developer
JetBrains
http://www.jetbrains.com
The Drive to Develop
___
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev


Re: [lldb-dev] Symtab for PECOFF

2018-08-31 Thread Zachary Turner via lldb-dev
That would be my thought, yea
On Fri, Aug 31, 2018 at 1:21 AM Aleksandr Urakov <
aleksandr.ura...@jetbrains.com> wrote:

> Thanks for the reply!
>
> Yes, the function search is implemented in the way similar to what you
> have described (and even the search in a symbol file is done before the
> search in a symtab). But for Module::FindSymbolsWithNameAndType function I
> can't find any relevant function in the SymbolFile. Do you mean that we
> need to extend the SymbolFile interface with such a function (which will
> search all public symbols by the name and the type), and then implement it
> in derived classes?
>
> On Thu, Aug 30, 2018 at 6:03 PM Zachary Turner  wrote:
>
>> It seems reasonable to me to say that if the symbol is not found in the
>> executables symtab, it will fall back to searching in the symbol file..
>> this logic doesn’t even need to be specific to PDB
>> On Thu, Aug 30, 2018 at 7:00 AM Aleksandr Urakov via lldb-dev <
>> lldb-dev@lists.llvm.org> wrote:
>>
>>> Hello!
>>>
>>> I'm working on an expressions evaluation on Windows, and currently I'm
>>> trying to make a JIT evaluation working.
>>>
>>> When I'm trying to evaluate the next expression:
>>>
>>> print S::x
>>>
>>>
>>> on the next code:
>>>
>>> struct S {
>>>   static int x;
>>>   void foo() { }
>>> };
>>> int S::x = 5;
>>>
>>> int main() {
>>>   S().foo(); // here
>>>   return 0;
>>> }
>>>
>>>
>>> the evaluation requires JIT (but printing of global variables requires
>>> not, and I can't figure out what is the key difference between a class
>>> static variable and a global variable in the case?).
>>>
>>> During symbols resolving IRExecutionUnit::FindInSymbols is used, and it
>>> searches a symbol among functions (which is not our case), and then calls
>>> Module::FindSymbolsWithNameAndType for each module in the list. This
>>> function looks symbols up in a Symtab, which is retrieved through a
>>> SymbolVendor, and it retrieves one from an ObjectFile. ELF files
>>> contain symbols for such a variables in their symbol tables, but the
>>> problem is that PE files usually contain info about exported (and imported)
>>> symbols only, so the lookup in Symtab fails.
>>>
>>> I think that we need somehow to retrieve a symbols info from a symbol
>>> file. I thought that we can emit a Symtab from a SymbolFile just like
>>> from an ObjectFile (and for now implement it for SymbolFilePDB only),
>>> but I'm not sure if this solution is good. How can we solve the problem
>>> else?
>>>
>>> --
>>> Aleksandr Urakov
>>> Software Developer
>>> JetBrains
>>> http://www.jetbrains.com
>>> The Drive to Develop
>>> ___
>>> lldb-dev mailing list
>>> lldb-dev@lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>>
>>
>
> --
> Aleksandr Urakov
> Software Developer
> JetBrains
> http://www.jetbrains.com
> The Drive to Develop
>
___
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev


Re: [lldb-dev] Symtab for PECOFF

2018-08-31 Thread Aleksandr Urakov via lldb-dev
Thanks!

I've almost done this, I'll test it more carefully on the next week and
will create a review.

On Fri, Aug 31, 2018 at 4:54 PM Zachary Turner  wrote:

> That would be my thought, yea
> On Fri, Aug 31, 2018 at 1:21 AM Aleksandr Urakov <
> aleksandr.ura...@jetbrains.com> wrote:
>
>> Thanks for the reply!
>>
>> Yes, the function search is implemented in the way similar to what you
>> have described (and even the search in a symbol file is done before the
>> search in a symtab). But for Module::FindSymbolsWithNameAndType function I
>> can't find any relevant function in the SymbolFile. Do you mean that we
>> need to extend the SymbolFile interface with such a function (which will
>> search all public symbols by the name and the type), and then implement it
>> in derived classes?
>>
>> On Thu, Aug 30, 2018 at 6:03 PM Zachary Turner 
>> wrote:
>>
>>> It seems reasonable to me to say that if the symbol is not found in the
>>> executables symtab, it will fall back to searching in the symbol file..
>>> this logic doesn’t even need to be specific to PDB
>>> On Thu, Aug 30, 2018 at 7:00 AM Aleksandr Urakov via lldb-dev <
>>> lldb-dev@lists.llvm.org> wrote:
>>>
 Hello!

 I'm working on an expressions evaluation on Windows, and currently I'm
 trying to make a JIT evaluation working.

 When I'm trying to evaluate the next expression:

 print S::x


 on the next code:

 struct S {
   static int x;
   void foo() { }
 };
 int S::x = 5;

 int main() {
   S().foo(); // here
   return 0;
 }


 the evaluation requires JIT (but printing of global variables requires
 not, and I can't figure out what is the key difference between a class
 static variable and a global variable in the case?).

 During symbols resolving IRExecutionUnit::FindInSymbols is used, and
 it searches a symbol among functions (which is not our case), and then
 calls Module::FindSymbolsWithNameAndType for each module in the list.
 This function looks symbols up in a Symtab, which is retrieved through
 a SymbolVendor, and it retrieves one from an ObjectFile. ELF files
 contain symbols for such a variables in their symbol tables, but the
 problem is that PE files usually contain info about exported (and imported)
 symbols only, so the lookup in Symtab fails.

 I think that we need somehow to retrieve a symbols info from a symbol
 file. I thought that we can emit a Symtab from a SymbolFile just like
 from an ObjectFile (and for now implement it for SymbolFilePDB only),
 but I'm not sure if this solution is good. How can we solve the problem
 else?

 --
 Aleksandr Urakov
 Software Developer
 JetBrains
 http://www.jetbrains.com
 The Drive to Develop
 ___
 lldb-dev mailing list
 lldb-dev@lists.llvm.org
 http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

>>>
>>
>> --
>> Aleksandr Urakov
>> Software Developer
>> JetBrains
>> http://www.jetbrains.com
>> The Drive to Develop
>>
>

-- 
Aleksandr Urakov
Software Developer
JetBrains
http://www.jetbrains.com
The Drive to Develop
___
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev