[PATCH] (version 2) Change MIPS linker stubs to allow for more than 2^15 symbols.
David Daney
ddaney@avtrex.com
Fri Jun 9 18:18:00 GMT 2006
Thiemo Seufer wrote:
> Richard Sandiford wrote:
>
>>David Daney <ddaney@avtrex.com> writes:
>>
>>>! #define MIPS_FUNCTION_STUB_SIZE(INFO) \
>>>! (elf_hash_table (INFO)->dynsymcount > 65536 ? 20 : 16)
>>
>>Sorry to be a pain, but as I said earlier, I really do think we should
>>cache the chosen stub size in mips_elf_link_hash_table (and get rid of
>>this macro entirely). That will emphasise that always_size_dynamic_sections
>>is the place that makes the decision, and that it's only safe to use this
>>value once that function has been called. I think that will be more robust
>>and easier to understand in future.
>>
>>Apart from that, and from Thiemo's and Daniel's comments, this looks
>>really good to me. Thanks a lot for doing this!
>
>
> Does this followup patch look ok?
>
FWIW, it looks good to me. Definitly a little cleaner than mine.
One weird thing is that the generated code is different.
My libgcj.so now has 16 byte stubs. With my version of the patch it
generated 20 byte stubs. This means that at the point you are sampling
info->dynsymcount, it had a different value than when it was sampled in
my patch. I was wondering about this because even though my patch
generated 20 byte stubs, none of the symbol index values in the stubs
were large enough to require the larger stub.
There must be more symbols that are added to the symbol table after
_bfd_mips_elf_create_dynamic_sections is called. Is it safe to assume
that none of these 'extra' symbols will be referenced by a stub?
With your patch my simple tests with libgcj run successfully. I did
however see FAIL: MIPS multi-got-no-shared, which I think passed before
applying your patch. These are very brittle tests, so perhaps it is not
surprising.
David Daney
More information about the Binutils
mailing list