unresolved_reloc test to exclude cases where we use "relocation"
before setting it to point into the .got. Reinstate fudge for
unresolved relocs in debugging sections.
* elf32-i386.c (elf_i386_check_relocs): Tweak condition under
which .got created. Mark symbols used by R_386_32 and R_386_PC32
relocs as ELF_LINK_NON_GOT_REF to create COPY relocs only when the
reloc is in a read-only section. Instead, allocate space for a
dynamic reloc to reference the library symbol directly. Keep
track of space we allocate using pcrel_relocs_copied.
(discard_copies): Delete, and move code to ..
(allocate_plt_and_got): ..here. Rename to
allocate_plt_and_got_and_discard_relocs. Remove unneeded dynamic
relocs for non-shared link.
(elf_i386_size_dynamic_sections): Update calls to above functions.
(elf_i386_relocate_section): Write out the dynamic relocs. Add
more ugly logic to avoid "unresolvable relocation" error. Use
htab shortcut in place of elf_hash_table macro.
(elf_i386_finish_dynamic_sections): Allow that dynamic .got may
not always be created now.
suppress_output.
(mi_begin, mi_end): Check suppress_header.
(mi_field_int, mi_field_skip): Ditto.
(mi_field_string, mi_field_fmt): Ditto.
(mi_table_begin): When nr_rows is zero, set suppress_header else,
output the start of the header.
(mi_table_body): Clear suppress header.
(md_apply_fix): Use it here. Replace printf with equivalent
as_bad_where.
(tc_gen_reloc): Use as_bad_where instead of as_bad.
(md_apply_fix): Here too.
* config/tc-i386.c (tc_gen_reloc): Use as_bad_where instead of as_bad.
* config/tc-m68k.c (tc_gen_reloc): Likewise.
(md_convert_frag_1): Likewise.
allocate local .got space. Use shortcuts from hash table for .got
and .plt rather than comparing section names.
(elf32_hppa_check_relocs): Use local_plt_refcounts var rather than
adjusting index into local_got_refcounts to document what we are
really doing.
(elf32_hppa_relocate_section): Similarly for local_plt_offsets.
Tidy .got and .plt error checking.
Mention that the GNU linker is aware of input-output format
restrictions when generating relocatable output. Make new
paragraph for final-link case.
(BFD target vector swap): Fix typo.
elf_backend_emit_relocs: New field: Function for emitting
relocs.
elf_backend_count_relocs: New field: Function for determining
the number of relocs to be emitted.
* elfxx-target.h: Provide default (NULL) values for
elf_backend_emit_relocs and elf_backend_count_relocs.
* elflink.h (elf_link_size_reloc_section): Make the hash table
big enough to hold the relocs counted by either reloc_count or
o->reloc_count.
(elf_bfd_final_link) emit_relocs: New boolean, set if relocs
should be emitted, either because of a command line option
stored in the info structure or because the target provides a
special reloc emitting function.
If the target provides a reloc counting function use it,
unless performing a relocatable link or emitting all relocs.
Also set the SEC_RELOC flag on any output section which will
contain relocs.
(elf_link_input_bfd): emit_relocs: New boolean, set if relocs
should be emitted, either because of a command line option
stored in the info structure or because the target provides a
special reloc emitting function.
If the target provides a reloc emitting function, use it,
unless performing a relocatable link or emitting all relocs.
Update for API change in bfd_elf${ELFSIZE}_size_dynamic_sections.
* mpw-elfmips.c (gldelf32ebmip_before_allocation): Ditto.
* ld.h (args_type): Remove member export_dynamic. All users
changed to use struct bfd_link_info member.
export_dynamic. All users changed to use info member.
NAME(bfd_elf,size_dynamic_sections)): Remove parameter
export_dynamic, instead use member in parameter info.
* bfd-in.h (bfd_elf32_size_dynamic_sections,
bfd_elf64_size_dynamic_sections): Update prototype.
* bfd-in2.h: Regenerate.