elf: Add size_relative_relocs and finish_relative_relocs
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 6 Jan 2022 17:24:41 +0000 (09:24 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 12 Jan 2022 14:04:51 +0000 (06:04 -0800)
commit23cc1de50b006fa10e295bdb4455540f001515e9
treed25d69445f837310c737233f5987861c9ca88a49
parent6a91be866619c592762cd7e9b034a9f7ad27ef37
elf: Add size_relative_relocs and finish_relative_relocs

On some targets, the DT_RELR section size can be computed only after all
symbols addresses can be determined.  Set the preliminary DT_RELR section
size before mapping sections to segments and set the final DT_RELR section
size after regular symbol processing is done.

* elf-bfd.h (elf_backend_data): Add size_relative_relocs and
finish_relative_relocs.
* elf.c (_bfd_elf_map_sections_to_segments): Call
size_relative_relocs if DT_RELR is enabled.
* elflink.c (bfd_elf_final_link): Call finish_relative_relocs
after regular symbol processing is finished if DT_RELR is enabled.
* elfxx-target.h (elf_backend_size_relative_relocs): New.
(elf_backend_finish_relative_relocs): Likewise.
(elfNN_bed): Add elf_backend_size_relative_relocs and
elf_backend_finish_relative_relocs.
bfd/elf-bfd.h
bfd/elf.c
bfd/elflink.c
bfd/elfxx-target.h