Thanks Alan,
I will wait a couple of days to give Richard a chance to object. I
think I got the address calculation correct, but having another pair of
eyes look at it would be nice. I am especially concerned about what
happens on IRIX where the symbol comes in from an external object rather
than being generated by the linker itself. I had no way to test that.
David Daney
On 12/09/2011 04:39 PM, Alan Modra wrote:
On Fri, Dec 09, 2011 at 12:31:14PM -0800, David Daney wrote:
* /elfxx-mips.c (mips_elf_link_hash_table.rld_value): Remove.
(mips_elf_link_hash_table.rld_symbol): New field;
(MIPS_ELF_RLD_MAP_SIZE): New macro.
(_bfd_mips_elf_add_symbol_hook): Remember __rld_obj_head symbol
in rld_symbol.
(_bfd_mips_elf_create_dynamic_sections): Remember __rld_map symbol
in rld_symbol.
(_bfd_mips_elf_size_dynamic_sections): Set correct size for .rld_map.
(_bfd_mips_elf_finish_dynamic_symbol): Remove .rld_map handling.
(_bfd_mips_elf_finish_dynamic_sections): Use rld_symbol to
calculate DT_MIPS_RLD_MAP value.
(_bfd_mips_elf_link_hash_table_create): Initialize rld_symbol,
quit initializing rld_value.
OK. Remove stray / in ChangeLog entry
Yes, I noticed that only after hitting Send.
+ s->size += MIPS_ELF_RLD_MAP_SIZE(output_bfd);
Fix formatting here.
+ dyn.d_un.d_ptr = s->output_section->vma + s->output_offset
+ + h->root.u.def.value;
And it's nice to write code that emacs auto-indent won't change, so
add parentheses
dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
+ h->root.u.def.value);
I will fix those too.