clayborg added a comment.

In D67390#1671128 <https://reviews.llvm.org/D67390#1671128>, @kwk wrote:

> In D67390#1671018 <https://reviews.llvm.org/D67390#1671018>, @labath wrote:
>
> > In D67390#1667270 <https://reviews.llvm.org/D67390#1667270>, @kwk wrote:
> >
> > > @labath how shall we go about this? We do have the situation that when 
> > > you lookup a symbol you might find it twice if it is in `.dynsym` and in 
> > > `.symtab`. Shall I adjust the test expectation to that or change my 
> > > implementation?
> >
> >
> > That's a good question (and another reason why I wanted this to be a 
> > separate patch). Since only two tests broke it does not seem like having 
> > some symbols twice does much harm. OTOH, having an identical symbol twice 
> > does seem like asking for trouble down the line. One possibility would be 
> > to restrict this merging to the gnu_debugdata case only. Another option 
> > would be to make the merging code smarter and avoid adding the symbol a 
> > second time if it has the same name and address. That would have the 
> > advantage of having the symbol just once in the common case, while still 
> > preserving the full information (in case the symbol tables were munged 
> > independently of the gnu_debugdata thingy).
> >
> > Overall, I guess I would prefer the last solution (inserting only different 
> > symbols) unless that turns out to be difficult. In that case, I think just 
> > restricting this to gnu_debugdata is fine.
>
>
> The crucial line is the following line in `ObjectFileELF::ParseSymbols()`:
>
>   symtab->AddSymbol(dc_symbol);
>
>
> If I change that to:
>
>   symtab->FindSymbolsByNameAndAddress(dc_symbol.GetName(), 
> dc_symbol.GetAddress(), indexVector)
>   if (indexVector.empty()) {
>     symtab->AddSymbol(dc_symbol);
>   }
>


in mach-o plug-in we keep a std::map or something easier. We don't sort or 
search the current lldb_private::Symbol objects since they aren't sorted, nor 
are the name indexes created until we are done with adding all symbols. Can we 
use a side map that is just something like:

  std::map<lldb::addr_t, ContString> SymbolMapType;



> is that the logic you have in mind? `FindSymbolsByNameAndAddress` I would 
> need to implement.
> 
>> BTW, if you want, I think you can submit the rest of the gnu_debugdata 
>> changes without waiting for this, if you just adjust the test expectations 
>> to account for the fact that symtab+dynsym merging does not work (yet).
> 
> Let's wait first, okay?




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