kwk marked 9 inline comments as done.
kwk added a comment.

I think I've finished the implementation now and should have answered all your 
comments and concerns. I run tests now. I would appreciate if you (@clayborg , 
@labath , @jankratochvil ) can take a look at this patch again.



================
Comment at: lldb/source/Plugins/ObjectFile/ELF/ELFHeader.h:289
+struct NamedELFSymbol : ELFSymbol {
+  lldb_private::ConstString st_name_string; ///< Actual name of the ELF symbol
+
----------------
kwk wrote:
> clayborg wrote:
> > Do we need a ConstString for the st_shndx as well so we can correctly 
> > compare a section from one file to a section from another as in the 
> > .gnu_debugdata case?
> That is a good point.
@clayborg in fact I think this could be the reason not to use a set of 
`lldb_private::Symbol` objects because there we don't store the section name or 
symbol name but only addresses or indexes. I did add the 
`st_section_name_string` struct member.


================
Comment at: lldb/source/Plugins/ObjectFile/ELF/ELFHeader.h:430
+    std::size_t h5 = std::hash<unsigned char>()(s.st_other);
+    std::size_t h6 = std::hash<elf::elf_half>()(s.st_shndx);
+    return llvm::hash_combine(h1, h2, h3, h4, h5, h6);
----------------
clayborg wrote:
> I know the section index will match between for symbol tables in the same ELF 
> file, but what about a symbol table in an external file like .gnu_debugdata?
I did add the section name to `NamedELFSymbol` and explicitly ignore it when 
building the hash for the base `ELFSymbol`.


================
Comment at: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp:42
 #include "llvm/Support/MipsABIFlags.h"
+#include "lldb/Utility/StreamString.h"
 
----------------
jankratochvil wrote:
> Is it really needed?
removed.


================
Comment at: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp:2205
+      m_unique_symbol_set.push_back(symbol);
+    }
   }
----------------
jankratochvil wrote:
> What if the symbol is ignored, the function will then incorrectly return a 
> number of added symbols even when they were not added, wouldn't it?
@jankratochvil we already have places inside this `for`-loop where we 
`continue`. I hope it is okay to ask the same question back that you've asked 
for those `continue`-places. Why don't we adjust the returned number (`i`) in 
case symbols where skipped?


================
Comment at: lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp:2202-2206
+    NamedELFSymbol needle(symbol);
+    needle.st_name_string = ConstString(symbol_bare);
+    if (unique_elf_symbols.find(needle) == unique_elf_symbols.end()) {
+      symtab->AddSymbol(dc_symbol);
+      unique_elf_symbols.insert(needle);
----------------
clayborg wrote:
> Do we even need NamedELFSymbol? Can we just make an unordered_set of 
> lldb_private::Symbol values?
@clayborg I find it much easier with `NamedELFSymbol` because all we have to do 
is derive from `ELFSymbol` and add the strings for the symbol name and the 
section name. If we were to use `lldb_private::Symbol` I would have to lookup 
the symbols manually each time I calculate a hash which seems bad. I mean, the 
symbol and section name already are `ConstString`s and should be stored and 
computed very efficiently. Also I wanted to keep things local to ELF and not 
mess with everything that uses `lldb_private::Symbol`. Makes sense?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D67390/new/

https://reviews.llvm.org/D67390



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to