<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hello!<div><br></div><div>I'm working on an expressions evaluation on Windows, and currently I'm trying to make a JIT evaluation working.</div><div><br></div><div>When I'm trying to evaluate the next expression:</div><div><br></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div><font face="monospace, monospace">print S::x</font></div></div></blockquote><font face="monospace, monospace"><br></font><div dir="ltr"><div>on the next code:<br></div><div><br></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font face="monospace, monospace">struct S {</font></div></div><div><div><font face="monospace, monospace">  static int x;</font></div></div><div><div><font face="monospace, monospace">  void foo() { }</font></div></div><div><div><font face="monospace, monospace">};</font></div></div><div><div><font face="monospace, monospace">int S::x = 5;</font></div></div><div><div><font face="monospace, monospace"><br></font></div></div><div><div><font face="monospace, monospace">int main() {</font></div></div><div><div><font face="monospace, monospace">  S().foo(); // here</font></div></div><div><div><font face="monospace, monospace">  return 0;</font></div></div><div><div><font face="monospace, monospace">}</font></div></div></blockquote><div dir="ltr"><div><br></div><div>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?).</div><div><br></div><div>During symbols resolving <font face="monospace, monospace">IRExecutionUnit::FindInSymbols</font> is used, and it searches a symbol among functions (which is not our case), and then calls <font face="monospace, monospace">Module::FindSymbolsWithNameAndType</font><font face="arial, helvetica, sans-serif"> for each module in the list. This function looks symbols up in a </font><font face="monospace, monospace">Symtab</font><font face="arial, helvetica, sans-serif">, which is retrieved through a </font><font face="monospace, monospace">SymbolVendor</font><font face="arial, helvetica, sans-serif">, and it retrieves one from an </font><font face="monospace, monospace">ObjectFile</font><font face="arial, helvetica, sans-serif">. 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 </font><font face="monospace, monospace">Symtab</font><font face="arial, helvetica, sans-serif"> fails.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I think that we need somehow to retrieve a symbols info from a symbol file. I thought that we can emit a </font><font face="monospace, monospace">Symtab</font><font face="arial, helvetica, sans-serif"> from a </font><font face="monospace, monospace">SymbolFile</font><font face="arial, helvetica, sans-serif"> just like from an </font><font face="monospace, monospace">ObjectFile</font><font face="arial, helvetica, sans-serif"> (and for now implement it for </font><font face="monospace, monospace">SymbolFilePDB</font><font face="arial, helvetica, sans-serif"> only), but I'm not sure if this solution is good. How can we solve the problem else?</font></div><div><div><br></div>-- <br><div dir="ltr" class="m_-3599710137144196275gmail_signature"><div dir="ltr"><div>Aleksandr Urakov</div><div><span>Software Developer</span></div><div><span>JetBrains</span></div><div><span><a href="http://www.jetbrains.com" target="_blank">http://www.jetbrains.com</a></span></div><div><span>The Drive to Develop</span></div></div></div></div></div></div></div></div></div></div>