<p dir="ltr">The question was more in line of: how does the dynamic linker take advantage of the got and dynamic symbols being in the same order? Why is that mips specific? </p>
<p dir="ltr">Also, could the got be sorted to match the symbol table? That way the gnu hash table would still work. I have asked the same question on the binutils list where a mips only gnu hash is being discussed. </p>
<p dir="ltr">Cheers, Rafael </p>
<div class="gmail_quote">On Nov 5, 2015 12:56 PM, "Simon Atanasyan" <<a href="mailto:simon@atanasyan.com">simon@atanasyan.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, Nov 5, 2015 at 7:55 PM, Rafael EspĂ­ndola<br>
<<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br>
> On 3 November 2015 at 08:34, Igor Kudrin <<a href="mailto:ikudrin.dev@gmail.com">ikudrin.dev@gmail.com</a>> wrote:<br>
>><br>
>> The MIPS ABI has its requirements to sort entries in the .dyn.sym section.<br>
>> Symbols, which are not in the GOT, have to precede symbols added in the GOT.<br>
>> These latter must have the same order as the corresponding GOT entries.<br>
><br>
> BTW, does anyone know why that restriction exists and why it is still relevant?<br>
<br>
That would be very funny if nobody knows.<br>
<br>
In short, because MIPS ABI is still unchanged and dynamic linkers expect<br>
to get synchronized GOT and .dyn.sym section.<br>
<br>
More wordy, here is a quote from MIPS ABI:<br>
[[<br>
The GOT itself is located by the DT_PLTGOT dynamic tag. It is logically<br>
two tables. The first (with DT_MIPS_LOCAL_GOTNO entries) consists of<br>
local GOT addresses, i.e. non-preemptible (protected) addresses defined<br>
within the executable/DSO. They are initialized to their quickstart values,<br>
and must be relocated if and only if the DSO is loaded at a different address<br>
than that given by its DT_MIPS_BASE_ADDRESS dynamic tag.<br>
<br>
The second part of the GOT is the global GOT addresses, i.e. those which<br>
are undefined or preemptible. Each entry in this part has an associated<br>
symbol entry in the .dynsym section. Those symbols start at the symbol<br>
table index given by the DT_MIPS_GOTSYM dynamic tag, and are in the<br>
same order as the global GOT entries. If a symbol is defined in the DSO<br>
(but preemptible), the GOT entry will normally be initialized to a quickstart<br>
value.<br>
]]<br>
<br>
BTW funny fact - DT_PLTGOT points to .got while DT_MIPS_PLTGOT points<br>
to .got.plt. DT_MIPS_PLTGOT is used for non-PIC code only.<br>
<br>
--<br>
Simon Atanasyan<br>
</blockquote></div>