Next: Writing the symbol table, Previous: Information provided by the linker, Up: Performing the Final Link
The _bfd_final_link
function should look through the
link_order
structures attached to each section of the
output file. Each link_order
structure should either be
handled specially, or it should be passed to the function
_bfd_default_link_order
which will do the right thing
(_bfd_default_link_order
is defined in linker.c
).
For efficiency, a link_order
of type
bfd_indirect_link_order
whose associated section belongs
to a BFD of the same format as the output BFD must be handled
specially. This type of link_order
describes part of an
output section in terms of a section belonging to one of the
input files. The _bfd_final_link
function should read the
contents of the section and any associated relocs, apply the
relocs to the section contents, and write out the modified
section contents. If performing a relocatable link, the
relocs themselves must also be modified and written out.
The functions _bfd_relocate_contents
and
_bfd_final_link_relocate
provide some general support for
performing the actual relocations, notably overflow checking.
Their arguments include information about the symbol the
relocation is against and a reloc_howto_type
argument
which describes the relocation to perform. These functions
are defined in reloc.c
.
The a.out function which handles reading, relocating, and
writing section contents is aout_link_input_section
. The
actual relocation is done in aout_link_input_section_std
and aout_link_input_section_ext
.