<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 24, 2015 at 1:29 PM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Would it make sense to use object::computeSymbolSizes now?<br></blockquote><div><br></div><div>Definitely. llvm-symbolizer has an interesting special case for ELF, though: if regular symbol table is missing,</div><div>we iterate over dynamic symbol table, and call getSymbolSize() for each symbol from there. Do you think we</div><div>should add smth. like computeDynamicSymbolSizes?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On 4 June 2013 at 03:57, Alexey Samsonov <<a href="mailto:samsonov@google.com">samsonov@google.com</a>> wrote:<br>
> Author: samsonov<br>
> Date: Tue Jun  4 02:57:38 2013<br>
> New Revision: 183213<br>
><br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D183213-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=sXvmdgyJpvlE-Y8W0tSCqdrgE1Jq2wR-L6Pr11eMcbo&s=AuPPTKb61mUgtmYLeJbAT55R7TlzRl8Xr0GgswWJhp0&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=183213&view=rev</a><br>
> Log:<br>
> [llvm-symbolizer] Avoid calling slow getSymbolSize for Mach-O files. Assume that symbols with zero size are in fact large enough.<br>
><br>
> Modified:<br>
>     llvm/trunk/test/DebugInfo/llvm-symbolizer.test<br>
>     llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.cpp<br>
>     llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.h<br>
><br>
> Modified: llvm/trunk/test/DebugInfo/llvm-symbolizer.test<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_DebugInfo_llvm-2Dsymbolizer.test-3Frev-3D183213-26r1-3D183212-26r2-3D183213-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=sXvmdgyJpvlE-Y8W0tSCqdrgE1Jq2wR-L6Pr11eMcbo&s=gNrMkpIJHYKP9fwTLDm6iJ8pY8uEog-jFSxcnH5g4a0&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/llvm-symbolizer.test?rev=183213&r1=183212&r2=183213&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/DebugInfo/llvm-symbolizer.test (original)<br>
> +++ llvm/trunk/test/DebugInfo/llvm-symbolizer.test Tue Jun  4 02:57:38 2013<br>
> @@ -1,4 +1,5 @@<br>
>  RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400559" > %t.input<br>
> +RUN: echo "%p/Inputs/dwarfdump-test.elf-x86-64 0x400436" >> %t.input<br>
>  RUN: echo "%p/Inputs/dwarfdump-test4.elf-x86-64 0x62c" >> %t.input<br>
>  RUN: echo "%p/Inputs/dwarfdump-inl-test.elf-x86-64 0x710" >> %t.input<br>
>  RUN: echo "\"%p/Inputs/dwarfdump-test3.elf-x86-64 space\" 0x633" >> %t.input<br>
> @@ -10,8 +11,12 @@ REQUIRES: shell<br>
><br>
>  CHECK:       main<br>
>  CHECK-NEXT: /tmp/dbginfo{{[/\\]}}dwarfdump-test.cc:16<br>
> +<br>
> +CHECK:      _start<br>
> +<br>
>  CHECK:      _Z1cv<br>
>  CHECK-NEXT: /tmp/dbginfo{{[/\\]}}dwarfdump-test4-part1.cc:2<br>
> +<br>
>  CHECK:      inlined_h<br>
>  CHECK-NEXT: dwarfdump-inl-test.h:2<br>
>  CHECK-NEXT: inlined_g<br>
><br>
> Modified: llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.cpp<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_tools_llvm-2Dsymbolizer_LLVMSymbolize.cpp-3Frev-3D183213-26r1-3D183212-26r2-3D183213-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=sXvmdgyJpvlE-Y8W0tSCqdrgE1Jq2wR-L6Pr11eMcbo&s=YfQGBn3kdFVxoJxeKfa-Bie1EA8qoiy_ALWT1X3B2T4&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.cpp?rev=183213&r1=183212&r2=183213&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.cpp Tue Jun  4 02:57:38 2013<br>
> @@ -15,6 +15,7 @@<br>
>  #include "llvm/ADT/STLExtras.h"<br>
>  #include "llvm/Object/MachO.h"<br>
>  #include "llvm/Support/Casting.h"<br>
> +#include "llvm/Support/FileSystem.h"<br>
>  #include "llvm/Support/Path.h"<br>
><br>
>  #include <sstream><br>
> @@ -63,7 +64,11 @@ ModuleInfo::ModuleInfo(ObjectFile *Obj,<br>
>          SymbolAddress == UnknownAddressOrSize)<br>
>        continue;<br>
>      uint64_t SymbolSize;<br>
> -    if (error(si->getSize(SymbolSize)) || SymbolSize == UnknownAddressOrSize)<br>
> +    // Getting symbol size is linear for Mach-O files, so avoid it.<br>
> +    if (isa<MachOObjectFile>(Obj))<br>
> +      SymbolSize = 0;<br>
> +    else if (error(si->getSize(SymbolSize)) ||<br>
> +             SymbolSize == UnknownAddressOrSize)<br>
>        continue;<br>
>      StringRef SymbolName;<br>
>      if (error(si->getName(SymbolName)))<br>
> @@ -80,11 +85,14 @@ bool ModuleInfo::getNameFromSymbolTable(<br>
>                                          std::string &Name, uint64_t &Addr,<br>
>                                          uint64_t &Size) const {<br>
>    const SymbolMapTy &M = Type == SymbolRef::ST_Function ? Functions : Objects;<br>
> -  SymbolDesc SD = { Address, Address + 1 };<br>
> -  SymbolMapTy::const_iterator it = M.find(SD);<br>
> -  if (it == M.end())<br>
> +  if (M.empty())<br>
>      return false;<br>
> -  if (Address < it->first.Addr || Address >= it->first.AddrEnd)<br>
> +  SymbolDesc SD = { Address, Address };<br>
> +  SymbolMapTy::const_iterator it = M.upper_bound(SD);<br>
> +  --it;<br>
> +  // Assume that symbols with zero size are large enough.<br>
> +  if (it->first.Addr < it->first.AddrEnd &&<br>
> +      it->first.AddrEnd <= Address)<br>
>      return false;<br>
>    Name = it->second.str();<br>
>    Addr = it->first.Addr;<br>
> @@ -236,9 +244,12 @@ LLVMSymbolizer::getOrCreateModuleInfo(co<br>
>      if (isa<MachOObjectFile>(Obj)) {<br>
>        const std::string &ResourceName =<br>
>            getDarwinDWARFResourceForModule(ModuleName);<br>
> -      ObjectFile *ResourceObj = getObjectFile(ResourceName);<br>
> -      if (ResourceObj != 0)<br>
> -        DbgObj = ResourceObj;<br>
> +      bool ResourceFileExists = false;<br>
> +      if (!sys::fs::exists(ResourceName, ResourceFileExists) &&<br>
> +          ResourceFileExists) {<br>
> +        if (ObjectFile *ResourceObj = getObjectFile(ResourceName))<br>
> +          DbgObj = ResourceObj;<br>
> +      }<br>
>      }<br>
>      Context = DIContext::getDWARFContext(DbgObj);<br>
>      assert(Context);<br>
><br>
> Modified: llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.h<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_tools_llvm-2Dsymbolizer_LLVMSymbolize.h-3Frev-3D183213-26r1-3D183212-26r2-3D183213-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=sXvmdgyJpvlE-Y8W0tSCqdrgE1Jq2wR-L6Pr11eMcbo&s=TRwb5AZOVM12CQsS6VoEQoXi48rMJWJL5G0smGnFiqM&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.h?rev=183213&r1=183212&r2=183213&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.h (original)<br>
> +++ llvm/trunk/tools/llvm-symbolizer/LLVMSymbolize.h Tue Jun  4 02:57:38 2013<br>
> @@ -84,7 +84,7 @@ private:<br>
>      uint64_t Addr;<br>
>      uint64_t AddrEnd;<br>
>      friend bool operator<(const SymbolDesc &s1, const SymbolDesc &s2) {<br>
> -      return s1.AddrEnd <= s2.Addr;<br>
> +      return s1.Addr < s2.Addr;<br>
>      }<br>
>    };<br>
>    typedef std::map<SymbolDesc, StringRef> SymbolMapTy;<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div></div>