<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 27, 2016 at 3:58 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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>> A sketch of how the symbol table might implement adding an undefined symbol:<br>
><br>
> Symbol *SymbolTable<ELFT>::addUndefined(StringRef Name, uint8_t Binding, …)<br>
> {<br>
>   std::pair<Symbol *, bool> P = insert(Name);<br>
>   if (!P.second) { // symbol already in symbol table<br>
>     if (auto *L = dyn_cast<Lazy>(P.first->body()))<br>
>       addFile(L);<br>
>     return P.first;<br>
>   }<br>
>   // symbol previously unseen<br>
>   new (P.first->Body) Undefined(Name, Binding, ...);<br>
>   return P.first;<br>
> }<br>
><br>
> Input files would have an associated symbol list for use in resolving<br>
> relocations. This symbol list would be a std::vector<Symbol *>. Symbols<br>
> retrieved from the symbol table are added to the symbol list. Relocations<br>
> would be resolved by following two fewer levels of indirection, from the<br>
> vector to the Symbol, rather than the current vector -> SymbolBody -> Symbol<br>
> -> SymbolBody.<br>
<br>
</span>I do like the design. What are you doing with local symbols? Are they<br>
just an special symbol type?<br></blockquote><div><br></div><div>I'm not sure, but I think the best approach may be to process them directly in the Writer without creating Symbols for them. This may help us save time in file parsing because (according to Rui) most symbols are not global symbols.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Another thing that can be tried that might be simpler and already<br>
provide some performance advantage:<br>
<br>
* Replace the current map vector. We have a map to an symbol number<br>
that indexes an array. We could map directly to a Symbol if:<br>
  * We stored the number in the Symbol to allow sorting.<br>
  * Or used a hash that produces the same value everywhere.<br></blockquote><div><br></div><div>Thanks, I might try that as well. The second one should be quite easy to benchmark without needing a stable hash.</div><div><br></div><div>Thanks,</div></div>-- <br><div><div dir="ltr">-- <div>Peter</div></div></div>
</div></div>