aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog11595
-rw-r--r--bfd/acinclude.m410
-rw-r--r--bfd/bfd-in2.h34
-rw-r--r--bfd/coff-arm.c25
-rw-r--r--bfd/coff-h8300.c152
-rw-r--r--bfd/coffcode.h6
-rw-r--r--bfd/config.bfd19
-rwxr-xr-xbfd/configure31
-rw-r--r--bfd/configure.in3
-rw-r--r--bfd/doc/ChangeLog593
-rw-r--r--bfd/dwarf2.c331
-rw-r--r--bfd/elf32-arm.h185
-rw-r--r--bfd/elf32-cris.c13
-rw-r--r--bfd/elf32-frv.c2999
-rw-r--r--bfd/elf32-h8300.c210
-rw-r--r--bfd/elf32-i386.c77
-rw-r--r--bfd/elf32-m32r.c2754
-rw-r--r--bfd/elf32-m68k.c13
-rw-r--r--bfd/elf32-mips.c374
-rw-r--r--bfd/elf32-sparc.c30
-rw-r--r--bfd/elf32-vax.c11
-rw-r--r--bfd/elf64-mips.c230
-rw-r--r--bfd/elf64-ppc.c18
-rw-r--r--bfd/elflink.h5
-rw-r--r--bfd/elfn32-mips.c396
-rw-r--r--bfd/elfxx-ia64.c21
-rw-r--r--bfd/elfxx-mips.c258
-rw-r--r--bfd/elfxx-mips.h8
-rw-r--r--bfd/libbfd.h29
-rw-r--r--bfd/opncls.c22
-rw-r--r--bfd/peXXigen.c18
-rw-r--r--bfd/peicode.h38
-rw-r--r--bfd/reloc.c66
-rw-r--r--bfd/targets.c6
-rw-r--r--bfd/version.h2
35 files changed, 7344 insertions, 13238 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index bb4c9ce..00748f3 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,11299 +1,380 @@
-2003-12-15 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
- Nick Clifton <nickc@redhat.com>
+2004-01-23 Daniel Jacobowitz <drow@mvista.com>
- * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Ensure that correct flags
- are set on known section types.
-
-2003-12-12 Nick Clifton <nickc@redhat.com>
+ * elf32-arm.h (elf32_arm_check_relocs): Revert part of 2004-01-13
+ change.
- * po/ro.po: Updated translation.
+2004-01-21 Tom Rix <tcrix@worldnet.att.net>
-2003-12-12 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-hppa.c (elf64_hppa_link_output_symbol_hook): Check for
- NULL dyn_h.
-
-2003-12-11 Nick Clifton <nickc@redhat.com>
-
- * elf.c (INCLUDE_SECTION_IN_SEGMENT): Skip PT_GNU_STACK segments.
-
-2003-12-08 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.h, elfxx-mips.c, cpu-mips.c: Convert prototypes.
- Remove casts that were only needed for K&R compatibility.
-
-2003-12-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_backend_data): Remove "bfd *" and add
- "elflink_hash_entry *" param to elf_backend_link_output_symbol_hook.
- Add "elflink_hash_entry *" param to elf_backend_output_arch_syms.
- * elflink.h (elf_link_output_sym): Add "elflink_hash_entry *" param,
- and pass to output_symbol_hook.
- (elf_bfd_final_link): Adjust elf_link_output_sym calls.
- (elf_link_output_extsym): Likewise.
- (elf_link_input_bfd): Likewise.
- * elf32-sh64.c (sh64_elf_link_output_symbol_hook): Adjust.
- * elf32-v850.c (v850_elf_link_output_symbol_hook): Likewise.
- * elf64-mmix.c (mmix_elf_link_output_symbol_hook): Likewise.
- * elf64-sh64.c (sh64_elf64_link_output_symbol_hook): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_link_output_symbol_hook): Likewise.
- * elfxx-mips.h (_bfd_mips_elf_link_output_symbol_hook): Likewise.
- * elf64-sparc.c (sparc64_elf_output_arch_syms): Likewise.
- * elf64-hppa.c (elf64_hppa_link_output_symbol_hook): Likewise.
- Validate dynh->h against h.
- * elf64-ppc.c (struct ppc_link_hash_entry): Add adjust_done bitfield.
- (link_hash_newfunc): Init it.
- (adjust_opd_syms): New function.
- (ppc64_elf_edit_opd): Set adjust_done when global .opd sym adjusted.
- Set opd.adjust for all .opd relocs. Call adjust_opd_syms.
- (ppc64_elf_tls_optimize): Adjust possible .opd sym values here.
- (ppc64_elf_relocate_section): Also adjust syms not a multiple of 24.
- (ppc64_elf_output_symbol_hook): New function.
- (elf_backend_link_output_symbol_hook): Define.
-
-2003-12-07 Richard Sandiford <rsandifo@redhat.com>
-
- * elf32-mips.c, elfn32-mips.c, elf64-mips.c: Convert prototypes.
- Remove casts that were only needed for K&R compatibility.
-
-2003-12-05 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
-
- * coff-arm.c (aoutarm_std_reloc_howto [ARM_WINCE]): Set
- partial_inplace for these relocs to FALSE for comptability with
- the MS linker.
- Remap ARM_26D relocation from 5 to 0. This fixes "bad fixup" error
- generated by MS linker, and brings the relocation in line the MS
- PE documentation.
-
-2003-12-04 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf32-ppc.c (ppc_elf_relax_section): Don't check relax_finalizing.
-
-2003-12-04 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Use the
- need_relax_finalize field in link_info instead of
- relax_finalizing to check if the relax finalize pass is being
- done.
-
-2003-12-04 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
-
- * coff-arm.c (coff_arm_relocate_section, bfd_arm_process_before_allocation):
- Change ARM26* to ARM_26* in comments to match definitions.
- (coff_arm_adjust_symndx): Replace hard-coded constants with
- appropriate definitions (ARM_26*).
-
-2003-12-04 Alan Modra <amodra@bigpond.net.au>
-
- * coff-i860.c (coff_i860_reloc_nyi): Return bfd_reloc_not_supported.
- * elf-m10300.c (elf32_mn10300_finish_hash_table_entry): Warning fixes.
- (mn10300_elf_relax_section): Likewise.
- * nlm32-alpha.c (ONES): Define.
- (nlm32_alpha_howto_table): Use it to avoid warnings.
-
-2003-12-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-i386.c (elf_i386_object_p): Delete.
- (elf_backend_object_p): Don't define.
- * elf32-s390.c (elf_s390_object_p): No need to alloc tdata here.
- * elf32-sh.c (sh_elf_object_p): Likewise.
- * elf32-sparc.c (elf32_sparc_object_p): Likewise.
- * elf64-alpha.c (elf64_alpha_object_p): Likewise.
- * elf64-s390.c (elf_s390_object_p): Likewise.
- * elf64-x86-64.c (elf64_x86_64_elf_object_p): Likewise.
-
-2003-12-03 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
-
- * archures.c (bfd_mach_m32r2): Add new machine type.
- * bfd-in2.h: Regenerate.
- * cpu-m32r.c : Add new machine type.
- * elf32-m32r.c (m32r_elf_object_p, m32r_elf_final_write_processing,
- m32r_elf_merge_private_bfd_data): Add support for new machine
- type.
-
-2003-12-03 Dave Airlie <airlied@linux.ie>
-
- * config.bfd: Add vax-linux-gnu target.
- * configure.in: Likewise.
- * configure: Regenerate.
-
-2003-12-03 Alan Modra <amodra@bigpond.net.au>
-
- * ecoff.c (ecoff_link_add_archive_symbols): Update for renamed
- bfd_link_hash_entry field "next" -> "und_next".
- * linker.c (_bfd_link_hash_newfunc): Likewise.
- (bfd_link_add_undef): Likewise.
- (_bfd_generic_link_add_archive_symbols): Likewise.
- (_bfd_generic_link_add_one_symbol): Likewise.
- * xcofflink.c (xcoff_link_add_symbols): Likewise.
-
-2003-12-02 Nick Clifton <nickc@redhat.com>
-
- * configure.in (ALL_LINGUAS): Add ro.
- * po/ro.po: New Romanian translation.
-
-2003-12-02 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
-
-2003-12-01 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
-
- * coffcode.h (coff_compute_section_file_positions): Set page_size
- to 1 instead of 0 in the case file alignment value is zero.
-
-2003-12-01 Kazu Hirata <kazu@cs.umass.edu>
-
- * coff-rs6000.c: Remove ARGSUSED and VARARGS.
- * coff64-rs6000.c: Likewise.
- * coffcode.h: Likewise.
- * elf32-vax.c: Likewise.
- * hash.c: Likewise.
- * hppabsd-core.c: Likewise.
- * hpux-core.c: Likewise.
- * ihex.c: Likewise.
- * netbsd-core.c: Likewise.
- * osf-core.c: Likewise.
- * pdp11.c: Likewise.
- * ptrace-core.c: Likewise.
- * sco5-core.c: Likewise.
- * section.c: Likewise.
- * sunos.c: Likewise.
- * trad-core.c: Likewise.
-
-2003-12-01 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (is_elf_hash_table): Take hash tab rather than info arg.
- * elf.c (_bfd_elf_merge_sections): Adjust to suit.
- (_bfd_elf_link_just_syms): Likewise.
- (bfd_elf_get_needed_list): Likewise.
- (bfd_elf_get_runpath_list): Likewise.
- (_bfd_elf_link_hash_copy_indirect): Remove unneeded parens.
- * elf32-hppa.c (elf32_hppa_setup_section_lists): Don't check hash tab
- creator flavour.
- (elf32_hppa_set_gp): Look up output sections rather than using htab.
- * elf32-i960.c: Comment fix. Formatting.
- * elf32-m32r.c (m32r_elf_add_symbol_hook): Use is_elf_hash_table
- rather than testing creator flavour.
- * elf32-sh64.c (sh64_elf_add_symbol_hook): Likewise.
- * elf64-sh64.c (sh64_elf64_add_symbol_hook): Likewise.
- * elflink.c (_bfd_elf_link_create_dynamic_sections): Adjust for
- is_elf_hash_table change. Remove redundant test.
- (bfd_elf_record_link_assignment): Use is_elf_hash_table rather than
- testing creator flavour.
- (elf_link_record_local_dynamic_symbol): Adjust for is_elf_hash_table.
- (_bfd_elf_fix_symbol_flags): Likewise.
- (_bfd_elf_adjust_dynamic_symbol): Likewise.
- * elflink.h (elf_link_add_object_symbols): Likewise. Remove redundant
- checks. Use is_elf_hash_table rather than testing creator flavour.
- Use hash_table throughout in place of info->hash.
- (elf_add_dynamic_entry): Adjust for is_elf_hash_table change.
- (NAME(bfd_elf,size_dynamic_sections)): Likewise. Remove redundant
- check.
- (elf_bfd_final_link): Adjust for is_elf_hash_table change.
- (elf_link_check_versioned_symbol): Use is_elf_hash_table rather than
- testing creator flavour.
- (elf_gc_sections): Add is_elf_hash_table check.
- (elf_gc_common_finalize_got_offsets): Likewise.
- (elf_bfd_discard_info): Adjust for is_elf_hash_table change. Remove
- redundant check.
- * elfxx-ia64.c (elfNN_ia64_relax_section): Use is_elf_hash_table
- rather than testing creator flavour.
-
-2003-11-28 Christian Groessler <chris@groessler.org>
-
- * cpu-z8k.c: Convert to ISO C90.
- * coff-z8k.c: Likewise.
-
-2003-11-27 Alexandre Oliva <aoliva@redhat.com>
-
- * elf-bfd.h (elf_backend_data::elf_backend_modify_segment_map):
- Add link info argument.
- * elf32-i370.c (elf_backend_modify_segment_map): Likewise.
- * elf32-ppc.c (ppc_elf_modify_segment_map): Likewise.
- * elf32-xtensa.c (elf_xtensa_modify_segment_map): Likewise.
- * elf64-hppa.c (elf64_hppa_modify_segment_map): Likewise.
- * elfxx-ia64.c (elfNN_ia64_modify_segment_map): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Likewise.
- * elfxx-mips.h (_bfd_mips_elf_modify_segment_map): Likewise.
- * elf.c (assign_file_positions_except_relocs,
- assign_file_positions_for_segments): Likewise. Adjust calls.
-
-2003-11-27 Mark Kettenis <kettenis@gnu.org>
-
- * elf.c (elfcore_grok_netbsd_procinfo): Make a pseudosection out
- of the note.
-
-2003-11-26 Daniel Jacobowitz <drow@mvista.com>
- Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (mips_elf_set_global_got_offset): Don't set no_fn_stub.
- (mips_elf_set_no_stub): New function.
- (mips_elf_multi_got): Call it.
- (_bfd_mips_elf_finish_dynamic_symbol): If a relocation is needed for
- a secondary GOT entry, create an R_MIPS_32 or R_MIPS_64 relocation and
- use mips_elf_create_dynamic_relocation to deal with any compatibility
- issues. Store the adjusted addend in the GOT slot.
-
-2003-11-25 Mattias Engdegård <mattias@virtutech.se>
-
- * stabs.c (_bfd_link_section_stabs): Skip N_EXCL stabs when
- procesing N_BINCL stabs.
-
-2003-11-25 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc_type_of_stub): Disallow stubs other than
- ppc_stub_plt_call to symbols defined in shared libs.
-
-2003-11-22 Jakub Jelinek <jakub@redhat.com>
-
- * elf-bfd.h (ELF_LINK_POINTER_EQUALITY_NEEDED): Define new flag.
- * elf.c (_bfd_elf_link_hash_copy_indirect): Copy it.
- * elf32-i386.c (elf_i386_copy_indirect_symbol): Likewise.
- (elf_i386_check_relocs): Set it.
- (elf_i386_finish_dynamic_symbol): If it is not set,
- clear st_value of SHN_UNDEF symbol.
-
-2003-11-20 Jim Blandy <jimb@redhat.com>
-
- * cpu-powerpc.c (powerpc_compatible): Any ISA in the PowerPC
- family is a superset of <bfd_arch_rs6000,bfd_mach_rs6k>.
-
-2003-11-20 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf32-s390.c (elf_s390_relocate_section): Don't recalculate symbol
- section for reloc output and subtract the output section's address
- from the addend when converting a relocation into one against a
- section symbol.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
-
-2003-11-18 James E Wilson <wilson@specifixinc.com>
-
- * elfxx-ia64.c (get_fptr): For fptr_rel, use dynobj not abfd.
- (elfNN_ia64_size_dynamic_sections): When stripping sections, check
- for ia64_info->rel_fptr_sec.
-
-2003-11-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (toc_adjusting_stub_needed): Exit early if section
- size is zero.
-
-2003-11-17 Daniel Jacobowitz <drow@mvista.com>
-
- * elf.c (_bfd_elf_link_hash_copy_indirect): Copy
- ELF_LINK_HASH_NEEDS_PLT. Fix formatting.
- * elf32-hppa.c (elf32_hppa_copy_indirect_symbol): Likewise.
- * elf32-i386.c (elf_i386_copy_indirect_symbol): Likewise.
- * elf32-ppc.c (ppc_elf_copy_indirect_symbol): Likewise.
- * elf32-s390.c (elf_s390_copy_indirect_symbol): Likewise.
- * elf32-sh.c (sh_elf_copy_indirect_symbol): Likewise.
- * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
- * elf64-s390.c (elf_s390_copy_indirect_symbol): Likewise.
- * elf64-x86-64.c (elf64_x86_64_copy_indirect_symbol): Likewise.
- * elfxx-ia64.c (elfNN_ia64_hash_copy_indirect): Likewise.
- * elf32-xtensa.c (elf_xtensa_copy_indirect_symbol): Remove.
- (elf_backend_copy_indirect_symbol): Don't define.
-
-2003-11-14 Daniel Jacobowitz <drow@mvista.com>
-
- * elfxx-mips.c (mips_elf_merge_gots): Weaken assert for local
- GOT entries.
-
-2003-11-13 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf32-s390.c (elf_s390_relocate_section): Only convert R_390_32
- to R_390_RELATIVE. Convert the other relocations against local
- symbols to relocations against the start of the section.
- * elf64-s390.c (elf_s390_relocate_section): Only convert R_390_64
- to R_390_RELATIVE. Convert the other relocations against local
- symbols to relocations against the start of the section.
-
-2003-11-11 Nick Clifton <nickc@redhat.com>
-
- * elf-m10300.c (bfd_mn10300_elf_size_dynamic_sections): Use
- info->executable not info->shared to decide if a .interp section
- should be present.
- * elf32-arm.h (elf32_arm_size_dynamic_sections): Likewise.
- * elf32-cris.c (elf_cris_size_dynamic_sections): Likewise.
- * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Likewise.
- * elf32-i370.c (i370_elf_size_dynamic_sections): Likewise.
- * elf32-m68k.c (elf_m68k_size_dynamic_sections): Likewise.
- * elf32-vax.c (elf_vax_size_dynamic_sections): Likewise.
- * elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Likewise.
- * elf64-hppa.c (elf64_hppa_size_dynamic_sections): Likewise.
- * elfxx-mips.c (_bfd_mips_size_dynamic_sections): Likewise.
- * elflink.h (size_dynamic_sections): Likewise.
-
-2003-11-10 Jonathan Wilson <jonwil@tpgi.com.au>
-
- * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Swap out tls pointer.
- (_bfd_XXi_final_link_postscript): Look for __tks_used symbol. If
- found initialise the tls data directory entry.
-
-2003-11-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_install_value): Delete.
- (shared_stub_entry, stub_entry): Make them arrays of ints.
- Remove initial branch.
- (ppc_elf_relax_section): Write one branch around all trampolines
- instead. Correct bogus R_PPC_PLTREL24 handling. Correct
- branch range check. Only use shared_stub_entry when shared.
- Test that branches can reach stubs. Write trampolines out at
- end so that just one realloc is used. Handle little-endian
- mode. Move relevant code from ppc_elf_install_value to here.
- (ppc_elf_relocate_section): Move code handling RELAX32 from
- ppc_elf_install_value to here.
-
-2003-11-06 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_howto_raw); Add entry for R_PPC_RELAX32PC.
- (ppc_elf_install_value): Handle R_PPC_RELAX32PC. Merge duplicate
- cases.
- (shared_stub_entry): Correct opcode.
- (ppc_elf_relax_section): Generate R_PPC_RELAX32PC relocs.
- (ppc_elf_relocate_section): Handle them.
-
-2003-11-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (_bfd_elf_rela_local_sym): Accept asection **, and return
- updated section in case of merged section.
- * elf-bfd.h (_bfd_elf_rela_local_sym): Update declaration.
- * elf-hppa.h (elf_hppa_relocate_section): Adjust call.
- * elf-m10200.c (mn10200_elf_relocate_section): Likewise.
- * elf-m10300.c (mn10300_elf_relocate_section): Likewise.
- * elf32-arm.h (elf32_arm_relocate_section): Likewise.
- * elf32-avr.c (elf32_avr_relocate_section): Likewise.
- * elf32-cris.c (cris_elf_relocate_section): Likewise.
- * elf32-fr30.c (fr30_elf_relocate_section): Likewise.
- * elf32-frv.c (elf32_frv_relocate_section): Likewise.
- * elf32-h8300.c (elf32_h8_relocate_section): Likewise.
- * elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
- * elf32-i370.c (i370_elf_relocate_section): Likewise.
- * elf32-i860.c (elf32_i860_relocate_section): Likewise.
- * elf32-m32r.c (m32r_elf_relocate_section): Likewise.
- * elf32-m68k.c (elf_m68k_relocate_section): Likewise.
- * elf32-mcore.c (mcore_elf_relocate_section): Likewise.
- * elf32-msp430.c (elf32_msp430_relocate_section): Likewise.
- * elf32-openrisc.c (openrisc_elf_relocate_section): Likewise.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-sh.c (sh_elf_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf32-v850.c (v850_elf_relocate_section) Likewise.
- * elf32-vax.c (elf_vax_relocate_section): Likewise.
- * elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise.
- * elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relocate_section): Likewise.
- * elf64-mmix.c (mmix_elf_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-sh64.c (sh_elf64_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
-
- * elf32-cris.c (cris_elf_relocate_section): Don't recalculate symbol
- section for reloc output.
- * elf32-i370.c (i370_elf_relocate_section): Likewise.
- * elf32-m68k.c (elf_m68k_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf32-vax.c (elf_vax_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
-
- * elf32-ppc.c (ppc_elf_relocate_section): Don't recalculate everything
- for R_PPC_RELAX32 reloc. Don't bother checking ppc_elf_install_value
- return value.
- * elf64-ppc.c (ppc64_elf_relocate_section <R_PPC64_TOC>): Sanity check
- sec->id.
-
-2003-11-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-d10v.c (extract_rel_addend, insert_rel_addend): New functions.
- (elf32_d10v_relocate_section): Use them to handle -r reloc
- adjustments, and in place of _bfd_elf_rela_local_sym.
-
- * cpu-iq2000.c (arch_info_struct): Warning fix.
-
-2003-11-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-hppa.c (ELIMINATE_COPY_RELOCS): Define.
- (elf32_hppa_copy_indirect_symbol): Don't copy NON_GOT_REF on
- weakdefs.
- (elf32_hppa_check_relocs): Use ELIMINATE_COPY_RELOCS.
- (elf32_hppa_adjust_dynamic_symbol): Likewise. Copy weakdef
- NON_GOT_REF.
- (allocate_dynrelocs): Use ELIMINATE_COPY_RELOCS and
- SYMBOL_CALLS_LOCAL. Discard relocs for undef weak syms with
- non-default visibility.
- (elf32_hppa_relocate_section): Use ELIMINATE_COPY_RELOCS and
- SYMBOL_CALLS_LOCAL.
-
-2003-11-04 Alan Modra <amodra@bigpond.net.au>
-
- * aout-target.h, aoutf1.h, bfdio.c, bfdwin.c: Update copyright date.
- * coff-apollo.c, coff-sparc.c, coff-w65.c, coff-we32k.c: Ditto.
- * coff-z8k.c, coffgen.c, cpu-frv.c, cpu-h8500.c, cpu-hppa.c: Ditto.
- * cpu-ia64-opc.c, cpu-m10300.c, cpu-mips.c, cpu-msp430.c: Ditto.
- * cpu-rs6000.c, cpu-z8k.c, efi-app-ia32.c, elf32-am33lin.c: Ditto.
- * gen-aout.c, hash.c, hp300hpux.c, init.c, mach-o.c: Ditto.
- * nlm-target.h, nlm.c, som.h, stabs.c, sysdep.h, xsym.h: Ditto.
-
- * elf-m10300.c (_bfd_mn10300_elf_create_got_section): Fix
- "dereferencing type-punned pointer" warnings.
-
- * aout-adobe.c (aout_adobe_set_section_contents): Constify location.
- * aoutx.h (NAME(aout,set_section_contents)): Ditto.
- * bfd-in2.h: Regenerate.
- * binary.c (binary_set_section_contents): Ditto.
- * bout.c (b_out_set_section_contents): Ditto.
- * coff-tic54x.c (tic54x_set_section_contents): Ditto.
- * coffcode.h (coff_set_section_contents): Ditto.
- * ecoff.c (_bfd_ecoff_set_section_contents): Ditto.
- * elf-bfd.h (_bfd_elf_set_section_contents): Ditto.
- * elf.c (_bfd_elf_set_section_contents): Ditto.
- * elfxx-mips.c (_bfd_mips_elf_set_section_contents): Ditto.
- * elfxx-mips.h (_bfd_mips_elf_set_section_contents): Ditto.
- * i386msdos.c (msdos_set_section_contents): Ditto.
- * ieee.c (ieee_set_section_contents): Ditto.
- * ihex.c (ihex_set_section_contents): Ditto.
- * libaout.h (NAME(aout,set_section_contents)): Ditto.
- * libbfd-in.h (_bfd_nowrite_set_section_contents): Ditto.
- (_bfd_generic_set_section_contents): Ditto.
- * libbfd.h: Regenerate.
- * libbfd.c (_bfd_generic_set_section_contents): Ditto.
- * libecoff.h (_bfd_ecoff_set_section_contents): Ditto.
- * libnlm.h (nlmNAME(set_section_contents)): Ditto.
- (struct nlm_backend_data <nlm_mangle_relocs>): Ditto.
- * mmo.c (mmo_set_section_contents): Ditto.
- * nlm32-alpha.c (nlm_alpha_mangle_relocs): Ditto.
- * nlm32-i386.c (nlm_i386_mangle_relocs): Ditto.
- * nlm32-ppc.c (nlm_powerpc_mangle_relocs): Ditto.
- * nlm32-sparc.c (nlm_sparc_mangle_relocs): Ditto.
- * nlmcode.h (nlm_set_section_contents): Ditto.
- * oasys.c (oasys_set_section_contents): Ditto.
- * pdp11.c (NAME(aout,set_section_contents)): Ditto.
- * ppcboot.c (ppcboot_set_section_contents): Ditto.
- * srec.c (srec_set_section_contents): Ditto.
- * targets.c (BFD_JUMP_TABLE_WRITE <_bfd_set_section_contents>): Ditto.
- * tekhex.c (tekhex_set_section_contents): Ditto.
- (move_section_contents): Ditto.
- * versados.c (versados_set_section_contents): Ditto.
- * vms-misc.c (_bfd_save_vms_section): Ditto.
- * vms.c (vms_set_section_contents): Ditto.
- * vms.h (_bfd_save_vms_section): Ditto.
-
-2003-11-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc_size_one_stub): Size relbrlt. Accept info arg
- rather than htab.
- (ppc64_elf_size_stubs): Adjust ppc_size_one_stub traversal. Zero
- relbrlt size.
- (ppc64_elf_build_stubs): Allocate space for relbrlt.
-
-2003-11-04 Alan Modra <amodra@bigpond.net.au>
-
- * bfd-in.h (_bfd_elf_tls_setup): Declare.
- * bfd-in2.h: Regenerate.
- * elf-bfd.h (struct elf_link_tls_segment): Delete.
- (struct elf_link_hash_table): Add tls_sec and tls_size.
- * elf.c (_bfd_elf_link_hash_table_init): Init tls_sec and tls_size.
- * elflink.c (_bfd_elf_tls_setup): New function.
- * elflink.h (struct elf_final_link_info): Remove first_tls_sec.
- (elf_bfd_final_link): Don't set first_tls_sec here. Update code
- saving tls segment info, round segment size up.
- (elf_link_output_extsym): Adjust code using tls segment info.
- (elf_link_input_bfd): Likewise.
- * elf32-i386.c (dtpoff_base, tpoff): Likewise.
- * elf32-s390.c (dtpoff_base, tpoff): Likewise.
- * elf32-sh.c (dtpoff_base, tpoff): Likewise.
- * elf32-sparc.c (dtpoff_base, tpoff): Likewise.
- * elf64-s390.c (dtpoff_base, tpoff): Likewise.
- * elf64-x86-64.c (dtpoff_base, tpoff): Likewise.
- * elfxx-ia64.c (elfNN_ia64_tprel_base): Likewise.
- (elfNN_ia64_dtprel_base): Likewise.
- * elf64-alpha.c (alpha_get_dtprel_base): Likewise.
- (alpha_get_tprel_base): Likewise.
- (struct alpha_relax_info): Remove tls_segment.
- (elf64_alpha_relax_got_load): Adjust invocation of
- alpha_get_dtprel_base and alpha_get_tprel_base.
- (elf64_alpha_relax_tls_get_addr): Likewise.
- (elf64_alpha_relax_section): Likewise.
- (elf64_alpha_relocate_section): Likewise.
- (elf64_alpha_relax_find_tls_segment): Delete.
- * elf32-ppc.c (struct ppc_elf_link_hash_table): Remove tls_sec.
- (ppc_elf_tls_setup): Call _bfd_elf_tls_setup. Return section.
- (ppc_elf_relocate_section): Adjust to use elf.tls_sec.
- * elf32-ppc.h (ppc_elf_tls_setup): Update.
- * elf64-ppc.c (struct ppc_link_hash_table): Remove tls_sec.
- (ppc64_elf_tls_setup): Call _bfd_elf_tls_setup. Return section.
- (ppc64_elf_tls_optimize): Adjust to use elf.tls_sec.
- (ppc64_elf_relocate_section): Likewise.
- * elf64-ppc.h (ppc64_elf_tls_setup): Update.
-
-2003-11-03 Daniel Jacobowitz <drow@mvista.com>
-
- * elf-bfd.h (struct elf_backend_data): Remove plt_header_size.
- * elf-m10300.c (elf_backend_plt_header_size): Don't define.
- * elf32-arm.h (elf_backend_plt_header_size): Don't define.
- * elf32-cris.c (elf_backend_plt_header_size): Don't define.
- * elf32-i386.c (elf_backend_plt_header_size): Don't define.
- * elf32-mips.c (elf_backend_plt_header_size): Don't define.
- * elf32-ppc.c (elf_backend_plt_header_size): Don't define.
- * elf32-s390.c (elf_backend_plt_header_size): Don't define.
- * elf32-sh.c (elf_backend_plt_header_size): Don't define.
- * elf32-sparc.c (elf_backend_plt_header_size): Don't define.
- * elf64-alpha.c (elf_backend_plt_header_size): Don't define.
- * elf64-hppa.c (elf_backend_plt_header_size): Don't define.
- * elf64-mips.c (elf_backend_plt_header_size): Don't define.
- * elf64-ppc.c (elf_backend_plt_header_size): Don't define.
- * elf64-s390.c (elf_backend_plt_header_size): Don't define.
- * elf64-sh64.c (elf_backend_plt_header_size): Don't define.
- * elf64-sparc.c (elf_backend_plt_header_size): Don't define.
- * elf64-x86-64.c (elf_backend_plt_header_size): Don't define.
- * elfn32-mips.c (elf_backend_plt_header_size): Don't define.
- * elfxx-ia64.c (elf_backend_plt_header_size): Don't define.
- * elfxx-target.h (elf_backend_plt_header_size): Don't define
- or include in target initializer.
-
-2003-11-03 Andrew Cagney <cagney@redhat.com>
-
- * section.c (bfd_set_section_contents): Make the "location" buffer
- constant.
- * bfd-in2.h: Re-generate.
-
-2003-10-30 Andrew Cagney <cagney@redhat.com>
-
- * syms.c: Replace "struct symbol_cache_entry" with "struct
- bfd_symbol".
- * vms.h, targets.c, section.c, reloc.c, peicode.h: Ditto.
- * mipsbsd.c, elf.c, linker.c, elf-bfd.h, ecoff.c: Ditto.
- * cpu-z8k.c, cpu-ns32k.c, cpu-h8500.c, bfd.c, bfd-in.h: Ditto.
- * bfd-in2.h: Re-generate.
-
-2003-10-30 Jakub Jelinek <jakub@redhat.com>
-
- * elfxx-ia64.c: Include objalloc.h, hashtab.h.
- (struct elfNN_ia64_local_hash_entry): Remove root. Add id and r_sym
- fields.
- (struct elfNN_ia64_local_hash_table): Remove.
- (struct elfNN_ia64_link_hash_table): Change loc_hash_table's type
- to htab_t. Add loc_hash_memory field.
- (elfNN_ia64_local_hash_table_init, elfNN_ia64_new_loc_hash_entry):
- Removed.
- (elfNN_ia64_local_htab_hash, elfNN_ia64_local_htab_eq): New
- functions.
- (elfNN_ia64_hash_table_create): Use hashtab.h hashtable for
- loc_hash_table. Initialize loc_hash_memory.
- (elfNN_ia64_hash_table_free): New function.
- (elfNN_ia64_local_hash_lookup): Remove.
- (elfNN_ia64_local_dyn_sym_thunk): Change into htab_traverse
- callback.
- (elfNN_ia64_dyn_sym_traverse): Use htab_traverse.
- (get_local_sym_hash): Use hashtab.h hashtable for loc_hash_table.
- (bfd_elfNN_bfd_link_hash_table_free): Define.
-
-2003-10-30 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.c (_bfd_elf_link_record_dynamic_symbol): Modify versioned
- symbol string in place.
-
-2003-10-30 Jim Blandy <jimb@redhat.com>
-
- * cpu-rs6000.c (rs6000_compatible): Check the correct arch_info
- object's mach field: all PowerPC machines are supersets of the
- original rs6000, but not later rs6000 machines.
-
-2003-10-30 Alan Modra <amodra@bigpond.net.au>
-
- * dwarf2.c (struct attribute): Delete "unsnd", "snd" and "addr".
- Add "val" and "sval" fields.
- (DW_STRING, DW_UNSND, DW_BLOCK, DW_SND, DW_ADDR): Delete.
- (read_attribute_value): Expand and adjust DW_* occurrences.
- (scan_unit_for_functions, parse_comp_unit): Likewise.
-
-2003-10-30 Phil Edwards <phil@codesourcery.com>
-
- * config.bfd (arm-*-vxworks): Remove separate stanza; merge with
- other common ELF triples.
- (i[3-7]86-*-vxworks): Change to ELF format.
- (mips*-*-windiss): New triple, add to common MIPS/ELF stanza.
- (sh-*-vxworks): New stanza.
-
-2003-10-30 Lars Knoll <lars@trolltech.com>
- Michael Matz <matz@suse.de>
- Jakub Jelinek <jakub@redhat.com>
- Alan Modra <amodra@bigpond.net.au>
-
- * merge.c (struct sec_merge_sec_info): Update comment.
- (struct sec_merge_hash_entry): Remove entsize.
- (sec_merge_hash_lookup): Only adjust alignment when creating.
- (sec_merge_emit): Remove register keyword.
- (cmplengthentry, last4_eq, last_eq): Delete.
- (strrevcmp, strrevcmp_align, is_suffix): New.
- (merge_strings): Use them to implement fast suffix merging.
- * elf-strtab.c (struct elf_strtab_hash_entry): Update comments.
- Make "len" signed.
- (_bfd_elf_strtab_add): Lose on >2G strings.
- (_bfd_elf_strtab_emit): Don't emit strings with len < 0.
- (cmplengthentry, last4_eq): Delete.
- (strrevcmp, is_suffix): New.
- (_bfd_elf_strtab_finalize): Rework to implement fast suffix merging.
-
-2003-10-29 Daniel Jacobowitz <drow@mvista.com>
-
- * elf32-arm.h (elf32_arm_final_link_relocate): Move check for
- SEC_ALLOC.
-
-2003-10-29 Philip Blundell <philb@gnu.org>
-
- * elf32-arm.h (elf32_arm_plt0_entry, elf32_arm_plt_entry): New
- code sequence.
- (PLT_HEADER_SIZE): New.
- (struct elf32_arm_pcrel_relocs_copied): Rename to ...
- (struct elf32_arm_relocs_copied): ... this. Count both
- pcrel and non-pcrel relocs. All uses updated.
- (struct elf32_arm_link_hash_table): Add pointers to dynamic linker
- sections and symbol/section mapping cache.
- (create_got_section): New.
- (elf32_arm_create_dynamic_sections): New.
- (elf_backend_create_dynamic_sections): Use it.
- (elf32_arm_final_link_relocate): Support garbage collection of relocs.
- (elf32_arm_check_relocs): Likewise.
- (elf32_arm_adjust_dynamic_symbol): Likewise.
- (elf32_arm_copy_indirect_symbol): New.
- (elf32_arm_link_hash_table_create): Initialise new fields.
- (elf32_arm_gc_sweep_hook): Implement.
- (elf32_arm_discard_copies): Delete.
- (elf32_arm_finish_dynamic_symbol): Use new PLT code.
- (elf32_arm_finish_dynamic_sections): Likewise.
- (elf_backend_can_refcount): Define.
- (elf_backend_copy_indirect_symbol): Likewise.
- (elf_backend_plt_header_size): Set to PLT_HEADER_SIZE.
-
-2003-10-29 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (elf_backend_grok_prstatus): Define.
- (elf_backend_grok_psinfo): Define.
- (ppc64_elf_grok_prstatus, ppc64_elf_grok_psinfo): New functions.
-
- * elf.c (_bfd_elfcore_make_pseudosection): Allow multiple
- sections with the same name.
- (elfcore_grok_lwpstatus): Likewise.
- (elfcore_grok_win32pstatus): Likewise.
- (elfcore_grok_note): Likewise.
- (elfcore_grok_nto_status): Likewise.
- (elfcore_grok_nto_gregs): Likewise.
-
-2003-10-27 Daniel Jacobowitz <drow@mvista.com>
-
- * elf32-arm.h (elf32_arm_merge_private_bfd_data): Never skip dynamic
- objects.
-
-2003-10-14 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (mips_elf_create_got_section): Initialize global_gotno.
-
-2003-10-24 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Look up
- hash table for real symbols.
-
-2003-10-23 Michael Snyder <msnyder@redhat.com>
-
- * section.c (asection): Fix typo in comment.
-
-2003-10-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (get_tls_mask): Add toc_symndx param, save toc
- reloc symbol index to it. Don't allow gd syms in shared libs
- to be optimized.
- (ppc64_elf_tls_optimize): Adjust get_tls_mask call.
- (ppc64_elf_size_stubs): Likewise.
- (ppc64_elf_relocate_section): Check that tls relocs are only used
- with tls syms, and similarly for non-tls. Correct symbol used
- when optimizing toc tls code.
-
-2003-10-22 Nick Clifton <nickc@redhat.com>
-
- * peicode.h (coff_swap_scnhdr_in): Only remove padding when
- processing an executable.
-
-2003-10-22 Jakub Jelinek <jakub@redhat.com>
-
- * elflink.c (_bfd_elf_export_symbol): Adjust for globals and locals
- field changes.
- (_bfd_elf_link_assign_sym_version): Likewise.
- * elflink.h (size_dynamic_sections): Likewise.
-
-2003-10-21 Alexandre Oliva <aoliva@redhat.com>,
- Michael Snyder <msnyder@redhat.com>
-
- * archures.c (bfd_mach_sh4a, bfd_mach_sh4al_dsp, bfd_mach_sh4_nofpu,
- bfd_mach_sh4a_nofpu): New machine types.
- * bfd-in2.h: Rebuilt.
- * cpu-sh.c (compatible): Remove unused function.
- (SH4A_NEXT, SH4AL_DSP_NEXT, SH4_NOFPU_NEXT, SH4A_NOFPU_NEXT): New.
- (arch_info_struct): Add sh4a, sh4al_dsp, sh4-nofpu and sh4a-nofpu.
- * elf32-sh.c (sh_elf_set_mach_from_flags): Handle them.
-
-2003-10-21 Wouter van Heyst <wouter@vidicode.nl>
-
- * elf32-arm.h (elf32_arm_merge_private_bfd_data): Correct text
- describing mismatched formats involving the Maverick FP type.
-
-2003-10-21 Anil Paranjpe <anilp1@KPITCummins.com>
-
- * binary.c (binary_object_p): Pass machine flag along with
- architecture.
-
-2003-10-21 Thorsten Brehm <brehm@gmx.net>
-
- * archures.c (bfd_default_scan): Add support for mcf528x.
- * ieee.c (ieee_write_processor): Likewise.
-
-2003-10-21 Peter Barada <pbarada@mail.wm.sps.mot.com>
- Bernardo Innocenti <bernie@develer.com>
-
- * archures.c: Add MCF528x (MCFv4) support.
- * bfd/cpu-m68k.c (arch_info_struct): Likewise.
- * bfd-in2.h: Regenerate.
-
-2003-10-20 Andrew Cagney <cagney@redhat.com>
-
- * targets.c: Replace "struct sec" with "struct bfd_section"
- * syms.c, sparclynx.c, section.c, opncls.c: Ditto.
- * libcoff-in.h, libbfd-in.h, elfxx-target.h: Ditto.
- * elf.c, coffgen.c, bfd.c, bfd-in.h, aoutf1.h: Ditto.
- * aout-tic30.c, aout-target.h:
- * bfd-in2.h, libcoff.h, libbfd.h: Regenerate.
-
-2003-10-18 Hans-Peter Nilsson <hp@bitrange.com>
-
- Support linker relaxation of new R_MMIX_PUSHJ_STUBBABLE relocs.
- * elf64-mmix.c (MAX_PUSHJ_STUB_SIZE): New macro.
- (struct _mmix_elf_section_data): New member pjs.
- (mmix_set_relaxable_size, mmix_elf_get_section_contents): New
- functions.
- (elf_mmix_howto_table): New entry for R_MMIX_PUSHJ_STUBBABLE.
- (mmix_reloc_map): Ditto.
- (mmix_elf_relocate_section): Handle R_MMIX_PUSHJ_STUBBABLE.
- (mmix_final_link_relocate, mmix_elf_check_common_relocs): Ditto.
- (mmix_elf_perform_relocation): Ditto. Don't mark parameter addr
- unused.
- (mmix_elf_check_relocs): Move early return to after
- mmix_elf_check_common_relocs call.
- (mmix_elf_symbol_processing): Fix cut-and-pasto in head comment.
- (_bfd_mmix_before_linker_allocation): Rename from
- _bfd_mmix_prepare_linker_allocated_gregs. All referers changed.
- Arrange to set the initial relaxable size of sections.
- (_bfd_mmix_after_linker_allocation): Rename from
- _bfd_mmix_finalize_linker_allocated_gregs.
- (mmix_elf_relax_section): Relax a R_MMIX_PUSHJ_STUBBABLE reloc.
- (bfd_elf64_get_section_contents): Define.
- * reloc.c: Add ENUMX for BFD_RELOC_MMIX_PUSHJ_STUBBABLE.
- * libbfd.h, bfd-in2.h: Regenerate.
-
- * reloc.c (bfd_generic_relax_section): Default-set
- section->_cooked_size here.
- (bfd_generic_get_relocated_section_contents): Don't set it here.
- Explain why.
-
-2003-10-17 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- * elf32-hppa.c (elf32_hppa_relocate_section): Skip relocation if
- output section has been discarded.
-
-2003-10-17 Shrinivas Atre <shrinivasa@KPITCummins.com>
-
- * coff-h8300.c (funcvec_hash_newfunc): Handle normal mode.
- (h8300_reloc16_extra_cases): Likewise.
- (h8300_bfd_link_add_symbols): Likewise.
-
-2003-10-17 Dhananjay Deshpande <dhananjayd@kpitcummins.com>
-
- * cpu-h8300.c (h8300sxn_info_struct): Correct address size.
- (h8300sn_info_struct): Likewise.
- (h8300hn_info_struct): Likewise.
-
-2003-10-16 Pavel Roskin <proski@gnu.org>
-
- * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Don't calculate image size
- for sections which lack size info.
-
-2003-10-17 Danny Smith <dannysmith@users.sourceforge.net>
-
- * configure.host: Add __USE_MINGW_FSEEK to HDEFINES for
- mingw32.
-
-2003-10-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Also warn
- undefined patterns with '*'.
-
-2003-10-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't
- use the last CIE from a different section.
- (_bfd_elf_write_section_eh_frame): Don't pad beyond the raw
- size of the output section.
-
-2003-10-07 Roland McGrath <roland@redhat.com>
-
- * elf.c (_bfd_elf_make_section_from_phdr): Set alignment_power of
- new section from p_align header field.
-
-2003-10-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf32-xtensa.c (xtensa_read_table_entries): The external size
- of entry is 8 bytes.
-
-2003-10-15 Andrew Cagney <cagney@redhat.com>
-
- * targets.c (BFD_JUMP_TABLE_SYMBOLS): Replace NAME##_get_symtab
- with NAME##_canonicalize_symtab.
- * libcoff-in.h (coff_canonicalize_symtab): Update.
- * xsym.h (bfd_sym_canonicalize_symtab): Update.
- * elf-bfd.h (_bfd_elf_canonicalize_symtab): Update.
- * coffgen.c (coff_canonicalize_symtab): Update.
- * libbfd-in.h (_bfd_nosymbols_canonicalize_symtab): Update.
- * libnlm.h (nlmNAME(canonicalize_symtab)): Update.
- * ieee.c (ieee_vec): Update comment.
- * libecoff.h (_bfd_ecoff_canonicalize_symtab): Update.
- * mmo.c (mmo_canonicalize_symtab): Update.
- * nlm-target.h (nlm_canonicalize_symtab): Update.
- * nlmcode.h (nlm_canonicalize_symtab): Update.
- * i386msdos.c (msdos_canonicalize_symtab): Update.
- * hp300hpux.c (MY (canonicalize_symtab)): Update.
- * oasys.c (oasys_canonicalize_symtab): Update.
- * som.c (som_canonicalize_symtab): Update.
- * pef.c (bfd_pef_canonicalize_symtab): Update.
- * nlmcode.h (nlm_canonicalize_symtab): Update.
- * xsym.c (bfd_sym_canonicalize_symtab): Update.
- * vms.c (vms_canonicalize_symtab): Update.
- * versados.c (versados_canonicalize_symtab): Update.
- * mach-o.c (bfd_mach_o_canonicalize_symtab): Update.
- * ieee.c (ieee_canonicalize_symtab): Update.
- * pdp11.c (NAME(aout,canonicalize_symtab)): Update.
- * reloc.c: Update comment.
- * libaout.h (NAME(aout,canonicalize_symtab)): Update.
- * coff64-rs6000.c (aix5coff64_vec): Update.
- * coff64-rs6000.c (bfd_xcoff_aix5_backend_data): Update.
- * coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Update.
- * aoutx.h (NAME(aout,canonicalize_symtab)): Update.
- * elfxx-target.h (bfd_elfNN_canonicalize_symtab): Update.
- * hp300hpux.c (MY_canonicalize_symtab): Update.
- * ecoff.c (_bfd_ecoff_canonicalize_symtab): Update.
- * aout-tic30.c (MY_canonicalize_symtab): Update.
- * aout-target.h (MY_canonicalize_symtab): Update.
- * ppcboot.c (ppcboot_canonicalize_symtab): Update.
- * elf.c (_bfd_elf_canonicalize_symtab): Update.
- * elfcode.h (elf_canonicalize_symtab): Update.
- * ihex.c (ihex_canonicalize_symtab): Update.
- * tekhex.c (tekhex_canonicalize_symtab): Update.
- * binary.c (binary_canonicalize_symtab): Update.
- * srec.c (srec_canonicalize_symtab): Update.
-
-2003-10-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * elf32-h8300.c (elf_reloc_map): Fix a comment typo.
-
-2003-10-15 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_relocate_section): Handle R_SH_IMM_*_PCREL
- relocations.
- (sh_elf_check_relocs): Likewise.
-
- * elf32-sh64.c (elf_backend_merge_symbol_attribute): Define.
- (sh64_elf_merge_symbol_attribute): New.
- * elf64-sh64.c (elf_backend_merge_symbol_attribute): Define.
- (sh64_elf64_merge_symbol_attribute): New.
-
-2003-10-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf-bfd.h (struct elf_backend_data): New function pointer member
- elf_backend_merge_symbol_attribute.
- * elflink.h (elf_link_add_object_symbols): Adjust call to
- elf_backend_merge_symbol_attribute if the backend defined it.
- * elfxx-target.h (elf_backend_merge_symbol_attribute): New macro.
- (elfNN_bed): Add that to the initializer.
-
-2003-10-14 Bob Wilson <bob.wilson@acm.org>
-
- * elf32-xtensa.c (get_is_linkonce_section): Delete.
- (xtensa_is_property_section, xtensa_is_littable_section): Use
- XTENSA_INSN_SEC_NAME and XTENSA_LIT_SEC_NAME macros. Do not recognize
- linkonce sections containing ".xt.insn" and ".xt.lit" substrings.
- (xtensa_get_property_section_name): Check section name instead of
- calling get_is_linkonce_section. Remove unused bfd parameter. Use
- XTENSA_INSN_SEC_NAME and XTENSA_LIT_SEC_NAME macros. Never generate
- linkonce section names by appending ".xt.insn" or ".xt.lit".
- (xtensa_read_table_entries): Remove bfd argument in call to
- xtensa_get_property_section_name. Free section name when done.
- (elf_xtensa_combine_prop_entries): Free leaking table.
-
-2003-10-13 Richard Sandiford <rsandifo@redht.com>
-
- * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Don't add
- DT_MIPS_LIBLIST or DT_MIPS_CONFLICT entries.
- (_bfd_mips_elf_finish_dynamic_symbol): Don't handle them. Don't
- handle DT_MIPS_MSYM. Set DT_RELSZ based on the number of relocations
- that were needed.
- (_bfd_mips_elf_modify_segment_map): Fix placement of PT_MIPS_OPTIONS.
- (_bfd_mips_elf_merge_private_bfd_data): Ignore EF_MIPS_UCODE.
-
-2003-10-13 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfd-in.h (bfd_elf32_ia64_after_parse): New prototype.
- (bfd_elf64_ia64_after_parse): Likewise.
- * bfd-in2.h: Regenerated.
-
- * elfxx-ia64.c (oor_ip): New.
- (oor_branch_size): Likewise.
- (bfd_elfNN_ia64_after_parse): Likewise.
- (elfNN_ia64_relax_section): Use oor_ip if oor_branch_size
- equals sizeof (oor_ip).
-
-2003-10-12 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf64-sh64.c (sh_elf64_relocate_section): Tidy up for the
- renumbering of some relocation numbers.
-
-2003-10-11 Alan Modra <amodra@bigpond.net.au>
-
- * coff-sh.c: Move definition of MAP and guard more code with
- COFF_IMAGE_WITH_PE.
-
- * section.c (bfd_get_section_size_before_reloc): Ignore reloc_done.
- * bfd-in2.h: Regenerate.
-
-2003-10-10 H.J. Lu <hongjiu.lu@intel.com>
-
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
- * doc/Makefile.in: Likewise.
-
-2003-10-09 H.J. Lu <hongjiu.lu@intel.com>
-
- * cofflink.c: Include "safe-ctype.h".
- (coff_link_add_symbols): Use ISDIGIT instead of isdigit.
-
-2003-10-08 Dave Brolley <brolley@redhat.com>
- On behalf of Michael Snyder <msnyder@redhat.com>
-
- * archures.c: Add FRV fr550 machine.
- * cpu-frv.c: Ditto.
- * elf32-frv.c: Ditto.
- * bfd-in2.h: Regenerate.
-
-2003-10-08 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (STUB_MOVE,STUB_LI16): Fix stub code
- for non-SGI N64 ABI. Improve code consitency.
-
-2003-10-07 Alexandre Oliva <aoliva@redhat.com>
-
- * elf32-frv.c (elf32_frv_howto_table): Set R_FRV_LABEL16's
- rightshift to 2.
-
-2003-10-07 Nathan Sidwell <nathan@codesourcery.com>
-
- * libbfd-in.h (_bfd_link_section_stabs): Add string offset
- parameter.
- * cofflink.c (coff_link_add_symbols): Deal with split stab
- sections.
- * elflink.h (elf_link_add_object_symbols): Deal with split stab
- sections.
- * stabs.c (_bfd_link_section_stabs): Add string offset parameter.
- * libbfd.h: Regenerated.
-
- * coffcode.h (coff_set_alignment_hook): With PE_COFF reloc
- overflow, set reloc start position to after the count
- reloc. Subtract one from num relocs. Give error on 0xffff relocs
- and no overflow.
- * cofflink.c (_bfd_coff_final_link): Deal with PE_COFF reloc
- overflow.
- * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Do overflow if >=
- 0xffff.
-
-2003-10-06 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Pad the
- last CIE/FDE if needed.
-
-2003-10-06 Nick Clifton <nickc@redhat.com>
-
- * targets.c (_bfd_target_vector): Include bfd_elf64_sparc_vec if
- BFD64 is enabled.
-
-2003-10-06 Matt Thomas <matt@3am-software.com>
-
- * config.bfd: Move the hppa*-*-netbsd* case to the hppa*-*-linux* case.
-
-2003-10-06 Robert Millan <robertmh@gnu.org>
-
- * configure.in: Match GNU/KNetBSD with new knetbsd*-gnu triplet.
- * config.bfd: Likewise.
- * configure: Regenerate.
-
-2003-10-04 Christian Groessler <chris@groessler.org>
-
- * coff-z8k.c (extra_case): Fix displacement length check for R_JR
- and R_CALLR.
-
-2003-10-04 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc1x.c: Update to ISO C90; replace PTR with void*.
- * elf32-m68hc11.c: Likewise.
- * elf32-m68hc12.c: Likewise.
- * elf32-m68hc1x.h: Likewise.
-
-2003-10-04 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc1x.c (_bfd_m68hc11_elf_merge_private_bfd_data): Fix merge
- of flags between HC12 and HCS12.
-
-2003-10-04 Bryce McKinlay <bryce@mckinlay.net.nz>
-
- * merge.c (_bfd_merge_sections): Set SEC_EXCLUDE flag on sections
- which become empty after merging.
-
-2003-09-30 Jakub Jelinek <jakub@redhat.com>
-
- * elfxx-ia64.c (ia64_howto_table): Fix size of R_IA64_TPREL64[LM]SB,
- R_IA64_DTPREL{32,64}[LM]SB and R_IA64_DTPMOD64[LM]SB.
-
-2003-09-30 Chris Demetriou <cgd@broadcom.com>
-
- * archures.c (bfd_mach_mipsisa64r2): New define.
- * bfd-in2.h: Regenerate.
- * aoutx.h (NAME(aout,machine_type)): Handle bfd_mach_mipsisa64r2.
- * cpu-mips.c (I_mipsisa64r2): New enum value.
- (arch_info_struct): Add entry for I_mipsisa64r2.
- * elfxx-mips.c (_bfd_elf_mips_mach)
- (_bfd_mips_elf_print_private_bfd_data): Handle E_MIPS_ARCH_64R2.
- (mips_set_isa_flags): Add bfd_mach_mipsisa64r2 case.
- (mips_mach_extensions): Add entry for bfd_mach_mipsisa64r2.
-
-2003-09-29 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (elfNN_hpux_backend_symbol_processing): New.
- Handle SHN_IA_64_ANSI_COMMON.
- (elf_backend_section_from_bfd_section): Defined.
-
-2003-09-26 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.c (elf_link_read_relocs_from_section): Add an argument
- of a pointer to section. Check bad symbol index.
- (_bfd_elf_link_read_relocs): Modify calls to
- elf_link_read_relocs_from_section.
-
-2003-09-23 DJ Delorie <dj@redhat.com>
-
- * elf32-sh.c (sh_elf_howto_table): R_SH_SWITCH8,
- R_SH_GNU_VTINHERIT, R_SH_GNU_VTENTRY,
- R_SH_LOOP_START,R_SH_LOOP_END moved to "reserved" spaces,
- R_SH_DIR16, R_SH_DIR8, R_SH_DIR8UL, R_SH_DIR8UW, R_SH_DIR8U,
- R_SH_DIR8SW, R_SH_DIR8S, R_SH_DIR4UL, R_SH_DIR4UW, R_SH_DIR4U,
- R_SH_PSHA, R_SH_PSHL added.
- (sh_reloc_map): Add R_SH_DIR16 and R_SH_DIR8.
- (sh_elf_relocate_section): Support new relocs.
-
-2003-09-23 Bob Wilson <bob.wilson@acm.org>
-
- * elf32-xtensa.c (elf_xtensa_relocate_section): Fix typo that clobbered
- dynamic relocation offsets.
-
-2003-09-23 Alan Modra <amodra@bigpond.net.au>
-
- * simple.c (bfd_simple_get_relocated_section_contents): Free the
- hash table using _bfd_generic_link_hash_table_free.
-
-2003-09-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct bfd_elf_special_section): Remove "suffix". Change
- type of prefix_length and suffix_length to int. Rename "attributes"
- to "attr". Comment.
- (_bfd_elf_get_sec_type_attr): Update prototype.
- * elf.c (get_special_section): Rewrite.
- (_bfd_elf_get_sec_type_attr): Return struct rather than passing in
- attr and type pointers.
- (_bfd_elf_new_section_hook): Adjust for above.
- (special_sections): Merge suffix with prefix. Set
- prefix_length for all entries. Set suffix_length appropriately.
- * elf32-m32r.c (m32r_elf_special_sections): Likewise.
- * elf32-m68hc11.c (elf32_m68hc11_special_sections): Likewise.
- * elf32-m68hc12.c (elf32_m68hc12_special_sections): Likewise.
- * elf32-mcore.c (mcore_elf_special_sections): Likewise.
- * elf32-sh64.c (sh64_elf_special_sections): Likewise.
- * elf32-v850.c (v850_elf_special_sections): Likewise.
- * elf32-xtensa.c (elf_xtensa_special_sections): Likewise.
- * elf64-alpha.c (elf64_alpha_special_sections): Likewise.
- * elf64-hppa.c (elf64_hppa_special_sections): Likewise.
- * elf64-ppc.c (ppc64_elf_special_sections): Likewise.
- * elf64-sh64.c (sh64_elf64_special_sections): Likewise.
- * elfxx-ia64.c (elfNN_ia64_special_sections): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_special_sections): Likewise.
- * elf32-ppc.c (ppc_elf_special_sections): Likewise. Fix .plt flags.
-
-2003-09-21 Daniel Jacobowitz <drow@mvista.com>
-
- * elf64-alpha.c (elf64_alpha_create_got_section): Initialize
- ->got if the section already exists.
-
-2003-09-19 Nathan Sidwell <nathan@codesourcery.com>
-
- * dwarf2.c (decode_line_info): Cope with an initially empty
- filename table.
-
-2003-09-18 H.J. Lu <hongjiu.lu@intel.com>
-
- * acinclude.m4: Include ../config/accross.m4.
- * aclocal.m4: Regenerated.
-
- * configure.host (HOST_64BIT_TYPE): Remove if it is set to long
- or long long.
- (HOST_U_64BIT_TYPE): Remove if it is set to unsigned long long.
- (host64): Remove if HOST_64BIT_TYPE is set to long.
-
- * configure.in (HOST_64BIT_TYPE): Set according to the size of
- long and long long.
- (HOST_U_64BIT_TYPE): Likewise.
- (host64): Likewise.
- * configure: Regenerated.
-
-2003-09-19 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (elfcore_write_note): Don't use sizeof(Elf_External_note)
- since some ABIs round up the size of the struct.
-
-2003-09-18 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.c (_bfd_elf_merge_symbol): Allow type change if
- the old symbol is undefined and the new symbol is defined.
-
-2003-09-18 Andreas Schwab <schwab@suse.de>
-
- * simple.c (bfd_simple_get_relocated_section_contents): Use
- _bfd_generic_link_hash_table_create instead of
- bfd_link_hash_table_create.
-
-2003-09-10 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (elfNN_ia64_special_sections): Mark all sections
- started with ".sbss" or "".sdata" as SHF_IA_64_SHORT.
-
-2003-09-10 John David Anglin <dave.anglin@nrc-cnrc.nrc.ca>
- Randolph Chung <randolph@tausq.org>
-
- * elf32-hppa.c (struct elf32_hppa_link_hash_entry,
- hppa_link_hash_newfunc, hppa_build_one_stub,
- elf32_hppa_adjust_dynamic_symbol, mark_PIC_calls, allocate_plt_static,
- allocate_dynrelocs, elf32_hppa_size_dynamic_sections,
- elf32_hppa_finish_dynamic_symbol): Remove pic_call field and all code
- for generating import stubs for calls to statically linked PIC
- functions.
- (hppa_type_of_stub): Don't generate an import stub for calls to
- statically linked pic functions. Generate import stubs for calls
- in a shared object, to functions not in a regular file, and to
- defined weak functions. Add new argument INFO.
- (hppa_build_one_stub): Don't undef ADDIL_DP.
- (elf32_hppa_check_relocs): Don't set SEC_HAS_GOT_REF flag.
- (elf32_hppa_size_stubs): Pass info to hppa_type_of_stub.
- (final_link_relocate): Change all DLTIND relocs to DPREL relocs in a
- non-shared link. Convert instructions that use the the linkage table
- pointer, or a facsimile thereof, to use the global data pointer when
- the reloc has been changed.
-
-2003-09-08 Joel Brobecker <brobecker@gnat.com>
-
- * archures.c: Add new machine names for hppa.
- * bfd-in2.h: Regenerate.
- * cpu-hppa.c: Use the new machine names.
-
-2003-09-06 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc1x.h (struct m68hc11_elf_link_hash_table): Remove
- all_local_syms member.
- * elf32-m68hc1x.c (elf32_m68hc11_size_stubs): Use bfd_elf_get_elf_syms
- to get the local symbols.
-
-2003-09-06 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc12.c (elf32_m68hc12_special_sections): New for hc11.
- (elf_backend_special_sections): Define.a
-
- PR savannah/4950:
- * elf32-m68hc11.c (elf32_m68hc11_special_sections): The .vectors
- section is read-only.
-
-2003-09-04 Nick Clifton <nickc@redhat.com>
-
- * archures.c (bfd_mach_v850e1): Define.
- * bfd-in2.h: Regenerate.
- * cpu-v850.h (scan): Accept bfd_mach_v850e1.
- (arch_info_struct): Include an entry for bfd_mach_v850e1.
- * elf32-v850.c (v850_elf_object_p): Accept E_V850E1_ARCH flag.
- (v850_elf_final_write_processing): Accept bfd_mach_v850e1.
- (v850_elf_print_private_bfd_data): Interpret E_V850E1_ARCH flag.
- (v850_elf_merge_private_bfd_data): Allow v850e1 binaries to be
- linked with v850e binaries. Mark the output as v850e.
-
-2003-09-03 Nick Clifton <nickc@redhat.com>
-
- * cofflink.c (_bfd_coff_link_input_bfd): Do not skip section
- symbols that are used in relocs.
-
-2003-08-30 Robert Millan <robertmh@gnu.org>
-
- * configure.in: Match GNU/KFreeBSD with new kfreebsd*-gnu triplet.
- * config.bfd: Likewise.
- * configure: Regenerate.
-
-2003-08-31 Christian Groessler <chris@groessler.org>
-
- * elf32-i860.c (i860_howto_pc26_reloc): Finish relocation here
- instead of returning bfd_reloc_continue.
-
-2003-08-31 Andreas Jaeger <aj@suse.de>
-
- * merge.c: Update to ISO C90.
-
-2003-08-27 Ian Lance Taylor <ian@airs.com>
-
- * configure.in: Check for strtoull.
- * bfd.c (bfd_scan_vma): Use strtoull when available.
- * configure, config.in: Regenerate.
-
- * configure.in: Define and substitute BFD_HOST_LONG_LONG.
- * bfd-in.h: Define BFD_HOST_LONG_LONG. Test it rather than
- __GNUC__ when deciding whether to use long long for
- BFD_HOST_64_BIT.
- * configure, Makefile.in, doc/Makefile.in, bfd-in2.h: Regenerate.
-
-2003-08-27 Christian Groessler <chris@groessler.org>
-
- * elf32-i860.c (i860_howto_pc26_reloc, i860_howto_pc16_reloc,
- i860_howto_splitn_reloc, i860_howto_highadj_reloc): New
- functions.
- (elf32_i860_howto_table): Insert the new functions as
- 'special_function's in the proper reloc type entries.
-
-2003-08-27 Richard Sandiford <rsandifo@redhat.com>
-
- * elf32-frv.c (elf32_frv_relocate_section): Use
- _bfd_elf_rela_local_sym.
-
-2003-08-26 Michael Snyder <msnyder@redhat.com>
-
- * cpu-frv.c: Remove unused enum.
-
-2003-08-25 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * reloc.c: Fix documentation for MIPS ELF relocations.
- libbfd.h: Regenerate.
- bfd-in2.h: Regenerate.
-
-2003-08-24 Jason Eckhardt <jle@rice.edu>
-
- * coff-i860.c (CALC_ADDEND): Define to be a no-op.
-
-2003-08-24 Jason Eckhardt <jle@rice.edu>
-
- * elf32-i860.c (elf32_i860_relocate_pc16): Subtract 4 and
- shift by 2 before storing the relocated value.
-
-2003-08-23 Jason Eckhardt <jle@rice.edu>
-
- * coff-i860.c (coff_i860_reloc_nyi): New function.
- (howto_table): Add entries for relocations PAIR, HIGHADJ, HIGH,
- LOWn, SPLITn, and BRADDR.
- (RTYPE2HOWTO): Check that the r_type is within the howto_table
- before trying to access the entry.
- (coff_i860_rtype_to_howto): Likewise.
- (coff_i860_reloc_type_lookup): New function.
- (i860_reloc_processing): New function.
- (coff_bfd_reloc_type_lookup): Define macro.
- (RELOC_PROCESSING): Define macro.
- Minor formatting adjustments.
-
-2003-08-23 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_add_object_symbols): Don't crash on NULL owner.
-
-2003-08-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (elfNN_ia64_create_dynamic_sections): Align the
- .got section at 8 bytes.
-
-2003-08-21 Nick Clifton <nickc@redhat.com>
-
- * cofflink.c: Update to ISO C90 and tidy up formatting.
-
-2003-08-21 Randolph Chung <tausq@debian.org>
-
- * elf32-hppa.c (elf32_hppa_object_p): For elf32-hppa-linux, objects
- can have OSABI=Linux or OSABI=SysV. Check for both.
- * elf64-hppa.c (elf64_hppa_object_p): Likewise.
-
-2003-08-21 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated Swedish translation.
-
-2003-08-20 Richard Sandiford <rsandifo@redhat.com>
-
- * elf64-mips.c (elf_backend_copy_indirect_symbol): Define.
-
-2003-08-20 Nick Clifton <nickc@redhat.com>
-
- * elf-bfd.h (RELOC_FOR_GLOBAL_SYMBOL): New macro used to
- replace some duplicated code in most elfxx-xxxx.c files. This
- version uses the new fields in bfd_link_info.
-
- * elf-m10300.c (mn10300_elf_relocate_section): Use new macro.
- * elf32-arm.h (elf32_arm_relocate_section): Likewise.
- * elf32-cris.c (cris_elf_relocate_section): Likewise.
- * elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
- * elf32-i386.c (elf_i386_relocate_section): Likewise.
- * elf32-ip2k.c (ip2k_elf_relocate_section): Likewise.
- * elf32-iq2000.c (iq2000_elf_relocate_section): Likewise.
- * elf32-m68k.c (elf_m68k_relocate_section): Likewise.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf32-vax.c (elf_vax_relocate_section): Likewise.
- * elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
-
- * elf-hppa.h (elf_hppa_unmark_useless_dynamic_symbols,
- elf_hppa_remark_useless_dynamic_symbols,
- elf_hppa_relocate_section): Use the new fields in
- bfd_link_info structure.
- * elf32-sh.c (sh_elf_relocate_section): Likewise.
- * elf64-alpha.c (elf64_alpha_check_relocs): Likewise.
- * elf64-hppa.c (elf64_hppa_check_relocs): Likewise.
- * elf64-sh64.c (sh_elf64_relocate_section): Likewise.
- * elfxx-ia64.c (elfNN_ia64_check_relocs): Likewise.
- * elfxx-mips.c (mips_elf_calculate_relocation): Likewise.
-
- * elflink.h (elf_link_output_extsym): Fix test for reporting
- undefined symbols in shared libraries. Remove redundant test
- of shlib_undefined when reporting references to forced local
- symbols.
-
-2003-08-18 Andreas Schwab <schwab@suse.de>
-
- * libpei.h (bfd_pe_executable_p): Also recognize efi-app
- executables.
-
-2003-08-17 Hans-Peter Nilsson <hp@bitrange.com>
-
- * simple.c (bfd_simple_get_relocated_section_contents): Move
- reloc_done hack to before first bfd_section_size call. Change all
- returns to use new wrapper macro RETURN, restoring sec->reloc_done.
-
-2003-08-16 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c: Don't include elf/ppc.h.
-
-2003-08-14 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Fix PT_DYNAMIC
- code to work with 64-bit bfds.
-
-2003-08-14 Alan Modra <amodra@bigpond.net.au>
-
- * dep-in.sed: Remove libintl.h.
- * Makefile.am (SRC-POTFILES.in, BLD-POTFILES.in): Unset LC_COLLATE.
- (POTFILES.in): Remove target.
- * Makefile.in: Regenerate.
-
-2003-08-12 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_next_input_section): Update comment.
- (ppc64_elf_relocate_section): For zero sym R_PPC64_TOC relocs,
- use the function sym from the previous reloc.
-
-2003-08-11 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-i386.c (elf_i386_relocate_section): Make undefined symbols
- fatal if -pie.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
- (ppc_elf_relocate_section) <case R_PPC_RELAX32>: Issue fatal error
- on undefined symbols if -pie.
- * elf32-sh.c (sh_elf_relocate_section): Likewise.
-
-2003-08-11 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Add special case for crt1.o
- branch to __libc_start_main.
-
-2003-08-08 Dmitry Diky <diwil@mail.ru>
-
- * archures.c: Add xW42 and xE42 parts. Sort MPU list according to
- gcc order.
- * cpu-msp430.c: Likewise.
- * elf32-msp430.c: Likewise.
- * bfd-in2.h: Regenerate.
-
-2003-08-07 Alan Modra <amodra@bigpond.net.au>
-
- * elfxx-target.h: Remove PTR cast.
- * targets.c (bfd_target): Make backend_data const void *.
- * elf-bfd.h: Constify all occurrences of struct elf_backend_data.
- * elf-m10300.c: Likewise.
- * elf.c: Likewise.
- * elf32-hppa.c: Likewise.
- * elf32-i386.c: Likewise.
- * elf32-m68hc1x.c: Likewise.
- * elf32-ppc.c: Likewise.
- * elf32-s390.c: Likewise.
- * elf32-sh.c: Likewise.
- * elf32-sh64.c: Likewise.
- * elf32-sparc.c: Likewise.
- * elf32-xtensa.c: Likewise.
- * elf64-mips.c: Likewise.
- * elf64-ppc.c: Likewise.
- * elf64-s390.c: Likewise.
- * elf64-sh64.c: Likewise.
- * elf64-sparc.c: Likewise.
- * elf64-x86-64.c: Likewise.
- * elfcode.h: Likewise.
- * elfcore.h: Likewise.
- * elflink.c: Likewise.
- * elflink.h: Likewise.
- * elfxx-ia64.c: Likewise.
- * elfxx-mips.c: Likewise.
- * elfxx-mips.h: Likewise.
- * elf.c (prep_headers): Remove useless check for null backend_data.
- * bfd-in2.h: Regenerate.
-
- * elf-bfd.h: Remove PARAMS macro. Replace PTR with void *.
- (NAME): Use ## rather than CONCAT4 macro.
- * elfcode.h: Remove one remaining PARAMS macro.
- * elf-eh-frame.c: Convert to C90, remove unneeded casts and prototypes.
- * elf-strtab.c: Likewise.
- * elf-hppa.h: Likewise.
- * elf32-hppa.h: Likewise.
- * elf32-hppa.c: Likewise.
- (elf32_hppa_add_symbol_hook): Delete.
- (elf_backend_add_symbol_hook): Don't define.
- * libhppa.h: Convert to C90. Replace INLINE with inline.
-
-2003-08-06 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc_stub_name): Tweak names for better readability.
- (ppc64_elf_adjust_dynamic_symbol): Allow copy relocs against
- function descriptors, but warn.
- (ppc_build_one_stub): Remove a couple of vars. Move code creating
- stub syms so that we can avoid a stub sym if we already have a
- plt sym. Do not redefine an existing symbol.
- (ppc64_elf_build_stubs): When --emit-stub-syms, print a symbol for
- glink.
-
-2003-08-06 Nick Clifton <nickc@redhat.com>
-
- * po/fr.po: Updated French translation.
-
-2003-08-06 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.c (_bfd_elf_create_dynamic_sections): Mark .dynbss with
- SEC_LINKER_CREATED.
-
-2003-08-05 Daniel Jacobowitz <drow@mvista.com>
-
- * elf32-arm.h (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Define.
- (elf32_arm_final_link_relocate, elf32_arm_relocate_section): Use it.
-
-2003-08-03 Jeff Muizelaar <muizelaar@rogers.com>
-
- * coffcode.h (coff_slurp_line_table): Return with a warning
- message if the line number table could not be read.
-
-2003-08-04 Nick Clifton <nickc@redhat.com>
-
- * elflink.h (elf_link_add_object_symbols): Prepend "warning: "
- to messages produced for .gnu.warning.SYMBOL sections.
-
-2003-08-04 Alan Modra <amodra@bigpond.net.au>
-
- * elfcode.h: Convert to C90, remove unneeded casts and prototypes.
- * elfcore.h: Likewise.
- * elflink.c: Likewise.
- * elflink.h: Likewise.
- * elf.c (sym_is_global): Remove INLINE.
- (align_file_position): Replace INLINE with inline.
- * elfcode.h (elf_swap_dyn_in, elf_swap_dyn_out): Remove INLINE.
- (elf_file_p): Replace INLINE with inline.
-
-2003-08-02 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_check_relocs): Don't set DF_TEXTREL here.
-
-2003-08-01 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (get_got): Align the .got section at 8 bytes.
-
-2003-08-01 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (elfNN_ia64_finish_dynamic_symbol): Use
- ElfNN_External_Rela instead of Elf64_External_Rela.
-
-2003-08-01 Nick Clifton <nickc@redhat.com>
-
- * config.bfd: Add code to catch obsolete configurations and warn
- about them unless --enable-obsolete is used. Use this to mark
- vax-vms port as obsolete.
-
-2003-07-30 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_install_value): Tidy.
- (ppc_elf_relax_section): Remove dead code. Remove unnecessary casts.
- Formatting.
- * elfxx-target.h: Remove PARAMS macro. Formatting.
-
-2003-07-30 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (bfd_section_from_r_symndx): Test for SHN_UNDEF.
- * elf64-ppc.c (get_fdh): New function, split out from
- ppc64_elf_edit_opd.
- (ppc64_elf_check_relocs): Use get_fdh.
- (func_desc_adjust): Likewise. Tidy.
- (ppc64_elf_edit_opd): Tighten reloc checks. Free local_syms on error
- exit. Use get_fdh. Account for superfluous dynamic relocs.
- (ppc64_elf_relocate_section): Warning fix.
-
-2003-07-30 Jason Eckhardt <jle@rice.edu>
-
- * coff-i860.c: Convert to ISO C90. Remove superflous prototypes.
-
-2003-07-30 Jason Eckhardt <jle@rice.edu>
-
- * elf32-i860.c: Convert to ISO C90. Remove superflous prototypes.
-
-2003-07-30 Randolph Chung <tausq@debian.org>
-
- * elf-hppa.h (elf_hppa_relocate_section): Look up dyn_h for undefweak.
- * elf64-hppa.c (elf64_hppa_finalize_dlt): Check h->root.type.
-
-2003-07-30 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c: Convert to C90, remove unnecessary prototypes and casts.
- Replace PTR with void *. Formatting.
- (_bfd_elf_assign_file_position_for_section): Remove INLINE.
- (make_mapping): Likewise.
-
-2003-07-29 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (func_desc_adjust): Give linker created function
- descriptor symbols a size and type.
- (ppc64_elf_relocate_section): Correct lq insn test.
-
-2003-07-28 Eric Christopher <echristo@redhat.com>
-
- * elf32-ppc.c (R_PPC_RELAX32): New relocation.
- (ppc_elf_install_value): New function.
- (ppc_elf_sort_rela): Remove.
- (ppc_elf_relax_section): Rewrite. Remove old relaxation
- and replace with out of range branch stubs.
- (ppc_elf_relocate_section): Handle R_PPC_RELAX32.
-
-2003-07-29 Alexandre Oliva <aoliva@redhat.com>
-
- * elf-m10300.c (mn10300_elf_relax_section): Take symbol hash table
- from input_bfd.
-
-2003-07-28 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (special_sections): Set attributes for .got and .plt.
-
-2003-07-27 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Ensure no copy relocs
- on function descriptors.
- (ELIMINATE_COPY_RELOCS): Expand comment.
- (ppc64_elf_special_sections): Move. Don't include non-ppc64 sections.
- Do include ".toc1".
-
-2003-07-25 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf.c (_bfd_elf_new_section_hook): Set the default section
- type to SHT_NULL.
- (elf_fake_sections): Set the section type based on asect->flags
- if it is SHT_NULL. Don't abort on processor specific section
- types.
-
-2003-07-25 H.J. Lu <hongjiu.lu@intel.com>
-
- * bfd-in2.h: Regenerated.
-
-2003-07-25 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf-bfd.h (bfd_elf_special_section): New.
- (elf_backend_data): Add special_sections, a pointer to
- bfd_elf_special_section.
- (elf_section_type). New.
- (elf_section_flags): New.
- (_bfd_elf_get_sec_type_attr): New.
-
- * elf.c (_bfd_elf_make_section_from_shdr): Always use the
- real section type/flags.
- (special_sections): New.
- (get_special_section): New.
- (_bfd_elf_get_sec_type_attr): New.
- (_bfd_elf_new_section_hook): Check special_section to set
- elf_section_type and elf_section_flags.
- (elf_fake_sections): Don't use section name to set ELF section
- data.
-
- * elf32-m32r.c (m32r_elf_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf32-m68hc11.c (elf32_m68hc11_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf32-mcore.c (mcore_elf_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf32-ppc.c (ppc_elf_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf32-sh64.c (sh64_elf_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf32-v850.c (v850_elf_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf32-xtensa.c (elf_xtensa_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf64-alpha.c (elf64_alpha_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf64-hppa.c (elf64_hppa_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf64-ppc.c (ppc64_elf_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elf64-sh64.c (sh64_elf64_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elfxx-ia64.c (elfNN_ia64_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elfxx-mips.c (_bfd_mips_elf_special_sections): New.
-
- * elfxx-mips.h (_bfd_mips_elf_special_sections): New.
- (elf_backend_special_sections): Defined.
-
- * elfxx-target.h (elf_backend_special_sections): New. Default
- to NULL.
- (elfNN_bed): Initialize special_sections.
-
- * section.c (bfd_abs_section): Remove const.
- (bfd_und_section): Likewise.
- (bfd_com_section): Likewise.
- (bfd_ind_section): Likewise.
-
-2003-07-24 Nick Clifton <nickc@redhat.com>
-
- * coff-arm.c (EXTRA_S_FLAGS): Include SEC_CODE so that code
- sections are assigned the LOAD attribute.
-
-2003-07-25 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c: Convert to C90. Replace PTR with void *.
- * elf32-sh64-com.c: Likewise.
- * elf32-sh64.c: Likewise.
- * elf32-sh64.h: Likewise.
- * elf64-sh64.c: Likewise.
-
-2003-07-24 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_adjust_dynamic_symbol): Use SYMBOL_CALLS_LOCAL.
- (allocate_dynrelocs): Likewise.
- (sh_elf_relocate_section): Likewise. Use SYMBOL_REFERENCES_LOCAL.
- (sh_elf_finish_dynamic_symbol): Use SYMBOL_REFERENCES_LOCAL.
-
-2003-07-24 Nick Clifton <nickc@redhat.com>
-
- * po/fr.po: Updated French translation.
-
-2003-07-23 Bob Wilson <bob.wilson@acm.org>
-
- * elf32-xtensa.c (xtensa_elf_dynamic_symbol_p): Make inline and move
- near the beginning of the file. Swap order of arguments. Call
- _bfd_elf_dynamic_symbol_p with "ignore_protected" set to 0.
- (elf_xtensa_fix_refcounts): Adjust xtensa_elf_dynamic_symbol_p call.
- (elf_xtensa_relocate_section): Likewise.
- (shrink_dynamic_reloc_sections): Likewise.
-
-2003-07-23 Bob Wilson <bob.wilson@acm.org>
-
- * elf32-xtensa.c (plt_reloc_count): Fix typo in comment.
- (elf_xtensa_size_dynamic_sections): Use elf_discarded_section.
- (elf_xtensa_combine_prop_entries): Avoid returning non-zero without
- first printing an error message.
- (elf_xtensa_finish_dynamic_sections): Likewise.
- (elf_xtensa_discard_info_for_section): Adjust size of .got.loc when
- discarding literal table entries.
- (elf_xtensa_merge_private_bfd_data): Remove newline from error message.
- (elf_xtensa_do_asm_simplify): Likewise.
-
-2003-07-23 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc1x.c (elf32_m68hc11_size_stubs): Avoid crash when
- we have a local symbol in common section.
-
-2003-07-22 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.c (_bfd_elf_dynamic_symbol_p): Don't return TRUE for
- weak symbols.
-
-2003-07-22 Nick Clifton <nickc@redhat.com>
-
- * coffcode.h (coff_slurp_symbol_table): Add C_TCSYM and C_ECOML to
- expected RS6000 storage classes.
-
-2003-07-21 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (elfNN_ia64_size_dynamic_sections): Mark
- output_bfd unused to silence gcc.
-
-2003-07-21 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated Swedish translation.
-
-2003-07-21 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (SYMBOL_REFERENCES_LOCAL, SYMBOL_CALLS_LOCAL): Use..
- (_bfd_elf_symbol_refs_local_p): ..this. Declare.
- * elflink.c (_bfd_elf_symbol_refs_local_p): New function.
- * elf32-i386.c (elf_i386_relocate_section): Remove h NULL test
- now done in _bfd_elf_symbol_refs_local_p.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
-
-2003-07-18 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.c (_bfd_elf_dynamic_symbol_p): Undo the last change.
-
-2003-07-18 H.J. Lu <hongjiu.lu@intel.com>
-
- * elf-bfd.h (SYMBOL_REFERENCES_LOCAL): Fix a typo.
- (SYMBOL_CALLS_LOCAL): Likewise.
-
- * elflink.c (_bfd_elf_dynamic_symbol_p): Return TRUE
- immediately if symbol isn't defined locally.
-
-2003-07-18 Richard Henderson <rth@redhat.com>
-
- * elflink.c (_bfd_elf_dynamic_symbol_p): New.
- * elf-bfd.h (_bfd_elf_dynamic_symbol_p): Declare it.
- (SYMBOL_REFERENCES_LOCAL, SYMBOL_CALLS_LOCAL): Use it.
- * elf32-xtensa.c (xtensa_elf_dynamic_symbol_p): Likewise.
- * elf64-alpha.c (alpha_elf_dynamic_symbol_p): Likewise.
- * elf64-hppa.c (elf64_hppa_dynamic_symbol_p): Likewise.
- * elfxx-ia64.c (elfNN_ia64_dynamic_symbol_p): Likewise.
- Update all callers to provide the relocation being resolved.
-
-2003-07-17 Shaun Jackman <sjackman@pathwayconnect.com>
-
- * config.bfd (arm-wince-pe): Add -DARM_COFF_BUGFIX to
- targ_cflags.
-
-2003-07-17 Nick Clifton <nickc@redhat.com>
-
- * po/es.po: New Spanish translation.
- * po/sv.po: New Swedish translation.
- * po/opcodes.pot: Regenerate.
-
-2003-07-16 Richard Henderson <rth@redhat.com>
-
- * config.bfd, configure.host, configure.in: Remove ia64-aix support.
- * elfxx-ia64.c, targets.c: Likewise.
-
-2003-07-16 Richard Henderson <rth@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_dynamic_symbol_p): Properly return false
- for symbols defined locally plus -Bsymbolic. Tidy logic.
-
-2003-07-15 Richard Sandiford <rsandifo@redhat.com>
-
- * archures.c (bfd_mach_mips7000): New.
- * bfd-in2.h: Regenerated.
- * cpu-mips.c (arch_info_struct): Add an entry for mips:7000.
- * elfxx-mips.c (mips_set_isa_flags): Handle bfd_mach_mips7000.
- (mips_mach_extensions): Add an entry for it.
-
-2003-07-14 Nick Clifton <nickc@redhat.com>
-
- * po/tr.po: Update with latest version.
- * po/SRC-POTFILES.in: Regenerate.
- * po/bfd.pot: Regenerate.
- * Makfile.in: Regenerate.
- * configure: Regenerate.
-
-2003-07-12 Jeff Baker <jbaker@qnx.com>
-
- * bfd/config.bfd (__QNXTARGET__): Define for Neutrino architectures.
- * bfd/elf32-arm.h (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
- * bfd/elf32-sh.c (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
- * bfd/elf32-ppc.c (ELF_MAXPAGESIZE): Set to 4k for Neutrino.
-
-2003-07-12 Jeff Muizelaar <muizelaar@rogers.com>
-
- * coffcode.h (coff_set_section_contents): Set the
- IMAGE_FILE_32BIT_MACHINE flag for PE targets.
-
-2003-07-11 Richard Sandiford <rsandifo@redhat.com>
-
- * bfd-in.h (bfd_h8300_pad_address): Declare.
- * bfd-in2.h: Regenerate.
- * cpu-h8300.c (bfd_h8300_pad_address): New function.
- * coff-h8300.c (h8300_reloc16_estimate): Use it to canonicalize
- addresses before checking whether they can be relaxed.
- (h8300_reloc16_extra_cases): Likewise for the R_MOVL2 sanity check.
- Don't complain about overflows in general 8-bit relocations.
- * elf32-h8300.c (elf32_h8_relax_section): Use bfd_h8300_pad_address.
- Fix handling of R_H8_DIR24A8.
-
-2003-07-11 Richard Sandiford <rsandifo@redhat.com>
-
- * elf32-h8300.c: Convert function prototypes and definitions
- to C90 syntax.
- * coff-h8300.c: Likewise.
- * cpu-h8300.c: Likewise.
-
-2003-07-11 Alan Modra <amodra@bigpond.net.au>
-
- * po/SRC-POTFILES.in: Regenerate.
- * po/bfd.pot: Likewise.
-
-2003-07-10 Bob Wilson <bob.wilson@acm.org>
-
- * elf32-xtensa.c (elf_xtensa_create_dynamic_sections): Create new
- .got.loc section. Do not set SEC_ALLOC or SEC_LOAD flags for the
- .xt.lit.plt section.
- (elf_xtensa_size_dynamic_sections): Set size of the .got.loc section
- and allocate memory for it.
- (elf_xtensa_combine_prop_entries): Copy contents of .xt.lit output
- section to the .got.loc section.
- (elf_xtensa_finish_dynamic_sections): Fix up call to
- elf_xtensa_combine_prop_entries and set DT_XTENSA_GOT_LOC_OFF to
- the address of .got.loc.
- (relax_property_section): Shrink .got.loc to match changes in any
- literal table section.
- (xtensa_is_property_section): Change to match
- xtensa_get_property_section_name.
- (xtensa_is_littable_section): New.
-
-2003-07-10 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (IA64_HOWTO): Set dst_mask to -1 instead of
- -1LL.
-
-2003-07-10 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am (BFD32_BACKENDS): Add elf32-am33lin.lo.
- (BFD32_BACKENDS_CFILES): elf32-am33lin.c not elf32-am33lin.lo.
- Run "make dep-am".
- * Makefile.in: Regenerate.
-
-2003-07-10 Alexandre Oliva <aoliva@redhat.com>
-
- 2001-09-12 Alexandre Oliva <aoliva@redhat.com>
- * elf32-am33lin.c (ELF_MACHINE_CODE): Redefine to EM_MN10300.
- (ELF_MACHINE_ALT1): Define to EM_CYGNUS_MN10300.
- 2001-06-02 Nick Clifton <nickc@cambridge.redhat.com>
- * elf32-am33lin.c: Rename global functions.
- 2001-05-09 Alexandre Oliva <aoliva@redhat.com>
- * config.bfd (am33_2.0, am33_2.0-*-linux*): Added.
- * configure.in (bfd_elf32_am33lin_vec): Added.
- * Makefile.am (BFD32_BACKENDS): Added elf32-am33lin.lo.
- (elf32-am33lin.lo): List dependencies.
- * aclocal.m4, configure, Makefile.in: Rebuilt.
- * elf-m10300.c (TARGET_LITTLE_SYM, TARGET_LITTLE_NAME,
- ELF_ARCH, ELF_MACHINE_CODE, ELF_MAXPAGESIZE): Define only if
- ELF_ARCH was not defined before.
- (elf_symbol_leading_char): Define if not defined.
- * elf32-am33lin.c: Override the definitions above.
- * targets.c (bfd_elf32_am33lin_vec): New.
-
-2003-07-09 Alexandre Oliva <aoliva@redhat.com>
-
- 2002-12-12 Alexandre Oliva <aoliva@redhat.com>
- * elf-m10300.c (elf32_mn10300_link_hash_newfunc): Initialize
- pcrel_relocs_copied.
- 2001-12-13 Alexandre Oliva <aoliva@redhat.com>
- * elf-m10300.c (ELF_DYNAMIC_INTERPRETER): Renamed from
- ld-linux.so.2 to ld.so.1.
- 2001-10-10 Alexandre Oliva <aoliva@redhat.com>
- * elf-m10300.c (elf_mn10300_sizeof_plt0): New macro.
- (_bfd_mn10300_elf_adjust_dynamic_symbol): Use it.
- (_bfd_mn10300_elf_finish_dynamic_symbol): Likewise.
- * elf-m10300.c (_bfd_mn10300_elf_size_dynamic_sections): Allocate
- .rela.* section contents with bfd_zalloc.
- 2001-09-25 Alexandre Oliva <aoliva@redhat.com>
- * elf-m10300.c: Added declarations for functions missing them.
- Merge some shared-library changes from the i386 back-end. Use
- R_MN10300_RELATIVE instead of R_MN10300_PCREL32 and
- R_MN10300_GLOB_DAT instead of R_MN10300_32 where appropriate.
- (struct elf32_mn10300_link_hash_entry): Remove duplicates of
- members of elf_link_hash_entry. Adjusted references.
- (mn10300_elf_final_link_relocate): dynobj was already loaded
- into a local variable, use it.
- 2001-09-21 Nick Clifton <nickc@cambridge.redhat.com>
- * elf-m10300.c: Add missing function prototypes.
- 2001-08-24 Alexandre Oliva <aoliva@redhat.com>
- * elf-m10300.c (mn10300_elf_relocate_section): Don't compute
- relocation for dynamic relocations.
- 2001-05-16 Alexandre Oliva <aoliva@redhat.com>
- * reloc.c (BFD_RELOC_MN10300_GOTOFF24): New.
- * elf-m10300.c: Introduce GOTPC16, GOTOFF24, GOTOFF16 and
- PLT16, and rename GOTPC to GOTPC32 and GOTOFF to GOTOFF32.
- (_bfd_mn10300_elf_create_dynamic_sections): Move creation ot PLT...
- (_bfd_mn10300_elf_create_got_section): ... here, so that its
- adress is already known at the time we compute relaxations.
- (mn10300_elf_relax_section): Relax GOTPC32, GOTOFF32, GOT32
- and PLT32 to narrower relocations.
- * libbfd.h, bfd-in2.h: Rebuilt.
- 2001-04-12 Alexandre Oliva <aoliva@redhat.com>
- * reloc.c (BFD_RELOC_MN10300_GOT32, BFD_RELOC_MN10300_GOT24,
- BFD_RELOC_MN10300_GOT16, BFD_RELOC_MN10300_COPY,
- BFD_RELOC_MN10300_GLOB_DAT, BFD_RELOC_MN10300_JMP_SLOT,
- BFD_RELOC_MN10300_RELATIVE): New relocs.
- * libbfd.h, bfd-in2.h: Rebuilt.
- * elf-m10300.c (struct elf_mn10300_pcrel_relocs_copied): New.
- (struct elf32_mn10300_link_hash_entry): Added DSO-related
- fields.
- (elf_mn10300_howto): Defined new relocation types.
- (mn10300_reloc_map): Map them.
- (_bfd_mn10300_elf_create_got_section): New fn.
- (mn10300_elf_check_relocs): Handle PIC relocs.
- (mn10300_elf_final_link_relocate): Likewise.
- (mn10300_elf_relocate_section): Handle DSOs.
- (PLT0_ENTRY_SIZE, PLT_ENTRY_SIZE, PIC_PLT_ENTRY_SIZE): New macros.
- (elf_mn10300_plt0_entry, elf_mn10300_plt_entry,
- elf_mn10300_pic_plt_entry): New.
- (elf_mn10300_sizeof_plt, elf_mn10300_plt_plt0_offset,
- elf_mn10300_plt0_linker_offset, elf_mn10300_plt0_gotid_offset,
- elf_mn10300_plt_temp_offset, elf_mn10300_plt_symbol_offset,
- elf_mn10300_plt_reloc_offset: New macros.
- (ELF_DYNAMIC_INTERPRETER): Likewise.
- (_bfd_mn10300_elf_create_dynamic_sections): New function.
- (_bfd_mn10300_elf_adjust_dynamic_symbol): Likewise.
- (_bfd_mn10300_elf_discard_copies): Likewise.
- (_bfd_mn10300_elf_size_dynamic_sections): Likewise.
- (_bfd_mn10300_elf_finish_dynamic_symbol): Likewise.
- (_bfd_mn10300_elf_finish_dynamic_sections): Likewise.
- (elf_backend_can_gc_sections,
- elf_backend_create_dynamic_sections,
- elf_backend_adjust_dynamic_sections,
- elf_backend_size_dynamic_sections,
- elf_backend_finish_dynamic_symbol,
- elf_backend_finish_dynamic_sections, elf_backend_want_got_plt,
- elf_backend_plt_readonly, elf_backend_want_plt_sym,
- elf_backend_got_header_size, elf_backend_plt_header_size): New
- macros.
-
-2003-07-09 Alexandre Oliva <aoliva@redhat.com>
-
- 2001-05-06 Alexandre Oliva <aoliva@redhat.com>
- * elf-m10300.c (compute_function_info): Account for AM33
- registers in `movm' when computing stack space for `call' when
- linking for AM33/2.0 link.
- 2000-04-01 Alexandre Oliva <aoliva@cygnus.com>
- * archures.c (bfd_mach_am33_2): Renamed from bfd_mach_am332.
- * bfd-in2.h: Rebuilt.
- * cpu-m10300.c (bfd_am33_2_arch): Renamed from bfd_am332_arch.
- * elf-m10300.c: Updated.
- 2000-03-31 Alexandre Oliva <aoliva@cygnus.com>
- * archures.c (bfd_mach_am332): Defined.
- * bfd-in2.h: Rebuilt.
- * cpu-m10300.c (bfd_am332_arch): Defined.
- (bfd_am33_arch): Chained with am33-2.
- * elf-m10300.c (elf_mn10300_mach): Handle am332.
- (_bfd_mn10300_elf_final_write_processing): Likewise.
-
-2003-07-09 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (IA64_HOWTO): Set dst_mask to -1LL.
-
-2003-07-10 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (bfd_elf64_mkobject): Define.
- (struct ppc64_elf_obj_tdata): New.
- (ppc64_elf_tdata, ppc64_tlsld_got): Define.
- (ppc64_elf_mkobject): New function.
- (struct got_entry): Add "owner". Move "tls_type".
- (struct ppc_link_hash_table): Delete "relgot", "tlsld_got".
- (ppc64_elf_init_stub_bfd): New function.
- (create_got_section): Create header .got in dynobj. Create .got
- and .rela.got in each bfd. Stash pointers in ppc64_elf_obj_tdata.
- (ppc64_elf_create_dynamic_sections): Don't call create_got_section.
- Look for dynobj .got, and test it.
- (ppc64_elf_copy_indirect_symbol): Adjust for changed got.
- (update_local_sym_info): Likewise.
- (ppc64_elf_check_relocs): Likewise.
- (ppc64_elf_gc_sweep_hook): Likewise.
- (ppc64_elf_tls_optimize): Likewise.
- (allocate_dynrelocs): Likewise.
- (ppc64_elf_size_dynamic_sections): Likewise.
- (ppc64_elf_relocate_section): Likewise.
- (ppc64_elf_next_toc_section): Update comment.
- (toc_adjusting_stub_needed): Remove unneeded cast.
- (ppc64_elf_build_stubs): Check for stub sections in stub bfd by
- testing section flags.
- (ppc64_elf_build_stubs): Likewise.
- (ppc64_elf_size_stubs): Likewise. Remove stub_bfd param.
- (ppc64_elf_finish_dynamic_sections): Write out got sections.
- (func_desc_adjust): Copy over dynamic info for undef weaks.
- * elf64-ppc.h (ppc64_elf_init_stub_bfd): Declare.
- (ppc64_elf_size_stubs): Update prototype.
- * elflink.h (elf_link_sort_relocs): Use link_orders to find reldyn
- input sections rather than scanning dynobj.
-
-2003-07-09 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (mips_elf_link_hash_entry): Remove min_dyn_reloc_index.
- (bfd_mips_elf_swap_msym_in, bfd_mips_elf_swap_msym_out): Delete.
- (mips_elf_create_msym_section): Delete.
- (mips_elf_create_dynamic_relocation): Don't set min_dyn_reloc_index.
- (_bfd_mips_elf_copy_indirect_symbol): Likewise.
- (_bfd_mips_elf_create_dynamic_sections): Don't create .msym.
- (_bfd_mips_elf_size_dynamic_sections): Don't calculate its size.
- (_bfd_mips_elf_size_dynamic_sections): Don't add DT_MIPS_MSYM.
- (_bfd_mips_elf_finish_dynamic_symbol): Don't add symbols to .msym.
- (_bfd_mips_elf_finish_dynamic_sections): Likewise.
-
-2003-07-09 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (mips_elf_irix6_finish_dynamic_symbol): Make the
- symbols protected.
-
-2003-07-09 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (mips_elf_create_dynamic_relocation): Fix handling
- of relocations whose offset is -2.
-
-2003-07-09 Richard Sandiford <rsandifo@redhat.com>
-
- * bfd/elfxx-mips.c (mips_elf_create_dynamic_relocation): Treat
- forced-local symbols like other locals. Don't create relocations
- against STN_UNDEF in irix objects.
-
-2003-07-09 Richard Sandiford <rsandifo@redhat.com>
-
- * bfd/elfxx-mips.c (mips_elf_create_dynamic_relocation): In SGI-
- compatible objects, add the values of defined external symbols
- to the addend.
-
-2003-07-09 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_symbol): Always
- initialize a GOT entry to the symbol's st_value.
-
-2003-07-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_obj_tdata): Move linker_section_pointers..
- * elf32-ppc.c (struct ppc_elf_obj_tdata): ..to here. New.
- (ppc_elf_tdata): Define.
- (elf_local_ptr_offsets): Adjust.
- (ppc_elf_mkobject): New function.
- (bfd_elf32_mkobject): Define.
-
- * elfcode.h (elf_object_p): Allocate tdata via _bfd_set_format.
- * elfcore.h (elf_core_file_p): Likewise.
- * section.c (bfd_section_init): Remove prototype.
-
-2003-07-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_link_hash_entry): Remove linker_section_pointer
- field.
- (enum elf_linker_section_enum): Delete.
- (struct elf_linker_section): Delete.
- (struct elf_linker_section_pointers): Delete.
- (struct elf_obj_tdata): Remove #if 0 chunk. Remove linker_section.
- Make linker_section_pointers a void**.
- (elf_local_ptr_offsets, elf_linker_section): Don't define.
- * elf32-ppc.c (enum elf_linker_section_enum): New, cut-down version
- of old item in elf-bfd.h.
- (struct elf_linker_section): Likewise.
- (struct elf_linker_section_pointers): Likewise.
- (elf_local_ptr_offsets): Define.
- (struct ppc_elf_link_hash_entry): Add linker_section_pointer.
- (ppc_elf_link_hash_newfunc): Init it.
- (struct ppc_elf_link_hash_table): Add sbss.
- (ppc_elf_link_hash_table_create): zmalloc rather than clearing
- individual fields.
- (elf_create_linker_section): Fold into..
- (ppc_elf_create_linker_section): ..here. Remove hole_size code.
- Make rela section here if shared.
- (elf_find_pointer_linker_section): Pass lsect rather than enum.
- (elf_create_pointer_linker_section): Adjust. zalloc rather than
- clearing in a loop.
- (elf_finish_pointer_linker_section): Adjust. Don't make rela
- section here.
- (ppc_elf_check_relocs): Adjust.
- (ppc_elf_add_symbol_hook): Tighten hash creator test. Remove code
- creating .sbss by hand.
- * elf.c (_bfd_elf_link_hash_newfunc): Adjust.
-
-2003-07-04 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-s390.c (elf_howto_table): Change R_390_GOT12 to
- complain_overflow_bitfield.
- * elf64-s390.c (elf_howto_table): Change R_390_GOT12 to
- complain_overflow_bitfield.
-
-2003-07-04 Jakub Jelinek <jakub@redhat.com>
-
- * elf-bfd.h (SYMBOL_REFERENCES_LOCAL, SYMBOL_CALLS_LOCAL): Return
- true even if -pie.
-
-2003-07-04 Jakub Jelinek <jakub@redhat.com>
-
- * elfxx-ia64.c (struct elfNN_ia64_link_hash_table): Add rel_fptr_sec.
- (elfNN_ia64_dynamic_symbol_p): Change info->shared into
- !info->executable.
- (get_fptr): For -pie create .opd as writable section and create
- .rela.opd as well.
- (elfNN_ia64_check_relocs): Change info->shared into
- !info->executable.
- (allocate_fptr): Likewise.
- (allocate_dynrel_entries): Account for a relative reloc for -pie
- @fptr(). Don't account for a relative reloc if -pie want_ltoff_fptr
- for undefweak symbol. Account for an IPLT reloc in .rela.opd
- section if -pie.
- (set_got_entry): Don't create a relative reloc if -pie
- want_ltoff_fptr for undefweak symbol.
- (set_fptr_entry): Emit an IPLT reloc in .rela.opd for -pie.
- (elfNN_ia64_relocate_section): Emit a relative reloc for -pie
- @fptr().
-
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Issue undefined_symbol
- even if -pie.
- * elf32-i386.c (elf_i386_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
-
-2003-07-04 Paul Clarke <paulc@senet.com.au>
-
- * elf32-h8300.c (R_H8_DIR32A16): Fix name field.
- (elf32_h8_relax_section) <R_H8_DIR16A8>: Adjust position of relocation.
- <R_H8_DIR32A16>: Fix type of relocation.
-
-2003-07-04 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_create_dynamic_sections): Return if dynamic
- sections were created already. Remove unnecessary tests of
- the previous change.
-
-2003-07-04 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_create_dynamic_sections): Don't call
- bfd_make_section for existing sections.
-
-2003-07-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-sparc.c (elf32_sparc_check_relocs): Don't call
- create_got_section if we already have done so.
- * elf32-sh.c (sh_elf_create_dynamic_sections): Likewise.
- (sh_elf_check_relocs): Likewise.
- (sh_elf_adjust_dynamic_symbol): Delete "dynobj" var. Use
- htab->root.dynobj instead.
- (sh_elf_check_relocs): Likewise.
- (sh_elf_finish_dynamic_sections): Likewise.
-
- * section.c (bfd_make_section): Return NULL for existing section.
-
-2003-07-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_create_dynamic_sections): Don't call
- ppc_elf_create_got if we've already done so.
-
- * elf-bfd.h (_bfd_elf_create_linker_section) Don't declare.
- (_bfd_elf_find_pointer_linker_section): Likewise.
- (bfd_elf32_create_pointer_linker_section): Likewise.
- (bfd_elf32_finish_pointer_linker_section): Likewise.
- (bfd_elf64_create_pointer_linker_section): Likewise.
- (bfd_elf64_finish_pointer_linker_section): Likewise.
- (_bfd_elf_make_linker_section_rela): Likewise.
- * elfcode.h (elf_create_pointer_linker_section): Don't define.
- (elf_finish_pointer_linker_section): Likewise.
- * elflink.c (_bfd_elf_make_linker_section_rela): Delete.
- (_bfd_elf_create_linker_section): Move this function..
- (_bfd_elf_find_pointer_linker_section): ..and this..
- * elflink.h (elf_create_pointer_linker_section): ..and this..
- (elf_finish_pointer_linker_section): ..and this..
- * elf32-ppc.c: ..to here, renaming to the following, and adjusting
- calls.
- (elf_create_linker_section): Convert to C90, tidy.
- (elf_find_pointer_linker_section): Likewise.
- (elf_create_pointer_linker_section): Likewise.
- (elf_finish_pointer_linker_section): Likewise.
- * elf32-i370.c: Delete #if 0 code.
-
-2003-07-02 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_func_desc_adjust): Don't allow _savef* and
- _restf* to be satisfied by shared libs, and always force them local.
- (toc_adjusting_stub_needed): Avoid scanning linker created sections.
- Correct test for "bl".
- (ppc64_elf_relocate_section <R_PPC64_TLS>): Correct test for
- primary opcode 31.
-
-2003-07-01 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf32-s390.c (s390_elf_ldisp_reloc): New prototype.
- (s390_tls_reloc): New function.
- (elf_howto_table): Add long displacement relocations R_390_20,
- R_390_GOT20, R_390_GOTPLT20 and R_390_TLS_GOTIE20.
- (elf_s390_reloc_type_lookup): Likewise.
- (elf_s390_check_relocs): Likewise.
- (elf_s390_gc_sweep_hook): Likewise.
- (elf_s390_relocate_section): Likewise.
- * elf64-s390.c: Same changes as for elf32-s390.c.
- * reloc.c: Add long displacement relocations BFD_RELOC_390_20,
- BFD_RELOC_390_GOT20, BFD_RELOC_390_GOTPLT20 and
- BFD_RELOC_390_TLS_GOTIE20.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Likewise.
-
-2003-06-30 Alan Modra <amodra@bigpond.net.au>
-
- * cpu-ia64-opc.c (ext_imms_scaled): Don't sign extend using shifts.
- (ins_imms, ins_immsm1u4): Likewise. Warning fix.
-
-2003-06-29 Alan Modra <amodra@bigpond.net.au>
-
- * archive.c: Convert to C90, remove unnecessary prototypes and casts.
- Replace PTR with void *. Formatting.
- * archive64.c: Likewise.
- * archures.c: Likewise.
- * bfd-in.h: Likewise.
- * bfd.c: Likewise.
- * bfdio.c: Likewise.
- * bfdwin.c: Likewise.
- * cache.c: Likewise.
- * corefile.c: Likewise.
- * format.c: Likewise.
- * init.c: Likewise.
- * libbfd-in.h: Likewise.
- * libbfd.c: Likewise.
- * linker.c: Likewise.
- * opncls.c: Likewise.
- * reloc.c: Likewise.
- * section.c: Likewise.
- * simple.c: Likewise.
- * syms.c: Likewise.
- * targets.c: Likewise.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
-
- * ecoff.c (bfd_debug_section): Add missing kept_section initialization.
- * libbfd-in.h (_bfd_sh_align_load_span): Don't declare if defined.
- * libbfd.c (COERCE32, EIGHT_GAZILLION): Simplify.
- (bfd_getb64): Rewrite without parens.
- (bfd_getl64, bfd_getb_signed_64, bfd_getl_signed_64): Likewise.
- * cache.c (insert, snip): Remove INLINE.
- * linker.c (bfd_link_add_undef): Likewise.
-
-2003-06-29 Andreas Jaeger <aj@suse.de>
-
- * elf64-x86-64.c: Convert to ISO C90 prototypes, remove
- unnecessary prototypes. Replace PTR with void *.
- (elf64_x86_64_adjust_dynamic_symbol): Use SYMBOL_CALLS_LOCAL to
- trim plt entries. Move undefweak non-default visibility test ...
- (allocate_dynrelocs): ... from here.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead of INFO.
- Change all callers.
- (allocate_dynrelocs): Use SYMBOL_CALLS_LOCAL. Use
- SYMBOL_REFERENCES_LOCAL for dynreloc check.
- (elf64_x86_64_relocate_section): Use SYMBOL_CALLS_LOCAL for
- dynreloc and .got relocs.
- (elf64_x86_64_finish_dynamic_symbol): Use SYMBOL_REFERENCES_LOCAL
- for .got relocs.
-
-2003-06-29 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c: Allow lazy binding for R_MIPS_JALR.
-
-2003-06-27 Nick Clifton <nickc@redhat.com>
-
- * opncls.c (bfd_add_gnu_debuglink_section): Rename to
- bfd_add_gnu_debuglink_section and only create the section, do not
- fill in its contents.
- (bfd_fill_in_gnu_debuglink_section): New function. Fill in the
- contents of a .gnu-debuglink section.
- * bfd-in2.h: Regenerate.
-
-2003-06-27 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c: Revert .got alignment to 2**4.
-
-2003-06-27 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf32-mips.c: Fix addend for _gp_disp special symbol.
-
-2003-06-27 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (_bfd_mips_elf_fake_sections): Remove non-default
- relocation header setup.
+ * reloc.c: New 5 bit reloc, BFD_RELOC_M68HC12_5B, for m68hc12 movb/movw.
+ * bfd-in2.h, libbfd.h: Rebuilt.
-2003-06-25 Alan Modra <amodra@bigpond.net.au>
+2004-01-20 Danny Smith <dannysmith@users.sourceforge.net>
- * elf32-ppc.c (ppc_elf_howto_table): Remove unnecessary cast.
- (ppc_elf_reloc_type_lookup): Modify comment.
- (ppc_elf_info_to_howto): Ditto.
- (ppc_elf_relocate_section): Ditto.
- (ppc_elf_check_relocs): Call ppc_elf_howto_init.
+ * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Don't remove
+ IMAGE_SCN_MEM_WRITE flag from .text section if WP_TEXT
+ flag has been cleared.
-2003-06-25 Alan Modra <amodra@bigpond.net.au>
+2004-01-19 Kazu Hirata <kazu@cs.umass.edu>
- * aout-ns32k.c: Correct spelling of "relocatable".
- * aoutx.h: Likewise.
- * bfd-in.h: Likewise.
- * bfd.c: Likewise.
- * bout.c: Likewise.
- * coff-a29k.c: Likewise.
- * coff-alpha.c: Likewise.
- * coff-arm.c: Likewise.
- * coff-i386.c: Likewise.
- * coff-i860.c: Likewise.
- * coff-i960.c: Likewise.
- * coff-m68k.c: Likewise.
- * coff-m88k.c: Likewise.
- * coff-mcore.c: Likewise.
- * coff-mips.c: Likewise.
- * coff-or32.c: Likewise.
- * coff-ppc.c: Likewise.
- * coff-rs6000.c: Likewise.
- * coff-sh.c: Likewise.
- * coff-tic80.c: Likewise.
- * coff64-rs6000.c: Likewise.
- * cofflink.c: Likewise.
- * cpu-ns32k.c: Likewise.
- * ecoff.c: Likewise.
- * ecofflink.c: Likewise.
- * elf-bfd.h: Likewise.
- * elf-eh-frame.c: Likewise.
- * elf-hppa.h: Likewise.
- * elf-m10200.c: Likewise.
- * elf-m10300.c: Likewise.
- * elf.c: Likewise.
- * elf32-arm.h: Likewise.
- * elf32-avr.c: Likewise.
- * elf32-cris.c: Likewise.
- * elf32-d10v.c: Likewise.
- * elf32-dlx.c: Likewise.
- * elf32-fr30.c: Likewise.
- * elf32-frv.c: Likewise.
+ * coff-h8300.c: Add and adjust comments about relaxation.
* elf32-h8300.c: Likewise.
- * elf32-hppa.c: Likewise.
- * elf32-i370.c: Likewise.
- * elf32-i386.c: Likewise.
- * elf32-i860.c: Likewise.
- * elf32-i960.c: Likewise.
- * elf32-ip2k.c: Likewise.
- * elf32-iq2000.c: Likewise.
- * elf32-m32r.c: Likewise.
- * elf32-m68hc11.c: Likewise.
- * elf32-m68hc1x.c: Likewise.
- * elf32-m68k.c: Likewise.
- * elf32-mcore.c: Likewise.
- * elf32-mips.c: Likewise.
- * elf32-msp430.c: Likewise.
- * elf32-openrisc.c: Likewise.
- * elf32-ppc.c: Likewise.
- * elf32-s390.c: Likewise.
- * elf32-sh.c: Likewise.
- * elf32-sh64.c: Likewise.
- * elf32-sparc.c: Likewise.
- * elf32-v850.c: Likewise.
- * elf32-vax.c: Likewise.
- * elf32-xstormy16.c: Likewise.
- * elf32-xtensa.c: Likewise.
- * elf64-alpha.c: Likewise.
- * elf64-hppa.c: Likewise.
- * elf64-mips.c: Likewise.
- * elf64-mmix.c: Likewise.
- * elf64-ppc.c: Likewise.
- * elf64-s390.c: Likewise.
- * elf64-sh64.c: Likewise.
- * elf64-sparc.c: Likewise.
- * elf64-x86-64.c: Likewise.
- * elfcode.h: Likewise.
- * elflink.h: Likewise.
- * elfn32-mips.c: Likewise.
- * elfxx-ia64.c: Likewise.
- * elfxx-mips.c: Likewise.
- * i386linux.c: Likewise.
- * ieee.c: Likewise.
- * libcoff-in.h: Likewise.
- * linker.c: Likewise.
- * m68klinux.c: Likewise.
- * pdp11.c: Likewise.
- * pe-mips.c: Likewise.
- * peXXigen.c: Likewise.
- * reloc.c: Likewise.
- * reloc16.c: Likewise.
- * sparclinux.c: Likewise.
- * sunos.c: Likewise.
- * syms.c: Likewise.
- * versados.c: Likewise.
- * vms.c: Likewise.
- * xcofflink.c: Likewise.
- * bfd-in2.h: Regenerate.
- * libcoff.h: Regenerate.
- * libbfd.h: Regenerate.
-
-2003-06-24 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_check_relocs): Report plt reloc against
- local sym errors.
-
- * elf32-i386.c: Convert to C90 function definitions, remove unnecessary
- prototypes and casts. Replace PTR with void *. Formatting.
- * elf32-ppc.c: Likewise. Break long strings too.
- (ppc_elf_relax_section): Use enum elf_ppc_reloc_type for r_type.
- (ppc_elf_unhandled_reloc): Internationalize error message.
- * elf32-ppc.h: Remove PARAMS.
-
-2003-06-23 Mark Mitchell <mark@codesourcery.com>
-
- * elf32-ppc.c (ppc_elf_begin_write_processing): Use bytes to count
- APUinfo slots.
- (ppc_elf_final_write_processing): Likewise.
-
-2003-06-23 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.h (elf_link_input_bfd): Check raw size when using
- kept_section to preserve debug information discarded by
- linkonce.
-
-2003-06-20 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (struct ppc_link_hash_table): Add top_id.
- (ppc64_elf_setup_section_lists): Set it.
- (ppc64_elf_relocate_section): Check sym section id against top_id.
- (ppc_build_one_stub): Comment on top_id.
-
-2003-06-20 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
-
- * config.bfd: Add tic4x-*-rtems*.
-
-2003-06-20 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c: Convert to C90 function definitions, remove unnecessary
- prototypes and casts. Replace PTR with void *. Format copyright.
- Mention ABI links.
- (struct ppc_link_hash_table): Rename sgot, srelgot, splt, srelplt,
- sdynbss, srelbss, sglink, sbrlt and srelbrlt to got, relgot .. relbrlt.
- (ppc_type_of_stub): Make r_type an enum.
- (ppc64_elf_size_stubs): Likewise.
- * elf64-ppc.h: Remove PARAMS macro.
-
-2003-06-19 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_link_hash_table_create): Reinstate init of
- elf hash tab fields.
-
- * elf64-ppc.c (ppc64_elf_reloc_type_lookup): Tidy prototype.
- (ppc64_elf_info_to_howto): Likewise.
- (ppc64_elf_build_stubs): Add "stats" param, and print statistics.
- * elf64-ppc.h (ppc64_elf_build_stubs): Adjust prototype.
-
-2003-06-19 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-sparc.c (sparc64_elf_relocate_section): Ignore R_SPARC_DISP32
- reloc overflow on discarded eh_frame entries.
-
-2003-06-19 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (toc_adjusting_stub_needed): New function.
- (ppc64_elf_next_input_section): Use it here to set has_gp_reloc.
- Return error condition.
- (ppc64_elf_size_stubs): Restrict toc adjusting stubs to sections
- that have has_gp_reloc set.
- (struct ppc_link_hash_table): Add stub_count.
- (ppc_build_one_stub): Increment it.
- (ppc64_elf_link_hash_table_create): zmalloc rather than clearing
- individual fields.
- * elf64-ppc.h (ppc64_elf_next_input_section): Update prototype.
-
-2003-06-18 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_gc_record_vtentry): Revert last change. Correct
- size calculation from addend. Round size up.
-
-2003-06-18 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (cris_elf_relocate_section) <case
- R_CRIS_32_GOTREL>: When linking a program, don't complain about a
- symbol from a normal object or an undefined weak symbol.
-
-2003-06-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Accept a symbol on
- R_PPC64_TOC relocs.
-
-2003-06-17 H.J. Lu <hongjiu.lu@intel.com>
-
- * section.c (struct sec): Put back kept_section.
- (STD_SECTION): Put back kept_section initialization.
- * bfd-in2.h: Regenerate.
-
- * elflink.h (elf_link_input_bfd): Also check discarded linkonce
- sections for relocateable output. Use kept_section to preserve
- debug information discarded by linkonce.
-
-2003-06-17 Roland McGrath <roland@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Support
- segment-relative relocation between different segments.
-
-2003-06-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Do unaligned reloc
- optimizations earlier.
-
- * elf64-ppc.c (struct ppc_link_hash_table): Reinstate top_index.
- Restore previous input_list type.
- (ppc64_elf_link_hash_table_create): Undo last change.
- (ppc64_elf_setup_section_lists): Reinstate code setting up input lists
- per output section, but don't bother with bfd_abs_section marker.
- (ppc64_elf_next_input_section): Adjust for multiple input section
- lists.
- (group_sections): Likewise.
-
-2003-06-17 Jakub Jelinek <jakub@redhat.com>
-
- * elf64-ppc.c (ppc64_elf_relocation_section): Ensure
- *r_offset == r_addend for RELATIVE relocs against .got.
-
-2003-06-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Optimize unaligned relocs.
-
-2003-06-17 Nick Clifton <nickc@redhat.com>
-
- * elflink.h (elf_gc_record_vtentry): Allocate an extra element
- in the vtable_entries_used array to allow for the accessing
- the largest element.
-
-2003-06-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (struct ppc_link_hash_table): Remove top_index. Modify
- input_list.
- (ppc64_elf_link_hash_table_create): Init input_list here.
- (ppc64_elf_setup_section_lists): Remove code setting up input lists
- per output section. Set toc_off for abs and other standard sections.
- (ppc64_elf_reinit_toc): Don't set elf_gp on input bfds lacking a toc.
- (ppc64_elf_next_input_section): Adjust for single input section list.
- Don't set toc_curr from input bfds that haven't set elf_gp.
- (group_sections): Adjust for single input section list.
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Correct pcrel section zero.
-
-2003-06-16 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): When optimizing toctprel
- tls, check that a TOC16_DS or TOC16_LO_DS reloc isn't pointing to a
- dtprel entry. Ensure TLS_LD DTPMOD reloc has a zero addend. Write
- got section for RELATIVE relocs. Fix wrong comment. Change condition
- under which dynamic relocs update the section contents.
-
-2003-06-13 Robert Millan <zeratul2@wanadoo.es>
-
- * config.bfd: Add i386-netbsd-gnu target.
-
-2003-06-12 Nick Clifton <nickc@redhat.com>
-
- * opncls.c (calc_crc32): Rename to
- bfd_calc_gnu_debuglink_crc32 and export.
- (GNU_DEBUGLINK): Define and use to replace occurrences of
- hard-coded ".gnu_debuglink" in the code.
- (get_debug_link_info): Prevent aborts by replacing call to
- xmalloc with a call to malloc.
- (find_separate_debug_file): Prevent aborts by replacing calls
- to xmalloc and xstrdup with calls to malloc and strdup.
- (bfd_add_gnu_debuglink): New function. Add a .gnu_debuglink
- section to a bfd.
- * bfd-in2.h: Regenerate.
-
-2003-06-12 Federico G. Schwindt <fgsch@lodoss.net>
-
- * config.bfd (i[3-7]86-*-openbsd[0-2].* | i[3-7]86-*-openbsd3.[0-3]):
- New target (was i[3-7]86-*-openbsd* before).
- (i[3-7]86-*-openbsd*): Change to use bfd_elf32_i386_vec.
- (vax-*-openbsd*): New target.
-
-2003-06-11 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (MIPS_ELF_OPTIONS_SECTION_NAME): Use .MIPS.options
- for n32, too.
- (MIPS_ELF_STUB_SECTION_NAME): Use .MIPS.stubs for n32, too.
- (mips_elf_rel_dyn_section): Use appropriate section alignment.
- (mips_elf_create_got_section): Likewise.
- (_bfd_mips_elf_create_dynamic_sections): Likewise.
-
-2003-06-11 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
- * elf32-mips.c (mips_elf_generic_reloc): New Function.
- (elf_mips_howto_table_rel): Use it.
- (gprel32_with_gp): Move prototype.
- (mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend.
- Use mips_elf_generic_reloc.
- (mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend.
- Code cleanup.
- (_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of
- zero addend.
- (mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic
- as in the other *_gprel*_reloc functions.
- (gprel32_with_gp): Handle partial_inplace properly.
- (mips32_64bit_reloc): Use mips_elf_generic_reloc.
- (mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend.
- Do addend handling directly instead of calling
- _bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly.
- * elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead
- of zero addend. Handle partial_inplace properly.
- (mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero
- addend.
- (mips_elf64_gprel16_reloc): Likewise.
- (mips_elf64_literal_reloc): Likewise.
- (mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment
- logic as in the other *_gprel*_reloc functions. Handle
- partial_inplace properly.
- (mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero
- addend. Handle partial_inplace properly.
- (mips16_gprel_reloc): Likewise. Do addend handling directly instead
- of calling _bfd_mips_elf_gprel16_with_gp.
- * elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL.
- (mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead
- of zero addend.
- (mips_elf_shift6_reloc): Handle partial_inplace properly.
- (mips16_gprel_reloc): Likewise. Do addend handling directly instead
- of calling _bfd_mips_elf_gprel16_with_gp.
- * elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle
- partial_inplace properly. Fix wrong addend handling. Fix overflow
- check.
- (_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and
- exported.
- (mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend.
- (_bfd_mips_elf_relocate_section): Likewise.
- (mips_elf_create_dynamic_relocation): Update sec_info_type access.
- * elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration.
- (_bfd_mips_elf_sign_extend): New prototype.
+2004-01-16 Kazu Hirata <kazu@cs.umass.edu>
-2003-06-11 Federico G. Schwindt <fgsch@lodoss.net>
-
- * config.bfd (sparc-*-openbsd[0-2].* | sparc-*-openbsd3.[0-1]):
- New target (was sparc-*-openbsd* before).
- (sparc-*-openbsd*): Change to use bfd_elf32_sparc_vec.
-
- * configure.in (vax-*-openbsd*): Set COREFILE to netbsd-core.lo.
- * configure: Regenerate.
-
-2003-06-11 H.J. Lu <hongjiu.lu@intel.com>
-
- * po/Make-in (DESTDIR): New.
- (install-data-yes): Support $(DESTDIR).
- (uninstall): Likewise.
-
-2003-06-11 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am (config.status): Depend on version.h.
- Run "make dep-am".
- * Makefile.in: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
-2003-06-10 Alan Modra <amodra@bigpond.net.au>
- Gary Hade <garyhade@us.ibm.com>
-
- * elf64-ppc.c (ppc64_elf_relocate_section <*_DS>): Special case lq.
-
-2003-06-10 Richard Sandiford <rsandifo@redhat.com>
-
- * archures.c (bfd_mach_h8300sxn): New architecture.
- * bfd-in2.h: Regenerate.
- * cpu-h8300.c (h8300_scan): Check for 'sxn'.
- (h8300sxn_info_struct): New.
- (h8300sx_info_struct): Link to it.
- * elf32-h8300.c (elf32_h8_mach): Add h8300sxn case.
- (elf32_h8_final_write_processing): Likewise.
-
-2003-06-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c: Move TARGET_LITTLE_SYM and other macros used by
- elfxx-target.h so that we can use elf_backend_got_header_size.
- (ELF_MACHINE_ALT1, ELF_MACHINE_ALT2): Delete.
- (GLINK_CALL_STUB_SIZE): Modify. Define new glink call stub and
- associated macros.
- (ppc64_elf_howto_raw <GOT_TPREL16_DS, GOT_TPREL16_LO_DS>): Correct
- dst_mask.
- (enum ppc_stub_type): Add ppc_stub_long_branch_r2off and
- ppc_stub_plt_branch_r2off.
- (struct ppc_stub_hash_entry): Reorganize.
- (struct ppc_link_hash_table): Add no_multi_toc, multi_toc_needed,
- toc_curr, toc_off and emit_stub_syms.
- (ppc64_elf_link_hash_table_create): Init them.
- (ppc_stub_name): Correct string size.
- (ppc64_elf_check_relocs): Set has_gp_reloc on GOT and TOC relocs.
- (ppc64_elf_size_dynamic_sections): Set no_multi_toc if GOT entries
- used.
- (ppc_type_of_stub): Tweak root.type test.
- (build_plt_stub): Remove glink code. Adjust for insn macro changes.
- (ppc_size_one_stub): Handle ppc_stub_long_branch_r2off and
- ppc_stub_plt_branch_r2off.
- (ppc_build_one_stub): Likewise. Fix var shadowing. Correct addis,addi
- range test. Use toc_off to calculte r2 values. Handle emit_stub_syms.
- (ppc64_elf_setup_section_lists): Remove htab creator flavour test.
- Initialize elf_gp and toc_curr.
- (ppc64_elf_next_toc_section, ppc64_elf_reinit_toc): New functions.
- (ppc64_elf_next_input_section): Set toc_off.
- (group_sections): Ensure groups have the same TOC.
- (ppc64_elf_size_stubs): Check whether we need a TOC adjusting stub.
- (ppc64_elf_build_stubs): Add emit_stub_syms param, and stash in htab.
- Build new glink stub.
- (ppc64_elf_relocate_section): Handle multiple TOCs. Fix comments.
- (ppc64_elf_finish_dynamic_sections): Adjust DT_PPC64_GLINK.
- * elf64-ppc.h (ppc64_elf_build_stubs): Update prototype.
- (ppc64_elf_next_toc_section, ppc64_elf_reinit_toc): Declare.
- * section.c (struct sec): Rename flag12 to has_gp_reloc.
- (STD_SECTION): Update.
- * ecoff.c (bfd_debug_section): Update comment.
- * bfd-in2.h: Regenerate.
-
-2003-06-05 Daniel Jacobowitz <drow@mvista.com>
-
- * elfcode.h (elf_slurp_reloc_table_from_section): Don't dereference
- NULL function pointers.
-
-2003-06-05 Daniel Jacobowitz <drow@mvista.com>
-
- * simple.c (bfd_simple_get_relocated_section_contents): Call
- _bfd_generic_link_add_symbols instead of bfd_link_add_symbols.
-
-2003-06-04 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * coff-tic54x.c: Removed the ticoff0_bad_format_hook() and
- ticoff1_bad_format_hook() functions. Removed the coff0 and coff1
- swaptables.
- * coff-tic4x.c: Ditto
- * coffcode.h: Added extra arguments to CREATE_BIG_COFF_TARGET_VEC
- and CREATE_LITTLE_COFF_TARGET_VEC. Created the macro
- CREATE_BIGHDR_COFF_TARGET_VEC. Created the ticoff0_bad_format_hook(),
- ticoff1_bad_format_hook() functions. Created the coff0 and coff1
- swap tables.
- * coff-tic4x.c: Adopted new CREATE_xxx_COFF_TARGET_VEC macros.
- * coff-a29k.c: Append COFF_SWAP_TABLE argument
- * coff-apollo.c: Ditto
- * coff-arm.c: Ditto
- * coff-h8300.c: Ditto
- * coff-h8500.c: Ditto
- * coff-i960.c: Ditto
- * coff-m68k.c: Ditto
- * coff-m88k.c: Ditto
- * coff-mcore.c: Ditto
- * coff-sh.c: Ditto
- * coff-sparc.c: Ditto
- * coff-tic80.c: Ditto
- * coff-we32k.c: Ditto
- * coff-z8k.c: Ditto
- * coff-w65.c: Ditto
-
-2003-06-04 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * coff-tic4x.c (ticoff0_swap_table, ticoff1_swap_table): Fixed
- initialization bug
-
-2003-06-03 Jakub Jelinek <jakub@redhat.com>
-
- * elf.c (_bfd_elf_print_private_bfd_data): Handle PT_GNU_STACK.
- (bfd_section_from_phdr): Likewise.
- (map_sections_to_segments): Create PT_GNU_STACK segment header.
- (get_program_header_size): Count with PT_GNU_STACK.
- * elf-bfd.h (struct elf_obj_tdata): Add stack_flags.
- * elflink.h (bfd_elfNN_size_dynamic_sections): Set stack_flags.
-
-2003-06-03 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.h (elf_link_input_bfd): Call linker error_handler
- for discarded definitions.
-
-2003-06-03 Elias Athanasopoulos <elathan@phys.uoa.gr>
-
- * syms.c (decode_section_type): Return 'n' if section flags are
- SEC_HAS_CONTENTS && SEC_READONLY.
-
-2003-06-03 Nick Clifton <nickc@redhat.com>
-
- * elf32-v850.c (v850_elf_howto_t): Rename R_V850_32to
- R_V850_ABS32. Add entry for R_V850_REL32.
- (v850_elf_reloc_map): Likewise.
- (v850_elf_check_relocs): Likewise.
- (v850_elf_perform_relocation): Likewise.
- (v850_elf_final_link_relocate): Likewise. Include computation
- to make R_V850_REl32 pc-relative.
-
-2003-06-03 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_size_dynamic_sections): Create .interp section
- and DT_DEBUG dynamic tag even for position independent executables.
- * elf64-sh64.c (sh64_elf64_size_dynamic_sections): Likewize.
-
-2003-06-02 Daniel Jacobowitz <drow@mvista.com>
-
- * config.bfd: Move obsolete entries out of the range of the
- targmatch sed script.
-
-2003-06-02 Daniel Jacobowitz <drow@mvista.com>
-
- * config.bfd (mips*-dec-bsd*, mips*-*-pe*): Mark as obsolete.
-
-2003-05-31 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-ppc.c (allocate_dynrelocs): Use single slot for first 8192
- plt entries, not just 8191.
-
-2003-05-30 Daniel Jacobowitz <drow@mvista.com>
-
- * elfxx-mips.c (_bfd_mips_elf_discard_info): Correct loop index.
- Reported by Ken Faiczak <kfaiczak@SANDVINE.com>.
-
-2003-05-30 Ulrich Drepper <drepper@redhat.com>
- Jakub Jelinek <jakub@redhat.com>
-
- * elflink.h (elf_link_add_object_symbols): Use !info->executable
- instead of info->shared where appropriate.
- (bfd_elfNN_size_dynamic_sections, elf_link_output_extsym): Likewise.
- * elflink.c (_bfd_elf_create_got_section): Likewise.
- (_bfd_elf_link_create_dynamic_sections): Likewise.
- (_bfd_elf_link_assign_sym_version): Likewise.
- * elf32-i386.c (elf_i386_size_dynamic_sections): Create .interp section
- and DT_DEBUG dynamic tag even for position independent executables.
- * elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise.
- * elf32-s390.c (elf_s390_size_dynamic_sections: Likewise.
- * elf64-ppc.c (ppc64_elf_size_dynamic_sections: Likewise.
- * elf64-s390.c (elf_s390_size_dynamic_sections: Likewise.
- * elf64-x86-64.c (elf64_x86_64_size_dynamic_sections: Likewise.
- * elfxx-ia64.c (elfNN_ia64_size_dynamic_sections: Likewise.
- * elf32-sparc.c (elf32_sparc_size_dynamic_sections: Likewise.
- * elf64-alpha.c (elf64_alpha_size_dynamic_sections: Likewise.
- * elf64-sparc.c (sparc64_elf_size_dynamic_sections: Likewise.
-
-2003-05-30 Kris Warkentin <kewarken@qnx.com>
-
- * elf.c (elfcore_grok_nto_status): Only set lwpid for the active or
- signalled thread.
- (elfcore_grok_nto_gregs): Only make .reg section for the active thread.
-
-2003-05-29 Nick Clifton <nickc@redhat.com>
-
- * pef.c: Include "safe-ctype.h" instead of <ctype.h>.
- Tidy up formatting.
- * Makefile.am: Add dependency on safe-ctype.h.
- * Makefile.in: Regenerate.
-
-2003-05-29 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c: Don't force symbols local unconditionally.
-
-2003-05-28 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-hppa.c (elf32_hppa_relocate_section): Delete bogus
- undefined_symbol call.
-
-2003-05-27 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c (mips_elf_hash_sort_data): Fix formattting.
- (mips_elf_link_hash_table): Likewise.
-
-2003-05-22 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf64-mips.c (elf_mips_gnu_rel16_s2): Add internally used
- R_MIPS_GNU_REL16_S2 support.
- (bfd_elf64_bfd_reloc_type_lookup): Use it.
- (mips_elf64_rtype_to_howto): Use it.
- * elfn32-mips.c (elf_mips_gnu_rel16_s2): Add internally used
- R_MIPS_GNU_REL16_S2 support.
- (bfd_elf32_bfd_reloc_type_lookup): Use it.
- (mips_elf_n32_rtype_to_howto): Use it.
-
-2003-05-21 Stuart F. Downing <sdowning@fame.com>
-
- * som.h: Define PA_2_0 before including a.out.h
-
-2003-05-07 Eric Christopher <echristo@redhat.com>
- Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Adjust
- pic tests, change to warning.
- (_bfd_mips_elf_final_link): Remove EF_MIPS_CPIC flag setting.
-
-2003-05-21 Marcus Comstedt <marcus@mc.pp.se>
-
- * config.bfd: Check for a target triplet of shl-...-netbsdelf as
- well as shle-...-netbsdelf. Remove duplicate entry.
-
-2003-05-21 Nick Clifton <nickc@redhat.com>
-
- * elf32-xstormy16.c (xstormy16_elf_howto_table): Fix dst_mask
- for X_STORMY16_REL_12 reloc.
-
- * elf.c (bfd_elf_get_needed_list): Use is_elf_hash_table to check
- the type of the hash table in the bfd_link_info structure.
- (bfd_elf_get_runpath_list): Likewise.
-
-2003-05-19 Roland McGrath <roland@redhat.com>
-
- * elf.c (bfd_elf_bfd_from_remote_memory): New function.
- * bfd-in.h: Declare it.
- * bfd-in2.h: Regenerated.
- * elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): New function.
- * elf-bfd.h (struct elf_backend_data): New function pointer member
- elf_backend_bfd_from_remote_memory.
- (_bfd_elf32_bfd_from_remote_memory, _bfd_elf64_bfd_from_remote_memory):
- Declare them.
- * elfxx-target.h (elf_backend_bfd_from_remote_memory): New macro.
- (elfNN_bed): Add that to the initializer.
-
-2003-05-15 Roland McGrath <roland@redhat.com>
-
- * elf.c (elfcore_grok_note): Grok NT_AUXV note, make ".auxv" section.
-
-2003-05-20 Jakub Jelinek <jakub@redhat.com>
-
- * elflink.h (elf_link_output_extsym): Only issue error about !=
- STV_DEFAULT symbols if they are bfd_link_hash_undefined.
-
-2003-05-20 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.c (_bfd_elf_merge_symbol): Check ELF_LINK_DYNAMIC_DEF
- when removing the old definition for symbols with non-default
- visibility.
-
-2003-05-18 Jason Eckhardt <jle@rice.edu>
-
- * elf32-i860.c (elf32_i860_relocate_highadj): Simplify calculation.
-
-2003-05-17 Andreas Schwab <schwab@suse.de>
-
- * elf32-m68k.c (elf_m68k_check_relocs): Cache reloc section in
- elf_section_data during processing of pc-relative and absolute
- relocations.
- (elf_m68k_relocate_section): Use the cached reloc section instead
- of computing it again. Fix handling of visibility. Don't modify
- addend when copying over a relocation into the output.
-
-2003-05-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-i386.c (elf_i386_adjust_dynamic_symbol): Use SYMBOL_CALLS_LOCAL
- to trim plt entries. Move undefweak non-default visibility test..
- (allocate_dynrelocs): ..from here.
- * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't test
- dynamic_sections_created here. Update comment. Move undefweak
- non-default visibility test..
- (allocate_dynrelocs): ..from here. Fix comment.
- * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Use SYMBOL_CALLS_LOCAL
- to trim plt entries. Move undefweak non-default visibility test..
- (allocate_dynrelocs): ..from here. Fix comment.
- * elflink.h (elf_link_output_extsym): Compare ELF_ST_VISIBILITY with
- STV_DEFAULT rather than comparing with zero.
- * elflink.c (_bfd_elf_merge_symbol): Likewise.
- (_bfd_elf_fix_symbol_flags): Likewise. Format comment.
-
-2003-05-17 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * bfd.c (_bfd_get_gp_value): Prevent illegal access for abfd null
- pointers.
- (_bfd_set_gp_value): Likewise.
-
-2003-05-16 Michael Snyder <msnyder@redhat.com>
- From Bernd Schmidt <bernds@redhat.com>
- * archures.c (bfd_mach_h8300sx): New.
- * bfd-in2.h: Regenerate.
- * cpu-h8300.c (h8300_scan)): Add support for h8300sx.
- (h8300sx_info_struct): New.
- (h8300s_info_struct): Link to it.
- * elf32-h8300.c (elf32_h8_mach): Add support for h8300sx.
- (elf32_h8_final_write_processing): Likewise.
- (elf32_h8_relax_section): Likewise.
-
-2003-05-16 Kelley Cook <kelleycook@wideopenwest.com>
-
- * config.bfd: Accept i[3-7]86 variants.
- * configure.host: Likewise.
- * configure.in: Likewise.
- * configure: Regenerate.
-
-2003-05-15 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.c (_bfd_elf_fix_symbol_flags): Also hide protected
- symbol.
-
-2003-05-15 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.h (elf_link_check_versioned_symbol): Also allow
- the base version.
-
-2003-05-15 Alan Modra <amodra@bigpond.net.au>
- H.J. Lu <hongjiu.lu@intel.com>
-
- * elf32-i386.c (allocate_dynrelocs): Use SYMBOL_CALLS_LOCAL.
- (elf_i386_relocate_section): Likewise.
- * elf32-ppc.c (allocate_dynrelocs): Likewise.
- (ppc_elf_relocate_section): Likewise.
- * elf64-ppc.c (allocate_dynrelocs): Likewise.
- (ppc64_elf_relocate_section): Likewise.
-
-2003-05-15 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf32-mips.c (gprel32_with_gp): Remove useless N64 ABI case.
-
-2003-05-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc1x.c (_bfd_m68hc11_elf_merge_private_bfd_data): Check for
- processor capability, allow merge of HC12 and HCS12 in some cases.
- (m68hc11_elf_hash_table_create): Use bfd_malloc instead of bfd_zalloc.
- * cpu-m68hc12.c (bfd_m68hc12s_arch): New struct.
- (bfd_m68hc12_arch): Link it.
- (scan_mach): New function.
-
-2003-05-13 Andrew Haley <aph@redhat.com>
-
- * elf.c (bfd_elf_hash): Mask lower 32 bits of hash.
-
-2003-05-13 Alan Modra <amodra@bigpond.net.au>
- H.J. Lu <hongjiu.lu@intel.com>
-
- * elf-bfd.h (SYMBOL_REFERENCES_LOCAL, SYMBOL_CALLS_LOCAL): Move from
- elf32-ppc.c. Add ELF_LINK_FORCED_LOCAL check.
- * elf32-ppc.c: (SYMBOL_REFERENCES_LOCAL, SYMBOL_CALLS_LOCAL): Delete.
- (allocate_dynrelocs): Use SYMBOL_REFERENCES_LOCAL for dynreloc check.
- (ppc_elf_relocate_section): Likewise.
- * elf64-ppc.c (allocate_dynrelocs): Likewise.
- (ppc64_elf_relocate_section): Likewise. Use for .got relocs too.
- (ppc64_elf_adjust_dynamic_symbol): Don't assume symbols with .plt
- relocs need no other types.
- * elf32-i386.c (allocate_dynrelocs): Use SYMBOL_REFERENCES_LOCAL for
- dynreloc check.
- (elf_i386_relocate_section): Likewise. Use for .got relocs too.
- (elf_i386_finish_dynamic_symbol): Use SYMBOL_REFERENCES_LOCAL for
- .got relocs.
-
-2003-05-13 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_adjust_dynamic_symbol): For weak symbols,
- copy ELF_LINK_NON_GOT_REF from weakdef.
- (allocate_dynrelocs): For undef weak syms with non-default
- visibility, a) don't allocate plt entries, b) don't allocate
- .got relocs, c) discard dyn rel space
- (sh_elf_relocate_section): d) don't generate .got relocs, e)
- don't generate dynamic relocs.
- (sh_elf_copy_indirect_symbol): Don't copy ELF_LINK_NON_GOT_REF
- for weakdefs when symbol already adjusted.
-
-2003-05-12 Nick Clifton <nickc@redhat.com>
-
- * elf32-xstormy16.c (xstormy16_elf_howto_table): use 'bitfield'
- overflow detection for R_XSTORMY16_16 reloc.
-
-2003-05-12 Paul Clarke <paulc@senet.com.au>
-
- * elf32-h8300.c: Fix typo in name of R_H8_DIR8 reloc.
-
-2003-05-11 Jason Eckhardt <jle@rice.edu>
-
- * elf32-i860.c (elf32_i860_relocate_highadj): Properly
- adjust upper bits.
- (elf32_i860_relocate_splitn): Obtain upper 5 bits from the
- proper place.
- (elf32_i860_relocate_pc16): Obtain upper 5 bits from the
- proper place.
-
-2003-05-11 Andreas Schwab <schwab@suse.de>
-
- * elf32-m68k.c (elf_m68k_relocate_section): Replace ugly
- complicated tests for unresolvable relocs with a simple direct
- scheme using "unresolved_reloc" var. Report some detail on
- bfd_reloc_outofrange and similar errors.
-
-2003-05-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf32-s390.c (allocate_dynrelocs, elf_s390_relocate_section):
- Fix WILL_CALL_FINISH_DYNAMIC_SYMBOL call.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead of INFO.
- * elf64-s390.c: Likewise.
-
-2003-05-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf32-s390.c (ELIMINATE_COPY_RELOCS): Define as one.
- (elf_s390_adjust_dynamic_symbol): For weak symbols, copy
- ELF_LINK_NON_GOT_REF from weakdef.
- (elf_s390_copy_indirect_symbol): Test whether the weakdef sym has
- already been adjusted before treating it specially.
- * el64-s390.c: Likwise.
-
-2003-05-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf32-s390.c (allocate_dynrelocs): For undef weak syms with
- non-default visibility, a) don't make them dynamic, b) discard
- space for dynamic relocs.
- (elf_s390_relocate_section): Initialize the GOT entries and skip
- R_390_{8,16,32}/R_390_PC{16,16DBL,32DBL,32} for weak undefined
- symbols with non-default visibility.
- * elf64-s390.c: Likewise.
-
-2003-05-09 Alan Modra <amodra@bigpond.net.au>
-
- * cpu-arm.c (arm_check_note): Warning fix.
- * elf32-iq2000.c (iq2000_elf_check_relocs): Warning fixes. Arrange
- to keep relocs if edited.
- (iq2000_elf_print_private_bfd_data): Return TRUE.
- * elfxx-ia64.c (elfNN_ia64_relax_section): Use ELFNN_R_SYM, not
- ELF64_R_SYM.
- (elfNN_ia64_relax_ldxmov): Warning fix.
- * xtensa-isa.c (xtensa_add_isa): Warning fix.
- * xtensa-modules.c (get_num_opcodes): Warning fix.
-
-2003-05-09 Andrey Petrov <petrov@netbsd.org>
-
- * elf.c (elf_fake_sections): Use correct cast for sh_name.
-
-2003-05-09 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.c (_bfd_elf_link_create_dynamic_sections): Move from
- elflink.h. Replace LOG_FILE_ALIGN with bed->s->log_file_align.
- (_bfd_elf_create_dynamic_sections): Use bed->s->log_file_align.
- (bfd_elf_record_link_assignment): Move from elflink.h.
- (_bfd_elf_merge_symbol): Likewise.
- (_bfd_elf_add_default_symbol): Likewise.
- (_bfd_elf_export_symbol): Likewise.
- (_bfd_elf_link_find_version_dependencies): Likewise.
- (_bfd_elf_link_assign_sym_version): Likewise.
- (_bfd_elf_link_read_relocs): Likewise.
- (_bfd_elf_link_size_reloc_section): Likewise.
- (_bfd_elf_fix_symbol_flags): Likewise.
- (_bfd_elf_adjust_dynamic_symbol): Likewise.
- (_bfd_elf_link_sec_merge_syms): Likewise.
- (elf_link_read_relocs_from_section): Likewise. Use bed->s->sizeof_rel
- and bed->s->sizeof_rela.
- (_bfd_elf_link_output_relocs): Likewise.
- * elf-bfd.h (struct elf_size_info): Rename file_align to
- log_file_align.
- (struct elf_info_failed): Move from elflink.h.
- (struct elf_assign_sym_version_info): Likewise.
- (struct elf_find_verdep_info): Likewise.
- (_bfd_elf_create_dynamic_sections): Delete duplicate declaration.
- (_bfd_elf_merge_symbol, _bfd_elf_add_default_symbol,
- _bfd_elf_export_symbol, _bfd_elf_link_find_version_dependencies,
- _bfd_elf_link_assign_sym_version,
- _bfd_elf_link_create_dynamic_sections, _bfd_elf_link_read_relocs,
- _bfd_elf_link_size_reloc_section, _bfd_elf_link_output_relocs,
- _bfd_elf_fix_symbol_flags, _bfd_elf_adjust_dynamic_symbol,
- _bfd_elf_link_sec_merge_syms): Declare.
- (bfd_elf32_link_create_dynamic_sections): Don't declare.
- (_bfd_elf32_link_read_relocs): Likewise.
- (bfd_elf64_link_create_dynamic_sections): Likewise.
- (_bfd_elf64_link_read_relocs): Likewise.
- * elflink.h: Move lots o' stuff elsewhere.
- * bfd-in.h (bfd_elf32_record_link_assignment): Don't declare.
- (bfd_elf64_record_link_assignment): Likewise.
- (bfd_elf_record_link_assignment): Declare.
- * bfd-in2.h: Regenerate.
- * elfcode.h (elf_link_create_dynamic_sections): Don't declare.
- (NAME(_bfd_elf,size_info)): Adjust for log_file_align.
- * elf.c (_bfd_elf_init_reloc_shdr): Adjust for bed->s->log_file_align.
- (assign_file_positions_for_segments): Likewise.
- (assign_file_positions_except_relocs): Likewise.
- (swap_out_syms, elfcore_write_note): Likewise.
- * elf-m10200.c: Adjust for changed function names.
- * elf-m10300.c: Likewise.
- * elf32-arm.h: Likewise.
+ * coff-h8300.c: Fix comment typos.
* elf32-h8300.c: Likewise.
- * elf32-hppa.c: Likewise.
- * elf32-ip2k.c: Likewise.
- * elf32-m32r.c: Likewise.
- * elf32-m68hc11.c: Likewise.
- * elf32-m68hc1x.c: Likewise.
- * elf32-m68k.c: Likewise.
- * elf32-mips.c: Likewise.
- * elf32-ppc.c: Likewise.
- * elf32-sh.c: Likewise.
- * elf32-v850.c: Likewise.
- * elf32-xtensa.c: Likewise.
- * elf64-alpha.c: Likewise.
- * elf64-hppa.c: Likewise.
- * elf64-mmix.c: Likewise.
- * elf64-ppc.c: Likewise.
- * elf64-sh64.c: Likewise.
- * elfxx-ia64.c: Likewise.
- * elfxx-mips.c: Likewise.
- (MIPS_ELF_LOG_FILE_ALIGN): Use log_file_align.
- * elf64-alpha.c (alpha_elf_size_info): Adjust for log_file_align.
- * elf64-hppa.c (hppa64_elf_size_info): Likewise.
- * elf64-mips.c (mips_elf64_size_info): Likewise.
- * elf64-s390.c (s390_elf64_size_info): Likewise.
- * elf64-sparc.c (sparc64_elf_size_info): Likewise.
-
-2003-05-08 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.h (elf_add_default_symbol): After skipping the
- unversioned symbol, go to non-default one.
-
-2003-05-07 H.J. Lu <hongjiu.lu@intel.com>
-
- * elfxx-ia64.c (_bfd_elf_link_hash_hide_symbol): Also clear the
- want_plt field.
- (elfNN_ia64_relocate_section): Don't do dynamic symbol lookup
- for symbols with non-default visibility.
-
-2003-05-07 H.J. Lu <hongjiu.lu@intel.com>
-
- * elflink.h (elf_link_check_versioned_symbol): Also handle the
- case that a DSO references a hidden symbol which may be
- satisfied by a versioned symbol in another DSO.
- (elf_link_output_extsym): Check versioned definition for hidden
- symbol referenced by a DSO.
-
-2003-05-07 Nick Clifton <nickc@redhat.com>
-
- * elf32-xstormy16.c (xstormy16_elf_howto_table): Reset
- R_XSTORMY16_16 reloc to ignore overflows.
-
-2003-05-06 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Improve
- error message for mixing different-endian files. Check for ABI
- compatibility of input files with the selected emulation.
-
-2003-05-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-i386.c (allocate_dynrelocs): For undef weak syms with
- non-default visibility, a) don't make them dynamic, b) discard
- space for dynamic relocs.
- * elf64-x86-64.c (allocate_dynrelocs): Likewise.
-
- * elf32-ppc.c (allocate_dynrelocs): For undef weak syms with
- non-default visibility, a) don't allocate plt entries, b) don't
- allocate .got relocs, c) discard dyn rel space,
- (ppc_elf_relocate_section): d) don't generate .got relocs, e)
- don't generate dynamic relocs.
- * elf64-ppc.c (allocate_dynrelocs): As above.
- (ppc64_elf_relocate_section): As above.
-
-2003-05-05 Andreas Jaeger <aj@suse.de>
-
- * elf64-x86-64.c (allocate_dynrelocs): Don't allocate dynamic
- relocation entries for weak undefined symbols with non-default
- visibility.
- (elf64_x86_64_relocate_section): Initialize the GOT entries and
- skip R_386_32/R_386_PC32 for weak undefined symbols with
- non-default visibility.
-
-2003-05-04 H.J. Lu <hjl@gnu.org>
-
- * elf32-i386.c (allocate_dynrelocs): Don't allocate dynamic
- relocation entries for weak undefined symbols with non-default
- visibility.
- (elf_i386_relocate_section): Initialize the GOT entries and
- skip R_386_32/R_386_PC32 for weak undefined symbols with
- non-default visibility.
-
- * elfxx-ia64.c (allocate_fptr): Don't allocate function
- descriptors for weak undefined symbols with non-default
- visibility.
- (allocate_dynrel_entries): Don't allocate relocation entries
- for symbols resolved to 0.
- (set_got_entry): Don't install dynamic relocation for weak
- undefined symbols with non-default visibility.
- (set_pltoff_entry): Likewise.
-
- * elflink.h (elf_fix_symbol_flags): Hide weak undefined symbols
- with non-default visibility.
- (elf_link_output_extsym): Don't make weak undefined symbols
- with non-default visibility dynamic.
-
-2003-05-04 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_merge_symbol): Correctly handle weak definition.
-
-2003-05-04 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_merge_symbol): Don't record a hidden/internal
- symbol dynamic. Check indirection when removing the old
- definition for symbols with non-default visibility.
- (elf_add_default_symbol): Skip when told by elf_merge_symbol.
-
-2003-05-02 Nick Clifton <nickc@redhat.com>
-
- * elf32-xstormy16.c (xstormy16_elf_howto_table): Make the
- R_XSTORMY16_8 and R_XSTORMY16_16 relocs detect and complain about
- unsigned overflow.
-2003-05-02 Andreas Jaeger <aj@suse.de>
+2004-01-16 Kazu Hirata <kazu@cs.umass.edu>
- * elf64-x86-64.c (elf_x86_64_copy_indirect_symbol): Don't copy
- ELF_LINK_NON_GOT_REF for weakdefs when symbol already adjusted.
- (ELIMINATE_COPY_RELOCS): Define as one. Use throughout.
- (elf_x86_64_adjust_dynamic_symbol): For weak symbols, copy
- ELF_LINK_NON_GOT_REF from weakdef.
-
-2003-05-02 Charles Lepple <clepple@ghz.cc>
- Nick Clifton <nickc@redhat.com>
-
- * acinclude.m4: Fix name of --enable-install-libbfd switch.
- * aclocal.m4: Regenerate.
- * configure: Regenerate.
- * Makefile.in: Regenerate.
-
-2003-05-01 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_copy_indirect_symbol): Test whether the
- weakdef sym has already been adjusted before treating it specially.
- * elf32-i386.c (elf_i386_copy_indirect_symbol): Don't copy
- ELF_LINK_NON_GOT_REF for weakdefs when symbol already adjusted.
- * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
- (ppc64_elf_check_relocs): Set ELF_LINK_NON_GOT_REF.
-
-2003-04-28 H.J. Lu <hjl@gnu.org>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Relax ldxmov during
- the relax finalize pass.
-
- * section.c (struct sec): Add need_finalize_relax and remove
- flag11.
- (STD_SECTION): Update struct sec initializer.
- * bfd-in2.h: Regenerated.
-
-2003-04-28 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_merge_symbol): Call elf_backend_copy_indirect_symbol
- to copy any information related to dynamic linking when we flip
- the indirection.
-
-2003-04-27 H.J. Lu <hjl@gnu.org>
-
- * elf-bfd.h (ELF_LINK_DYNAMIC_DEF): New.
- (ELF_LINK_DYNAMIC_WEAK): New.
-
- * elflink.h (elf_merge_symbol): Add one argument to indicate if
- a symbol should be skipped. Ignore definitions in dynamic
- objects for symbols with non-default visibility.
- (elf_add_default_symbol): Adjusted.
- (elf_link_add_object_symbols): Check if a symbol should be
- skipped. Don't merge the visibility field with the one from
- a dynamic object.
- (elf_link_check_versioned_symbol): Use undef_bfd.
- (elf_link_output_extsym): Warn if a forced local symbol is
- referenced from dynamic objects. Make non-weak undefined symbol
- with non-default visibility a fatal error.
-
-2003-04-27 Daniel Jacobowitz <drow@mvista.com>
-
- * configure.in: Bump version on HEAD to 2.14.90.
- * configure: Regenerated.
-
-2003-04-26 Stephane Carrez <stcarrez@nerim.fr>
-
- PR savannah/3331:
- * elf32-m68hc11.c (m68hc11_elf_relax_section): Clear prev_insn_group
- when we couldn't relax something.
-
-2003-04-25 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_merge_symbol): When we find a regular definition
- for an indirect symbol, flip the indirection so that the old
- direct symbol now points to the new definition.
-
-2003-04-24 Roland McGrath <roland@redhat.com>
-
- * elf.c (bfd_section_from_phdr): Map PT_GNU_EH_FRAME to "eh_frame_hdr".
-
-2003-04-24 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c: Formatting and comment fixes.
- (ELIMINATE_COPY_RELOCS): Move before ppc_elf_copy_indirect_symbol.
- (ppc_elf_copy_indirect_symbol): Copy flags here for weakdefs.
-
-2003-04-24 Dhananjay Deshpande <dhananjayd@kpitcummins.com>
-
- * archures.c (bfd_mach_h8300hn, bfd_mach_h8300sn): Added.
- * bfd-in2.h: Rebuilt.
- * coff-h8300.c (BADMAG): Add check for H8300HNBADMAG & H8300SNBADMAG.
- * coffcode.h (coff_set_arch_mach_hook): Add case for H8300HNMAGIC
- & H8300SNMAGIC.
- (coff_set_flags): Add case for bfd_mach_h8300hn & bfd_mach_h8300sn.
- * cpu-h8300.c (h8300_scan): Handle h8300hn, h8300sn.
- (h8300sn_info_struct, h8300hn_info_struct): New.
- * elf32-h8300.c (elf32_h8_mach): Handle case for h8300hn & h8300sn
- (elf32_h8_final_write_processing): Likewise.
-
-2003-04-23 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (tpoff): New.
- (struct elf_sh_dyn_relocs): Remove tls_tpoff32.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead of INFO.
- (allocate_dynrelocs): Don't make unnecessary dynamic TLS
- relocations. Adjust WILL_CALL_FINISH_DYNAMIC_SYMBOL uses.
- (sh_elf_relocate_section): Likewise. Remove unnecessary tests.
- (dtpoff_base): Fix wrong indentation.
- (sh_elf_check_relocs): Don't set DF_STATIC_TLS flag with non-TLS
- relocations. Don't set tls_tpoff32 flag. Don't make unnecessary
- R_SH_TLS_TPOFF32 relocations.
-
-2003-04-23 J"orn Rennecke <joern.rennecke@superh.com>
-
- * archures.c (enum bfd_architecture): Amend comment to refer to SuperH.
- * cpu-sh.c: Likewise.
- * elf32-sh.c: Likewise.
- * reloc.c (bfd_reloc_code_real): Likewise.
- * elf32-sh64-com.c: Change comment to refer to SuperH.
- * elf32-sh64.c: Likewise.
- * elf64-sh64.c: Likewise.
- * bfd-in2.h (enum bfd_architecture): Regenerate.
-
-2003-04-23 Alan Modra <amodra@bigpond.net.au>
-
- From Julien LEMOINE <speedblue@debian.org>
- * elf32-i386.c (elf_i386_info_to_howto): Delete.
- (elf_info_to_howto): Define as elf_i386_info_to_howto_rel.
-
-2003-04-22 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
-
- * archures.c: Replace references to Mitsubishi M32R with references
- to Renesas M32R.
- * relocs.c: Likewise.
- * bfd-in2.h: Regenerate.
-
-2003-04-21 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (alpha_elf_dynamic_symbol_p): Return false for an
- executable when a symbol is defined both regular and dynamic.
-
-2003-04-21 Stephane Carrez <stcarrez@nerim.fr>
-
- * Makefile.am (BFD32_BACKENDS): Add elf32-m68hc1x.lo.
- (elf32-m68hc1x.lo): Update dependencies
- * configure.in: Add elf32-m68hc1x.lo.
- * configure: Rebuild.
- * Makefile.in: Rebuild.
-
-2003-04-21 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc1x.c: New file (from elf32-m68hc11.c and elf32-m68hc12.c)
- (m68hc11_elf_hash_table_create): New function.
- (elf32_m68hc11_link_hash_table_free): New function.
- (stub_hash_newfunc): New function.
- (m68hc11_add_stub): New function.
- (elf32_m68hc11_add_symbol_hook): New function.
- (elf32_m68hc11_setup_section_lists): New function.
- (elf32_m68hc11_next_input_section): New function.
- (elf32_m68hc11_size_stubs): New function.
- (elf32_m68hc11_build_stubs): New function.
- (m68hc11_get_relocation_value): New function.
- (elf32_m68hc11_relocate_section): Call the above to redirect
- some relocations to the trampoline code.
- (m68hc11_elf_export_one_stub): New function.
- (m68hc11_elf_set_symbol): New function.
- (elf32_m68hc11_build_stubs): Call it via bfd_hash_traverse.
- (m68hc11_elf_get_bank_parameters): Get parameters only when the info
- is not yet initialized.
-
- * elf32-m68hc1x.h: New file (from elf32-m68hc11.c and elf32-m68hc12.c)
- (elf32_m68hc11_stub_hash_entry): New struct.
- (m68hc11_page_info): Add trampoline handler address.
- (m68hc11_elf_link_hash_table): Add stubs generation members.
- (elf32_m68hc11_add_symbol_hook): Declare.
- (elf32_m68hc11_setup_section_lists): Declare.
- (elf32_m68hc11_size_stubs): Declare.
- (elf32_m68hc11_build_stubs): Declare.
-
- * elf32-m68hc11.c (m68hc11_elf_ignore_reloc): Move to elf32-m68hc1x.c.
- (elf32_m68hc11_gc_mark_hook, elf32_m68hc11_gc_sweep_hook): Likewise.
- (elf32_m68hc11_check_relocs, elf32_m68hc11_relocate_section): Ditto.
- (_bfd_m68hc11_elf_set_private_flags): Ditto.
- (_bfd_m68hc11_elf_merge_private_bfd_data): Ditto.
- (_bfd_m68hc11_elf_print_private_bfd_data): Ditto.
- (bfd_elf32_bfd_link_hash_table_create): Define.
- (elf_backend_add_symbol_hook): Define.
- (m68hc11_elf_bfd_link_hash_table_create): New function.
- (m68hc11_elf_build_one_stub): New function.
- (m68hc11_elf_size_one_stub): New function.
- (m68hc11_elf_bfd_link_hash_table_create): Install the above.
- (bfd_elf32_bfd_link_hash_table_create): Define.
-
- * elf32-m68hc12.c (m68hc11_elf_ignore_reloc): Remove.
- (m68hc12_addr_is_banked): Remove, use m68hc11_addr_is_banked.
- (m68hc12_phys_addr): Ditto.
- (m68hc12_phys_page): Ditto.
- (m68hc12_elf_special_reloc): Move to elf32-m68hc1x.c.
- (elf32_m68hc11_gc_mark_hook): Likewise.
- (elf32_m68hc11_gc_sweep_hook): Likewise.
- (elf32_m68hc11_check_relocs): Likewise.
- (elf32_m68hc11_relocate_section): Likewise.
- (_bfd_m68hc12_elf_set_private_flags): Likewise.
- (_bfd_m68hc12_elf_merge_private_bfd_data): Likewise.
- (_bfd_m68hc12_elf_print_private_bfd_data): Likewise.
- (m68hc12_elf_build_one_stub): New function.
- (m68hc12_elf_size_one_stub): New function.
- (m68hc12_elf_bfd_link_hash_table_create): New function, use the above.
- (elf_backend_add_symbol_hook): Define.
- (elf_m68hc11_howto_table): Use TRUE for pcrel relocs; fix masks.
-
-2003-04-18 Nick Clifton <nickc@redhat.com>
-
- * format.c (bfd_check_format_matches): Only check associated
- vector if the matching_vector has been created.
-
-2003-04-15 Alexandre Oliva <aoliva@redhat.com>
-
- * dwarf2.c (_bfd_dwarf2_find_nearest_line): Fix typo in
- 2003-04-09's change.
-
-2003-04-15 Brian Ford <ford@vss.fsi.com>
-
- * peicode.h (coff_swap_scnhdr_in): If a section holds
- uninitialized data and is from an object file or from an
- executable image that has not initialized the s_size field, or if
- the physical size is padded, use the virtual size (stored in
- s_paddr) instead.
-
-2003-04-15 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_link_add_object_symbols): Properly report
- filename for alignment reduction.
-
-2003-04-15 Rohit Kumar Srivastava <rohits@kpitcummins.com>
-
- * archures.c: Replace occurrances of 'Hitachi' with 'Renesas'.
- * reloc.c: Likewise.
- * coff-h8300.c: Likewise.
- * coff-h8500.c: Likewise.
- * coff-sh.c: Likewise.
- * cpu-h8300.c: Likewise.
- * cpu-sh.c: Likewise.
+ * coff-h8300.c: Add comments about relaxation.
* elf32-h8300.c: Likewise.
- * elf32-sh.c: Likewise.
- * elf32-sh64-com.c: Likewise.
- * elf32-sh64.c: Likewise.
- * elf64-sh64.c: Likewise.
- * bfd-in2.h: Regenerate.
-
-2003-04-14 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_link_add_object_symbols): Maintain maximum
- alignment for common symbols. Warn reducing alignment for
- common symbols. Report old filename when symbol size changes.
-
-2003-04-12 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_calculate_relocation): Adjust two other
- occurrences of the same test changed in the previous patch.
- Optimize.
-
-2003-04-11 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_get_global_gotsym_index): New.
- (mips_elf_calculate_relocation): Decay GOT_PAGE/GOT_OFST to
- GOT_DISP/addend only if the symbol got a global GOT entry.
-
-2003-04-10 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_calculate_relocation): Decay
- GOT_PAGE/GOT_OFST referencing overridable symbol to
- GOT_DISP/addend.
- (_bfd_mips_elf_check_relocs): Handle GOT_PAGE referencing
- global symbol as GOT_DISP.
-
-2003-04-10 Bob Wilson <bob.wilson@acm.org>
-
- * elf32-xtensa.c (elf_xtensa_relocate_section): Don't continue to the
- next relocation on an undefined symbol.
-
-2003-04-09 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relocate_section) <R_ALPHA_GPREL32>:
- Ignore relocations against r_symndx == 0.
-
-2003-04-09 H.J. Lu <hjl@gnu.org>
-
- * elf64-alpha.c (elf64_alpha_relocate_section): Don't return
- FALSE for undefined symbols.
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
-
-2003-04-09 Alexandre Oliva <aoliva@redhat.com>
-
- * dwarf2.c (_bfd_dwarf2_find_nearest_line): Try DWARF3-standard
- and IRIX-specific shift-to-64-bit 4-byte lengths before following
- addr_size.
-
-2003-04-08 Alexandre Oliva <aoliva@redhat.com>
-
- * elf32-mips.c (bfd_elf32_bfd_reloc_type_lookup): Detect (ctor)
- pointer size from ABI, not arch_bits_per_address.
-
-2003-04-07 Kevin Buettner <kevinb@redhat.com>
-
- * elfn32-mips.c (elf32_mips_grok_prstatus): Adjust core file related
- constants for n32 ABI.
-
-2003-04-06 Andrew Cagney <cagney@redhat.com>
-
- * simple.c (bfd_simple_get_relocated_section_contents): Disable
- free that leads to GDB vs BFD memory corruption.
-
-2003-04-04 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc11.c (m68hc11_elf_relax_delete_bytes): Also adjust
- symbols that mark the end of the section.
- (m68hc11_elf_relax_section): Use R_M68HC11_PCREL_8 relocs when
- converting to a relative branch so that the offset is computed after
- the relaxation; also relocate a jsr into a bsr if possible but don't
- relax them if they are to a far symbol as we need to call the
- trampoline code.
- (elf_m68hc11_howto_table): Set pcrel_offset to true.
-
-2003-04-04 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * archures.c: Namespace cleanup. Rename bfd_mach_c3x to
- bfd_mach_tic3x and bfd_mach_c4x to bfd_mach_tic4x
- * bfd-in2.h: Regenerate
- * coff-tic4x.c: Namespace cleanup. Replace s/c4x/tic4x/
- * cpu-tic4x.c: Ditto
-
-2003-04-03 Nick Clifton <nickc@redhat.com>
-
- * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Compute ps and ss
- differently for object files and executables.
- * peicode.h (coff_swap_scnhdr_in): Only set the s_size field
- for object files or for executables who have not already
- initialised the field.
- * libpei.h (bfd_pe_executable_p): New macro. Return true if
- the PE format bfd is an executable.
-
-2003-04-03 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_check_relocs): Don't use SYMBOL_REFERENCES_LOCAL
- here as it's too early to reliably determine locality.
- (ppc_elf_gc_sweep_hook): Likewise.
- (SYMBOL_REFERENCES_LOCAL): Expand comment.
-
-2003-04-02 Bob Wilson <bob.wilson@acm.org>
-
- * xtensa-modules.c: Remove comment indicating that this is a
- generated file.
-
-2003-04-02 Alan Modra <amodra@bigpond.net.au>
-
- * elfxx-mips.c (_bfd_mips_elf_hide_symbol): Test for NULL dynobj.
-
-2003-04-01 Bob Wilson <bob.wilson@acm.org>
-
- * Makefile.am (ALL_MACHINES): Add cpu-xtensa.lo.
- (ALL_MACHINES_CFILES): Add cpu-xtensa.c.
- (BFD32_BACKENDS): Add elf32-xtensa.lo, xtensa-isa.lo, and
- xtensa-modules.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-xtensa.c, xtensa-isa.c, and
- xtensa-modules.c.
- (cpu-xtensa.lo): New target.
- (elf32-xtensa.lo): Likewise.
- (xtensa-isa.lo): Likewise.
- (xtensa-modules.lo): Likewise.
- * Makefile.in: Regenerate.
- * archures.c (bfd_architecture): Add bfd_{arch,mach}_xtensa.
- (bfd_archures_list): Add bfd_xtensa_arch.
- * config.bfd: Handle xtensa-*-*.
- * configure.in: Handle bfd_elf32_xtensa_{le,be}_vec.
- * configure: Regenerate.
- * reloc.c: Add BFD_RELOC_XTENSA_{RTLD,GLOB_DAT,JMP_SLOT,RELATIVE,
- PLT,OP0,OP1,OP2,ASM_EXPAND,ASM_SIMPLIFY}.
- * targets.c (bfd_elf32_xtensa_be_vec): Declare.
- (bfd_elf32_xtensa_le_vec): Likewise.
- (bfd_target_vector): Add bfd_elf32_xtensa_{be,le}_vec.
- * cpu-xtensa.c: New file.
- * elf32-xtensa.c: Likewise.
- * xtensa-isa.c: Likewise.
- * xtensa-modules.c: Likewise.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Likewise.
-
-2003-04-01 Nick Clifton <nickc@redhat.com>
-
- * archures.c (bfd_mach_arm_unknown): Define.
- * bfd-in.h (bfd_arm_merge_machines, bfd_arm+update_notes,
- bfd_arm_get_mach_from_notes): Prototype.
- * bfd-in2.h: Regenerate.
- * coff-arm.c (coff_arm_merge_private_bfd_data): Call
- bfd_arm_merge_machines.
- (coff_arm_final_link_postscript): Call bfd_arm_update_notes.
- * coffcode.h (coff_set_arch_mach_hook): Call
- bfd_arm_get_mach_from_notes.
- * coffgen.c (coff_real_object_p): Revert previous delta.
- * cpu_arm.c (arm_check_note): New function. Examine a note in a
- .note section.
- (bfd_arm_merge_machines): New function: Handle the merging of ARM
- binaries compiled for different architectures..
- (bfd_arm_update_notes): New function: Update an ARM note section.
- (bfd_arm_get_mach_from_notes): New function: Extract a bfd machine
- number from an ARM note section.
- * elf32-arm.h (elf32_arm_object_p): Use
- bfd_arm_get_mach_from_notes.
- (elf32_arm_merge_private_bfd_data): Use bfd_arm_merge_machines.
- (elf32_arm_final_write_processing): Use bfd_arm_update_notes.
-
-2003-04-01 Ben Elliston <bje@wasabisystems.com>
-
- * dwarf2.c (read_attribute_value): Correct typo in comment.
-
-2003-04-01 Nick Clifton <nickc@redhat.com>
-
- * dwarf2.c (concat_filename): Use bfd_malloc() and strdup()
- instead of concat().
- (decode_line_info): Only free filename if it is not NULL.
- (add_line_info): Make a copy of the filename when storing it into
- the info structure.
-
-2003-03-31 Andreas Schwab <schwab@suse.de>
- Daniel Jacobowitz <drow@mvista.com>
-
- * simple.c (bfd_simple_get_relocated_section_contents): Add
- parameter symbol_table. Optionally use it instead of the symbol
- table from the bfd. Save and restore output offsets and output
- sections around bfd_get_relocated_section_contents. Fix a memory
- leak.
- (simple_save_output_info, simple_restore_output_info): New
- functions.
- * bfd-in2.h: Regenerate.
- * dwarf2.c (read_abbrevs): Use
- bfd_simple_get_relocated_section_contents instead of
- bfd_get_section_contents.
- (decode_line_info): Likewise.
- (_bfd_dwarf2_find_nearest_line): Likewise. Don't call
- find_rela_addend.
- (find_rela_addend): Remove.
- * elfxx-ia64.c (elfNN_ia64_reloc): Weaken sanity check for
- debugging sections.
- (elfNN_ia64_hash_table_create): Create the hash table with malloc,
- not bfd_zalloc.
-
-2003-03-31 David Heine <dlheine@suif.stanford.edu>
-
- * aoutx.h (aout_link_hash_table_create): Use bfd_malloc instead of
- bfd_alloc.
- * dwarf2.c (concat_filename): Always allocate space for the
- returned filename.
- (decode_line_info): Free the allocated filename returned by
- concat_filename.
- * elf-eh-frame.c (bfd_elf_write_section_eh_frame): Fix memory leaks.
- * elf.c (copy_private_bfd_data): Likewise.
- (_bfd_elf_slurp_version_tables): Fix bug freeing contents pointer.
- * elflink.h (elf_link_sort_relocs): Fix memory leak.
- * format.c (bfd_check_format_matches): Likewise.
- * linker.c (bfd_generic_final_link): Likewise.
- * opncls.c (find_separate_debug_info): Likewise.
- * simple.c (bfd_simple_get_relocated_section_contents): Likewise.
-
-2003-03-28 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_link_add_object_symbols): Correctly combine
- visibilities.
-
-2003-03-27 Jakub Jelinek <jakub@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Reset self_dtpmod_offset
- to -1 before recomputing got offsets.
-
-2003-03-26 Andreas Schwab <schwab@suse.de>
-
- * elf32-m68k.c (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Define.
- (elf_m68k_relocate_section): Use it to correctly handle symbols
- forced to be local.
- (elf_m68k_finish_dynamic_symbol): Emit RELATIVE reloc for got
- entries for symbols that are forced to be local.
-
-2003-03-25 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (_bfd_mips_relax_section): New function.
- * elfxx-mips.h (_bfd_mips_relax_section): Declare.
- * elfn32-mips.c, elf64-mips.c: Use it.
-
-2003-03-25 Stan Cox <scox@redhat.com>
- Nick Clifton <nickc@redhat.com>
-
- Contribute support for Intel's iWMMXt chip - an ARM variant:
-
- * archures.c: Add bfd_mach_arm_iWMMXt.
- * reloc.c: Add BFD_RELOC_ARM_CP_OFF_IMM_S2.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * coff-arm.c (coff_arm_merge_private_bfd_data): Allow iWMMXt
- object files to be linked with XScale ones.
- (coff_arm_final_link_postscript): Update note section.
- * coffcode.h (coff_set_arch_mach_hook): Handle note section.
- * coffgen.c (coff_real_object_p): Call bfd_coff_set_arch_mach_hook
- after identifying a coff binary.
- * cpu-arm.c (processors): Add iWMMXt.
- (arch_inf): Likewise.
- * elf32-arm.h (arm_object_p): Handle note section.
- (elf32_arm_merge_private_bfd_data): Allow iWMMXt object files to
- be linked with XScale ones.
- (elf32_arm_section_flags): New function: Set flags on note section.
- (elf32_arm_final_write_processing): Handle note section.
-
-2003-03-21 DJ Delorie <dj@redhat.com>
-
- * elf32-xstormy16.c (elf32_xstormy16_relocate_section): Call
- _bfd_elf_rela_local_sym.
-
-2003-03-20 H.J. Lu <hjl@gnu.org>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Don't try relax for
- non-ELF outputs.
-
-2003-03-20 Nick Clifton <nickc@redhat.com>
-
- * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Initialise $idata2 and
- $idata5 in case bfd_coff_final_link is not called.
-
-2003-03-19 Jakub Jelinek <jakub@redhat.com>
-
- * elf64-sparc.c (struct sparc64_elf_section_data): Add reloc_count
- field.
- (canon_reloc_count): Define.
- (sparc64_elf_slurp_one_reloc_table, sparc64_elf_slurp_reloc_table,
- sparc64_elf_canonicalize_dynamic_reloc): Use it instead of
- reloc_count.
- (sparc64_elf_canonicalize_reloc): New routine.
- (bfd_elf64_canonicalize_reloc): Define.
-
-2003-03-18 Jakub Jelinek <jakub@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Handle relaxation
- againt mergeable sections. Take r_addend into account when caching
- trampolines.
-
-2003-03-18 Richard Henderson <rth@redhat.com>
-
- * elfxx-ia64.c (get_dyn_sym_info): Return NULL gracefully for
- local symbols that have no dyninfo.
-
-2003-03-14 Gene Smith <gene.smith@siemens.com>
-
- * ieee.c (ieee_write_expression): Handle the case where symbol is
- NULL.
- General formatting improvements.
-
-2003-03-13 Nick Clifton <nickc@redhat.com>
-
- * configure.in (LINGUAS): Add zh_CN.
- * configure: Regenerate.
- * po/zh_CN.po: New file.
-
-2003-03-13 Elias Athanasopoulos <elathan@phys.uoa.gr>
-
- * aout-cris.c (BYTES_IN_WORD): Don't define.
- aout-encap.c: Likewise.
- aout-ns32k.c: Likewise.
- aout-tic30.c: Likewise.
- hp300bsd.c: Likewise.
- i386aout.c: Likewise.
- i386dynix.c: Likewise.
- i386linux.c: Likewise.
- i386lynx.c: Likewise.
- i386mach3.c: Likewise.
- m68k4knetbsd.c: Likewise.
- m68klinux.c: Likewise.
- m68klynx.c: Likewise.
- m68knetbsd.c: Likewise.
- m88kmach3.c: Likewise.
- mipsbsd.c: Likewise.
- newsos3.c: Likewise.
- sparclinux.c: Likewise.
- sparclynx.c: Likewise.
- sparcnetbsd.c: Likewise.
- vaxbsd.c: Likewise. Fix comment formatting.
-
-2003-03-12 Alexandre Oliva <aoliva@redhat.com>
-
- * Reverted 2003-03-02's patch.
-
- * elfxx-target.h (bfd_elfNN_canonicalize_reloc): Make it
- overridable.
- * elf64-mips.c (mips_elf64_canonicalize_reloc,
- mips_elf64_get_dynamic_reloc_upper_bound,
- mips_elf64_canonicalize_dynamic_reloc): New, adapted from elf.c.
- (bfd_elf64_get_canonicalize_reloc,
- bfd_elf64_get_dynamic_reloc_upper_bound,
- bfd_elf64_canonicalize_dynamic_reloc): Define.
- (mips_elf64_slurp_reloc_table): Support dynamic.
- (mips_elf64_slurp_one_reloc_table): Adjust.
-
-2003-03-12 Nick Clifton <nickc@redhat.com>
-
- * xsym.c (bfd_sym_fetch_type_information_table_entry): Change
- 'index' to 'offset' in test for zero value.
-
-2003-03-11 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_create_dynamic_relocation): Do not create
- dynamic relocations pointing to local or section symbols, use the
- NULL symbol instead. Document the choice to not emit an
- additional R_MIPS_64 relocation.
-
-2003-03-11 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_relocate_section): Subtract tls seg vma from
- zero index dynamic tls relocs generated for the GOT. Tidy code.
- Set "relocation" to 1 on DTPMOD32 relocs. Optimize HA adjustment.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
-
-2003-03-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_relocate_section): Don't look for a nop after
- a tls_get_addr call.
- * elf32-ppc.c (ELIMINATE_COPY_RELOCS): Define as one.
- (ppc_elf_adjust_dynamic_symbol): For weak symbols, copy
- ELF_LINK_NON_GOT_REF from weakdef.
- * elf64-ppc.c (ELIMINATE_COPY_RELOCS): Define as one.
- (ppc64_elf_adjust_dynamic_symbol): For weak symbols, copy
- ELF_LINK_NON_GOT_REF from weakdef.
- * elf32-i386.c (ELIMINATE_COPY_RELOCS): Define as one. Use throughout.
- (elf_i386_adjust_dynamic_symbol): For weak symbols, copy
- ELF_LINK_NON_GOT_REF from weakdef.
+2004-01-14 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-2003-03-06 Jakub Jelinek <jakub@redhat.com>
- Andrew Haley <aph@redhat.com>
-
- * elflink.h (elf_bfd_discard_info): Don't process eh frames if
- output is relocateable.
-
-2003-03-06 Steven Konopa <skonopa@kgo.csc.com>
-
- * som.c (som_fixup_formats): Correct formats for R_AUX_UNWIND and
- R_COMMENT.
-
-2003-03-06 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_create_linker_section): Don't capitalize
- error messages.
- (ELIMINATE_COPY_RELOCS): Define to zero.
- (ppc_elf_relocate_section): Don't deref htab->tls_sec when calculating
- TLSLD relocs. Report reloc types on a number of errors. Optimize
- LOCAL24PC check for non-local syms. Don't capitalize error messages.
- * elf64-ppc.c (ELIMINATE_COPY_RELOCS): Define to zero.
- (ppc64_elf_relocate_section): Don't deref htab->tls_sec when
- calculating TLSLD relocs. Report reloc types on a number of errors.
- Don't capitalize error messages.
-
-2003-03-03 H.J. Lu <hjl@gnu.org>
-
- * elfxx-ia64.c (USE_BRL): Removed.
- (oor_ip): Removed.
-
-2003-03-03 J"orn Rennecke <joern.rennecke@superh.com>
-
- * elf32-sh.c (sh_elf_howto_tab): Make R_SH_IND12W into an ordinary
- relocation (no special function), and make it non-partial_inplace.
- (sh_elf_relax_section): When creating a bsr, use a consistent value
- no matter if the symbol is extern or not; set addend to -4.
- Don't swap load / non-load instructions for SH4.
- (sh_elf_relax_delete_bytes): In R_SH_IND12W case, check the offset
- rather than if the symbol is external to determine if adjusting the
- offset makes sense. Adjust the addend too if appropriate.
- (sh_elf_relocate_section): In R_SH_IND12W, don't fiddle with the
- relocation.
-
-2003-03-03 Nick Clifton <nickc@redhat.com>
-
- * po/da.po: Installed latest translation.
-
-2003-03-02 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf32-mips.c (elf_mips_howto_table_rel): Change definition of
- R_MIPS_PC16 to rightshift 2.
- (elf_reloc_map mips_reloc_map): Map to rightshifted BFD reloc.
- (bfd_elf32_bfd_reloc_type_lookup): Support
- BFD_RELOC_MIPSEMB_16_PCREL_S2.
- * elf64-mips.c (mips_elf64_howto_table_rel): Change definition of
- R_MIPS_PC16 to rightshift 2.
- (mips_elf64_howto_table_rela): Likewise.
- (mips_reloc_map): Map to rightshifted BFD reloc.
- * elfn32-mips.c: The same as in elf64-mips.c.
- * elfxx-mips.c (mips_elf_got_for_ibfd): Typo in comment.
- (mips_elf_calculate_relocation): Handle rightshifted addends for
- R_MIPS_PC16.
- * reloc.c (BFD_RELOC_MIPSEMB_16_PCREL_S2): New BFD relocation for
- MIPS Embedded PIC. Remove superfluous empty COMMENT.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
-
-2003-02-28 Richard Henderson <rth@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Correct bounds
- for ltoff22x relaxation.
-
-2003-03-01 Alan Modra <amodra@bigpond.net.au>
-
- * bfd-in.h (_bfd): Don't define.
- * bfd.c: Rename occurrences of "struct _bfd" to "struct bfd".
- * syms.c: Likewise.
- * bfd-in2.h: Regenerate.
-
-2003-02-27 Richard Henderson <rth@redhat.com>
-
- * elfxx-ia64.c (struct elfNN_ia64_dyn_sym_info): Add want_gotx;
- (elfNN_ia64_check_relocs): Set it.
- (allocate_global_data_got): Check it.
- (allocate_local_got): Likewise.
- (allocate_dynrel_entries): Likewise.
- (elfNN_ia64_relax_ldxmov): New.
- (elfNN_ia64_relax_section): Handle LTOFF22X, LDXMOV.
- (elfNN_ia64_choose_gp): Split out from ...
- (elfNN_ia64_final_link): ... here.
-
-2003-02-27 Andrew Cagney <cagney@redhat.com>
-
- * bfd.c (struct bfd): Rename "struct _bfd".
- * bfd-in.h: Update copyright.
- (struct bfd): Rename "struct _bfd".
- (_bfd): Define for backward compatibility.
- * bfd-in2.h: Regenerate.
-
-2003-02-25 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_bfd_final_link): Apportion reloc counts to rel_hdr
- and rel_hdr2 when initially counting input relocs rather than after
- creating output reloc sections.
- (elf_link_read_relocs_from_section): Don't abort with wrong reloc
- sizes.
-
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
-
-2003-02-24 Kris Warkentin <kewarken@qnx.com>
-
- * elf.c (elfcore_read_notes): Add check for QNX style core file.
- (elfcore_grog_nto_note): New function.
- (elfcore_grog_nto_gregs): New function.
- (elfcore_grog_nto_status): New function.
-
-2003-02-24 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.c (_bfd_elf_create_got_section): Check existing .got
- section flags before concluding that we've already been called.
- Don't use register keyword.
- (_bfd_elf_create_dynamic_sections): Don't use register keyword.
- (_bfd_elf_create_linker_section): Formatting.
-
-2003-02-20 jmc <jmc@prioris.mini.pw.edu.pl>
-
- * coff-h8300.c: Fix typo: intial -> initial.
- * coff-ppc.c: Likewise.
-
-2003-02-20 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c: Formatting.
- (allocate_dynrelocs): LD and GD relocs against the same sym need
- separate GOT entries.
- (ppc_elf_relocate_section): Correct GOT handling for multiple GOT
- entries per symbol.
-
-2003-02-19 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-hppa.c (elf32_hppa_gc_sweep_hook): Simplify dynamic reloc
- removal. Localize vars. Remove unnecessary dynobj test.
- * elf32-i386 (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead
- of INFO.
- (allocate_dynrelocs): Adjust WILL_CALL_FINISH_DYNAMIC_SYMBOL uses,
- and optimize.
- (elf_i386_relocate_section): Likewise.
- (elf_i386_gc_sweep_hook): Simplify dyn reloc removal. Localize vars.
- * elf32-s390.c (elf_s390_gc_sweep_hook): Likewise.
- * elf32-sh.c (sh_elf_gc_sweep_hook): Likewise.
- * elf64-s390.c (elf_s390_gc_sweep_hook): Likewise.
- * elf64-x86-64.c (elf64_x86_64_gc_sweep_hook): Likewise.
- * elf32-sparc.c (elf32_sparc_gc_sweep_hook): Likewise. Remove
- local_dynrel for section too. Don't touch HIPLT22, LOPLT10, PCPLT32
- or PCPLT10 relocs. Don't subtract twice on PLT32 relocs.
- Formatting.
-
- * elf64-ppc.c (ELIMINATE_COPY_RELOCS): Define.
- (ppc64_elf_check_relocs): Use it. Correct comment. Move SEC_ALLOC
- test.
- (ppc64_elf_adjust_dynamic_symbol): Use ELIMINATE_COPY_RELOCS.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead of INFO.
- (allocate_dynrelocs): Adjust WILL_CALL_FINISH_DYNAMIC_SYMBOL uses,
- and optimize. Use ELIMINATE_COPY_RELOCS.
- (ppc64_elf_relocate_section): Likewise.
-
- * elf32-ppc.c (struct ppc_elf_dyn_relocs): Add pc_count field.
- (ppc_elf_copy_indirect_symbol): Copy pc_count field.
- (ELIMINATE_COPY_RELOCS): Define.
- (ppc_elf_adjust_dynamic_symbol): Convert copy relocs to dynamic.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Pass SHARED instead of INFO.
- (MUST_BE_DYN_RELOC): Define.
- (allocate_dynrelocs): Adjust WILL_CALL_FINISH_DYNAMIC_SYMBOL uses,
- and optimize. Trim dyn_relocs.
- (ppc_elf_check_relocs): Don't generate dyn_relocs when we know they'll
- not be used. Do generate dyn_relocs for copy reloc avoidance. Keep
- track of pc_rel dyn relocs.
- (ppc_elf_relocate_section): Remove "will_become_local". Adjust
- WILL_CALL_FINISH_DYNAMIC_SYMBOL use. Trim dyn relocs as per
- allocate_dynrelocs. Don't recalculate "sec".
-
-2003-02-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_relocate_section): Remove unnecessary test.
- * elf64-ppc.c (ppc64_elf_tls_optimize): Decrement tlsld_got.refcount
- on invalid LD relocs.
- (allocate_dynrelocs): Invalid LD relocs don't use tlsld_got entry.
- (ppc64_elf_relocate_section): Unify new handling of LD relocs and
- tlsld_got entry. Use IS_PPC64_TLS_RELOC.
-
- * elf32-ppc.h: New file.
- * elf32-ppc.c: Include elf32-ppc.h.
- (NOP, CROR_151515, CROR_313131, TP_OFFSET, DTP_OFFSET): Define.
- (struct ppc_elf_link_hash_entry): Rename "root" to "elf". Adjust uses.
- Add "tls_mask" field.
- (TLS_GD, TLS_LD, TLS_TPREL, TLS_DTPREL, TLS_TLS, TLS_TPRELGD): Define.
- (struct ppc_elf_link_hash_table): Rename "root" to "elf". Adjust uses.
- Add got, relgot, plt, relplt, dynbss, relbss, dynsbss, relsbss,
- sdata, sdata2, tls_sec, tls_get_addr, tlsld_got fields.
- Make use of htab shortcuts throughout file.
- (ppc_elf_link_hash_newfunc): Init tls_mask field.
- (ppc_elf_link_hash_table_create): Init new fields.
- (ppc_elf_copy_indirect_symbol): Copy tls_mask.
- (ppc_elf_howto_raw): Add tls relocs.
- (ppc_elf_reloc_type_lookup): Handle them.
- (ppc_elf_unhandled_reloc): New function.
- (ppc_elf_create_got): Stash got section pointer in hash table,
- return status. Make .rela.got too.
- (ppc_elf_create_dynamic_sections): Stash section pointers in htab.
- (ppc_elf_adjust_dynamic_symbol): Only set up copy relocs when
- NON_GOT_REF set. Don't allocate space in .plt here..
- (allocate_dynrelocs): ..do so here instead, properly ref-counting and
- not allocating plt entries unnecessarily. Allocate got entries here.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Define.
- (ppc_elf_size_dynamic_sections): Allocate local got entries. Pass
- "info" during allocate_dynrelocs hash traversal. Use htab section
- shortcuts rather than searching for named sections. Get rid of
- "plt" and "strip" booleans.
- (update_local_sym_info, bad_shared_reloc): New functions.
- (ppc_elf_check_relocs): Handle TLS relocs. Move .rela.got creation to
- ppc_elf_create_got. Don't mark got or plt reloc syms dynamic, do so
- in allocate_dynreloc. Use update_local_sym_info and bad_shared_reloc.
- Disallow R_PPC_EMB_RELSDA, R_PPC_EMB_NADDR32, R_PPC_EMB_NADDR16,
- R_PPC_EMB_NADDR16_LO, R_PPC_EMB_NADDR16_HI and R_PPC_EMB_NADDR16_HA
- in shared libs. R_PPC_PLTREL32 is a plt reloc too. Refcount all
- relocs that might use a plt entry. Set NON_GOT_REF too.
- Enumerate all do-nothing relocs.
- (ppc_elf_gc_sweep_hook): Simplify removal of dynrelocs. Handle
- tls relocs and all plt relocs.
- (ppc_elf_tls_setup, ppc_elf_tls_optimize): New functions.
- (ppc_elf_finish_dynamic_symbol): Don't build got entries here.
- (ppc_elf_finish_dynamic_sections): Rewrite tag code using htab
- shortcuts.
- (ppc_elf_relocate_section): Tidy. Handle TLS relocs. Use
- bfd_elf_local_sym_name. Simplify unresolved reloc code. Build got
- entries and got relocs here. Warn on non-zero got reloc addend.
- Split out branch taken/not taken reloc code into a separate switch
- and correct offset calculation. Allow BRTAKEN/BRNTAKEN dynamic relocs.
- Split out HA reloc adjustments to separate switch statement. Don't
- warn on reloc overflow if we've already warned about undefined.
- Don't rebuild sym name when reporting errors. Report all possible
- errors from _bfd_final_link_relocate.
- (bfd_elf32_bfd_final_link): Don't define.
-
-2003-02-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Don't init "r". Don't
- rebuild sym name when reporting errors.
-
-2003-02-17 Nick Clifton <nickc@redhat.com>
-
- * elflink.h (elf_link_output_extsym): Only check
- allow_shlib_undefined for shared libraries.
- * elf32-i386.c (elf_i386_relocate_section): Remove bogus check
- of allow_shlib_undefined.
- * elf32-cris.c (cris_elf_relocate_section): Likewise.
- * elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
- * elf32-m68k.c (elf_m68k_relocate_section): Likewise.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-sh.c (sh_elf_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf32-vax.c (elf_vax_relocate_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relocate_section): Likewise.
- * elf64-hppa.c (elf64_hppa_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_relocate_section): Likewise.
-
-2003-02-17 Nick Clifton <nickc@redhat.com>
-
- * elf.c (SEGMENT_AFTER_SEGMENT): Add third parameter - the
- address field to use in the comparison.
- (SEGMENT_OVERLAPS): Check that LMAs overlap as well.
-
-2003-02-14 Bob Wilson <bob.wilson@acm.org>
-
- * elfcore.h (elf_core_file_p): Compare alternate machine codes for ELF
- backends when checking if the generic ELF target should be used.
-
- * syms.c (_bfd_stab_section_find_nearest_line): For line number stabs
- outside of functions, treat values as absolute addresses.
-
- * bfd.c: Change embedded documentation to use consistent indentation
- and to split up long lines. Change informal style of description
- for functions lacking real documentation.
- * coffcode.h: Break up long lines in embedded documentation.
- * format.c: Likewise.
- * targets.c: Likewise.
- * libcoff.h: Regenerate.
- * bfd-in2.h: Regenerate.
-
-2003-02-14 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_link_hash_table_create): Init tls_get_addr.
- (ppc64_elf_copy_indirect_symbol): Merge tls_mask too.
- (ppc64_elf_gc_sweep_hook): Simplify removal of dyn_relocs.
- (allocate_dynrelocs): Don't treat undefined and undefweak specially.
- (ppc_size_one_stub): Fix warning, and tighten plt entry check.
- (group_sections): Don't share a stub section if stubs are for a large
- section. Adjust comment.
- (ppc64_elf_size_stubs): Roughly double the size left for stubs if
- !stubs_always_before_branch.
- (ppc64_elf_relocate_section): Initialize tlsld GOT entry once. Don't
- treat undefined and undefweak specially when processing dyn relocs.
-
-2003-02-13 Jakub Jelinek <jakub@redhat.com>
-
- * elflink.h (elf_link_add_object_symbols): Handle .symver x, x@FOO.
-
-2003-02-13 Nick Clifton <nickc@redhat.com>
-
- * elf32-arm.h (elf32_thumb_to_arm_stub): Include section VMAs
- in computation of offset to insert into BL instruction.
-
-2003-02-11 Uwe Stieber <uwe@wwws.de>
-
- * config.bfd: Add support for kaOS as cross build target system.
-
-2003-02-11 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_check_relocs): Match versioned
- .__tls_get_addr too.
- (ppc64_elf_tls_setup): Ensure cached tls_get_addr is not indirect.
-
-2003-02-10 Kaz kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (elf_sh_dyn_relocs): Add tls_tpoff32 field.
- (elf_sh_link_hash_entry): Remove tls_tpoff32 field.
- (sh_elf_link_hash_newfunc): Remove the initialization of
- tls_tpoff32 field.
- (allocate_dynrelocs): Keep dyn_relocs if it includes the entry
- for which tls_tpoff32 flag is set.
- (sh_elf_relocate_section): Covert to LE only if the dyn_relocs
- of the symbol includes the entry matched with the input_section
- and having tls_tpoff32 flag on. When linking statically, set
- symbol index of R_SH_TLS_TPOFF32 relocation to zero if the symbol
- is defined in this executable.
- (sh_elf_check_relocs): Set tls_tpoff32 flag appropriately.
-
-2003-02-10 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-s390.c (elf_s390_size_dynamic_sections): Set relocs to TRUE
- even if there is just non-empty .rela.plt.
-
-2003-02-10 Nick Clifton <nickc@redhat.com>
-
- * archures.c (bfd_mach_arm_ep9312): Define.
- * bfd-in2.h: Regenerate.
- * cpu-arm.c (processors[]): Add ep9312.
- (bfd_arm_arch): Add ep9312.
- * elf32-arm.h (elf32_arm_merge_private_data): Update error
- messages and add test for Maverick floating point support.
- (elf32_arm_print_private_bfd_data): Handle
- EF_ARM_MAVERICK_FLOAT flag.
- (elf32_arm_object_p): New function.
- (elf_backend_object_p): Define.
-
-2003-02-10 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c: Rename assorted occurrences of tls_type and similar
- variables, structure fields or function params to tls_mask or
- similar to better reflect usage.
- (struct got_entry): Comment.
- (struct ppc_link_hash_entry): Expand comment, and renumber TLS_*.
- (get_tls_mask): Rename from get_tls_type.
-
-2003-02-09 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (TLS_GD_LD): Don't define..
- (TLS_GD): ..define this instead and update all uses.
- (TLS_TPRELGD): Define.
- (ppc64_elf_link_hash_table_create): Tweak initialization of
- init_refcount and init_offset.
- (ppc64_elf_check_relocs): Add one extra element to t_symndx array.
- Mark second slot of GD or LD toc entries.
- (get_tls_type): Return an int. Distinguish toc GD and LD entries
- from other tls types.
- (ppc64_elf_tls_setup): New function, split out from..
- (ppc64_elf_tls_optimize): ..here. Don't optimize when symbols are
- defined in a dynamic object. Fix LD optimization. Don't set TLS_TPREL
- on GD->IE optimization, use TLS_TPRELGD instead. Use get_tls_type
- return value to properly decide whether toc GD and LD entries can
- optimize away __tls_get_addr call. Check next reloc after DTPMOD64
- to determine GD or LD rather than looking at TLS_LD flag. Don't
- attempt to adjust got entry tls_type here..
- (allocate_dynrelocs): ..instead, adjust got entry tls_type here, and
- look for possible merges.
- (ppc64_elf_size_dynamic_sections): Adjust local got entries for
- optimization.
- (ppc64_elf_size_stubs): Tweak __tls_get_addr fudge.
- (ppc64_elf_relocate_section): Rename some vars to better reflect usage.
- Make use of return value from get_tls_type to properly detect GD and
- LD optimizations. Split tlsld/gd hi/ha from lo/ds case. Don't
- handle tls_get_addr removal when looking at REL24 relocs, do it when
- looking at the previous reloc. Check reloc after DTPMOD64 to determine
- GD or LD.
- * elf64-ppc.h (ppc64_elf_tls_setup): Declare.
-
-2003-02-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-hppa.c (group_sections): Don't share a stub section if
- stubs are for a large section.
-
- * elf32-hppa.c (elf32_hppa_size_stubs): Double the size left for
- stubs if !stubs_always_before_branch.
-
-2003-02-07 Nick Clifton <nickc@redhat.com>
-
- * elf.c (swap_out_syms): Generate an error message if an
- equivalent output section cannot be found for a symbol.
-
-2003-02-07 Jakub Jelinek <jakub@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relax_section): Don't crash if
- local_got_entries is NULL.
-
-2003-02-06 Andreas Schwab <schwab@suse.de>
-
- * elf-eh-frame.c (get_DW_EH_PE_signed): Define.
- (read_value): Add parameter is_signed, use signed extraction if
- the value is signed.
- (_bfd_elf_write_section_eh_frame): Pass signed flag of the
- encoding to read_value.
-
-2003-02-06 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy got and
- plt info when called to transfer weak sym info.
-
-2003-02-05 Alan Modra <amodra@bigpond.net.au>
-
- * reloc.c: Add PPC and PPC64 TLS relocs.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
- * elf64-ppc.c (TP_OFFSET, DTP_OFFSET): Declare.
- (ppc64_elf_howto_raw): Add TLS howto's. Adjust R_PPC64_NONE to be
- against a 32 bit field.
- (ppc64_elf_reloc_type_lookup): Handle TLS relocs.
- (_ppc64_elf_section_data): Add t_symndx and comments.
- (ppc64_elf_section_data): Use elf_section_data macro.
- (ppc64_elf_new_section_hook): American spelling.
- (struct got_entry, struct plt_entry): New.
- (MUST_BE_DYN_RELOC): Rename from IS_ABSOLUTE_RELOC.
- (struct ppc_stub_hash_entry): Add "addend" field.
- (struct ppc_link_hash_entry): Add "tls_type".
- (TLS_TLS, TLS_GD_LD, TLS_LD, TLS_TPREL, TLS_DTPREL,
- TLS_EXPLICIT): Define.
- (struct ppc_link_hash_table): Add tls_sec, tls_get_addr, tlsld_got.
- (link_hash_newfunc): Init new fields.
- (ppc64_elf_link_hash_table_create): Likewise. Set init_refcount and
- init_offset to NULL.
- (ppc64_elf_copy_indirect_symbol): Copy got and plt info. Don't call
- _bfd_elf_link_hash_copy_indirect, rather insert relevant code from
- there.
- (update_local_sym_info, update_plt_info): New functions.
- (ppc64_elf_check_relocs): Use them. Handle TLS relocs. Adjust GOT
- handling to use got.glist rather than got.refcount. Likewise for PLT.
- (ppc64_elf_gc_sweep_hook): Handle TLS relocs, new GOT and PLT lists.
- (func_desc_adjust): Adjust for new PLT list.
- (ppc64_elf_adjust_dynamic_symbol): Likewise.
- (get_sym_h, get_tls_type): New functions.
- (ppc64_elf_edit_opd): Remove unused variable. Use get_sym_h.
- (ppc64_elf_tls_optimize): New function.
- (allocate_dynrelocs): Adjust for new PLT and GOT lists. Allocate
- TLS relocs.
- (ppc64_elf_size_dynamic_sections): Likewise.
- (ppc_type_of_stub): Adjust for new PLT list.
- (ppc_build_one_stub): Likewise.
- (ppc64_elf_size_stubs): Likewise. Use get_sym_h. Treat __tls_get_addr
- calls specially.
- (ppc64_elf_relocate_section): Adjust for new GOT and PLT lists. Handle
- TLS relocs. Report local syms using bfd_elf_local_sym_name. Don't
- init GOT entries that have a reloc. Generate GOT relocs here..
- (ppc64_elf_finish_dynamic_symbol): ..not here. Adjust for PLT list.
- * elf64-ppc.h (ppc64_elf_tls_optimize): Declare.
-
-2003-02-04 Andreas Schwab <schwab@suse.de>
-
- * elf32-m68k.c (elf_m68k_hash_entry): Define.
- (elf_m68k_link_hash_traverse): Remove.
- (elf_m68k_link_hash_newfunc): Use struct bfd_hash_entry and
- elf_m68k_hash_entry instead of struct elf_m68k_link_hash_entry to
- reduce casting.
- (elf_m68k_check_relocs): Use elf_m68k_hash_entry instead of
- casting.
- (elf_m68k_size_dynamic_sections): Use elf_link_hash_traverse
- instead of elf_m68k_link_hash_traverse.
- (elf_m68k_discard_copies): Change first parameter to pointer to
- struct elf_link_hash_entry and use elf_m68k_hash_entry when struct
- elf_m68k_link_hash_entry is needed.
-
-2003-02-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct got_entry, struct plt_entry): Forward declare.
- (struct elf_link_hash_entry): Add "glist" and "plist" fields to
- "got" union, and declare as gotplt_union. Use gotplt_uinion for
- "plt" field.
- (struct elf_link_hash_table): Make "init_refcount" a gotplt_union.
- Add "init_offset" field.
- (struct elf_obj_tdata <local_got>): Add "struct got_entry **" to union.
- (elf_local_got_ents): Declare.
- * elf.c (_bfd_elf_link_hash_newfunc): Adjust initialization of "got"
- and "plt".
- (_bfd_elf_link_hash_hide_symbol): Use "init_offset".
- (_bfd_elf_link_hash_table_init): Set "init_offset".
- * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Set init_refcount
- from init_offset.
- (elf_adjust_dynamic_symbol): Set plt and got offsets using init_offset.
-
- * elf.c (bfd_elf_local_sym_name): Split out from..
- (group_signature): ..here.
- * elf-bfd.h (bfd_elf_local_sym_name): Declare.
-
-2003-02-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (enum elf_link_info_type): Remove.
- (struct bfd_elf_section_data): Move sec_info_type, use_rela_p fields
- to struct sec. Remove linkonce_p field.
- (elf_linkonce_p): Delete.
- (elf_discarded_section): Update for sec_info_type change.
- * section.c (struct sec): Add sec_info_type, use_rela_p, has_tls_reloc,
- flag11, flag12, flag13, flag14, flag15, flag16, flag20, flag24.
- (ELF_INFO_TYPE_NONE): Define.
- (ELF_INFO_TYPE_STABS): Define.
- (ELF_INFO_TYPE_MERGE): Define.
- (ELF_INFO_TYPE_EH_FRAME): Define.
- (ELF_INFO_TYPE_JUST_SYMS): Define.
- (STD_SECTION): Update struct sec initializer.
- * ecoff.c (bfd_debug_section): Likewise.
- * elf.c: Likewise. Update occurrences of sec_info_type and use_rela_p.
- * elflink.h: Likewise.
- * elf-eh-frame.c: Likewise.
- * elf64-alpha.c: Likewise.
- * elfxx-ia64.c: Likewise.
- * elfxx-mips.c: Likewise.
- * bfd-in2.h: Regenerate.
-
- * elf32-sparc.c (sec_do_relax): Use elf_section_data macro rather than
- referring to used_by_bfd.
- * elf64-sparc.c (sec_do_relax): Likewise.
- * elf64-mmix.c (mmix_elf_section_data): Likewise.
- * elfxx-mips.c (mips_elf_section_data): Likewise.
- * ieee.c (ieee_slurp_section_data): Use ieee_per_section macro.
- (ieee_get_section_contents): Likewise.
- (ieee_new_section_hook): Formatting.
- (ieee_canonicalize_reloc): Remove commented out code.
- * mmo.c (mmo_section_data): Define. Use throughout file.
- * oasys.c (oasys_get_section_contents): Use oasys_per_section macro.
-
-2003-01-31 Graydon Hoare <graydon@redhat.com>
-
- * Makefile.am (opncls.lo): Add dependency upon libiberty.h.
- * Makefile.in: Regenerate.
- * opncls.c (calc_crc32, get_debug_link_info,
- seperate_debug_file_exists, find_seperate_debug_file): New
- internal functions.
- (bfd_follow_gnu_debuglink): New function. Follow the pointer
- contained inside a .gnu_debuglink section.
- * bfd-in2.h: Regenerate.
-
-2003-01-29 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_got_entry_hash): Don't dereference
- entry->abfd when it's NULL.
-
-2003-01-27 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_create_dynamic_relocation): Handle
- _bfd_elf_section_offset returning -2 the same way as -1.
-
- * elfxx-mips.c (mips_elf_multi_got): New function.
- (struct mips_got_entry): Make symndx and gotidx signed. Moved
- addend into union along with address and link hash entry.
- (struct mips_got_info): Added bfd2got and next.
- (struct mips_elf_hash_sort_data): Added max_unref_got_dynindx.
- (mips_elf_got_section, mips_elf_create_got_section): Use
- SEC_EXCLUDE bit to tell whether we really need the got
- section. Take boolean arguments to disregard an excluded
- section, or to create it as excluded. Adjust all callers.
- Use mips_elf_got_section all over.
- (mips_elf_local_got_index, mips_elf_got_page,
- mips_elf_got16_entry): Take input bfd as argument, and pass it
- on to mips_elf_create_local_got_entry.
- (mips_elf_global_got_index, mips_elf_create_local_got_entry):
- Take input bfd as argument, and manage entries in the
- appropriate GOT.
- (mips_elf_got_offset_from_index): Take input bfd as argument,
- and use it to adjust the GP offset of the bfd.
- (mips_elf_sort_hash_table, mips_elf_sort_hash_table_f): Move
- unreferenced GOT entries of global symbols to the end.
- (mips_elf_record_global_got_symbol): Take input bfd as
- argument. Add entries to the master GOT hash table.
- (struct mips_elf_bfd2got_hash): New.
- (struct mips_elf_got_per_bfd_arg): New.
- (struct mips_elf_set_global_got_offset_arg): New.
- (mips_elf_hash_bfd_vma, mips_elf_multi_got_entry_hash,
- mips_elf_multi_got_entry_eq, mips_elf_bfd2got_entry_hash,
- mips_elf_bfd2got_entry_eq, mips_elf_make_got_per_bfd,
- mips_elf_merge_gots, mips_elf_set_global_got_offset,
- mips_elf_resolve_final_got_entry,
- mips_elf_resolve_final_got_entries, mips_elf_adjust_gp,
- mips_elf_got_for_ibfd): New functions.
- (ELF_MIPS_GP_OFFSET): Don't depend on SGI_COMPAT.
- (MIPS_ELF_GOT_MAX_SIZE): New macro.
- (STUB_LW): Generate 64-bit stub regardless of SGI_COMPAT.
- (mips_elf_got_entry_hash): Take new fields into account. Use
- mips_elf_hash_bfd_vma.
- (mips_elf_got_entry_eq): Take new fields into account.
- (mips_elf_create_got_section): Initialize new fields.
- (mips_elf_calculate_relocation): Pass input_bfd to functions
- that now take it. Adjust gp for the input_bfd.
- (mips_elf_allocate_dynamic_relocation,
- mips_elf_create_dynamic_relocation,
- _bfd_mips_elf_create_dynamic_sections): Use...
- (mips_elf_rel_dyn_section): New function. Borrow code from...
- (_bfd_mips_elf_check_relocs): Pass input_bfd to functions that
- now take it. Create the got section if needed, even if
- excluded, before recording a global got symbol. Move some
- code to...
- (mips_elf_record_local_got_symbol): New fn.
- (_bfd_mips_elf_size_dynamic_sections): Disable combreloc.
- Compute multi-got global entries offsets. Move GOT code to...
- (_bfd_mips_elf_always_size_sections): Call mips_elf_multi_got
- if the GOT is too big.
- (_bfd_mips_elf_finish_dynamic_symbol): Set got entry of
- undefweak symbol to zero. Generate dynamic relocations for
- non-primary GOT entries for global symbols.
- (_bfd_mips_elf_finish_dynamic_sections): Handle multi-got
- case. Generate dynamic relocations for local got entries.
- Sort dynamic relocations on N64 too, using...
- (sort_dynamic_relocs_64): New fns.
- (_bfd_mips_elf_hide_symbol): Adjust multi-got counters.
- (_bfd_mips_elf_merge_private_bfd_data): Ignore EF_MIPS_XGOT.
-
-2003-01-27 Alexandre Oliva <aoliva@redhat.com>
-
- * bfd.c (struct _bfd): Added id field.
- * opncls.c (_bfd_id_counter): New static variable.
- (_bfd_new_bfd): Use it.
- * bfd-in2.h: Rebuilt.
-
-2003-01-25 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-sparc.c (bfd_elf32_new_section_hook): Define.
-
-2003-01-25 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-sparc.c (_bfd_sparc_elf_howto_table): Add TLS relocs.
- (elf32_sparc_rev32_howto): New variable.
- (sparc_reloc_map): Add TLS relocs.
- (elf32_sparc_reloc_type_lookup, elf32_sparc_info_to_howto):
- Handle REV32.
- (sparc_elf_hix22_reloc, sparc_elf_lox10_reloc, elf32_sparc_mkobject):
- New functions.
- (struct elf32_sparc_dyn_relocs, struct elf32_sparc_link_hash_entry,
- struct elf32_sparc_link_hash_table):
- New structures.
- (elf32_sparc_tdata, elf32_sparc_local_got_tls_type,
- elf32_sparc_hash_table): Define.
- (link_hash_newfunc, elf32_sparc_link_hash_table_create,
- create_got_section, elf32_sparc_create_dynamic_sections,
- elf32_sparc_copy_indirect_symbol, elf32_sparc_tls_transition): New
- functions.
- (elf32_sparc_check_relocs): Handle TLS relocs. Add dynamic reloc
- reference counting.
- (elf32_sparc_gc_sweep_hook): Likewise.
- (elf32_sparc_adjust_dynamic_symbol): Likewise.
- (elf32_sparc_size_dynamic_sections): Likewise.
- (elf32_sparc_relocate_section): Likewise.
- (allocate_dynrelocs, readonly_dynrelocs, dtpoff_base, tpoff):
- New functions.
- (elf32_sparc_object_p): Allocate backend private object data.
- (bfd_elf32_bfd_link_hash_table_create,
- elf_backend_copy_indirect_symbol, bfd_elf32_mkobject,
- elf_backend_can_refcount): Define.
- (elf_backend_create_dynamic_sections): Define to
- elf32_sparc_create_dynamic_sections.
- * reloc.c: Add SPARC TLS relocs.
- * bfd-in2.h, libbfd.h: Rebuilt.
- * elf64-sparc.c (sparc64_elf_howto_table): Add TLS relocs.
- (sparc_reloc_map): Likewise.
-
-2003-01-24 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * bfd-in2.h: Regenerate.
- * elf32-s390.c (elf_s390_mkobject, elf_s390_tls_transition,
- s390_tls_reloc, dtpoff_base, tpoff, invalid_tls_insn): New functions.
- (elf_howto_table): Add TLS relocs.
- (elf_s390_reloc_type_lookup): Likewise.
- (elf_s390_link_hash_entry): Add tls_type.
- (elf_s390_hash_entry, elf_s390_obj_tdata, elf_s390_local_got_tls_type):
- New macros.
- (elf_s390_link_hash_table): Add tls_ldm_got.
- (link_hash_newfunc): Initialize tls_type.
- (elf_s390_link_hash_table_create): Initialize refcount of tls_ldm_got.
- (elf_s390_copy_indirect_symbol): Copy tls_type information.
- (elf_s390_check_relocs): Support TLS relocs.
- (elf_s390_gc_sweep_hook): Likewise.
- (allocate_dynrelocs): Likewise.
- (elf_s390_size_dynamic_sections): Likewise.
- (elf_s390_relocate_section): Likewise.
- (elf_s390_finish_dynamic_symbol): Likewise.
- (bfd_elf32_mkobject): Define for TLS.
- * elf64-s390.c: Same changes as for elf32-s390.c.
- * libbfd.h: Regenerate.
- * reloc.c: Add s390 TLS relocations.
-
-2003-01-24 Charles Lepple <clepple@ghz.cc>
-
- * aclocal.m4: Fix name of --enable-install-libbfd switch.
-
-2003-01-23 Nick Clifton <nickc@redhat.com>
-
- * Add sh2e support:
- 2002-04-02 Elena Zannoni <ezannoni@redhat.com>
- * archures.c (bfd_mach_sh2e): Added.
- * bfd-in2.h: Rebuilt.
- * cpu-sh.c (arch_info_struct): Added SH2e.
- * elf32-sh.c (sh_elf_set_mach_from_flags): Handle EF_SH2E.
-
-2003-01-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct bfd_elf_section_data): Remove tdata. Change
- dynindx to an int. Rearrange for better packing.
- * elf.c (_bfd_elf_new_section_hook): Don't alloc if already done.
- * elf32-mips.c (bfd_elf32_new_section_hook): Define.
- * elf32-sh64.h: New. Split out from include/elf/sh.h.
- (struct _sh64_elf_section_data): New struct.
- (sh64_elf_section_data): Don't dereference sh64_info (was tdata).
- * elf32-sh64-com.c: Include elf32-sh64.h.
- * elf32-sh64.c: Likewise.
- (sh64_elf_new_section_hook): New function.
- (bfd_elf32_new_section_hook): Define.
- (sh64_elf_fake_sections): Adjust for sh64_elf_section_data change.
- (sh64_bfd_elf_copy_private_section_data): Likewise.
- (sh64_elf_final_write_processing): Likewise.
- * elf32-sparc.c (struct elf32_sparc_section_data): New.
- (elf32_sparc_new_section_hook): New function.
- (SET_SEC_DO_RELAX, SEC_DO_RELAX): Delete.
- (sec_do_relax): Define.
- (elf32_sparc_relax_section): Adjust to use sec_do_relax.
- (elf32_sparc_relocate_section): Likewise.
- * elf64-mips.c (bfd_elf64_new_section_hook): Define.
- * elf64-mmix.c (struct _mmix_elf_section_data): New.
- (mmix_elf_section_data): Define. Use throughout file.
- (mmix_elf_new_section_hook): New function.
- (bfd_elf64_new_section_hook): Define.
- * elf64-ppc.c (struct _ppc64_elf_section_data): New.
- (ppc64_elf_section_data): Define. Use throughout.
- (ppc64_elf_new_section_hook): New function.
- (bfd_elf64_new_section_hook): Define.
- * elf64-sparc.c (struct sparc64_elf_section_data): New.
- (sparc64_elf_new_section_hook): New function.
- (SET_SEC_DO_RELAX, SEC_DO_RELAX): Delete.
- (sec_do_relax): Define.
- (sparc64_elf_relax_section): Adjust to use sec_do_relax.
- (sparc64_elf_relocate_section): Likewise.
- (bfd_elf64_new_section_hook): Define.
- * elfn32-mips.c (bfd_elf32_new_section_hook): Define.
- * elfxx-mips.c (struct _mips_elf_section_data): New.
- (mips_elf_section_data): Define. Use throughout.
- (_bfd_mips_elf_new_section_hook): New function.
- (mips_elf_create_got_section): Don't alloc used_by_bfd.
- * elfxx-mips.h (_bfd_mips_elf_new_section_hook): Declare.
- * elfxx-target.h (bfd_elfNN_new_section_hook): Add #ifndef.
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
-
-2003-01-21 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (ALPHA_ELF_LINK_HASH_PLT_LOC): New.
- (struct alpha_elf_link_hash_entry): Add plt_old_section, plt_old_value.
- (elf64_alpha_adjust_dynamic_symbol): Set them.
- (elf64_alpha_size_plt_section_1): Reset them when plt entry removed.
- (elf64_alpha_relax_tls_get_addr): Handle LDM relocs. Frob the
- symbol index when relaxing LDM to TPREL.
- (elf64_alpha_relax_section): Likewise. Allow relaxation of GD
- relocs, even if the target isn't locally defined.
- (elf64_alpha_check_relocs): Frob LDM reloc symndx to zero.
- (elf64_alpha_relocate_section): Likewise. Force TP-relative
- relocs vs symndx 0 to the tp base.
-
-2003-01-21 Fabio Alemagna <falemagn@aros.org>
-
- * config.bfd: Handle i[3456]86-*-aros*.
-
-2003-01-21 Andreas Schwab <schwab@suse.de>
-
- * elf32-ppc.c (struct ppc_elf_dyn_relocs): Define.
- (struct ppc_elf_link_hash_entry): Define.
- (ppc_elf_hash_entry): New function.
- (struct ppc_elf_link_hash_table): Define.
- (ppc_elf_hash_table): New function.
- (ppc_elf_link_hash_newfunc): New function.
- (ppc_elf_link_hash_table_create): New function.
- (ppc_elf_copy_indirect_symbol): New function.
- (allocate_dynrelocs): New function.
- (readonly_dynrelocs): New function.
- (ppc_elf_size_dynamic_sections): Allocate space for dynamic
- relocs and determine DT_TEXTREL.
- (ppc_elf_check_relocs): Don't do that here, just count the
- dynamic relocs.
- (ppc_elf_gc_sweep_hook): Discard any dynamic relocs against the
- removed section.
- (bfd_elf32_bfd_link_hash_table_create): Define.
- (elf_backend_copy_indirect_symbol): Define.
-
-2003-01-21 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (alpha_dynamic_entries_for_reloc): GOTTPREL and
- TPREL also get a reloc if shared. Remove SREL support.
- (elf64_alpha_emit_dynrel): New.
- (elf64_alpha_relocate_section): Use it. Resolve dynamic TPREL
- and GOTTPREL relocs to local symbols against the tp base.
- (elf64_alpha_finish_dynamic_symbol): Use elf64_alpha_emit_dynrel.
-
- * elf64-alpha.c (elf64_alpha_relax_got_load): Decrement got
- use count before clobbering r_type.
- (elf64_alpha_relax_tls_get_addr): Don't use pos[1] if insn
- ordering would mean dataflow inspection is necessary.
-
-2003-01-20 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * coffcode.h (coff_set_flags): Added get/set arch hooks.
-
-2003-01-20 Fabio Alemagna <falemagn@aros.org>
-
- * elf32-sh.c: Treat elfNN_bed like other macros defined in
- elfxx-target.h and #undef it before #define'ing it.
- * elf32-i386.c: Likewise.
- * elf32-sh64.c: Likewise.
- * elf64-alpha.c: Likewise.
- * elf64-sh64.c: Likewise.
-
-2003-01-20 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * bfd-in2.h: Regenerate.
- * elf32-s390.c (elf_s390_adjust_gotplt): New prototype.
- (elf_howto_table): Rename R_390_GOTOFF to R_390_GOTOFF32. Add
- R_390_GOTOFF16, R_390_GOTOFF64, R_390_GOTPLT12, R_390_GOTPLT16,
- R_390_GOTPLT32, R_390_GOTPLT64, R_390_GOTPLTENT, R_390_PLTOFF16,
- R_390_PLTOFF32 and R_390_PLTOFF64.
- (elf_s390_reloc_type_lookup): Likewise.
- (struct elf_s390_link_hash_entry): Add gotplt_refcount to keep track
- of GOTPLT references to a function.
- (link_hash_newfunc): Initialize gotplt_refcount.
- (elf_s390_check_relocs): Move allocation of local_got_refcounts array
- and creation of the got section out of the main switch. Add support
- for the gotoff, gotplt and pltoff relocations.
- (elf_s390_gc_sweep_hook): Add reference counting for gotoff, gotplt
- and pltoff.
- (elf_s390_adjust_gotplt): New function.
- (elf_s390_adjust_dynamic_symbol): Adjust gotplt refcount for removed
- plt entries.
- (allocate_dynrelocs): Add comment.
- (elf_s390_relocate_section): Change r_type to unsigned. Add support
- for gotoff, gotplt and pltoff relocations.
- * elf64-s390.c: Same changes as for elf32-s390.c.
- * libbfd.h: Regenerate.
- * reloc.c: Add BFD_RELOC_390_GOTOFF64, BFD_RELOC_390_GOTPLT12,
- BFD_RELOC_390_GOTPLT16, BFD_RELOC_390_GOTPLT32, BFD_RELOC_390_GOTPLT64,
- BFD_RELOC_390_GOTPLTENT, BFD_RELOC_390_PLTOFF16, BFD_RELOC_390_PLTOFF32
- and BFD_RELOC_390_PLTOFF64.
-
-2003-01-18 Jakub Jelinek <jakub@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Handle
- R_IA64_TPREL64[LM]SB against non-global symbol properly.
-
-2003-01-16 Jakub Jelinek <jakub@redhat.com>
-
- * elfxx-ia64.c (struct elfNN_ia64_link_hash_table): Add
- self_dtpmod_done and self_dtpmod_offset.
- (allocate_global_data_got): Only use one got entry for all
- dtpmod relocs against local symbols.
- (allocate_dynrel_entries): Only need .rela.got entry for
- dtpmod against global symbol.
- (elfNN_ia64_size_dynamic_sections): Initialize self_dtpmod_offset.
- Reserve space in .rela.got for the local dtpmod entry.
- (set_got_entry): Initialize the common local dtpmod .got entry.
- (elfNN_ia64_relocate_section): Handle R_IA_64_DTPREL64LSB
- and R_IA_64_DTPREL64MSB.
-
-2003-01-16 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c: Include elf/ppc64.h rather than elf/ppc.h.
- (R_PPC_*): Rename all occurrences to R_PPC64_*.
- (R_PPC64_ADDR30): Rename all occurrences to R_PPC64_REL30.
- (enum elf_ppc_reloc_type): Ditto to enum elf_ppc64_reloc_type.
- (ppc64_elf_gc_sweep_hook): Handle R_PPC64_REL30 along with other
- relative relocs, not with absolute ones.
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
-2003-01-15 Andreas Schwab <schwab@suse.de>
-
- * elf32-ppc.c (ppc_elf_check_relocs): Don't set DF_TEXTREL for a
- relocation against a non-allocated readonly section.
-
-2003-01-10 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_relocate_section): Adjust addend for GOT16_HA.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise. PLTGOT16_HA too.
-
-2002-01-08 Klee Dienes <kdienes@apple.com>
-
- * Makefile.am (ALL_MACHINES): Use cpu-msp430.lo, not cpu-msp430.c.
- (BFD32_BACKENDS): Use elf32-msp430.lo, not elf32-msp430.c.
- * Makefile.in: Regenerate.
-
-2003-01-08 Alexandre Oliva <aoliva@redhat.com>
-
- * elfn32-mips.c (prev_reloc_section): New.
- (GET_RELOC_ADDEND): Use it. Parenthesize macro arguments.
- (SET_RELOC_ADDEND): Parenthesize macro argument.
-
-2003-01-07 John David Anglin <dave.anglin@nrc.gc.ca>
-
- * elf32-hppa.c (final_link_relocate): For all DP relative relocations,
- adjust addil instructions if the symbol has no section.
-
-2003-01-07 DJ Delorie <dj@redhat.com>
-
- * elf32-xstormy16.c (xstormy16_elf_howto_table): Make REL_12 not
- partial_inplace.
-
-2003-01-07 Andreas Schwab <schwab@suse.de>
-
- * elf32-m68k.c (elf_m68k_check_relocs): Don't set DF_TEXTREL for
- PC relative relocations.
- (elf_m68k_discard_copies): Set it here instead.
-
-2002-01-02 Ben Elliston <bje@redhat.com>
- Jeff Johnston <jjohnstn@redhat.com>
-
- * Makefile.am (ALL_MACHINES): Add cpu-iq2000.lo.
- (ALL_MACHINES_CFILES): Add cpu-iq2000.c.
- (BFD32_BACKENDS): Add elf32-iq2000.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-iq2000.c.
- (cpu-iq2000.lo): New target.
- * Makefile.in: Regenerate.
- * config.bfd: Handle iq2000-*-elf.
- * archures.c (bfd_architecture): Add bfd_{arch,mach}_iq2000.
- (bfd_archures_list): Add bfd_iq2000_arch.
- * configure.in: Handle bfd_elf32_iq2000_vec.
- * configure: Regenerate.
- * reloc.c: Add BFD_RELOC_IQ2000_OFFSET_16, BFD_RELOC_IQ2000_OFFSET_21,
- and BFD_RELOC_IQ2000_UHI16.
- * targets.c (bfd_elf32_iq2000_vec): Declare.
- (bfd_target_vector): Add bfd_elf32_iq2000_vec.
- * elf.c (prep_headers): Set e_machine to EM_IQ2000.
- * cpu-iq2000.c: New file.
- * elf32-iq2000.c: Likewise.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Likewise.
-
-2003-01-02 Richard Sandiford <rsandifo@redhat.com>
-
- * elfxx-mips.c: Include libiberty.h.
- (elf_mips_isa, _bfd_mips_elf_mach_extends_p): Remove.
- (mips_set_isa_flags): New function, split out from...
- (_bfd_mips_elf_final_write_processing): ...here. Only call
- mips_set_isa_flags if the EF_MIPS_MACH bits are clear.
- (mips_mach_extensions): New array.
- (mips_32bit_flags_p): New function.
- (_bfd_mips_elf_merge_private_bfd_data): Rework architecture checks.
- Use mips_32bit_flags_p to check if one binary is 32-bit and the
- other is 64-bit. When adopting IBFD's architecture, adopt the
- bfd_mach as well as the flags.
-
-2003-01-02 Nick Kelsey <nickk@ubicom.com>
-
- * elf32-ip2k.c: Re-work of linker relaxation code for the ip2k to
- fix internal errors, fix bad code generation, fix incorrect stabs
- information, and improve ability to eliminate redundant page
- instructions. Added code to ip2k_final_link_relocate to self-verify
- the linker relaxation. Fix formatting problems.
-
-2002-12-30 Chris Demetriou <cgd@broadcom.com>
-
- * aoutx.h (NAME(aout,machine_type)): Add bfd_mach_mipsisa32r2 case.
- * archures.c (bfd_mach_mipsisa32r2): New define.
- * bfd-in2.h: Regenerate.
- * cpu-mips.c (I_mipsisa32r2): New enum value.
- (arch_info_struct): Add entry for I_mipsisa32r2.
- * elfxx-mips.c (elf_mips_isa, _bfd_elf_mips_mach)
- (_bfd_mips_elf_print_private_bfd_data): Handle E_MIPS_ARCH_32R2.
- (_bfd_mips_elf_final_write_processing): Add
- bfd_mach_mipsisa32r2 case.
- (_bfd_mips_elf_merge_private_bfd_data): Handle merging of
- binaries marked as using MIPS32 Release 2.
-
-2002-12-30 Dmitry Diky <diwil@mail.ru>
-
- * Makefile.am: Add msp430 target.
- * configure.in: Likewise.
- * Makefile.in: Regenerate.
- * configure: Regenerate.
- * archures.c: Add msp430 architecture vector.
- * config.bfd: Likewise.
- * reloc.c: Add msp430 relocs.
- * targets.c: Add msp320 target.
- * cpu-msp430.c: New file: msp430 cpu detection.
- * elf32-msp430.c: New file: msp430 reloc processing.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
-
-2002-12-28 Jakub Jelinek <jakub@redhat.com>
-
- * elf.c (elf_sort_sections): Don't reorder .tbss.
- (assign_file_positions_for_segments): Only adjust off/voff
- for increased alignment in PT_LOAD or PT_NOTE segment,
- but adjust p_filesz for .tbss too. in PT_LOAD consider
- .tbss to have zero memory size.
- (copy_private_bfd_data) [SECTION_SIZE]: Define.
- [IS_CONTAINED_BY_VMA, IS_CONTAINED_BY_LMA]: Use it.
- [INCLUDE_SECTION_IN_SEGMENT]: Only put SHF_TLS sections
- into PT_TLS segment. Never put SHF_TLS sections in
- segments other than PT_TLS or PT_LOAD.
-
- * elf64-alpha.c (elf64_alpha_finish_dynamic_sections): Clear .plt
- sh_entsize.
-
-2002-12-23 DJ Delorie <dj@redhat.com>
-
- * coff64-rs6000.c (xcoff64_ppc_relocate_section): Fix logic reversal.
-
-2002-12-23 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_output_extsym): Heed strip_discarded.
-
-2002-12-23 Nick Clifton <nickc@redhat.com>
-
- * archures.c (bfd_arch_get_compatible): Add third parameter
- 'accept_unknowns'. Only accept unknown format BFDs if
- accept_unknowns is true, or if the format is "binary".
- * bfd-in2.h: Regenerate.
-
-2002-12-21 Nick Clifton <nickc@redhat.com>
-
- * coff-arm.c (coff_arm_relocate_section): Disable WINCE workaround
- that subtracted 8 from pc relative relocations.
-
-2002-12-20 Kazu Hirata <kazu@cs.umass.edu>
-
- * coff-h8300.c: Fix comment typos.
- * coffcode.h: Likewise.
- * cpu-cris.c: Likewise.
- * elf32-vax.c: Likewise.
- * genlink.h: Likewise.
- * linker.c: Likewise.
- * som.c: Likewise.
- * tekhex.c: Likewise.
- * vms-misc.c: Likewise.
-
-2002-12-20 DJ Delorie <dj@redhat.com>
-
- * reloc.c: Add BFD_RELOC_XSTORMY16_12.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
- * elf32-xstormy16.c (xstormy16_elf_howto): Add R_XSTORMY16_12.
- (xstormy16_reloc_map): Add R_XSTORMY16_12.
-
-2002-12-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * doc/bfdint.texi: Fix typos.
-
-2002-12-20 Paul Eggert <eggert@twinsun.com>
-
- Port to POSIX 1003.1-2001.
- * acinclude.m4 (AM_INSTALL_LIBBFD): Do not rely on "test -o".
- * configure.in (build-warnings): Likewise.
- (Horrible hacks to build DLLs on Windows): Do not rely on "tail -1".
+ * acinclude.m4: Quote names of macros to be defined by AC_DEFUN
+ throughout.
* aclocal.m4: Regenerate.
- * config.in: Regenerate.
* configure: Regenerate.
-2002-12-19 Alan Modra <amodra@bigpond.net.au>
-
- * coff-h8300.c: Include libiberty.h.
- (h8300_reloc16_extra_cases): Check the hash table creator before
- referencing h8300 specific fields. Stash the hash table pointer
- in a local var. Comment typo fixes.
- (h8300_bfd_link_add_symbols): Likewise.
-
- * reloc.c (struct reloc_howto_struct): Revise src_mask and
- dst_mask comments.
- * bfd-in2.h: Regenerate.
-
-2002-12-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_relocate_section): Reorganize dynamic reloc
- code a little. Comment on dynamic relocs against section symbols.
-
-2002-12-17 Roger Sayle <roger@eyesopen.com>
-
- * configure.host (ia64-*-hpux*): Support 64 bit targets using
- the HP compiler's "long long".
-
-2002-12-16 Andrew MacLeod <amacleod@redhat.com>
-
- * elf32-xstormy16.c (xstormy16_elf_howto): Add R_XSTORMY16_LO16
- and R_XSTORMY16_HI16) howto entries.
- (xstormy16_reloc_map): Map R_XSTORMY16_{LO,HI}16 to BFD_RELOC_{LO,HI}16.
- (xstormy16_info_to_howto_rela): Use R_XSTORMY16_GNU_VTINHERIT to
- determine the start of the second reloc table.
-
-2002-12-16 Nathan Tallent <eraxxon@alumni.rice.edu>
-
- * ecofflink.c: Fix the reading of the debugging information
- of Tru64/Alpha binaries that are produced by recent Compaq
- compilers.
- (mk_fdrtab): Fix error in creating the FDR (file descriptor)
- table.
- (lookup_line): Because of the strange information sometimes
- generated by Compaq's recent compilers, change how the FDR
- table is searched so that PDRs (procedure descriptors) are
- correctly found. Note that this change is really more of a hack;
- however, I have included extensive documentation as to why
- this is the best solution short of an extensive rewrite or
- another hack.
- (fdrtab_lookup): Add comments to explain the algorithm.
-
-2002-12-12 Alexandre Oliva <aoliva@redhat.com>
-
- * elf-m10300.c (elf32_mn10300_link_hash_newfunc): Reorder
- initializers to match struct declaration.
-
-2002-12-12 Alan Modra <amodra@bigpond.net.au>
-
- * dwarf2.c (comp_unit_contains_address): Comment typo fix.
- * elf.c (get_program_header_size): Likewise.
- * elf32-m32r.c (m32r_elf_lo16_reloc): Likewise.
- (m32r_elf_generic_reloc): Likewise.
- * elf32-ppc.c (ppc_elf_howto_init): Likewise.
- * elflink.h (elf_bfd_discard_info): Likewise.
-
-2002-12-12 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-i386.c (elf_i386_finish_dynamic_sections): Add output_offset
- to DT_JMPREL. Use srelplt input section size for DT_PLTRELSZ and
- DT_RELSZ adjustment, not output section. Avoid writing tags when
- unchanged. Don't assume linker script is sane, adjust DT_REL too.
- * elf32-hppa.c (elf32_hppa_finish_dynamic_sections): Just use raw
- size of srelplt for DT_PLTRELSZ. Use srelplt input section size for
- DT_RELASZ adjustment, not output section. Avoid writing tags when
- unchanged. Adjust DT_RELA.
- * elf64-ppc.c (ppc64_elf_finish_dynamic_sections): Tweaks for better
- formatting. Avoid writing tags when unchanged. Adjust DT_RELA.
-
-2002-12-12 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_calculate_relocation): Don't divide
- addend by 4.
-
-2002-12-12 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (struct mips_got_entry): New.
- (struct mips_got_info): Added got_entries field.
- (mips_elf_got_entry_hash, mips_elf_got_entry_eq): New functions.
- (mips_elf_local_got_index, mips_elf_got_page,
- mips_elf_got16_entry): Re-implement in terms of new...
- (mips_elf_create_local_got_entry): Rewrite to use got_entries.
- Change return type.
- (mips_elf_highest): Warning clean-up.
- (mips_elf_create_got_section): Initialize got_entries.
- (_bfd_mips_elf_check_relocs): Use got_entries to estimate
- local got size.
- (_bfd_mips_elf_size_dynamic_sections): Do not account for
- GOT_PAGE entries, since we now reuse GOT16 entries.
-
-2002-12-10 Jason Thorpe <thorpej@wasabisystems.com>
-
- * aoutx.h (set_section_contents): Allow an otherwise unrepresentable
- read-only section that lies after .text and before .data to be
- written into the output file and included in a_text.
- (translate_to_native_sym_flags): If an otherwise unrepresentable
- section was merged with .text, convert its symbols to N_TEXT
- symbols.
- * libaout.h (aout_section_merge_with_text_p): New macro.
-
-2002-12-08 Alan Modra <amodra@bigpond.net.au>
-
- * bfd-in.h: Comment typo fix. Formatting.
- * bfd-in2.h: Regenerate.
- * coff64-rs6000.c (xcoff64_openr_next_archived_file): Warning fix.
- * elf32-m68hc12.c (m68hc12_elf_set_mach_from_flags): Prototype.
- * elf64-mmix.c (mmix_dump_bpo_gregs): Warning fix.
-
-2002-12-05 Richard Henderson <rth@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Handle PCREL21BI.
- Only send PCREL21B though the plt. Fix installed reloc type.
- (elfNN_ia64_relocate_section): Give error for dynamic reloc
- against PCREL22 or PCREL64I; clean up error messages for
- branch relocs.
-
-2002-12-04 Kevin Buettner <kevinb@redhat.com>
-
- * elf64-mips.c (elf64_mips_grok_prstatus, elf64_mips_grok_psinfo):
- New functions.
- (elf_backend_grok_prstatus, elf_backend_grok_psinfo): Define.
-
-2002-12-04 David Mosberger <davidm@hpl.hp.com>
-
- * cpu-ia64-opc.c: Add operand constant "ar.csd".
-
-2002-12-04 H.J. Lu <hjl@gnu.org>
-
- * elfxx-ia64.c (get_local_sym_hash): Use section ID instead of
- BFD address when constructing local name.
-
-2002-12-04 Andreas Schwab <schwab@suse.de>
-
- * elf32-m68k.c (struct elf_m68k_link_hash_table): Add sym_sec
- member.
- (elf_m68k_link_hash_table_create): Initialize it.
- (elf_m68k_check_relocs): Handle symbols that are forced to be
- local due to visibility changes.
- (elf_m68k_adjust_dynamic_symbol): Likewise.
- (elf_m68k_size_dynamic_sections): Likewise.
- (elf_m68k_discard_copies): Likewise.
- (elf_m68k_relocate_section): Likewise.
-
-2002-12-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_edit_opd): Correct typo.
-
-2002-12-04 Alan Modra <amodra@bigpond.net.au>
-
- * srec.c (srec_write_symbols): Restore '$' prefix to address
- accidentally removed in 2002-04-04 change.
- (srec_get_symtab): Use 0 instead of `(long) FALSE'.
-
-2002-12-03 Nick Clifton <nickc@redhat.com>
-
- * elf32-ppc.c (apuinfo_list_init): New function.
- (apuinfo_list_add): New function: Add a value to the list.
- (apuinfo_list_length): New function: Return the number of
- values on the list.
- (apuinfo_list_element): New function: Return a value on the
- list.
- (apuinfo_list_finish): New function: Free the resources used
- by the list.
- (ppc_elf_begin_write_processing): New function. Scan the
- input bfds for apuinfo sections.
- (ppc_elf_write_section): New function: Delay the creation of
- the contents of an apuinfo section in an output bfd.
- (ppc_elf_final_write_processing): New function. Create the
- contents of an apuinfo section in an output bfd.
- (elf_backend_begin_write_processing): Define.
- (elf_backend_final_write_processing): Define.
- (elf_backend_write_section): Define.
-
-2002-12-03 Richard Henderson <rth@redhat.com>
-
- * cpu-ia64-opc.c (elf64_ia64_operands): Add ldxmov entry.
-
-2002-12-01 Stephane Carrez <stcarrez@nerim.fr>
-
- Fix PR savannah/1417:
- * elf32-m68hc11.c (m68hc11_elf_relax_delete_bytes): Don't adjust
- branch if it goes to the start of the deleted region.
-
-2002-12-01 Stephane Carrez <stcarrez@nerim.fr>
-
- * bfd-in2.h (bfd_mach_m6812): Rebuild.
- * archures.c (bfd_mach_m6812_default, bfd_mach_m6812,
- bfd_mach_m6812s): Declare.
-
- * elf32-m68hc12.c (m68hc12_elf_set_mach_from_flags): New function.
- (_bfd_m68hc12_elf_set_private_flags): Call it.
- (_bfd_m68hc12_elf_print_private_bfd_data): Report processor version.
- (_bfd_m68hc12_elf_merge_private_bfd_data): Merge the flags and
- report microcontroller incompatibilities (HC12 vs HCS12).
- (elf_backend_object_p): Update.
-
-2002-11-30 Alan Modra <amodra@bigpond.net.au>
-
- * bfd-in.h (TRUE_FALSE_ALREADY_DEFINED, BFD_TRUE_FALSE): Delete.
- (enum bfd_boolean, boolean): Delete.
- (bfd_boolean): Typedef to an int.
- (FALSE, TRUE): Define.
- * aix386-core.c, aix5ppc-core.c, aout-adobe.c, aout-arm.c, aout-cris.c,
- aout-encap.c, aout-ns32k.c, aout-target.h, aout-tic30.c, aoutf1.h,
- aoutx.h, archive.c, archive64.c, archures.c, bfd-in.h, bfd.c, bfdwin.c,
- binary.c, bout.c, cache.c, cisco-core.c, coff-a29k.c, coff-alpha.c,
- coff-apollo.c, coff-arm.c, coff-aux.c, coff-h8300.c, coff-h8500.c,
- coff-i386.c, coff-i860.c, coff-i960.c, coff-ia64.c, coff-m68k.c,
- coff-m88k.c, coff-mcore.c, coff-mips.c, coff-or32.c, coff-ppc.c,
- coff-rs6000.c, coff-sh.c, coff-sparc.c, coff-stgo32.c, coff-tic30.c,
- coff-tic4x.c, coff-tic54x.c, coff-tic80.c, coff-w65.c, coff-we32k.c,
- coff-z8k.c, coff64-rs6000.c, coffcode.h, coffgen.c, cofflink.c,
- corefile.c, cpu-a29k.c, cpu-alpha.c, cpu-arc.c, cpu-arm.c, cpu-avr.c,
- cpu-cris.c, cpu-d10v.c, cpu-d30v.c, cpu-dlx.c, cpu-fr30.c, cpu-frv.c,
- cpu-h8300.c, cpu-h8500.c, cpu-hppa.c, cpu-i370.c, cpu-i386.c,
- cpu-i860.c, cpu-i960.c, cpu-ia64.c, cpu-ip2k.c, cpu-m10200.c,
- cpu-m10300.c, cpu-m32r.c, cpu-m68hc11.c, cpu-m68hc12.c, cpu-m68k.c,
- cpu-m88k.c, cpu-mcore.c, cpu-mips.c, cpu-mmix.c, cpu-ns32k.c,
- cpu-openrisc.c, cpu-or32.c, cpu-pdp11.c, cpu-pj.c, cpu-powerpc.c,
- cpu-rs6000.c, cpu-s390.c, cpu-sh.c, cpu-sparc.c, cpu-tic30.c,
- cpu-tic4x.c, cpu-tic54x.c, cpu-tic80.c, cpu-v850.c, cpu-vax.c,
- cpu-w65.c, cpu-we32k.c, cpu-xstormy16.c, cpu-z8k.c, dwarf1.c,
- dwarf2.c, ecoff.c, ecofflink.c, efi-app-ia32.c, efi-app-ia64.c,
- elf-bfd.h, elf-eh-frame.c, elf-hppa.h, elf-m10200.c, elf-m10300.c,
- elf-strtab.c, elf.c, elf32-arc.c, elf32-arm.h, elf32-avr.c,
- elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c, elf32-fr30.c,
- elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c, elf32-hppa.h,
- elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c,
- elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c,
- elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c,
- elf32-pj.c, elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-sh64-com.c,
- elf32-sh64.c, elf32-sparc.c, elf32-v850.c, elf32-vax.c,
- elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c,
- elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-ppc.h, elf64-s390.c,
- elf64-sh64.c, elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c,
- elfarm-oabi.c, elfcode.h, elfcore.h, elflink.c, elflink.h,
- elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c, elfxx-mips.h,
- elfxx-target.h, format.c, freebsd.h, genlink.h, hash.c, hp300hpux.c,
- hppabsd-core.c, hpux-core.c, i386aout.c, i386linux.c, i386lynx.c,
- i386mach3.c, i386msdos.c, i386os9k.c, ieee.c, ihex.c, irix-core.c,
- libaout.h, libbfd-in.h, libbfd.c, libcoff-in.h, libecoff.h, libieee.h,
- libnlm.h, liboasys.h, libpei.h, libxcoff.h, linker.c, lynx-core.c,
- m68klinux.c, m68klynx.c, mach-o.c, mach-o.h, merge.c, mipsbsd.c,
- mmo.c, netbsd-core.c, netbsd.h, nlm.c, nlm32-alpha.c, nlm32-i386.c,
- nlm32-ppc.c, nlm32-sparc.c, nlmcode.h, oasys.c, opncls.c, osf-core.c,
- pc532-mach.c, pdp11.c, pe-arm.c, pe-i386.c, pe-mcore.c, pe-mips.c,
- pe-sh.c, peXXigen.c, pef.c, pei-arm.c, pei-i386.c, pei-mcore.c,
- pei-mips.c, pei-sh.c, peicode.h, ppcboot.c, ptrace-core.c, reloc.c,
- reloc16.c, riscix.c, rs6000-core.c, sco5-core.c, section.c, simple.c,
- som.c, som.h, sparclinux.c, sparclynx.c, srec.c, stabs.c, sunos.c,
- syms.c, targets.c, tekhex.c, ticoff.h, trad-core.c, versados.c,
- vms-gsd.c, vms-hdr.c, vms-misc.c, vms-tir.c, vms.c, vms.h,
- xcoff-target.h, xcofflink.c, xsym.c, xsym.h: Replace boolean with
- bfd_boolean, true with TRUE, false with FALSE. Simplify comparisons
- of bfd_boolean vars with TRUE/FALSE. Formatting.
- * bfd-in2.h, libbfd.h, libcoff.h: Regenerate
-
-2002-11-28 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h: Replace occurrences of Elf32_Internal_* and
- Elf64_Internal_* with Elf_Internal_*. Replace Elf_Internal_Rel
- with Elf_Internal_Rela.
- * elf-hppa.h, elf-m10200.c, elf-m10300.c, elf32-arc.c, elf32-arm.h,
- elf32-avr.c, elf32-cris.c, elf32-d10v.c, elf32-d30v.c, elf32-dlx.c,
- elf32-fr30.c, elf32-frv.c, elf32-gen.c, elf32-h8300.c, elf32-hppa.c,
- elf32-i370.c, elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c,
- elf32-m32r.c, elf32-m68hc11.c, elf32-m68hc12.c, elf32-m68k.c,
- elf32-mcore.c, elf32-mips.c, elf32-openrisc.c, elf32-or32.c,
- elf32-ppc.c, elf32-s390.c, elf32-sh.c, elf32-v850.c, elf32-vax.c,
- elf32-xstormy16.c, elf64-alpha.c, elf64-gen.c, elf64-hppa.c,
- elf64-mips.c, elf64-mmix.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c,
- elf64-sparc.c, elf64-x86-64.c, elfarm-nabi.c, elfarm-oabi.c,
- elfcode.h, elflink.h, elfn32-mips.c, elfxx-ia64.c, elfxx-mips.c: Ditto.
- * elf-hppa.h (elf_hppa_internal_shdr): Delete. Use Elf_Internal_Shdr
- throughout instead.
- * elf.c (_bfd_elf_no_info_to_howto_rel): Delete.
- * elfcode.h (elf_swap_reloca_in): Pass source operand as a bfd_byte *.
- Remove INLINE keyword.
- (elf_swap_reloc_in): Likewise. Also clear r_addend.
- (elf_swap_reloc_out, elf_swap_reloca_out): Pass destination operand
- as a bfd_byte *.
- (elf_write_relocs): Consolidate REL and RELA code.
- (elf_slurp_reloc_table_from_section): Simplify REL code.
- (NAME(_bfd_elf,size_info)): Populate reloc swap entries.
- * elf-bfd.h (MAX_INT_RELS_PER_EXT_REL): Define.
- * elflink.h (elf_link_read_relocs_from_section): Consolidate REL and
- RELA code.
- (elf_link_adjust_relocs): Likewise. Don't malloc space for temp
- reloc array, use a fixed size of MAX_INT_RELS_PER_EXT_REL.
- (elf_link_output_relocs): Likewise.
- (elf_reloc_link_order): Likewise.
- (elf_finish_pointer_linker_section): Likewise.
- (struct elf_link_sort_rela): Remove union.
- (elf_link_sort_cmp1): Update to suit.
- (elf_link_sort_cmp2): Here too.
- (elf_link_sort_relocs): Consolidate REL and RELA code. Fix memory
- over-allocation for int_rels_per_ext_rel != 1 case.
- * elf32-arm.h: Update all bfd_elf32_swap_reloc_out calls.
- * elf32-i386.c: Likewise.
- * elf32-cris.c: Likewise for bfd_elf32_swap_reloca_out.
- * elf32-hppa.c, elf32-i370.c, elf32-m68k.c, elf32-ppc.c, elf32-s390.c,
- elf32-sh.c, elf32-vax.c, elfxx-mips.c: Likewise.
- * elf64-alpha.c: Likewise for bfd_elf64_swap_reloca_out.
- * elf64-hppa.c, elf64-mips.c, elf64-ppc.c, elf64-s390.c, elf64-sh64.c,
- elf64-sparc.c, elf64-x86-64.c: Likewise.
- * elfxx-ia64.c: Likewise for bfd_elfNN_swap_reloca_out.
- * elfxx-mips.c (sort_dynamic_relocs): Likewise for
- bfd_elf32_swap_reloc_in.
-
- * elf32-arm.h: Update elf32_arm_info_to_howto calls.
- * elf32-mips.c: Likewise for mips_info_to_howto_rel.
- (mips_elf64_swap_reloc_in): Zero r_addend.
- (mips_elf64_be_swap_reloc_in): Likewise.
- (mips_elf64_slurp_one_reloc_table): Simplify.
-
- * elf64-alpha.c (alpha_elf_size_info): Populate reloc swap entries.
- * elf64-hppa.c (hppa64_elf_size_info): Likewise.
- * elf64-sparc.c (sparc64_elf_size_info): Likewise.
-
-2002-11-28 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_relocate_section): Don't complain about
- unresolved debugging relocs in dynamic applications.
- * elf64-sh64.c (sh_elf64_relocate_section): Likewise.
-
-2002-11-26 Alan Modra <amodra@bigpond.net.au>
-
- * elf-eh-frame.c (ENSURE_NO_RELOCS): Disregard R_*_NONE relocs.
- (_bfd_elf_discard_section_eh_frame): Don't discard duplicate CIEs
- on a relocatable link. Comment typos.
- * elf.c (_bfd_elf_link_hash_newfunc): Assign elements of structure
- in the order they are declared. Clear elf_hash_value too.
- (_bfd_elf_link_hash_table_init): Likewise assign in order. Clear
- eh_info and tls_segment.
- * elflink.h (elf_link_input_bfd <emit_relocs>): Keep reloc offsets
- sorted when discarding relocs by turning them into R_*_NONE.
-
- * libbfd.c (warn_deprecated): Comment spelling.
- * po/SRC-POTFILES.in: Regenerate.
-
-2002-11-21 Richard Henderson <rth@redhat.com>
-
- * elflink.h (elf_link_add_object_symbols): Don't overwrite the
- arch's st_other bits when merging visibilities.
- (elf_link_output_extsym): Tidy clearing of visibility field.
-
-2002-11-21 Alan Modra <amodra@bigpond.net.au>
-
- * coff-mcore.c (SWAP_IN_RELOC_OFFSET): Define.
- (SWAP_OUT_RELOC_OFFSET): Define.
-
-2002-11-20 Alexandre Oliva <aoliva@redhat.com>
-
- * elf.c (_bfd_elf_link_hash_table_init): Make sure
- can_refcount is properly extended to the type of
- init_refcount.
-
-2002-11-19 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (MIPS_RELOC_RELA_P): New macro.
- (_bfd_mips_elf_relocate_section): Use it.
-
- * elfxx-mips.c (MNAME): New macro.
- (_bfd_mips_elf_check_relocs): Use it.
- (_bfd_mips_elf_discard_info): Likewise.
- (_bfd_mips_elf_final_link): Likewise.
-
-2002-11-19 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_edit_opd): When deleting relocs, adjust
- rel_hdr.sh_size too.
-
-2002-11-18 Klee Dienes <kdienes@apple.com>
-
- * Makefile.am (BFD32_LIBS): Add bfdwin.lo, bfdio.lo.
- (BFD32_LIBS_CFILES): Add bfdwin.c, bfdio.c.
- (BFD_H_FILES): Add bfdwin.c, bfdio.c.
- (LIBBFD_H_FILES): Add bfdwin.c, bfdio.c.
- Add dependencies for bfdwin.c, bfdio.c.
- * bfd.c: Remove bfd_get_mtime, bfd_get_size.
- * libbfd.c: Remove real_read, bfd_bread, _bfd_window_internal,
- bfd_init_window, bfd_free_window, bfd_get_file_window, bfd_bwrite,
- bfd_tell, bfd_flush, bfd_stat, bfd_seek.
- * bfdio.c: New file. Contains real_read, bfd_bread, bfd_write,
- bfd_tell, bfd_flush, bfd_stat, bfd_seek, bfd_ge_mtime,
- bfd_get_size (moved from libbfd.c and bfd.c).
- * bfdwin.c New file. Contains _bfd_window_internal,
- bfd_init_window, bfd_free_window, bfd_get_file_window (moved from
- libbfd.c and bfd.c).
- * po/SRC-POTFILES.in: Regenerate.
- * po/bfd.pot: Regenerate.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
- * aclocal.m4: Regenerate.
- * Makefile.in: Regenerate.
- * configure: Regenerate.
-
-2002-11-18 Klee Dienes <kdienes@apple.com>
-
- * bfd.c (bfd_preserve_save): Don't zero BFD_IN_MEMORY.
-
-2002-11-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * coff-h8300.c (h8300_reloc16_estimate): Do not optimize away
- jsr after a short jump.
- * elf32-h8300.c (elf32_h8_relax_section): Likewise.
-
-2002-11-15 Klee Dienes <kdienes@apple.com>
-
- * pef.c (bfd_pef_convert_architecture): Move declaration of
- ARCH_POWERPC and ARCH_M68K to the start of the function.
-
-2002-11-14 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * coff-tic4x.c (tic4x_howto_table): Formatting fixup
-
-2002-11-14 Hans-Peter Nilsson <hp@bitrange.com>
-
- * elf64-mmix.c (_bfd_mmix_finalize_linker_allocated_gregs):
- For bpo_gregs_section->contents, allocate _raw_size, not
- _cooked_size.
-
-2002-11-13 Klee Dienes <kdienes@apple.com>
-
- * config.bfd: Add entries for powerpc-*-darwin and cousins.
-
-2002-11-13 H.J. Lu <hjl@gnu.org>
-
- * elfcode.h (elf_object_p): Don't restore abfd->arch_info.
-
-2002-11-13 Klee Dienes <kdienes@apple.com>
- Alan Modra <amodra@bigpond.net.au>
-
- * bfd.c (struct bfd_preserve): New.
- (bfd_preserve_save): New function.
- (bfd_preserve_restore): Ditto.
- (bfd_preserve_finish): Ditto.
- * bfd-in2.h: Regenerate.
- * mach-o.c: Formatting.
- (bfd_mach_o_scan_read_symtab_symbol): Make "value" unsigned.
- (bfd_mach_o_object_p): Use bfd_preserve_save/restore/finish.
- (bfd_mach_o_core_p): Ditto.
- (bfd_mach_o_scan): Pass in mdata.
- * mach-o.h (bfd_mach_o_scan): Update prototype.
- * pef.c: Formatting.
- (bfd_pef_object_p): Use bfd_preserve_save/restore/finish.
- (bfd_pef_xlib_object_p): Ditto.
- (bfd_pef_scan): Pass in mdata. Move version check to bfd_pef_object_p.
- * pef.h (bfd_pef_scan): Update prototype.
- * xsym.c: Formatting, K&R fixes.
- (bfd_sym_object_p): Use bfd_preserve_save/restore/finish.
- (bfd_sym_scan): New function split out from bfd_sym_object_p.
- * xsym.h (bfd_sym_scan): Declare.
- * elfcode.h (elf_object_p): Use bfd_preserve_save/restore/finish.
- * elfcore.h (elf_core_file_p): Likewise.
- * targets.c (_bfd_target_vector): Revert 2002-11-08 change.
-
-2002-11-12 Nick Clifton <nickc@redhat.com>
-
- * po/da.po: Updated Danish translation.
-
-2002-11-12 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_add_object_symbols): Optimize stabs for
- relocatable link too.
- (elf_link_input_bfd): When emitting relocs, adjust offsets for
- eh_frame and stab sections. Zap deleted relocs.
- (elf_reloc_symbol_deleted_p): Return true for zero r_symndx.
- (elf_bfd_discard_info): Run for relocatable link too.
- * elf64-ppc.c (ppc64_elf_edit_opd): Rename from edit_opd. Make global.
- Handle ld -r case.
- (ppc64_elf_size_dynamic_sections): Don't call edit_opd from here.
- * elf64-ppc.h (ppc64_elf_edit_opd): Declare.
-
- * elf-bfd.h (struct cie_header): Move from elf_eh-frame.c.
- (struct cie, struct eh_cie_fde, struct eh_frame_sec_info): Likewise.
- (struct eh_frame_array_ent, struct eh_frame_hdr_info): Likewise.
- (enum elf_link_info_type): Remove ELF_INFO_TYPE_EH_FRAME_HDR.
- (struct eh_frame_hdr_info): Add "hdr_sec", remove "split".
- (struct elf_link_hash_table): Add eh_info.
- (struct elf_obj_tdata): Change eh_frame_hdr to an asection *.
- (_bfd_elf_discard_section_eh_frame): Update prototype.
- (_bfd_elf_discard_section_eh_frame_hdr): Likewise.
- (_bfd_elf_write_section_eh_frame): Likewise.
- (_bfd_elf_write_section_eh_frame_hdr): Likewise.
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Remove "ehdrsec"
- param. Get "hdr_info" from link hash table.
- (_bfd_elf_discard_section_eh_frame_hdr): Remove "sec" param. Get
- header section from link hash table. Save header section to elf_tdata.
- (_bfd_elf_maybe_strip_eh_frame_hdr): Remove local "sec". Use
- header section from link hash table. Don't alloc hdr_info. Clear
- hdr_sec instead of setting "strip".
- (_bfd_elf_eh_frame_section_offset): Formatting.
- (_bfd_elf_write_section_eh_frame): Remove "ehdrsec", add "info" param.
- Get header section from link hash table.
- (_bfd_elf_write_section_eh_frame_hdr): Remove "sec", add "info" param.
- Get header section from link hash table.
- * elf.c (map_sections_to_segments): Use cached eh_frame_hdr.
- (get_program_header_size): Likewise.
- (_bfd_elf_section_offset): Formatting.
- * elflink.h (elf_link_create_dynamic_sections): Stash eh frame header
- section pointer in link hash table.
- (elf_bfd_final_link): Adjust _bfd_elf_write_section_eh_frame_hdr
- and _bfd_elf_write_section_eh_frame calls. Update comment about
- eh_frame entries.
- (elf_bfd_discard_info): Adjust _bfd_elf_discard_section_eh_frame and
- _bfd_elf_discard_section_eh_frame_hdr calls. Remove "ehdr".
-
- * po/SRC-POTFILES.in: Regenerate.
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't zero
- relocs for discarded FDEs. Remove dead code.
- (_bfd_elf_write_section_eh_frame_hdr): Remove dead code.
- * elflink.h (elf_bfd_discard_info): Don't save edited relocs.
- Tidy conditions under which stabs are edited. Formatting.
- * elf64-sparc.c (sparc64_elf_relocate_section): Ignore overflows
- from discarded relocs.
- * elfxx-ia64.c (elfNN_ia64_install_dyn_reloc): Add reloc output
- section adjustments after testing magic values.
-
-2002-11-12 Thomas Moestl <tmm@FreeBSD.org>
-
- * elf64-sparc.c (sparc64_elf_adjust_dynamic_symbol): Correct
- references to large plt symbols.
-
-2002-11-12 Klee Dienes <kdienes@apple.com>
-
- * mach-o.c (bfd_mach_o_scan_read_thread): Don't re-use 'i' when
- looking for an unused section name.
-
-2002-11-11 Kazu Hirata <kazu@cs.umass.edu>
-
- * coff-h8300.c: Fix formatting.
- * elf32-h8300.c: Likewise.
- * reloc16.c: Likewise.
-
-2002-11-09 Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
-
- * elf32-arm.h (elf32_arm_size_dynamic_sections): Don't strip output
- section when dynamic section unused; _bfd_strip_section_from_output
- instead.
-
-2002-11-08 Alan Modra <amodra@bigpond.net.au>
+2004-01-13 Ian Lance Taylor <ian@wasabisystems.com>
- * targets.c (_bfd_target_vector): Disable pef_vec, pef_xlib_vec
- and sym_vec.
+ * elf64-mips.c (mips_elf64_slurp_one_reloc_table): Call
+ mips_elf64_rtype_to_howto instead of using howto_table.
- * dwarf2.c: Revert last change.
+2004-01-13 Daniel Jacobowitz <drow@mvista.com>
-2002-11-07 Michal Ludvig <mludvig@suse.cz>
+ * elf32-arm.h (elf32_arm_final_link_relocate): Check that we created
+ the .plt section.
+ (elf32_arm_check_relocs): Don't increment the PLT refcount for
+ relocs which would not use the PLT.
- * dwarf2.c (read_indirect_string, read_abbrevs, decode_line_info,
- _bfd_dwarf2_find_nearest_line): Use
- bfd_simple_get_relocated_section_contents() instead of
- bfd_get_section_contents().
- * reloc.c (bfd_perform_relocation): Add sanity check.
- * simple.c (simple_get_relocated_section_contents): If the section
- does not have any relocs associated with it, just return the
- unadjusted contents.
+2004-01-13 Alan Modra <amodra@bigpond.net.au>
-2002-11-07 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_16_GOT,
- case R_CRIS_32_GOT>: Correct test for filling in constant .got
- contents, enabling for a non-DSO, for symbols defined in the
- program with --export-dynamic.
-
-2002-11-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c: Comment typo fixes.
- (ppc64_elf_merge_private_bfd_data): Allow BFD_ENDIAN_UNKNOWN input.
-
-2002-11-07 Nick Clifton <nickc@redhat.com>
-
- * po/da.po: Updated Danish translation.
-
-2002-11-06 Alexandre Oliva <aoliva@redhat.com>
-
- * elf64-mips.c (mips_elf64_slurp_one_reloc_table): Generate
- exactly three internal relocs per external reloc. Set reloc_count
- to the external reloc count.
-
-2002-11-06 Klee Dienes <kdienes@apple.com>
-
- * coff-stgo32.c (stub_bytes): Mark as const.
- Fix comment formatting.
-
-2002-11-06 Klee Dienes <kdienes@apple.com>
-
- * Makefile.am (BFD32_BACKENDS): Add mach-o.lo, pef.lo, and
- xsym.lo.
- (BFD32_BACKENDS_CFILES): Add mach-o.c, pef.c, and xsym.c.
- (SOURCE_HFILES): Add mach-o.h, pef.h, pef-traceback.h, xsym.h
- * archures.c (enum bfd_architecture): Add bfd_arch_m98k.
- * bfd.c (struct bfd): Add private data for mach-o, pef, and sym.
- * targets.c (enum bfd_flavour): Add flavours for mach-o, pef, and
- sym.
- (_bfd_target_vector): Add target vectors for mach-o, pef, and sym.
- * Makefile.in: Regenerate.
- * doc/Makefile.in: Regenerate.
- * bfd-in2.h: Regenerate.
- * xsym.c: New file. Contains support for the Apple/Metrowerks
- xSYM debugging format.
- * xsym.h: New file.
- * pef.c: New file. Contains support for the Apple Code Fragment
- Manager Preferred Executable Format
- * pef.h: New file.
- * pef-traceback.h: New file. Contains support for parsing PowerPC
- traceback tables as used by PEF executables (and perhaps other
- systems as well).
- * mach-o.c: New file. Contains support for the Mach-O object file
- format.
- * mach-o.h: New file.
- * mach-o-target.c: New file. Declares the mach-o targets
- themselves. Included three times by mach-o.c; each time with a
- different set of macros set.
-
-2002-11-06 Graeme Peterson <gp@qnx.com>
-
- * Makefile.am: Remove entries for elf32-qnx.[ch].
- * Makefile.in: Regenerate.
- * config.bfd: Change arm-nto to use bfd_elf32_{big|little}arm_vec,
- ppc-nto to use bfd_elf32_powerpc{le}_vec, sh-nto to use
- bfd_elf32_sh{l}_vec, and i386-nto to use bfd_elf32_i386_vec.
- * configure.in: Remove support for bfd_elf32_sh{l}qnx_vec,
- bfd_elf32_powerpc{le}qnx_vec, bfd_elf32_{big|little}armqnx_vec,
- and bfd_elf32_i386qnx_vec, and removed elf32-qnx.lo from other targets.
- bfd_elf32_sh{l}_vec, and i386-nto to use bfd_elf32_i386_vec.
- * configure: Regenerate.
- * elf32-qnx.c: Remove.
- * elf32-qnx.h: Remove.
- * elf.c: Remove calls to QNX specific set_nonloadable_filepos,
- is_contained_by_filepos, and copy_private_bfd_data_p.
- * elf-bfd.h (struct elf_backend_data): Remove set_nonloadable_filepos,
- is_contained_by_filepos, and copy_private_bfd_data_p.
- * elf32-i386.c: Remove QNX extended bfd support.
- * elf32-ppc.c: Remove QNX extended bfd support.
- * elf32-sh.c: Remove QNX extended bfd support.
- * elfarm-nabi.c: Remove QNX extended bfd support.
- * targets.c: Remove qnx vectors.
- * elfxx-target.h (elf_backend_set_nonloadable_filepos): Remove
- (elf_backend_is_contained_by_filepos): Remove.
- (elf_backend_copy_private_bfd_data_p): Remove.
- * po/SRC-POTFILES.in: Regenerate.
-
-2002-11-06 David O'Brien <obrien@FreeBSD.org>
- Alan Modra <amodra@bigpond.net.au>
-
- * elf64-sparc.c (sparc64_elf_relocate_section): Adjust addend of
- dynamic relocs against section symbols for the output section vma.
-
-2002-11-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-arm.h (t2a1_push_insn, t2a2_ldr_insn, t2a3_mov_insn,
- t2a4_bx_insn, t2a5_pop_insn, t2a6_bx_insn): Remove.
-
-2002-11-05 Kaz Kojima <kkojima@rr.iij4u.or.jp>
- Alan Modra <amodra@bigpond.net.au>
-
- * config.bfd (sh-*-linux*): Use bfd_elf*_sh64*lin_vec as sh64
- vectors in target_selvecs.
- (shle-*-netbsdelf*): Use bfd_elf*_sh64*nbsd_vec as sh64 vectors
- in target_selvecs.
- (sh-*-netbsdelf*): Likewise.
- * configure.in (assocvecs): New variable. Handle assocvecs like
- selvecs.
- * configure: Regenerate.
- * format.c (bfd_check_format_matches): Store bfd_target pointers
- in matching_vector instead of target names. Select first target
- from bfd_associated_vector that matches a list of ambiguous targets.
- * targets.c (_bfd_associated_vector): New array.
- (bfd_associated_vector): New variable.
- (_bfd_target_vector): Add bfd_elf*_sh64*lin_vec.
- * libbfd-in.h (bfd_associated_vector): Declare.
- * libbfd.h: Regenerate.
-
-2002-11-05 Elias Athanasopoulos <eathan@otenet.gr>
-
- * vms-gsd.c (_bfd_vms_write_gsd): Check that symbol->udata.p is
- non-NULL before dereferencing.
-
-2002-11-04 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * vms.c (vms_object_p): Restore the start address when returning
- NULL.
-
-2002-11-04 Alan Modra <amodra@bigpond.net.au>
- Hans-Peter Nilsson <hp@axis.com>
-
- * elflink.h (struct elf_final_link_info): Add shndxbuf_size.
- (elf_bfd_final_link): Don't bother zeroing symtab_hdr fields.
- Set up a larger symshndxbuf, and write it out. Free it on
- exit rather than freeing symbuf twice. Correct section index
- on output section symbol loop.
- (elf_link_output_sym): Accumulate symbol extension section
- indices, reallocating symshndxbuf rather than writing it out.
- (elf_link_flush_output_syms): Don't flush symshndxbuf.
- * elf.c (assign_section_numbers): Init i_shdrp to all zero.
- Use bfd_zalloc to clear i_shdrp[0] too.
-
-2002-11-03 Stephen Clarke <stephen.clarke@earthling.net>
-
- * elf32-sh64-com.c (sh64_address_in_cranges): Use
- _raw_size of cranges section if _cooked_size not yet set.
-
-2002-11-03 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-v850.c (v850_elf_relax_delete_bytes): Correct parameters
- for bfd_elf32_swap_symbol_out.
-
-2002-10-31 David O'Brien <obrien@FreeBSD.org>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't mix
- signed and unsigned in comparison.
-
-2002-10-30 Daniel Jacobowitz <drow@mvista.com>
-
- * coffcode.h: Remove extraneous '\'.
-
-2002-10-28 H.J. Lu <hjl@gnu.org>
-
- * Makefile.am (targets.lo): Depend on Makefile instead of
- config.status.
- (archures.lo): Likewise.
- * Makefile.in: Regenerated.
-
-2002-10-25 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.bfd (mips*el-*-netbsd*, mips*-*-netbsd*): Add
- bfd_elf64_bigmips_vec and bfd_elf64_littlemips_vec to
- targ_selvecs.
-
-2002-10-25 Jim Wilson <wilson@redhat.com>
-
- * elf64-sh64.c (sh_elf64_relocate_section): Call
- _bfd_elf_rela_local_sym. Handle relocs against STT_SECTION symbol
- of SHF_MERGE section.
-
-2002-10-25 Hans-Peter Nilsson <hp@axis.com>
-
- * simple.c: Correct placement of ATTRIBUTE_UNUSED.
-
-2002-10-24 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * aoutx.h (NAME(aout,swap_ext_reloc_in)): Cast bytes->r_index to
- unsigned int. Cast RELOC_BASE10, RELOC_BASE13 and RELOC_BASE22 to
- unsigned int.
- (NAME(aout,final_link)): Cast enum used in assignment.
- (aout_link_write_symbols): Cast enums in comparisons, int values to
- boolean, enums in assignments to int.
- (aout_link_input_section_std): Cast rel->r_index to unsigned int.
- (aout_link_input_section_ext): Likewise. Cast enums used in
- comparisons with unsigned ints.
- (aout_link_reloc_link_order): Cast enum to int in assignment.
- * archive.c (_bfd_generic_read_ar_hdr_mag): Cast result of memchr
- calls to char *.
- * bfd-in.h (bfd_set_section_vma): Cast enum true to unsigned int in
- assignment.
- * bfd-in2.h (bfd_set_section_vma): Likewise.
- * bfd.c (bfd_record_phdr): Cast enums in assignments.
- * binary.c (bfd_alloc): Cast enum to long.
- * coffgen.c (_bfd_coff_is_local_label_name): Cast return to boolean.
- * dwarf2.c (read_abbrevs): Add casts to enum types.
- (read_attribute_value): Likewise.
- (arange_add): Cast result of bfd_zalloc call.
- (comp_unit_contains_address): Return true and false.
- (comp_unit_find_nearest_line): Cast return to boolean.
- * format.c (bfd_check_format_matches, bfd_set_format): Likewise.
- * gen-aout.c: define macro '_' if not defined.
- * libbfd.c (bfd_realloc): Cast malloc and realloc to PTR.
- (bfd_bwrite): Cast bfd_realloc to bfd_byte *.
- (bfd_write_bigendian_4byte_int): Cast return to boolean.
- (bfd_seek): Cast bfd_realloc to bfd_byte *.
- (bfd_generic_is_local_label_name): Cast return to boolean.
- * libcoff.h (_bfd_coff_adjust_symndx): Remove extraneous '\'.
- * linker.c (_bfd_link_hash_newfunc): Cast bfd_hash_allocate result to
- struct bfd_hash_entry *.
- (_bfd_generic_link_hash_newfunc): likewise.
- (_bfd_generic_final_link): Cast enum to unsigned int.
- * merge.c (sec_merge_emit): Cast return to boolean.
- (merge_strings): Add casts to const unsigned char *.
- * reloc.c (bfd_get_reloc_code_name): Cast enums in comparison to int.
- (bfd_generic_get_relocated_section_content): Cast enum to unsigned int.
- * section.c (bfd_section_hash_newfunc): Cast bfd_hash_allocate result
- to struct bfd_hash_entry *.
- (bfd_set_section_content): Add cast to PTR in comparison.
- * simple.c (simple_dummy_warning, simple_dummy_undefined_symbol,
- simple_dummy_reloc_overflow, simple_dummy_reloc_dangerous,
- simple_dummy_unattached_reloc,
- bfd_simple_get_relocated_section_contents): Add K&R declarations and
- function definitions.
- * srec.c (S3Forced): Initialize to false.
- (srec_get_symtab): Cast return value from bfd_alloc to asymbol *.
- * stabs.c (_bfd_link_section_stabs): Cast enum to int in comparisons.
- (_bfd_discard_section_stabs): Likewise. Also cast return to boolean.
- * syms.c (bfd_is_undefined_symclass): Cast return to boolean.
- (_bfd_stab_section_find_nearest_line): Cast enum to bfd_byte in
- comparisons.
-
-2002-10-23 Jakub Jelinek <jakub@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_check_relocs): Only put maybe_dynamic
- relocs into shared lib non-allocated reloc sections.
-
-2002-10-23 Nathan Tallent <eraxxon@alumni.rice.edu>
-
- * dwarf2.c (add_line_info): Ensure that the line_info_table is
- sorted even when given an out-of-order line sequence.
- (lookup_address_in_line_info_table): When an exact VMA match is
- not found, return line information with the closest VMA.
-
-2002-10-23 Ross Alexander <ross.alexander@uk.neceur.com>
-
- * elf64-hppa.c: Force DT_FLAGS to always be set. Required by
- HPUX 11.00 patch PHSS_26559.
-
-2002-10-22 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Don't move
- the options section into a separate section unless IRIX 6
- compatibility is enabled.
-
-2002-10-22 Alexandre Oliva <aoliva@redhat.com>
-
- * elflink.h (struct elf_link_sort_rela): Turn rel and rela
- into arrays.
- (elf_link_sort_cmp1, elf_link_sort_cmp2): Adjust.
- (elf_link_sort_relocs): Likewise. Take int_rels_per_ext_rel
- into account.
- * elfxx-mips.c (mips_elf_create_dynamic_relocation): Compose
- R_MIPS_REL32 with R_MIPS64 if ABI_64_P.
-
-2002-10-21 Graeme Peterson <gp@qnx.com>
-
- * targets.c (_bfd_target_vector): Add missing qnx vectors.
-
-2002-10-21 Alan Modra <amodra@bigpond.net.au>
-
- * targets.c (bfd_target_list): Don't return the default target twice.
-
-2002-10-21 Elias Athanasopoulos <eathan@otenet.gr>
-
- * archive.c (_bfd_archive_bsd_update_armap_timestamp): Replace
- perror with bfd_perror.
-
-2002-10-19 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_link_add_object_symbols): Correctly handle
- DT_RPATH and DT_RUNPATH.
-
-2002-10-19 Mark Kettenis <kettenis@gnu.org>
-
- * elf.c (elfcore_grok_note): Fix recognition on NT_PRXFPREG notes.
-
-2002-10-17 Denis Chertykov <denisc@overta.ru>
-
- * elf32-ip2k.c (ELF_MACHINE_ALT1): Define alternate machine code
- for ip2k port.
-
-2002-10-17 Alan Modra <amodra@bigpond.net.au>
-
- * elfxx-target.h (USE_REL): Don't define as 1.
- * elf32-arm.h (USE_REL): Provide a default define of 0.
- Use #if rather than #ifdef when testing USE_REL.
- * elf32-m32r.c: Likewise.
-
- * elf32-arc.c (USE_REL): Define as 1.
- * elf32-d10v.c (USE_REL): Likewise.
- * elf32-m32r.c (USE_REL): Likewise.
- * elf32-m68hc11.c (USE_REL): Likewise.
- * elf32-m68hc12.c (USE_REL): Likewise.
- * elf32-or32.c (USE_REL): Likewise.
- * elfarm-nabi.c (USE_REL): Likewise.
-
-2002-10-16 Jakub Jelinek <jakub@redhat.com>
-
- * config.bfd (s390-*-linux*): Add targ64_selvecs.
- (s390x-*-linux*): Add targ_selvecs.
-
-2002-10-16 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am (BFD32_BACKENDS): Remove elfarmqnx-nabi.lo,
- elf32-i386-fbsd.lo, elf32-i386qnx.lo, elf32-ppcqnx.lo,
- elf32-sh-lin.lo, elf32-sh64-lin.lo, elf32-sh-nbsd.lo,
- elf32-sh64-nbsd.lo, elf32-shqnx.lo. Add elf32-qnx.lo.
- (BFD32_BACKENDS_CFILES): Likewise for corresponding C files.
- (BFD64_BACKENDS): Remove elf64-sh64-lin.lo, elf64-sh64-nbsd.lo.
- (BFD64_BACKENDS_CFILES): Likewise for corresponding C files.
- (SOURCE_HFILES): Add elf32-qnx.h.
- (BUILD_HFILES): Add bfdver.h.
- Run "make dep-am".
- * Makefile.in: Regenerate.
- * configure.in Update bfd vector dependencies.
- * configure: Regenerate.
- * elf32-i386-fbsd.c: Delete. Move code to elf32-i386.c.
- * elf32-i386qnx.c: Likewise.
- * elf32-ppcqnx.c: Delete. Move code to elf32-ppc.c.
- * elf32-sh-nbsd.c: Delete. Move code to elf32-sh.c.
- * elf32-sh-lin.c: Likewise.
- * elf32-shqnx.c: Likewise.
- * elf32-sh64-lin.c: Delete. Move code to elf32-sh64.c.
- * elf32-sh64-nbsd.c: Likewise.
- * elf64-sh64-lin.c: Delete. Move code to elf64-sh64.c.
- * elf64-sh64-nbsd.c: Likewise.
- * elfarmqnx-nabi.c: Delete. Move code to elfarm-nabi.c.
- * elf32-arm.h (ELF_MAXPAGESIZE): Always define.
- * elf32-i386.c: Remove ELF_ARCH and ELF32_I386_C_INCLUDED tests.
- * elf32-ppc.c: Remove ELF32_PPC_C_INCLUDED tests.
- * elf32-qnx.h (elf_backend_set_nonloadable_filepos): Always define.
- (elf_backend_is_contained_by_filepos): Likewise.
- (elf_backend_copy_private_bfd_data_p): Likewise.
- Globalize and move functions to..
- * elf32-qnx.c: ..here. New file.
- * elf32-sh.c: Remove ELF_ARCH and ELF32_SH_C_INCLUDED tests. Don't
- emit target vectors when INCLUDE_SHMEDIA.
- * elf32-sh64.c: Remove ELF_ARCH test. Move TARGET_* etc. defines to
- end of file.
- * elf64-sh64.c: Remove ELF_ARCH test.
- * elfarm-nabi.c: Remove ELFARM_NABI_C_INCLUDED test.
- * po/BLD-POTFILES.in: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
-2002-10-16 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_add_object_symbols): Error out on dynamic objects
- loaded with --just-symbols.
-
- * elf32-i386qnx.c (TARGET_LITTLE_NAME): Define.
- * elf32-ppcqnx.c (TARGET_LITTLE_NAME, TARGET_BIG_NAME): Define.
- * elf32-shqnx.c (TARGET_LITTLE_NAME, TARGET_BIG_NAME): Define.
- * elfarmqnx-nabi.c (TARGET_LITTLE_NAME, TARGET_BIG_NAME): Define.
-
-2002-10-15 Richard Henderson <rth@redhat.com>
-
- * Makefile.am (BFD64_BACKENDS): Remove elf64-alpha-fbsd.
- (BFD64_BACKENDS_CFILES): Likewise.
- * configure.in (bfd_elf64_alpha_freebsd_vec): Use elf64-alpha.
- * elf64-alpha-fbsd.c: Remove file, move code ...
- * elf64-alpha.c: ... here.
- * Makefile.in, configure: Rebuild.
-
-2002-10-14 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relocate_section) [BRSGP]: Increment
- VALUE, not ADDEND.
-
-2002-10-14 Stephen Clarke <stephen.clarke@superh.com>
-
- * elf32-sh.c (elf_sh_link_hash_entry): Replace
- datalabel_got_offset with union of datalabel_got
- offset and refcount.
- (sh_elf_link_hash_newfunc): Initialize datalabel_got.refcount.
- (allocate_dynrelocs): Delete unnecessary code for
- STT_DATALABEL type. Create entry in got for
- datalabel version of symbol if datalabel_got.refcount > 0.
- (sh_elf_relocate_section): Use datalabel_got union.
- (sh_elf_gc_sweep_hook): Pull common code to initialize
- h and eh out of switch statement. Declare seen_stt_datalabel.
- Initialize it. Decrement datalabel_got.refcount for
- got relocs when seen_stt_datalabel is true.
- Decrement local_got_refcounts entry for datalabel got relocs
- of local symbols.
- (sh_elf_copy_indirect_symbol): Copy datalabel_got field over.
- (sh_elf_check_relocs): Declare seen_stt_datalabel.
- Initialize it. When seen_stt_datalabel is true, increment
- datalabel_got refcount rather than got.refcount.
- (sh_elf_finish_dynamic_symbol): Create relocs to
- initialize got entry for datalabel version of symbol.
-
-2002-10-14 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am: Run "make dep-am".
- (BFD_H_FILES): Remove version.h.
- * bfd-in.h (BFD_VERSION, BFD_VERSION_DATE, BFD_VERSION_STRING): Move..
- * version.h: ..to here.
- * configure.in (bfd_version_date): Remove.
- (AC_OUTPUT): Make bfdver.h from version.h.
- * bfd.c: #include "bfdver.h".
- * vms-hdr.c: Likewise.
- * Makefile.in: Regenerate.
- * bfd-in2.h: Regenerate.
- * configure: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
-2002-10-14 Alan Modra <amodra@bigpond.net.au>
-
- * archures.c (bfd_mach_i386_i386, bfd_mach_i386_i8086,
- bfd_mach_i386_i386_intel_syntax, bfd_mach_x86_64,
- bfd_mach_x86_64_intel_syntax bfd_mach_ppc, bfd_mach_ppc64,
- bfd_mach_rs6k, bfd_mach_d10v, bfd_mach_sh, bfd_mach_v850,
- bfd_mach_arc_5, bfd_mach_arc_6, bfd_mach_arc_7, bfd_mach_arc_8,
- bfd_mach_m32r, bfd_mach_frv, bfd_mach_frvsimple,
- bfd_mach_ia64_elf64, bfd_mach_ia64_elf32,
- bfd_mach_ip2022, bfd_mach_ip2022ext,
- bfd_mach_s390_31, bfd_mach_s390_64, bfd_mach_xstormy16): Renumber.
- * bfd-in2.h: Regenerate.
-
-2002-10-14 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * config.bfd (sh*eb-*-linux*, sh*-*-linux*): Add the alternative
- endian vector to targ_selvecs.
-
-2002-10-13 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_calculate_relocation): Take
- save_addend argument. Don't apply the 32-bit mask to a
- GPREL32 value if it's to be used in another relocation. Don't
- use forced-check computation of local_p to decide whether to
- add gp0 to GPREL16 value. Don't use only the lowest 16 bits
- of the addend of a non-in-place GPREL16 relocation.
- (_bfd_mips_elf_relocate_section): Pass use_saved_addend_p to
- mips_elf_calculate_relocation().
-
-2002-10-12 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc11.c (m68hc11_elf_relax_section): Don't treat relocs
- with symbols in other sections if we relaxed something; the sections
- output offsets must be re-computed before.
-
-2002-10-12 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc11.c (m68hc11_elf_relax_section): Update symbols
- handling to use Elf_Internal_Sym.
- (m68hc11_elf_relax_delete_bytes): Likewise.
-
-2002-10-11 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_optimized_tls_reloc, sh_elf_mkobject,
- sh_elf_object_p, dtpoff_base): New functions.
- (sh_elf_howto_table): Add TLS relocs.
- (sh_reloc_map): Likewise.
- (sh_elf_info_to_howto): Support TLS relocs.
- (elf_sh_link_hash_entry): Add tls_type and tls_tpoff32.
- (sh_elf_hash_entry, sh_elf_tdata, sh_elf_local_got_tls_type):
- New macros.
- (sh_elf_obj_tdata): New.
- (elf_sh_link_hash_table): Add tls_ldm_got.
- (sh_elf_link_hash_table_create): Clear refcount of tls_ldm_got.
- (allocate_dynrelocs): Support TLS relocs.
- (sh_elf_size_dynamic_sections): Likewise.
- (sh_elf_relocate_section): Support TLS relocs. Don't try to find
- .rela.got section when found already. Return false after printing
- error about unresolvable relocation.
- (sh_elf_gc_sweep_hook): Support TLS relocs.
- (sh_elf_check_relocs): Likewise.
- (sh_elf_finish_dynamic_symbol): Likewise.
- (bfd_elf32_mkobject, elf_backend_object_p): Define for TLS case.
- * reloc.c: Add SH TLS relocs.
- * bfd-in2.h, libbfd.h: Regenerate.
-
-2002-10-11 Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.in: Regenerated.
-
-2002-10-11 Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.am: Run dep-am.
- (BFD_H_DEP): Add simple.c and linker.c.
- (BFD32_LIBS): Add simple.lo.
- (BFD32_LIBS_CFILES): Add simple.c.
- * Makefile.in: Regenerated.
- * bfd-in2.h: Regenerated.
- * simple.c: New file.
-
-2002-10-11 Alan Modra <amodra@bigpond.net.au>
-
- * coff-arm.c (record_arm_to_thumb_glue): Avoid type-punned pointers.
- (record_thumb_to_arm_glue): Likewise.
- * ecoff.c (ecoff_link_add_externals): Likewise.
- * elf32-arm.h (record_arm_to_thumb_glue): Likewise.
- (record_thumb_to_arm_glue): Likewise.
- * elf32-m32r.c (m32r_elf_add_symbol_hook): Likewise.
- * elf32-sh.c (sh_elf_create_dynamic_sections): Likewise.
- * elf32-sh64.c (sh64_elf_add_symbol_hook): Likewise.
- * elf64-alpha.c (elf64_alpha_create_dynamic_sections): Likewise.
- * elf64-ppc.c (func_desc_adjust): Likewise.
- * elf64-sh64.c (sh64_elf64_add_symbol_hook): Likewise.
- (sh64_elf64_create_dynamic_sections): Likewise.
- * elflink.c (_bfd_elf_create_got_section): Likewise.
- (_bfd_elf_create_dynamic_sections): Likewise.
- (_bfd_elf_create_linker_section): Likewise.
- * elflink.h (elf_add_default_symbol): Likewise.
- (elf_link_create_dynamic_sections): Likewise.
- (NAME(bfd_elf,size_dynamic_sections)): Likewise.
- * elfxx-ia64.c (elfNN_ia64_aix_add_symbol_hook): Likewise.
- * elfxx-mips.c (mips_elf_create_got_section): Likewise.
- (_bfd_mips_elf_add_symbol_hook): Likewise.
- (_bfd_mips_elf_create_dynamic_sections): Likewise.
- * linker.c (generic_link_add_symbol_list): Likewise.
- * xcofflink.c (xcoff_link_add_symbols): Likewise.
-
- * elfxx-ia64.c (oor_brl, oor_ip): Conditionally define.
-
- * elf64-ppc.c (edit_opd): Only zero opd syms when function is
- completely removed. Correct local sym adjustment.
-
-2002-10-10 Stephen Clarke <stephen.clarke@superh.com>
-
- * elf32-sh.c (elf_sh_pic_plt_entry_be, elf_sh_pic_plt_entry_le):
- Correct mistake in calculation of address of .got.
- * elf64-sh64.c (elf_sh64_pic_plt_entry_be,
- elf_sh64_pic_plt_entry_le): Likewise.
-
-2002-10-09 Richard Shann <richard.shann@superh.com>
- Stephen Clarke <stephen.clarke@superh.com>
-
- * Makefile.am: Add entries for elf32-sh64-lin.c and
- elf64-sh64-lin.c. Regenerate.
- * Makefile.in: Regenerate.
- * config.bfd: Change sh64eb-*-linux* and sh64-*-linux*
- to use sh64 vectors rather than sh vectors.
- * configure.in: Add bfd_elf32_sh64lin_vec, bfd_elf32_sh64blin_vec,
- bfd_elf64_sh64lin_vec, bfd_elf64_sh64blin_vec.
- * configure: Regenerate.
- * elf32-sh64-lin.c: New file.
- * elf64-sh64-lin.c: New file.
- * targets.c: Add bfd_elf32_sh64lin_vec, bfd_elf32_sh64blin_vec,
- bfd_elf64_sh64lin_vec, bfd_elf64_sh64blin_vec.
-
-2002-10-08 H.J. Lu <hjl@gnu.org>
-
- * elf32-i386.c (elf_i386_relocate_section): Re-arrange the
- IE->LE transition for R_386_TLS_IE.
-
-2002-10-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (edit_opd): Correct test for discarded sections.
-
-2002-10-07 Mark Elbrecht <snowball3@softhome.net>
-
- * cofflink.c (mark_relocs): Don't mark relocations in excluded
+ * elf64-ppc.c (ppc64_elf_check_relocs): Ignore !SEC_ALLOC relocs.
+ (ppc64_elf_gc_sweep_hook): Likewise.
+ (ppc64_elf_size_dynamic_sections): Test for .plt directly.
+
+2004-01-12 Anil Paranjpe <anilp1@KPITCummins.com>
+
+ Adds linker relaxation support for bit manipulation insns like
+ band, bclr, biand, bild, bior, bist, bixor, bld, bnot, bor, bset,
+ bst, btst, bxor.
+ * elf32-h8300.c: Opcode for bit manipulation insn is checked in
+ elf32_h8_relax_section function while relxation for aa:16 and aa:32.
+ * coff-h8300.c: Opcode for bit manipulation insn is checked in
+ h8300_reloc16_extra_cases function while relxation for aa:16 and aa:32.
+
+2004-01-12 Alan Modra <amodra@bigpond.net.au>
+
+ * dwarf2.c: Convert to C90, remove unneeded casts and prototypes.
+
+2004-01-11 Kazu Hirata <kazu@cs.umass.edu>
+
+ * elf32-h8300.c: Fix formatting.
+
+2004-01-11 Kazu Hirata <kazu@cs.umass.edu>
+
+ * elf32-cris.c (cris_elf_gc_sweep_hook): Return early if no
+ dynamic object is present. Declare r_symndx and h in an inner
+ scope.
+ * elf32-vax.c (elf_vax_gc_sweep_hook): Likewise.
+
+2004-01-09 Daniel Jacobowitz <drow@mvista.com>
+
+ * elf32-arm.h (struct elf32_arm_relocs_copied): Remove pc_count.
+ (elf32_arm_copy_indirect_symbol): Don't copy pc_count.
+ (elf32_arm_final_link_relocate): Handle PLT32 and PC24 relocs
+ identically. Do not emit PC24 relocations for shared libraries.
+ (elf32_arm_gc_sweep_hook): Handle PLT32 and PC24 relocs
+ identically. Don't adjust pc_count.
+ (elf32_arm_check_relocs): Handle PLT32 and PC24 relocs identically.
+ Set ELF_LINK_HASH_NEEDS_PLT for both. Don't adjust pc_count; don't
+ adjust count for branch relocations.
+ (allocate_dynrelocs): Correct typo in call to
+ WILL_CALL_FINISH_DYNAMIC_SYMBOL. Never allocate space for
+ PC24 or PLT32 relocs when linking.
+
+2004-01-09 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
+
+ * coff-arm.c (aoutarm_std_reloc_howto): [ARM_WINCE] Synchronize ARM_26D
+ relocation howto with ARM_26 one for consistency.
+ (coff_arm_relocate_section): Set partial_inplace for ARM_26 relocations
+ that will be converted to ARM_26D ones, since we always want 'done'
+ relocations to be reflected in section's data.
+ (coff_arm_relocate_section): [ARM_WINCE] Quick fix for BL instruction
+ offset.
+ (_bfd_final_link_relocate): Do not modify "inplace" data, if not
+ requested.
+
+2004-01-08 Dmitry Semyonov <Dmitry.Semyonov@oktet.ru>
+
+ * coff-arm.c (coff_arm_relocate_section): Do not alter relocs that
+ are not partial_inplace during a relocatable link.
+
+2004-01-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * elf32-m68k.c (elf_m68k_gc_sweep_hook): Return early
+ if no dynamic object is present. Declare r_symndx and h in an
+ inner scope.
+
+2004-01-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elfxx-ia64.c (elfNN_ia64_relax_section): Don't install
+ trampoline if it is known out of range.
+
+2004-01-06 Alexandre Oliva <aoliva@redhat.com>
+
+ 2003-12-17 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (_frv_osec_readonly_p): New.
+ (_frv_emit_got_relocs_plt_entries): Don't emit rofixup for
+ undefweak symbol.
+ (_frv_count_got_plt_entries): Adjust expected count accordingly.
+ (elf32_frv_relocate_section): Likewise. Error out if attempting
+ to emit rofixups or dynamic relocs in read-only segments. Use
+ _bfd_elf_section_offset to adjust r_offsets in rofixups and
+ dynamic relocations.
+ 2003-12-12 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (elf32_frv_relocate_section): Compute dynamic
+ relocations or fixups involving merged sections correctly. Avoid
+ crash when undefined symbol is referenced by R_FRV_32 or
+ R_FRV_FUNCDESC_VALUE.
+ 2003-12-02 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (elf32_frv_relocate_section): Add output_offset of
+ input section holding local symbol to addend of R_FRV_32 or
+ R_FRV_FUNCDESC_VALUE dynamic relocation.
+ 2003-11-27 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (elf32_frv_modify_segment_map): Add link info arg.
+ (elf32_frv_always_size_sections): Don't store pointer to
+ __stacksize symbol in sec_info.
+ (elf32_frv_modify_segment_map): Look it up here.
+ 2003-11-26 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (_frv_emit_got_relocs_plt_entries): Emit the address
+ of the lazy PLT entry, not only its offset, as the low word of a
+ function descriptor.
+ 2003-11-10 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (elf32_frv_always_size_sections): Define __stacksize
+ if a hash table entry already exists but is not a definition.
+ 2003-11-05 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (frv_elf_link_hash_table_create): Use bfd_zalloc.
+ (_frv_add_rofixup): Don't inline.
+ (_frv_emit_got_relocs_plt_entries): Use NULL as funcdesc address
+ for undefweak symbols.
+ (elf32_frv_relocate_section): Avoid crash while computing
+ relocation when linking with shared library. Only emit rofixups
+ and dynamic relocations for alloc&load sections. Mark binaries
+ with inter-segment relocations for relocation as a unit.
+ (_frv_create_got_section): Rename .rofixup.got to .rofixup.
+ (DEFAULT_STACK_SIZE): New.
+ (_frv_count_got_plt_entries): Fix thinko in deciding whether to
+ emit rofixups or dynamic relocs when linking dynamic non-PIE
+ executables.
+ (elf32_frv_size_dynamic_sections): Generate rofixup on PIEs and
+ shared libs too. Reserve the last entry for the GOT pointer.
+ (elf32_frv_finish_dynamic_sections): Emit it.
+ (elf32_frv_always_size_sections): New.
+ (elf32_frv_modify_segment_map): New.
+ (elf32_frv_check_relocs): Reserve relocs32 space only in ALLOC
sections.
-
-2002-10-07 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_input_bfd): Remove BFD_VERSION_DATE dependent
- code.
-
- * elf64-ppc.c (ppc64_elf_build_stubs): Increment .glink indx.
-
-2002-10-06 Alan Modra <amodra@bigpond.net.au>
-
- * opncls.c: Formatting.
- (_bfd_new_bfd): Use a smaller section hash table.
-
-2002-10-05 Alexandre Oliva <aoliva@redhat.com>
-
- * elfxx-mips.c (mips_elf_create_dynamic_relocation): Set the type
- of the other two relocations packed with a REL32 to NONE.
-
-2002-10-02 Stephen Clarke <stephen.clarke@superh.com>
-
- * elf32-sh.c (elf_sh_link_hash_entry): Add gotplt_refcount.
- (sh_elf_link_hash_newfunc): Initialize it.
- (allocate_dynrelocs): Transfer gotplt refs from plt.refcount
- to got.refcount for symbols that are forced local or when
- we have direct got refs.
- (sh_elf_gc_sweep_hook): Adjust gotplt_refcount. Use it
- to correctly adjust got.refcount and plt.refcount.
- (sh_elf_copy_indirect_symbol): Copy gotplt_refcount across.
- (sh_elf_check_relocs): Increment gotplt_refcount.
-
-2002-10-01 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-i386.c (elf_i386_relocate_section): Fix
- movl foo@indntpoff, %eax IE->LE transition.
-
-2002-10-01 Jakub Jelinek <jakub@redhat.com>
-
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Change TLSGD
- sequence and its transitions.
-
-2002-10-01 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-i386.c (elf_i386_relocate_section): Resolve R_386_TLS_LDO_32
- to st_value + addend in non-code sections.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Resolve
- R_X86_64_DTPOFF32 to st_value + addend in non-code sections.
-
-2002-09-30 Gavin Romig-Koch <gavin@redhat.com>
- Ken Raeburn <raeburn@cygnus.com>
- Aldy Hernandez <aldyh@redhat.com>
- Eric Christopher <echristo@redhat.com>
- Richard Sandiford <rsandifo@redhat.com>
-
- * archures.c (bfd_mach_mips4120, bfd_mach_mips5400): New.
- (bfd_mach_mips5500): New.
- * cpu-mips.c (I_mips4120, I_mips5400, I_mips5500): New.
- (arch_info_struct): Add corresponding entries here.
- * elfxx-mips.c (_bfd_elf_mips_mach): Handle E_MIPS_MACH_4120,
- E_MIPS_MACH_5400 and E_MIPS_MACH_5500.
- (_bfd_mips_elf_final_write_processing): Handle bfd_mach_mips4120,
- bfd_mach_mips5400 and bfd_mach_mips5500.
- (_bfd_mips_elf_mach_extends_p): New function.
- (_bfd_mips_elf_merge_private_bfd_data): Use it to help merge
- the EF_MIPS_MACH flags.
- * bfd-in2.h: Regenerate.
-
-2002-09-28 Jason Thorpe <thorpej@wasabisystems.com>
-
- * elf32-vax.c (elf_vax_size_dynamic_section): Don't strip
- .got sections.
-
-2002-09-28 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (map_sections_to_segments): Correct test for start of
- writable section in the same page as end of read-only section.
-
-2002-09-27 Matt Thomas <matt@3am-software.com>
-
- * elf32-vax.c (elf_vax_check_relocs): Remove unused
- local_got_refcounts usage. Remove allocation of got slot.
- (elf_vax_gc_sweep_hook): Remove unused local_got_refcounts usage.
- Remove de-allocation of got slot.
- (elf_vax_size_dynamic_section): Fix some indentation. Add hash
- traversal for elf_vax_instantiate_got_entries. Allow empty .got
- sections to be GC'ed.
- (elf_vax_instantiate_got_entries): New function.
- (elf_vax_relocate_section): Simplify R_VAX_GOT32 handling. Remove
- tests that are now handled by elf_vax_instantiate_got_entries.
- Assert GOT entry falls within .got section size. Remove redundant
- comparisions. Fix comments.
-
-2002-09-27 Jakub Jelinek <jakub@redhat.com>
-
- * reloc.c: Add x86-64 TLS relocs.
+ (frv_elf_merge_private_bfd_data): Clear PIC bit if FDPIC is set.
+ (frv_elf_print_private_bfd_data): Handle FDPIC and LIBPIC.
+ (elf_backend_always_size_sections): New.
+ (elf_backend_modify_segment_map): New.
+ 2003-10-31 Alexandre Oliva <aoliva@redhat.com>
+ * config.bfd: Added frv-*-*linux*.
+ * elf32-frv.c (_frv_emit_got_relocs_plt_entries): Use idx 0 for
+ ABS section, instead of crashing.
+ (elf32_frv_relocate_section): Don't crash before warning about
+ different segments in non-PIC relocation.
+ 2003-10-17 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (elf32_frv_relocate_section): Don't warn on LABEL24
+ relocs to undefweak symbols.
+ (elf32_frv_relocate_section): Ditto for undefined symbols.
+ 2003-10-06 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (elf32_frv_create_dynamic_sections): Make sure
+ gotfixup section was created.
+ 2003-09-30 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (elf32_frv_howto_table): Change GOT12,
+ FUNCDESC_GOT12, GOTOFF12 and FUNCDESC_GOTOFF12 to
+ complain_overflow_signed.
+ * elf32-frv.c (_frv_add_rofixup): Do not error out if contents
+ have not been allocated.
+ (_frv_emit_got_relocs_plt_entries): Return non-void. Assert
+ privfd only if dynamic sections were created.
+ (elf32_frv_relocate_section): Compute gprel_segment, and use it
+ for GPREL relocs. When linking relocatable FDPIC executables,
+ emit warnings for relocations that would be illegal on PIE or
+ shared libraries. Emit rofixup for R_FRV_32 only if input object
+ is not FDPIC.
+ (_frv_create_got_section): Define _gp symbol in the rofixup
+ section.
+ (elf32_frv_finish_dynamic_sections): If rofixups needed but
+ dynamic sections missing, error out requesting -melf32frvfd.
+ 2003-09-19 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (_frv_emit_got_relocs_plt_entries): Rearrange
+ computation of addends from section and global or local symbol
+ value. Change return type to bfd_boolean, and return a failure if
+ a dynamic FUNCDESC or FUNCDESC_VALUE relocation that requires a
+ nonzero addend is required.
+ (elf32_frv_relocate_section): Likewise. Print error for
+ unsupported nonzero addends.
+ 2003-09-18 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (FRV_SYM_LOCAL): In the absence of dynamic sections,
+ force everything local.
+ (_frv_emit_got_relocs_plt_entries): Cope with NULL sec.
+ * elf32-frv.c (struct frv_elf_link_hash_table): Added sgotfixup.
+ (frv_gotfixup_section): New.
+ (FRV_SYM_LOCAL): Accept undefweak and local common symbols.
+ (struct frv_pic_relocs_info): Split relocs into relocs32, relocsfd
+ and relocsfdv.
+ (_frv_add_rofixup): New.
+ (_frv_emit_got_relocs_plt_entries): Generate fixups for non-PIE
+ fdpic executables. Use FRV_SYM_LOCAL more widely to simplify and
+ improve some ugly conditions.
+ (elf32_frv_relocate_section): Likewise. Reject inter-segment
+ relocations in fdpic.
+ (_frv_create_got_section): Create .rofixup.got section.
+ (struct _frv_dynamic_got_info): Added fixups.
+ (_frv_count_got_plt_entries): Account in-GOT relocations into
+ relocs32, relocsfd and relocsfdv. Account them into relocs or
+ fixups, as appropriate.
+ (elf32_frv_size_dynamic_sections): Size rofixup section. Simplify
+ sizing of gotrel.
+ (elf32_frv_finish_dynamic_sections): Verify that the right number
+ of relocations and fixups was generated.
+ (elf32_frv_check_relocs): Compute relocs32, relocsfd and
+ relocsfdv.
+ * elf32-frv.c (FRV_SYM_LOCAL): New macro, used instead of
+ SYMBOL_CALLS_LOCAL and SYMBOL_REFERENCES_LOCAL.
+ (FRV_FUNCDESC_LOCAL): New macro, used to decide whether a function
+ descriptor of a (formerly-)global symbol is local.
+ (struct frv_pic_relocs_info): Adjust comments.
+ (_frv_emit_got_relocs_plt_entries): Adjust.
+ (elf32_frv_relocate_section): Likewise.
+ (_frv_count_got_plt_entries): Likewise.
+ * elf32-frv.c (_frv_emit_got_relocs_plt_entries): Don't add global
+ symbol's value to addend in the common preamble. Decay dynamic
+ symbols to section+offset if they bind or call locally, for GOT
+ and FUNCDESC_VALUE, respectively.
+ (elf32_frv_relocate_section): Likewise.
+ (elf32_frv_check_relocs): Don't register as dynamic symbols of
+ internal or hidden visibility.
+ 2003-09-17 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (_frv_emit_got_relocs_plt_entries): Get addend as
+ argument, so as to not call _bfd_elf_rel_local_sym to compute it.
+ (elf32_frv_relocate_section): Pass relocation addend in. Use
+ original relocation addend to look up the got relocs/plt entries
+ table. Do not call _bfd_elf_rel_local_sym. Don't error out when
+ processing relocations that reference .scommon symbols.
+ 2003-09-15 Alexandre Oliva <aoliva@redhat.com>
+ Introduce support for dynamic linking.
+ * elf32-frv.c (R_FRV_FUNCDESC_VALUE): Mark it as 64 bits.
+ (elf32_frv_rel_32_howto, elf32_frv_rel_funcdesc_howto,
+ elf32_frv_rel_funcdesc_value_howto): New REL descriptors.
+ (frv_reloc_type_lookup): Return REL howtos for executables and
+ dynamic libraries.
+ (frv_info_to_howto_rel): New.
+ (struct frv_elf_link_hash_table): New.
+ (frv_hash_table, frv_got_section, frv_gotrel_section,
+ frv_plt_section, frv_pltrel_section, frv_relocs_info,
+ frv_got_initial_offset, frv_plt_initial_offset): New macros.
+ (frv_elf_link_hash_table_create): New.
+ (struct frv_pic_relocs_info): New.
+ (frv_pic_relocs_info_hash, frv_pic_relocs_info_eq): New.
+ (frv_pic_relocs_info_find): New.
+ (frv_pic_relocs_info_for_global, frv_pic_relocs_info_for_local):
+ New.
+ (FRV_LZPLT_BLOCK_SIZE, FRV_LZPLT_RESOLVE_LOC): New.
+ (_frv_add_dyn_reloc, _frv_osec_to_segment): New.
+ (_frv_emit_got_relocs_plt_entries): New.
+ (elf32_frv_relocate_section): Add support for dynamic linking.
+ Handle new relocations.
+ (_frv_create_got_section): New.
+ (elf32_frv_create_dynamic_sections): New.
+ (ELF_DYNAMIC_INTERPRETER): New.
+ (struct _frv_dynamic_got_info): New.
+ (_frv_count_got_plt_entries): New.
+ (struct _frv_dynamic_got_plt_info): New.
+ (_frv_compute_got_alloc_data): New.
+ (_frv_get_got_entry, _frv_get_fd_entry): New.
+ (_frv_assign_got_entries, _frv_assign_plt_entries): New.
+ (_frv_resolve_final_relocs_info): New.
+ (elf32_frv_size_dynamic_sections): New.
+ (elf32_frv_finish_dynamic_sections): New.
+ (elf32_frv_adjust_dynamic_symbol): New.
+ (elf32_frv_finish_dynamic_symbol): New.
+ (elf32_frv_check_relocs): Handle new relocs. Explain how the
+ whole thing works.
+ (elf_info_to_howto_rel): Define.
+ (bfd_elf32_bfd_link_hash_table_create): Define.
+ (elf_backend_create_dynamic_sections): Define.
+ (elf_backend_adjust_dynamic_symbol): Define.
+ (elf_backend_size_dynamic_sections): Define.
+ (elf_backend_finish_dynamic_symbol): Define.
+ (elf_backend_finish_dynamic_sections): Define.
+ (elf_backend_want_got_sym): Define.
+ (elf_backend_got_header_size): Define.
+ (elf_backend_want_got_plt): Define.
+ (elf_backend_plt_readonly): Define.
+ (elf_backend_want_plt_sym): Define.
+ (elf_backend_plt_header_size): Define.
+ (elf_backend_may_use_rel_p): Define.
+ (elf_backend_may_use_rela_p): Define.
+ (elf_backend_default_use_rela_p): Define.
+ 2003-08-08 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (R_FRV_FUNCDESC_VALUE, R_FRV_FUNCDESC_GOTOFF12,
+ R_FRV_FUNCDESC_GOTOFFHI, R_FRV_FUNCDESC_GOTOFFLO, R_FRV_GOTOFF12,
+ R_FRV_GOTOFFHI, R_FRV_GOTOFFLO): New.
+ (frv_reloc_map): Map the corresponding BFD relocs to them.
+ (frv_reloc_type_lookup): ... and back to BFD relocs.
+ * reloc.c: New relocs.
* bfd-in2.h, libbfd.h: Rebuilt.
- * elf64-x86-64.c (x86_64_elf_howto): Fix size fields for 32-bit
- relocs. Add TLS relocs.
- (x86_64_reloc_map): Add TLS relocs.
- (elf64_x86_64_info_to_howto): Adjust for added TLS relocs.
- (struct elf64_x86_64_link_hash_entry): Add tls_type field.
- (GOT_UNKNOWN, GOT_NORMAL, GOT_TLS_GD, GOT_TLS_IE): Define.
- (elf64_x86_64_hash_entry): Define.
- (struct elf64_x86_64_obj_tdata): New.
- (elf64_x86_64_tdata, elf64_x86_64_local_got_tls_type): Define.
- (struct elf64_x86_64_link_hash_table): Add tls_ld_got.
- (link_hash_newfunc): Initialize tls_type.
- (elf64_x86_64_link_hash_table_create): Initialize tls_ld_got.
- (elf64_x86_64_copy_indirect_symbol): Swap tls_type if necessary.
- (elf64_x86_64_mkobject): New.
- (elf64_x86_64_elf_object_p): Allocate struct elf64_x86_64_obj_tdata.
- (elf64_x86_64_tls_transition): New.
- (elf64_x86_64_check_relocs): Add r_type variable and use it.
- Handle TLS relocs.
- (elf64_x86_64_gc_sweep_hook): Handle TLS relocs.
- (allocate_dynrelocs): Allocate GOT space for TLS relocs.
- (elf64_x86_64_size_dynamic_sections): Likewise.
- (dtpoff_base, tpoff): New.
- (elf64_x86_64_relocate_section): Handle TLS relocs.
- (elf64_x86_64_finish_dynamic_symbol): Only handle non-TLS GOT
- entries.
- (bfd_elf64_mkobject): Define.
-
- * elf32-i386.c (elf_i386_check_relocs) [R_386_TLS_LE]: Set
- DF_STATIC_TLS if shared.
-
-2002-09-26 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (_bfd_mips_elf_fake_sections): Don't emit unneeded
- empty relocation sections.
-
-2002-09-26 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc_build_one_stub): Don't build glink stubs here.
- (ppc64_elf_build_stubs): Build them here instead.
-
-2002-09-24 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-sparc.c (elf32_sparc_relocate_section): Put R_SPARC_RELATIVE
- addend into r_addend, not *r_offset.
- (elf32_sparc_finish_dynamic_symbol): Likewise.
- * elf64-sparc.c (sparc64_elf_finish_dynamic_symbol): Clear xword at
- R_SPARC_RELATIVE's r_offset.
-
-2002-09-23 Nathan Tallent <eraxxon@alumni.rice.edu>
-
- * dwarf2.c (decode_line_info): Update to correctly decode
- the (non-standard DWARF2) out-of-order address sequences
- generated by the Intel C++ 6.0 compiler for ia64-Linux.
-
-2002-09-23 Mark Elbrecht <snowball3@softhome.net>
-
- * config.bfd: For DJGPP targets, match with any cpu and any machine.
-
-2002-09-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Zero relocs
- for discarded FDEs. Remove redundant assignment.
- * elflink.h (elf_bfd_discard_info): Save edited relocs.
-
-2002-09-22 H.J. Lu <hjl@gnu.org>
-
- * elf64-alpha.c (elf64_alpha_merge_ind_symbols): Don't merge
- the relocation count between different .reloc sections.
-
-2002-09-21 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_relocate_section): Allow ".sbss.*" and
- ".sdata.*" for R_PPC_SDAREL16, ".sbss2*" and ".sdata2*" for
- R_PPC_EMB_SDA2REL. Similarly for R_PPC_EMB_SDA21 and
- R_PPC_EMB_RELSDA.
-
- * elfcode.h (elf_slurp_reloc_table_from_section): Make "symcount"
- unsigned. Move "symcount" assignment out of loop.
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
- * configure: Regenerate.
- * po/SRC-POTFILES.in: Regnerate.
-
-2002-09-19 Nathan Tallent <eraxxon@alumni.rice.edu>
-
- * dwarf2.c (_bfd_dwarf2_find_nearest_line): If address length is
- zero, set it to 8 for (non-standard) 64-bit DWARF2 formats
- (e.g. IRIX64).
-
-2002-09-19 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-ppc.c (ppc_elf_finish_dynamic_symbol): Clear .got word
- even if generating R_PPC_RELATIVE reloc.
- (ppc_elf_relocate_section): Make sure relocation is performed
- if skip == -2. Clear memory at r_offset when creating dynamic
- relocation.
-
-2002-09-19 Jakub Jelinek <jakub@redhat.com>
-
- * reloc.c (BFD_RELOC_386_TLS_TPOFF, BFD_RELOC_386_TLS_IE,
- BFD_RELOC_386_TLS_GOTIE): Add.
+ 2003-08-04 Alexandre Oliva <aoliva@redhat.com>
+ * elf32-frv.c (R_FRV_GOT12, R_FRV_GOTHI, R_FRV_GOTLO,
+ R_FRV_FUNCDESC, R_FRV_FUNCDESC_GOT12, R_FRV_FUNCDESC_GOTHI,
+ R_FRV_FUNCDESC_GOTLO): New.
+ (frv_reloc_map): Map the corresponding BFD relocs to them.
+ (frv_reloc_type_lookup): ... and back to BFD relocs.
+ * reloc.c: New relocs.
* bfd-in2.h, libbfd.h: Rebuilt.
- * elf32-i386.c (elf_howto_table): Add R_386_TLS_TPOFF, R_386_TLS_IE
- and R_386_TLS_GOTIE.
- (elf_i386_reloc_type_lookup): Handle it.
- (struct elf_i386_link_hash_entry): Change tls_type type to unsigned
- char instead of enum, change GOT_* into defines.
- (GOT_TLS_IE_POS, GOT_TLS_IE_NEG, GOT_TLS_IE_BOTH): Define.
- (elf_i386_tls_transition): Handle R_386_TLS_IE and R_386_TLS_GOTIE.
- (elf_i386_check_relocs): Likewise. Avoid crash if local symbol is
- accessed both as normal and TLS symbol. Move R_386_TLS_LDM and
- R_386_PLT32 cases so that R_386_TLS_IE can fall through.
- Handle R_386_TLS_LE_32 and R_386_TLS_LE in shared libs.
- (elf_i386_gc_sweep_hook): Handle R_386_TLS_IE and R_386_TLS_GOTIE.
- Handle R_386_TLS_LE_32 and R_386_TLS_LE in shared libs.
- (allocate_dynrelocs): Allocate 2 .got and 2 .rel.got entries if
- tls_type is GOT_TLS_IE_BOTH.
- (elf_i386_size_dynamic_sections): Likewise.
- (elf_i386_relocate_section): Handle R_386_TLS_IE and R_386_TLS_GOTIE.
- Handle R_386_TLS_LE_32 and R_386_TLS_LE in shared libs.
- (elf_i386_finish_dynamic_symbol): Use tls_type & GOT_TLS_IE to catch
- all 4 GOT_TLS_* TLS types.
-
-2002-09-19 Nick Clifton <nickc@redhat.com>
-
- * elflink.h (elf_fix_symbol_flags): When examining weak symbols,
- follow indirect links.
-
-2002-09-19 Nathan Tallent <eraxxon@alumni.rice.edu>
-
- * ecoffswap.h (ecoff_swap_pdr_in) <isym, iline>: Update to
- correctly sign-extend 32-bit ECOFF null values (0xffffffff, -1)
- on 64 bit machines.
- (ecoff_swap_sym_in) <iss>: Likewise.
- * ecoff.c (_bfd_ecoff_slurp_symbolic_info): Fix error reading
- ECOFF information: 'ioptMax' refers to the actual *size*
- of the optimization symtab, not the number of entries.
-
-2002-09-19 Daniel Jacobowitz <drow@mvista.com>
-
- * elf32-arm.h (elf32_arm_adjust_dynamic_symbol): Update
- ELF_LINK_HASH_NEEDS_PLT logic.
-
-2002-09-18 Daniel Jacobowitz <drow@mvista.com>
-
- * elfcode.h (elf_slurp_reloc_table_from_section): Check
- correct relocation count.
-
-2002-09-17 Daniel Jacobowitz <drow@mvista.com>
-
- * bfd-in.h (bfd_get_dynamic_symcount): Define.
- * bfd.c (struct _bfd): Add dynsymcount.
- * bfd-in2.h: Regenerated.
- * elf.c (_bfd_elf_canonicalize_dynamic_symtab): Set
- abfd->dynsymcount.
- * elfcode.h (elf_slurp_reloc_table_from_section): Check
- for overflow.
-
-2002-09-17 Stan Cox <scox@redhat.com>
-
- * elf64-mips.c (mips_elf64_be_swap_reloca_out): Handle type2 and type3.
- (mips_elf64_final_gp): Don't make up gp value.
- * elfn32-mips.c (mips_elf_final_gp): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_final_link): Always create
- .MIPS.options/.options section.
-
-2002-09-17 David O'Brien <obrien@FreeBSD.org>
-
- * elf32-i386-fbsd.c: Always label using the EI_OSABI method.
- It is benign for FreeBSD < 4.1. Minor reformatting.
- * elf64-alpha-fbsd.c: Likewise.
-
-2002-09-17 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-i386.c (elf_i386_relocate_section) [R_386_TLS_TPOFF32]: Negate
- addend.
-
-2002-09-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-alpha.c (alpha_elf_size_info): Make static.
-
-2002-09-17 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * coff-tic4x.c: Add function declarations and ATTRIBUTE_UNUSED.
- * cpu-tic4x.c: Ditto.
-
-2002-09-17 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf64-mips.c (define elf_backend_ignore_discarded_relocs): Remove
- duplicate define.
-
-2002-09-16 Bruno Haible <bruno@clisp.org>
-
- * elf32-i386.c: Don't defined ELF_ARCH etc. if this file is included
- by a target variant implementation.
- * elf64-alpha.c: Likewise.
- * elf32-i386-fbsd.c: New file.
- * elf64-alpha-fbsd.c: New file.
- * targets.c: Support bfd_elf32_i386_freebsd_vec and
- bfd_elf64_alpha_freebsd_vec.
- * configure.in: Accept the vectors bfd_elf32_i386_freebsd_vec,
- bfd_elf64_alpha_freebsd_vec.
- * Makefile.am (BFD32_BACKENDS): Add elf32-i386-fbsd.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-i386-fbsd.c.
- (BFD64_BACKENDS): Add elf64-alpha-fbsd.lo.
- (BFD64_BACKENDS_CFILES): Add elf64-alpha-fbsd.c.
- (elf32-i386-fbsd.lo, elf64-alpha-fbsd.lo): Add dependencies.
- * config.bfd: For FreeBSD targets, set targ_defvec to a FreeBSD
- specific targets. Define OLD_FREEBSD_ABI_LABEL if appropriate.
-
-2002-09-12 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-i386.c (dtpoff_base, tpoff): Don't crash if tls_segment is
- NULL.
- (elf_i386_relocate_section): Return false after printing error about
- unresolvable relocation.
-
-2002-09-12 Nick Clifton <nickc@redhat.com>
-
- * elf32-arm.h (elf32_arm_final_link_relocate): Fix handling of
- R_ARM_THM_PC11.
-
-2002-09-11 Jeffrey Law <law@redhat.com>
-
- * elf32-h8300.c (elf32_h8_relax_section): Fix typo.
-
-2002-09-11 Andrew Haley <aph@cambridge.redhat.com>
-
- * elf.c (_bfd_elf_find_nearest_line): Check functionname_ptr and
- line_ptr before deciding we've found a symbol.
-
-2002-09-11 Nick Clifton <nickc@redhat.com>
-
- * po/da.po: New Danish translation file.
- * configure.in (LINGUAS): Add 'da'.
- * configure: Regenerate.
-
-2002-09-10 Michael Snyder <msnyder@redhat.com>
-
- * irix-core.c (do_sections, do_sections64): New functions.
- (irix_core_core_file_p): Call new functions do_sections,
- do_sections64, depending on corefile (32-bit or 64-bit).
-
-2002-09-09 Richard Henderson <rth@redhat.com>
-
- * elfxx-ia64.c (elfNN_ia64_relax_section): Handle PCREL21M
- and PCREL21F like PCREL21B.
-
-2002-09-04 Kevin Buettner <kevinb@redhat.com>
-
- * config.bfd (mips*-*-irix6*): Add new ABI vectors. Make n32 default
- vector.
-
-2002-09-02 Nick Clifton <nickc@redhat.com>
-
- * elf32-v850.c (v850_elf_final_link_relocate): Use helpful
- names instead of cryptically overloaded bfd_reloc error
- codes.
- (v850_elf_relocate_section): Likewise.
- (v850_elf_relax_section): Replace caching of external symbols
- with caching of internal symbols obtained from calling
- bfd_elf_get_elf_syms().
- Fixup problems with freeing cached allocated memory blocks.
-
-2002-09-02 Alan Modra <amodra@bigpond.net.au>
-
- * cpu-pj.c (scan_mach, compatible, arch_info_struct): Remove.
- (bfd_pj_arch): Use bfd_default_scan.
- * cpu-v850.c (scan): Remove.
- (N): Use bfd_default_scan.
- * cpu-z8k.c (scan_mach): Remove.
- (arch_info_struct, bfd_z8k_arch): Reorganize so that the default is
- first. Use bfd_default_scan.
-
- * ecoff.c (_bfd_ecoff_set_arch_mach_hook): Don't use hard-coded
- bfd_mach constants.
- (ecoff_get_magic): Likewise.
- * elf32-v850.c (v850_elf_object_p): Likewise.
- (v850_elf_final_write_processing): Likewise.
- * mipsbsd.c (MY(set_arch_mach)): Likewise.
- (MY(write_object_contents)): Likewise.
- * coff64-rs6000.c (xcoff64_write_object_contents): Likewise.
- * coffcode.h (coff_write_object_contents): Likewise.
- (coff_set_arch_mach_hook): Add comment describing machine == 0.
- Remove unnecessary "machine" assignments.
- (coff_write_relocs): Test for the absolute section sym by testing
- section and flags.
-
- * aoutx.h (NAME(aout,machine_type)): Recognize bfd_mach_i386_i386
- and bfd_mach_i386_i386_intel_syntax.
- * pdp11.c (NAME(aout,machine_type)): Likewise.
-
-2002-08-30 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * bfd-in.h (align_power): Cast constants to bfd_vma type.
- * bfd-in2.h (align_power): Likewise.
-
-2002-08-30 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
-
- * cpu-avr.c (compatible): Don't use hard-coded mach constants.
- * cpu-powerpc.c (powerpc_compatible): Likewise.
- * cpu-rs6000.c (rs6000_compatible): Likewise.
-
-2002-08-28 Catherine Moore <clm@redhat.com>
-
- * elf32-v850.c (v850_elf_reloc_map): Add new relocs.
- (v850-elf-reloc): Don't resolve pc relative relocs.
- (v850_elf_ignore_reloc): New routine.
- (v850_elf_final_link_relocate): Handle new relocs.
- (v850_elf_relax_delete_bytes ): New routine.
- (v850_elf_relax_section): New routine.
- (bfd_elf32_bfd_relax_section): Define.
- (HOWTO): New entries for new relocs.
- * reloc.c (BFD_RELOC_V850_LONGCALL): New reloc.
- (BFD_RELOC_V850_LONGJUMP): New reloc.
- (BFD_RELOC_V850_ALIGN): New reloc.
- * archures.c: Remove redundant v850ea architecture.
- * cpu-v850.c: Remove redundant v850ea support.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerated.
-
-2002-08-28 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * config.bfd: Add tic4x-*-*coff* and c4x-*-*coff* target.
- * configure.in: Add tic4x_coff vector files.
- * configure: Regenerate.
- * Makefile.am: Add tic4x target.
- * Makefile.in: Regenerate.
-
-2002-08-27 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
-
- * archures.c: Add the BFD arch type tic4x.
- * bfd-in.h: Add BFD_IN_MEMORY flag.
- * coff-tic4x.c: New file.
- * coffswap.h (coff_swap_sym_out): Add preadjuster.
- * cpu-tic4x.c: New file.
- * targets.c: Added tic4x- in list of xvecs.
- * ticoff.h: New file.
- * bfd-in2.h: Regenerate.
-
-2002-08-27 Adam Nemet <anemet@lnxw.com>
-
- * elf32-arm.h (elf32_arm_finish_dynamic_sections): Set the last
- bit of DT_INIT and DT_FINI for Thumb functions.
-
-2002-08-26 Alan Modra <amodra@bigpond.net.au>
-
- * coffcode.h (coff_set_arch_mach_hook): Handle W65MAGIC.
-
-2002-08-26 Alan Modra <amodra@bigpond.net.au>
-
- * aoutx.h (NAME(aout,reloc_type_lookup)): Handle BFD_RELOC_8.
-
-2002-08-24 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf32-sh.c (sh_elf_copy_indirect_symbol): New.
- (create_got_section, allocate_dynrelocs, readonly_dynrelocs):
- Likewise.
- (struct elf_sh_pcrel_relocs_copied): Removed.
- (struct elf_sh_dyn_relocs): New.
- (struct elf_sh_link_hash_entry): Replace pcrel_relocs_copied
- field with dyn_relocs.
- (struct elf_sh_link_hash_table): Add short-cuts to get dynamic
- sections and sym_sec.
- (sh_elf_link_hash_newfunc): Clear dyn_relocs.
- (sh_elf_link_hash_table_create): Clear shorts-cuts and sym_sec.
- (sh_elf_create_dynamic_sections): Use create_got_section instead
- of _bfd_elf_create_got_section.
- (sh_elf_check_relocs): Likewise.
- (sh_elf_create_dynamic_sections): Use short-cuts to the dynamic
- sections.
- (sh_elf_adjust_dynamic_symbol, sh_elf_size_dynamic_sections,
- sh_elf_relocate_section, sh_elf_check_relocs,
- sh_elf_finish_dynamic_symbol, sh_elf_finish_dynamic_sections):
- Likewise.
- (sh_elf_adjust_dynamic_symbol): Handle nocopyreloc. Keep the
- dynamic relocations and avoiding the copy relocation when we
- didn't find any dynamic relocations in the section which has
- contents or is read-only.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): New.
- (sh_elf_size_dynamic_sections): Don't reset the size of
- .rela.got section even if dynamic_sections_created flag is off.
- Don't use sh_elf_discard_copies. Scan all input bfd and use
- allocate_dynrelocs. Call readonly_dynrelocs to determine
- whether we need DT_TEXTREL.
- (sh_elf_adjust_dynamic_symbol): Use plt.refcount to determine
- whether the symbol was never referred to.
- (sh_elf_relocate_section): Use WILL_CALL_FINISH_DYNAMIC_SYMBOL.
- (sh_elf_gc_sweep_hook): Fill with the real sweep function.
- (sh_elf_check_relocs): Call create_got_section if the short-cut
- to .got is null. Increment reference counters only instead of
- allocating space on dynamic sections here. Don't conditionalize
- uninitialized got.offset value when marking the symbol as a
- global offset table entry. Keep relocations for symbols satisfied
- by a dynamic library to avoid copy relocations for the symbol.
- Set dynobj field of an elf hash table if needed.
- (sh_elf_finish_dynamic_sections): Handle null section pointer
- correctly.
- (elf_backend_copy_indirect_symbol): Defined.
- (elf_backend_can_refcount): Defined.
-
-2002-08-23 Nick Clifton <nickc@redhat.com>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Undo
- previous change. Add comment explaining why.
-
-2002-08-23 Stephen Clarke <stephen.clarke@superh.com>
-
- * elf32-sh.c (elf_sh_plt0_entry_be, elf_sh_plt0_entry_le): Copy
- contents of .got.plt[2] to tr0, not address of .got.plt.
- (sh_elf_finish_dynamic_symbol): Do not apply GOT_BIAS when
- patching absolute plt entry. For shmedia plt entry, set bottom bit
- of branch to plt0 as this is a branch to an shmedia instruction.
- * elf64-sh64.c (elf_sh64_plt0_entry_be, elf_sh64_plt0_entry_le):
- Copy contents of .got.plt[2] to tr0, not address of .got.plt.
- (elf_sh64_plt_entry_be, elf_sh64_plt_entry_le): Use ptrel to
- branch to plt0.
- (sh64_elf64_finish_dynamic_symbol): Do not apply GOT_BIAS when
- patching absolute plt entry. For shmedia plt entry, branch to
- plt0 is now ptrel, so use relative offset. Set bottom bit of
- branch target as it is a branch to an shmedia instruction.
-
-2002-08-23 Stephen Clarke <stephen.clarke@superh.com>,
- Richard Shann <richard.shann@superh.com>
-
- * elf32-sh.c (sh_elf_finish_dynamic_sections): Set LSB of DT_INIT
- value if .init is an SHmedia function. Similarly for DT_FINI.
- * elf64-sh64.c (sh64_elf64_finish_dynamic_sections): Likewise.
-
-2002-08-23 Stephen Clarke <stephen.clarke@superh.com>
-
- * elf32-sh.c (sh_elf_size_dynamic_sections): Zero initialize
- dynamic section.
- * elf64-sh64.c (sh64_elf64_size_dynamic_sections): Likewise.
-
-2002-08-22 Kaz Kojima <kkojima@rr.iij4u.or.jp>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Use a simple
- byte read when reading the return address register column.
-
-2002-08-22 Nick Clifton <nickc@redhat.com>
-
- * config.bfd: Add powepc64-*-*bsd* target.
-
-2002-08-22 Graeme Peterson <gp@qnx.com>
-
- * Makefile.am: Add entries for elf32-shqnx.c
- * Makefile.in: Regenerate.
- * config.bfd: Add support sh-*-nto* target.
- * configure.in: Add support for bfd_elf32_sh{l}qnx_vec.
- * configure: Regenerate.
- * elf32-qnx.h: Changed typo "elf_i386qnx_*" to "elf_qnx_*" .
- * elf32-sh.c: Do not include elf32-target.h if
- ELF32_SH_C_INCLUDED is defined.
- * elf32-shqnx.c: New file: Support for QNX.
- * targets.c: Add bfd_elf32_sh{l}qnx_vec.
-
-2002-08-22 Nick Clifton <nickc@redhat.com>
-
- * po/tr.po: Updated Turkish translation.
-
- * syms.c (_bfd_generic_read_minisymbols): Set bfd_error if the
- symbols are not read.
-
-2002-08-22 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-m68hc11.c: Formatting fixes.
- (elf32_m68hc11_gc_mark_hook): Correct params. Remove unnecessary test.
- * elf32-m68hc12.c: Formatting fixes.
- (elf32_m68hc11_gc_mark_hook): Correct params. Remove unnecessary test.
-
-2002-08-22 Alan Modra <amodra@bigpond.net.au>
-
- * coff-rs6000.c (rs6000coff_vec <object_flags>): Add SEC_CODE and
- SEC_DATA.
- (pmac_xcoff_vec): Likewise.
- * coff64-rs6000.c (rs6000coff64_vec): Likewise.
- (aix5coff64_vec): Likewise.
-
-2002-08-22 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_backend_data): Add struct elf_backend_data
- param to elf_backend_copy_indirect_symbol.
- (_bfd_elf_link_hash_copy_indirect): Likewise.
- * elflink.h (elf_add_default_symbol, elf_fix_symbol_flags): Adjust
- calls to copy_indirect_symbol.
- * elf32-hppa.c (elf32_hppa_copy_indirect_symbol): Likewise.
- * elf32-i386.c (elf_i386_copy_indirect_symbol): Likewise.
- * elf32-s390.c (elf_s390_copy_indirect_symbol): Likewise.
- * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Likewise.
- * elf64-s390.c (elf_s390_copy_indirect_symbol): Likewise.
- * elf64-x86-64.c (elf64_x86_64_copy_indirect_symbol): Likewise.
- * elfxx-ia64.c (elfNN_ia64_hash_copy_indirect): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_copy_indirect_symbol): Likewise.
- * elfxx-mips.h (_bfd_mips_elf_copy_indirect_symbol): Likewise.
- * elf.c (_bfd_elf_link_hash_copy_indirect): Likewise. Properly
- test refcounts for "used" values.
-
-2002-08-21 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Add PARAMS to
- argument declaration.
-
-2002-08-19 Elena Zannoni <ezannoni@redhat.com>
-
- * archures.c (bfd_mach_ppc_e500): Added.
- * bfd-in2.h: Rebuilt.
- * cpu-powerpc.c (bfd_powerpc_archs): Added e500.
-
-2002-08-19 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-m68hc12.c (elf_backend_can_gc_sections): False.
-
-2002-08-17 Andrew Cagney <ac131313@redhat.com>
-
- * elf.c (bfd_elf_get_elf_syms): Change type of `esym' to
- `bfd_byte'.
-
-2002-08-17 Stan Cox <scox@redhat.com>
-
- * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Use the
- IRIX 6 segment layout for NEWABI.
-
-2002-08-16 Stephen Clarke <stephen.clarke@superh.com>
-
- * elf32-sh.c (sh_elf_gc_mark_hook): For sh64, skip indirect
- symbols when looking for section referred to by a relocation.
- * elf64-sh.c (sh_elf64_gc_mark_hook): Likewise.
-
-2002-08-15 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-i370.c: Move reloc enum to include/elf/i370.h.
-
-2002-08-15 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (elf_cris_discard_excess_program_dynamics): Add
- missing check for whether the symbol is referenced by DSO before
- unexporting it as an unneeded dynamic symbol.
-
-2002-08-14 H.J. Lu <hjl@gnu.org>
-
- * libbfd.h: Regenerate.
-
-2002-08-14 H.J. Lu <hjl@gnu.org>
-
- * config.bfd: Always add 64bit vectors to 32bit Linux/mips.
-
-2002-08-14 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc11.c (m68hc11_relax_group): New to relax group of
- instructions.
- (m68hc11_direct_relax): New to define table of relaxable instructions.
- (find_relaxable_insn): New, find a relaxable insn.
- (compare_reloc): New to compare two relocs.
- (m68hc11_elf_relax_section): New, relax text sections.
- (m68hc11_elf_relax_delete_bytes): New, delete bytes and adjust branchs.
- (elf32_m68hc11_check_relocs): New function for GC support.
- (elf32_m68hc11_relocate_section): New function for GC support.
- (bfd_elf32_bfd_relax_section): Define to support linker relaxation.
- (elf_backend_check_relocs): Likewise.
- (elf_backend_relocate_section): Likewise.
-
-2002-08-13 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (NAME(bfd_elf,size_dynamic_sections): Don't count
- definitions in shared objects when checking symbol with
- undefined version.
-
-2002-08-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc11.c (elf32_m68hc11_gc_mark_hook): New for section GC.
- (elf32_m68hc11_gc_sweep_hook): Likewise.
- (elf_backend_gc_mark_hook): Define for GC section support.
- (elf_backend_gc_sweep_hook): Likewise.
- (elf_backend_can_gc_sections): Likewise.
-
- * elf32-m68hc12.c: Likewise.
-
-2002-08-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc11.c (_bfd_m68hc11_elf_print_private_bfd_data): New.
- (_bfd_m68hc11_elf_merge_private_bfd_data): New function.
- (_bfd_m68hc11_elf_set_private_flags): New function.
- Use them to set/check/print ELF flags specific to 68HC11.
-
- * elf32-m68hc12.c (_bfd_m68hc12_elf_print_private_bfd_data): New.
- (_bfd_m68hc12_elf_merge_private_bfd_data): New function.
- (_bfd_m68hc12_elf_set_private_flags): New function.
- Use them to set/check/print ELF flags specific to 68HC12.
-
-2002-08-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * elf32-m68hc11.c (elf_m68hc11_howto_table): Add the new relocs;
- fix masks for PC-rel relocs.
- (m68hc11_elf_ignore_reloc): New function.
-
- * elf32-m68hc12.c (m68hc12_elf_special_reloc): New to handle specific
- 68HC12 banked addressing relocs.
- (m68hc12_phys_addr): New to compute physical address of banked memory.
- (m68hc12_phys_page): Likewise for page.
- (m68hc12_addr_is_banked): New to see if address is in banked area.
- (elf_m68hc12_howto_table): Add new relocs and rename to xx12.
-
-2002-08-13 Stephane Carrez <stcarrez@nerim.fr>
-
- * reloc.c (BFD_RELOC_M68HC11_RL_JUMP, BFD_RELOC_M68HC11_RL_GROUP,
- BFD_RELOC_M68HC11_LO16, BFD_RELOC_M68HC11_PAGE,
- BFD_RELOC_M68HC11_24): New relocs for 68HC11/68HC12.
- * bfd-in2.h: Regenerate.
-
-2002-08-12 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_add_default_symbol): Preserve section across
- elf_merge_symbol.
-
-2002-08-09 Graeme Peterson <gp@qnx.com>
-
- * Makefile.am: Add entries for elf32-ppcqnx.c, and add
- elf32-qnx.h dependency to elfarmqnx-nabi.c and elf32-i386qnx.c.
- * Makefile.in: Regenerate.
- * config.bfd: Add support for powerpc{le}-*-nto targets.
- * configure.in: Add support for bfd_elf32_powerpc{le}qnx_vec.
- * configure: Regenerate.
- * elf32-i386qnx.c: Moved backend functions into a QNX specific
- common file "elf32-qnx.h", and now include that file.
- * elf32-qnx.h: New file: QNX specific common elf backend.
- * elf32-ppc.c: Do not include elf32-target.h if
- ELF32_PPC_C_INCLUDED is defined.
- * elf32-ppcqnx.c: New file: Support for QNX.
- * elfarmqnx-nabi.c: Include elf32-qnx.h for qnx elf backend.
- * targets.c: Add bfd_elf32_powerpc{le}qnx_vec.
-
-2002-08-09 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated Swedish translation.
-
-2002-08-09 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (mips_elf_global_got_index): Avoid segfault if
- g->global_gotsym is NULL.
-
-2002-08-08 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_add_default_symbol): Don't warn if a definition
- overrides an indirect versioned symbol.
-
-2002-08-08 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-i386.c (elf_i386_relocate_section): Fill in proper addend
- for R_386_TLS_TPOFF32 relocs against symndx 0.
-
-2002-08-07 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Check symbol
- with undefined version if needed.
- (elf_link_assign_sym_version): Match a default symbol with a
- version without definition. No need to hide the default
- definition separately.
-
-2002-08-08 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_output_extsym): Don't output symbols from
- SEC_EXCLUDE sections.
-
- * aoutx.h (aout_link_write_symbols): Correct handling of warning syms.
-
-2002-08-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (edit_opd): Arrange to drop symbols for discarded .opd
- entries.
-
-2002-08-07 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (mips_elf_create_dynamic_relocation): Cast signedness
- mismatch.
-
-2002-08-07 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (ABI_64_P): Remove superfluous check.
-
-2002-08-07 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf32-mips.c (mips_reloc_map): Fix typo.
-
-2002-08-06 Alan Modra <amodra@bigpond.net.au>
-
- * xcofflink.c (xcoff_write_global_symbol): Set n_scnum for abs_section.
-
-2002-08-06 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_howto_raw): Zero all src_mask entries.
-
-2002-08-06 Alan Modra <amodra@bigpond.net.au>
-
- * libxcoff.h: Use PARAMS on function declarations.
- * coff-rs6000.c (xcoff_generate_rtinit): Simplify size calc.
- * coff64-rs6000.c (xcoff64_generate_rtinit): Likewise.
-
- * coff-rs6000.c: (xcoff_rtype2howto): Don't place reloc address in
- addend.
- * coff64-rs6000.c: (xcoff64_rtype2howto): Likewise.
-
-2002-08-06 Alan Modra <amodra@bigpond.net.au>
-
- * coff-rs6000.c: Formatting fixes.
- (xcoff_calculate_relocation): Use PARAMS in declaration.
- (xcoff_complain_overflow): Likewise.
- (xcoff_ppc_relocate_section): Use old-style function pointer call.
- (bfd_xcoff_backend_data): Remove useless comments.
- (rs6000coff_vec): Likewise.
- (bfd_pmac_xcoff_backend_data): Likewise.
- (pmac_xcoff_vec): Likewise.
-
- * coff64-rs6000.c: Formatting fixes.
- (xcoff64_calculate_relocation): Use PARAMS in declaration.
- (xcoff64_ppc_relocate_section): Use old-style function pointer call.
- (bfd_xcoff_backend_data): Remove useless comments.
- (rs6000coff64_vec): Likewise.
- (bfd_xcoff_aix5_backend_data): Likewise.
- (aix5coff64_vec): Likewise.
-
-2002-08-06 Alan Modra <amodra@bigpond.net.au>
-
- * coff-rs6000.c (xcoff_howto_table): Revert some of last change to
- mask entries. Use complain_overflow_dont for R_REF.
- (xcoff_reloc_type_ba): Revert last change.
- (xcoff_reloc_type_br): Likewise.
- (xcoff_reloc_type_crel): Likewise.
- (xcoff_ppc_relocate_section): Likewise.
- * coff64-rs6000.c (xcoff64_reloc_type_br): Likewise.
- (xcoff64_ppc_relocate_section): Likewise.
- (xcoff64_howto_table): Revert some of last change to mask entries.
- Use complain_overflow_dont for R_REF.
-
- * coff-rs6000.c (xcoff_howto_table): Fix src_mask entries. Make all
- relocs with bitsize == 16 have size = 1.
- (xcoff_reloc_type_ba): Correct src_mask and dst_mask adjustment.
- (xcoff_reloc_type_br): Likewise.
- (xcoff_reloc_type_crel): Likewise.
- (xcoff_ppc_relocate_section): Set up src_mask and dst_mask correctly.
- * coff64-rs6000.c (xcoff64_reloc_type_br): Correct src_mask and
- dst_mask adjustment.
- (xcoff64_ppc_relocate_section): Set up src_mask and dst_mask correctly.
- (xcoff64_howto_table): Fix src_mask entries. Make all relocs with
- bitsize == 16 have size = 1.
-
-2002-08-01 Denis Chertykov <denisc@overta.ru>
-
- * elf32-ip2k.c: Processor manufacturer changed to Ubicom.
- (struct misc): New field isymbuf. All free_* fields removed.
- (symbol_value): Pass in internal syms. No need to swap syms in.
- (ip2k_elf_relax_section): Use bfd_elf_get_elf_syms. Properly free
- possibly cached info.
- (tidyup_after_error): Removed.
- (ip2k_elf_relax_section_pass1): Don't use removed fields of struct
- misc. Use new field.
- (adjust_all_relocations): Use internal syms. No need to swap syms
- in and out.
- (add_page_insn): Don't use removed fields of struct misc.
-
-2002-08-01 Nick Clifton <nickc@redhat.com>
-
- * elf32-arm.h: Revert previous delta.
-
-2002-08-01 Nick Clifton <nickc@redhat.com>
-
- * configure.in (AM_INIT_AUTOMAKE): Bump version number.
- * configure: Regenerate.
-
-2002-07-31 H.J. Lu <hjl@gnu.org>
-
- * config.bfd: Add x86-64 vector to Linux/i386 if 64bit BFD is
- selected.
-
-2002-07-31 H.J. Lu <hjl@gnu.org>
-
- * config.bfd: Add n32 vectors to 32bit Linux/mips if 64bit BFD
- is selected.
-
-2002-07-31 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-i386.c (elf_i386_copy_indirect_symbol): Swap tls_type
- if _bfd_elf_link_hash_copy_indirect will swap got.refcount.
-
-2002-07-31 Ian Dall <ian@sibyl.beware.dropbear.id.au>
-
- * cpu-ns32k.c (_bfd_ns32k_put_immdeiate, _bfd_ns32k_get_immediate):
- There is no 8 byte relocation type for this architecture.
- (do_ns32k_reloc): Use bfd_vma instead of native types.
- (bfd_ns32k_put_immediate, _bfd_ns32k_relocate_contents) put_data
- returns void.
- (_bfd_ns32k_put_displacement): Don't check for overflow. We can
- rely on generic code to do that.
- * aout-ns32k.c (howto_table): Add appropriate overflow detection
- to all table entries.
- (_bfd_ns32k_relocate_contents): put_data returns void.
- * ns32k.h: (_bfd_ns32k_put_displacement, _bfd_ns32k_put_immediate)
- (_bfd_do_ns32k_reloc_contents): Fix prototypes. put data functions
- return void.
-
-2002-07-31 Ian Dall <ian@sibyl.beware.dropbear.id.au>
-
- * aoutx.h (aout_link_check_ar_symbols): Whether to include an
- archive object is target dependant.
-
-2002-07-31 Adam Nemet <anemet@lnxw.com>
-
- * elf32-arm.h (ARM_PLT_ENTRY_SIZE): Rename PLT_ENTRY_SIZE.
- (THUMB_PLT_ENTRY_SIZE): New macro.
- (PLT_ENTRY_SIZE): Return the appropriate *_PLT_ENTRY_SIZE.
- (elf32_arm_plt0_entry): Rename PLT_ENTRY_SIZE to
- ARM_PLT_ENTRY_SIZE.
- (elf32_arm_plt_entry): Likewise.
- (elf_backend_plt_header_size): Likewise.
- (elf32_thumb_plt0_entry): New global.
- (elf32_arm_finish_dynamic_sections): Use it. Put Thumb entries
- into .plt.thumb.
- (elf32_thumb_plt_entry): New global.
- (elf32_arm_finish_dynamic_symbol): Use it. Use .thumb.plt for
- Thumb entries. Set the bottom bit of the corresponding GOT entry
- for a Thumb PLT entry.
- (struct elf32_arm_plt_entry_info): New structure.
- (struct elf32_arm_link_hash_entry, plt_info): New member of this
- type.
- (elf32_arm_link_hash_newfunc): Initialize new member.
- (elf32_arm_final_link_relocate, R_ARM_THM_PC22 case): Handle
- relocations against the PLT.
- (elf32_arm_check_relocs, case R_ARM_PLT32 case): Set
- first_rel_type if this is the first time we encounter the symbol.
- (elf32_arm_check_relocs, case R_ARM_THM_PC22 case): New case.
- Determine if relocation needs a PLT entry. Set first_rel_type if
- this is the first time we encounter the symbol
- (elf32_arm_adjust_dynamic_symbol): Create PLT entries for Thumb
- functions as well.
- (elf32_arm_size_dynamic_sections): Handle .plt.thumb like .plt.
- (elf32_arm_create_dynamic_sections): New function. Create the
- .plt.thumb section.
- (elf_backend_create_dynamic_sections): Call it.
-
-2002-07-31 Nick Clifton <nickc@redhat.com>
-
- * bfd.c (bfd_alt_mach_code): Rename parameter 'index' to
- 'alternative' in order to avoid shadowing global symbol of the
- same name.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * libcoff.h: Regenerate.
-
-2002-07-31 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * Makefile.am: Add n32 ABI support.
- * Makefile.in: Regenerate.
- * config.bfd: Add n32 vectors to mips64*-*-linux* targets. Treat 64
- bit vectors for mips*-*-linux targets as optional.
- * configure.in: Add n32 ABI vectors.
- * configure: Regenerate.
- * elf32-mips.c (mips_elf32_object_p): Reject n32 ABI files.
- * elfn32-mips.c: New file, n32 ABI support.
- * targets.c: Add n32 ABI vectors.
-
-2002-07-30 Graeme Peterson <gp@qnx.com>
-
- * elfarmqnx-nabi.c: New file: Support for QNX.
- * config.bfd: Add support for arm-*-nto target.
- * configure.in: Add support for bfd_elf32_{big|little}armqnx_vec.
- * configure: Regenerate.
- * Makefile.am: Add entries for elfarmqnx-nabi.c.
- * Makefile.in: Regenerate.
- * elf32-arm.h (ELF_MAXPAGESIZE): Do not define if already defined.
- Do not define global function if ELFARM_NABI_C_INCLUDED is defined.
- * elfarm-nabi.c: Do not include elf32-arm.h if
- ELFARM_NABI_C_INCLUDED is defined.
- * targets.c: Add bfd_elf32_{big|little}armqnx_vec.
-
-2002-07-30 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated Swedish translation.
-
-2002-07-30 Jakub Jelinek <jakub@redhat.com>
-
- * elf.c (elf_fake_sections): Fix up .tbss sh_size and sh_type.
-
-2002-07-30 Alan Modra <amodra@bigpond.net.au>
-
- * aoutx.h (some_aout_object_p): Clean up tdata properly on error.
- * archive.c (bfd_generic_archive_p): Likewise.
- * coff-rs6000.c (_bfd_xcoff_archive_p): Likewise.
- (_bfd_xcoff_archive_p): Use bfd_scan_vma in place of strtol.
- * coff64-rs6000.c (xcoff64_slurp_armap): Likewise.
- (xcoff64_archive_p): Likewise.
- (xcoff64_openr_next_archived_file): Likewise.
- (xcoff64_archive_p): Clean up tdata properly on error.
- * coffgen.c (coff_real_object_p): Likewise.
- (coff_object_p): Release filehdr and opthdr.
- * ecoff.c (_bfd_ecoff_archive_p): Clean up tdata properly on error.
- * ieee.c (ieee_archive_p): Likewise.
- * ihex.c (ihex_object_p): Likewise.
- (ihex_mkobject): Always allocate tdata.
- * peicode.h (pe_ILF_object_p): Release bfd_alloc'd buffer on error.
- * srec.c (srec_mkobject): Always allocate tdata.
- (srec_object_p): Clean up tdata properly on error.
- (symbolsrec_object_p): Likewise.
- * versados.c (versados_object_p): Likewise.
- * vms-misc.c (_bfd_vms_get_record): Use bfd_malloc instead of malloc,
- and bfd_realloc instead of realloc.
- (add_new_contents): Use bfd_alloc instead of bfd_malloc for sections.
- * vms.c (vms_initialize): Always allocate tdata. Use bfd_alloc in
- place of bfd_malloc, simplifying error freeing. Free hash table too.
- (vms_object_p): Clean up tdata on error.
- (vms_mkobject): Don't complain on stderr if vms_initialize fails.
- (vms_close_and_cleanup): Adjust for bfd_alloc use.
-
-2002-07-30 Alan Modra <amodra@bigpond.net.au>
-
- * elfxx-ia64.c (elfNN_ia64_final_write_processing): Set e_flags.
-
-2002-07-26 Chris Demetriou <cgd@broadcom.com>
-
- * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Merge ASE
- flags into resulting BFD.
-
-2002-07-26 Alan Modra <amodra@bigpond.net.au>
-
- From John Reiser <jreiser@BitWagon.com>
- * elf32-i386.c (elf_i386_link_hash_table_create): Clear
- tls_ldm_got.refcount.
-
-2002-07-25 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf64-mips.c: Update TODO comment.
- (mips_elf64_higher_reloc,mips_elf64_highest_reloc,
- mips_elf64_gprel16_reloca): Remove prototypes.
- (mips16_jump_reloc,mips16_gprel_reloc): Add functions.
- (UNUSED_RELOC): Replace by EMPTY_RELOC.
- (mips_elf64_howto_table_rel): Use special R_MIPS_HI16 handling. Remove
- wrong comments. Remove disfunctional support of R_MIPS_HIGHER and
- R_MIPS_HIGHEST.
- (mips_elf64_howto_table_rela): Fix handling of R_MIPS_GPREL16 and
- R_MIPS_GOT16. Remove wrong comments.
- (elf_mips16_jump_howto,elf_mips16_gprel_howto,
- elf_mips_gnu_vtinherit_howto,elf_mips_gnu_vtentry_howto): New, code
- from elf32-mips.c.
- (mips_elf64_hi16_reloc): Fix formatting.
- (mips_elf64_higher_reloc,mips_elf64_highest_reloc): Remove.
- (mips_elf64_got16_reloc): Fix formatting. Remove superfluous code.
- Better comment. Fall back to R_MIPS_GOT_DISP instead of abort().
- (mips_elf64_gprel16_reloc): Make static. Add check for
- partial_inplace.
- (mips_elf64_gprel16_reloca): Remove.
- (mips_elf64_literal_reloc): New function.
- (mips_elf64_gprel32_reloc): Fix formatting.
- (mips_elf64_shift6_reloc): Fix comment. Make static.
- (mips16_jump_reloc,mips16_gprel_reloc): New functions, code from
- elf32-mips.c.
- (elf_reloc_map,mips_reloc_map): New mapping table, similiar as in
- elf32-mips.c
- (bfd_elf64_bfd_reloc_type_lookup): Use the mapping table. Enable GNU
- specific relocations.
- (mips_elf64_rtype_to_howto): Enable GNU specific relocations.
- (mips_elf64_object_p): Invert logic to check for SGI-ish ABI.
- (ELF_MAXPAGESIZE): Add comment.
-
-2002-07-25 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated Swedish translation.
- * po/es.po: Updated Spanish translation.
- * po/fr.po: Updated French translation.
-
-2002-07-25 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (_bfd_elf32_link_record_local_dynamic_symbol): Define
- as elf_link_record_local_dynamic_symbol.
- (_bfd_elf64_link_record_local_dynamic_symbol): Likewise.
- (elf_link_record_local_dynamic_symbol): Declare. Now returns int.
- * elflink.h (elf_link_record_local_dynamic_symbol): Move to..
- * elflink.c: .. here. Use bfd_elf_get_elf_syms. Check whether an
- attempt is made to record a symbol in a discarded section, and
- return `2' in that case.
-
-2002-07-24 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated Swedish translation.
- * po/es.po: Updated Spanish translation.
-
-2002-07-23 Alan Modra <amodra@bigpond.net.au>
-
- * po/SRC-POTFILES.in: Regenerate.
-
- * elf-hppa.h (elf_hppa_relocate_section): If relocatable, return
- immediately. Remove code handling relocatable linking.
- * elf32-avr.c (elf32_avr_relocate_section): Likewise.
- * elf32-cris.c (cris_elf_relocate_section): Likewise.
- * elf32-fr30.c (elf32_frv_relocate_section): Likewise.
- * elf32-frv.c (elf32_frv_relocate_section): Likewise.
- * elf32-h8300.c (elf32_h8_relocate_section): Likewise.
- * elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
- * elf32-ip2k.c (ip2k_elf_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf32-v850.c (v850_elf_relocate_section): Likewise.
- * elf32-vax.c (elf_vax_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf32-avr.c (elf_backend_rela_normal): Define.
- * elf32-cris.c: Likewise.
- * elf32-fr30.c: Likewise.
- * elf32-frv.c: Likewise.
- * elf32-h8300.c: Likewise.
- * elf32-hppa.c: Likewise.
- * elf32-ip2k.c: Likewise.
- * elf32-sparc.c: Likewise.
- * elf32-v850.c: Likewise.
- * elf32-vax.c: Likewise.
- * elf64-hppa.c: Likewise.
- * elf64-sparc.c: Likewise.
- * elf32-fr30.c (elf32_frv_relocate_section): Edit comment.
- * elf32-frv.c (elf32_frv_relocate_section): Likewise.
- * elf32-i860.c (elf32_i860_relocate_section): Likewise.
- * elf32-ip2k.c (ip2k_elf_relocate_section): Likewise.
- * elf32-m32r.c (m32r_elf_relocate_section): Likewise.
- * elf32-openrisc.c (openrisc_elf_relocate_section): Likewise.
- * elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise.
- * elf-m10200.c (USE_RELA): Don't define.
- * elf-m10300.c: Likewise.
- * elfarm-oabi.c: Likewise.
- * elf32-i370.c: Likewise.
- * elf32-ip2k.c: Likewise.
- * elf32-m68k.c: Likewise.
- * elf32-mcore.c: Likewise.
- * elf32-ppc.c: Likewise.
- * elf32-s390.c: Likewise.
- * elf32-vax.c: Likewise.
- * elf64-ppc.c: Likewise.
- * elf64-s390.c: Likewise.
- * elf64-x86-64.c: Likewise.
- * elfxx-ia64.c: Likewise.
- * elf32-avr.c (USE_REL): Don't undef.
- * elf32-ip2k.c: Likewise.
-
-2002-07-23 Nick Clifton <nickc@redhat.com>
-
- * elf-bfd.h (struct elf_backend_data): Add new bitfield
- 'want_p_paddr_set_to_zero'.
- * elfxx-target.h: Set default value for want_p_paddr_set_to_zero
- to false;
- * elfxx-ia64.c: Set want_p_paddr_set_zero for HPUX target.
- * elf.c (copy_private_bfd_data): Test want_p_paddr_set_zero.
-
-2002-07-23 Gabor Keresztfalvi <keresztg@mail.com>
-
- * nlmcode.h (nlm_swap_auxiliary_headers_out): Swapped the order of
- the MeSsAgEs and CoPyRiGhT tags to make >=NW4.x NLM loaders to
- show the Copyright string.
- Minor formatting tidy ups.
-
-2002-07-23 Nick Clifton <nickc@redhat.com>
-
- * po/fr.po: Updated French translation.
- * po/sv.po: Updated Swedish translation.
-
-2002-07-23 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_input_bfd): Don't change internal symbols
- when outputting relocs.
-
-2002-07-20 Jason Thorpe <thorpej@wasabisystems.com>
-
- * elf64-alpha.c (elf64_alpha_size_dynamic_sections): Only insert
- DT_PLTGOT into the dynamic section if there is a PLT.
-
-2002-07-19 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (_bfd_mips_elf_discard_info): New function, code from
- elf32-mips.c.
- (_bfd_mips_elf_write_section): Likewise.
- * elfxx-mips.h (_bfd_mips_elf_discard_info): New prototype.
- (_bfd_mips_elf_write_section): Likewise.
- * elf32-mips.c (elf32_mips_discard_info): Move to elfxx-mips.c.
- (elf32_mips_write_section): Likewise.
- * elf64-mips.c (_bfd_mips_elf_ignore_discarded_relocs): Use it.
- (_bfd_mips_elf_write_section): Likewise.
-
-2002-07-19 Alan Modra <amodra@bigpond.net.au>
-
- * elfxx-ia64.c: (elfNN_ia64_modify_segment_map): Properly scan
- PT_IA_64_UNWIND segments for a given section.
-
-2002-07-17 H.J. Lu <hjl@gnu.org>
-
- * Makefile.am: Fix a typo.
- * Makefile.in: Regenerate.
-
-2002-07-15 Denis Chertykov <denisc@overta.ru>
- Frank Ch. Eigler <fche@redhat.com>
- Ben Elliston <bje@redhat.com>
- Alan Lehotsky <alehotsky@cygnus.com>
- John Healy <jhealy@redhat.com>
- Graham Stott <grahams@redhat.com>
- Jeff Johnston <jjohnstn@redhat.com>
-
- * Makefile.am: Add support for ip2k.
- * Makefile.in: Regenerate.
- * doc/Makefile.in: Regenerate.
- * archures.c: Add support for ip2k.
- * config.bfd: Add support for ip2k.
- * configure.in: Add support for ip2k.
- * configure: Regenerate.
- * reloc.c: Add support for ip2k.
- * targets.c: Add support for ip2k.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * cpu-ip2k.c: New file.
- * elf32-ip2k.c: New file.
-
-2002-07-17 Ian Rickards <irickard@arm.com>
-
- * dwarf2.c (concat_filename): If we can't establish the directory
- just return the filename.
-
-2002-07-16 Moritz Jodeit <moritz@jodeit.org>
-
- * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Correct order of memset args.
-
-2002-07-16 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h: Formatting fixes, tidy prototypes.
- (elf_link_assign_sym_version): Move common code out of loop.
-
-2002-07-16 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_input_bfd): Don't call reloc_emitter when
- reloc section size is zero. Correct reloc output location.
-
-2002-07-16 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elf-hppa.h (elf_hppa_reloc_final_type): Use R_PARISC_PCREL16F as
- the final type for the e_fsel selector when generating PA2.0W code.
- (elf_hppa_relocate_insn): Provide support for PA2.0W 16-bit format 1
- relocations.
-
-2002-07-14 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_link_assign_sym_version): Hide the default
- definition if there is a hidden versioned definition.
-
-2002-07-12 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (cris_elf_relocate_section): Drop nonsensical
- dynamic reference test in assertion when initializing GOT with
- static contents. Just assert that there are either no dynamic
- sections, the symbol is defined in the regular objects or that the
- symbol is undef weak. Tweak comment.
- (elf_cris_finish_dynamic_symbol): Emit .got reloc for a program
- only if the symbol isn't defined in the program and isn't undef
- weak.
- (elf_cris_adjust_dynamic_symbol): Simplify condition for getting
- rid of PLT entry: only do it if the symbol isn't defined in a DSO.
- When doing so, clear ELF_LINK_HASH_NEEDS_PLT. Tweak comments.
- (elf_cris_discard_excess_program_dynamics): Don't consider
- ELF_LINK_HASH_REF_DYNAMIC when omitting .got runtime relocs.
-
-2002-07-11 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-i386.c (elf_i386_relocate_section): Don't complain about
- unresolved debugging relocs in dynamic applications.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
-
-2002-07-10 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ONES): Define.
- (ppc64_elf_howto_table): Use ONES here to avoid warnings. Fill in
- missing src_mask fields. Tweak R_PPC64_NONE, R_PPC64_COPY. Fill
- in missing dst_mask fields on R_PPC64_PLT32, R_PPC64_PLTREL32.
-
- * elf64-ppc.c (ppc64_elf_get_symbol_info): Delete.
- (ppc64_elf_set_private_flags): Delete.
- (ppc64_elf_section_from_shdr): Delete.
- (ppc64_elf_merge_private_bfd_data): Remove flag checking/merging code.
- (ppc64_elf_fake_sections): Delete.
- (bfd_elf64_bfd_set_private_flags): Don't define.
- (bfd_elf64_get_symbol_info): Likewise.
- (elf_backend_section_from_shdr): Likewise.
- (elf_backend_fake_sections): Likewise.
-
-2002-07-10 Marco Walther <Marco.Walther@sun.com>
-
- * elf.c: (assign_section_numbers) Set sh_entsize for .stab only
- when not already set.
- * elf64-sparc.c: (sparc64_elf_fake_sections): New function.
- (elf_backend_fake_sections): Define.
-
-2002-07-10 Alan Modra <amodra@bigpond.net.au>
-
- * merge.c (_bfd_merge_section): Remove redundant output_section check.
- Formatting.
- (_bfd_merge_sections): Don't set SEC_EXCLUDE on unused sections.
-
-2002-07-09 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (cris_elf_relocate_section): Move sanity-check for
- NULL sym_hashes to just before use.
- <case R_CRIS_32_GOTREL>: In test for local symbol, accept also
- symbol with non-default visibility.
- <case R_CRIS_32_GOTREL, case R_CRIS_32_PLT_GOTREL>: Ditto.
- <case R_CRIS_8_PCREL, case R_CRIS_16_PCREL, case R_CRIS_32_PCREL>:
- Ditto.
- (cris_elf_gc_sweep_hook): Only decrease h->plt.refcount for
- symbol with non-default visibility.
- (cris_elf_check_relocs): At tests for local symbol before
- increasing h->plt.refcount, also check for non-default
- visibility. Ditto when checking for local symbol to eliminate
- pc-relative runtime relocs.
-
-2002-07-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c: Formatting.
- (IS_SOLARIS_PT_INTERP): Add p_paddr and p_memsz checks.
- (INCLUDE_SECTION_IN_SEGMENT): Remove IS_SOLARIS_PT_INTERP.
- (copy_private_bfd_data): Set p_vaddr on broken Solaris PT_INTERP
- segments.
-
-2002-07-07 Mark Mitchell <mark@codesourcery.com>
- Alan Modra <amodra@bigpond.net.au>
-
- * cofflink.c (_bfd_coff_final_link): On PE COFF systems, take into
- account the impact of relocation count overflow when computing
- section offsets.
- * coffcode.h (coff_write_relocs): Use obj_pe when deciding whether
- or not to apply the PE COFF reloc overflow handling. Fix a
- fencepost error in deciding whether or not to use that technique.
-
-2002-07-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_reloc_cookie): Remove locsym_shndx,
- change type of locsyms.
- (bfd_elf_get_elf_syms): Declare.
- * elf.c (bfd_elf_get_elf_syms): New function.
- (group_signature): Use bfd_elf_get_elf_syms.
- (bfd_section_from_r_symndx): Likewise.
- * elfcode.h (elf_slurp_symbol_table): Likewise.
- * elflink.h (elf_link_is_defined_archive_symbol): Likewise.
- (elf_link_add_object_symbols): Likewise. Reorganise to increase
- locality of various data structures. Properly free internal relocs.
- (elf_bfd_final_link): Properly free internal relocs.
- (elf_link_check_versioned_symbol): Use bfd_elf_get_elf_syms.
- (elf_link_input_bfd): Likewise.
- (elf_gc_mark): Likewise. Properly free internal relocs.
- (elf_gc_sweep): Properly free internal relocs.
- (elf_reloc_symbol_deleted_p): No need to swap syms in.
- (elf_bfd_discard_info): Use bfd_elf_get_elf_syms. Properly free
- internal relocs.
- * elf-m10200.c (mn10200_elf_relax_section): Use bfd_elf_get_elf_syms.
- Properly free possibly cached info.
- (mn10200_elf_relax_delete_bytes): Remove symbol swapping code.
- (mn10200_elf_symbol_address_p): Pass in internal syms. Remove
- symbol swapping code.
- (mn10200_elf_get_relocated_section_contents): Use bfd_elf_get_elf_syms.
- Properly free possibly cached info.
- * elf-m10300.c (mn10300_elf_relax_section): As above for elf-m10200.c.
- (mn10300_elf_relax_delete_bytes): Likewise.
- (mn10300_elf_symbol_address_p): Likewise.
- (mn10300_elf_get_relocated_section_contents): Likewise.
- * elf32-h8300.c (elf32_h8_relax_section): As above for elf-m10200.c.
- (elf32_h8_relax_delete_bytes): Likewise.
- (elf32_h8_symbol_address_p): Likewise.
- (elf32_h8_get_relocated_section_contents): Likewise.
- * elf32-m32r.c (m32r_elf_relax_section): As above for elf-m10200.c.
- (m32r_elf_relax_delete_bytes): Likewise.
- (m32r_elf_get_relocated_section_contents): Likewise.
- * elf32-sh.c (sh_elf_reloc_loop): Free section contents using
- elf_section_data to determine whether cached.
- (sh_elf_relax_section): As above for elf-m10200.c.
- (sh_elf_relax_delete_bytes): Likewise.
- (sh_elf_get_relocated_section_contents): Likewise.
- * elf32-xstormy16.c (xstormy16_elf_relax_section): As above.
- * elf64-alpha.c (elf64_alpha_relax_section): As above. Also delay
- reading of local syms.
- * elf64-mmix.c (mmix_elf_relax_section): Likewise.
- * elf64-sh64.c (sh_elf64_get_relocated_section_contents): As above.
- * elfxx-ia64.c (elfNN_ia64_relax_section): As above.
- * elfxx-mips.c (_bfd_mips_elf_check_relocs): Properly free internal
- relocs.
- * elf32-arm.h (bfd_elf32_arm_process_before_allocation): Properly
- free internal relocs and section contents. Don't read symbols.
- * elf32-hppa.c (get_local_syms): Use bfd_elf_get_elf_syms.
- (elf32_hppa_size_stubs): Don't free local syms.
- * elf32-m68k.c (bfd_m68k_elf32_create_embedded_relocs): Delay
- reading of local syms. Use bfd_elf_get_elf_syms. Properly free
- possibly cached info.
- * elf32-mips.c (bfd_mips_elf32_create_embedded_relocs): Likewise.
- * elf64-hppa.c (elf64_hppa_check_relocs): Use bfd_elf_get_elf_syms.
- * elf64-ppc.c (struct ppc_link_hash_table): Delete bfd_count and
- all_local_syms.
- (get_local_syms): Delete function.
- (edit_opd): Use bfd_elf_get_elf_syms. Free on error exit. Cache
- on exit.
- (ppc64_elf_size_stubs): Use bfd_elf_get_elf_syms. Free/cache on exit.
-
-2002-07-05 Jim Wilson <wilson@redhat.com>
-
- * syms.c (decode_section_type): New.
- (bfd_decode_symclass): Call decode_section_type.
-
-2002-07-04 Jakub Jelinek <jakub@redhat.com>
-
- * merge.c (_bfd_merged_section_offset): Avoid accessing byte before
- section content start.
- Reported by Michael Schumacher <mike@hightec-rt.com>.
-
-2002-07-04 Alan Modra <amodra@bigpond.net.au>
-
- * section.c (_bfd_strip_section_from_output): Remove unnecessary
- link order code. Don't actually remove the output section here;
- Just set a flag for the linker to do so.
- * elflink.c (_bfd_elf_link_renumber_dynsyms): Test for removed
- sections when setting up output section dynsyms.
-
-2002-07-04 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_add_object_symbols): Revert 1999-09-02 hpux
- fudge.
- * elf.c (bfd_section_from_shdr): Work around broken hpux shared
- libs here instead.
-
-2002-07-02 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf64-s390.c (create_got_section): Set .got section alignment to
- 8 bytes.
- (elf_s390_check_relocs): Set .rela.dyn section alignment to 8 bytes.
-
-2002-07-02 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (_bfd_elf_reloc_type_class): Fix comment grammar.
-
-2002-07-01 Matt Thomas <matt@3am-software.com>
-
- * elf32-vax.c (elf32_vax_print_private_bfd_data): Change EF_*
- to EF_VAX_*.
-
-2002-07-01 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (ABI_64_P): Fix comment.
- (MIPS_ELF_OPTIONS_SECTION_NAME,MIPS_ELF_STUB_SECTION_NAME): Use the
- new section names for N64 ABI.
- (mips_elf_output_extsym): No special _gp_disp handling for NewABI.
- (mips_elf_calculate_relocation): Code formatting.
- (mips_elf_create_dynamic_relocation): Likewise.
- (_bfd_mips_elf_fake_sections): IRIX6 needs this hack, too.
- (_bfd_mips_elf_size_dynamic_sections): Handle GOT_PAGE for any NewABI.
- (_bfd_mips_elf_relocate_section): No special handling for R_MIPS_64
- in any NewABI.
- (_bfd_mips_elf_finish_dynamic_symbol): No special _gp_disp handling
- for NewABI.
- (_bfd_mips_elf_modify_segment_map): Handle any N64 ABI.
- (_bfd_mips_elf_gc_sweep_hook): NewABI GOT relocs should be handled
- here, too.
-
-2002-07-01 Andreas Schwab <schwab@suse.de>
-
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Only convert
- R_X86_64_64 to R_X86_64_RELATIVE.
-
-2002-07-01 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * vaxbsd.c: New BFD backend for VAX BSD and Ultrix.
- * Makefile.am (BFD32_BACKENDS, BFD32_BACKENDS_CFILES): Add new backend.
- Run "make dep-am".
- * config.bfd (vax-*-bsd* | vax-*-ultrix*): Use vaxbsd_vec instead of
- host_aout_vec.
- * configure.in (vaxbsd_vec): Add.
- * targets.c (vaxbsd_vec): Add.
- * Makefile.in: Rebuild.
- * configure: Rebuild.
- * po/SRC-POTFILES.in: Rebuild.
-
-2002-07-01 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_gc_mark): Pass in the section whose relocs we are
- examining to gc_mark_hook, rather than the bfd.
- (elf_gc_sections): Adjust.
- * elf-bfd.h (struct elf_backend_data <gc_mark_hook>): Likewise.
- * elf-m10300.c (mn10300_elf_gc_mark_hook): Likewise.
- * elf32-arm.h (elf32_arm_gc_mark_hook): Likewise.
- * elf32-avr.c (elf32_avr_gc_mark_hook): Likewise.
- * elf32-cris.c (cris_elf_gc_mark_hook): Likewise.
- * elf32-d10v.c (elf32_d10v_gc_mark_hook): Likewise.
- * elf32-fr30.c (fr30_elf_gc_mark_hook): Likewise.
- * elf32-hppa.c (elf32_hppa_gc_mark_hook): Likewise.
- * elf32-i386.c (elf_i386_gc_mark_hook): Likewise.
- * elf32-m32r.c (m32r_elf_gc_mark_hook): Likewise.
- * elf32-m68k.c (elf_m68k_gc_mark_hook): Likewise.
- * elf32-mcore.c (mcore_elf_gc_mark_hook): Likewise.
- * elf32-openrisc.c (openrisc_elf_gc_mark_hook): Likewise.
- * elf32-ppc.c (ppc_elf_gc_mark_hook): Likewise.
- * elf32-s390.c (elf_s390_gc_mark_hook): Likewise.
- * elf32-sh.c (sh_elf_gc_mark_hook): Likewise.
- * elf32-sparc.c (elf32_sparc_gc_mark_hook): Likewise.
- * elf32-v850.c (v850_elf_gc_mark_hook): Likewise.
- * elf32-vax.c (elf_vax_gc_mark_hook): Likewise.
- * elf32-xstormy16.c (xstormy16_elf_gc_mark_hook): Likewise.
- * elf64-mmix.c (mmix_elf_gc_mark_hook): Likewise.
- * elf64-ppc.c (ppc64_elf_gc_mark_hook): Likewise.
- * elf64-s390.c (elf_s390_gc_mark_hook): Likewise.
- * elf64-sh64.c (sh_elf64_gc_mark_hook): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_gc_mark_hook): Likewise.
- * elfxx-mips.h (_bfd_mips_elf_gc_mark_hook): Likewise.
- * elf64-x86-64.c (elf64_x86_64_gc_mark_hook): Likewise.
- * elf32-frv.c (elf32_frv_gc_mark_hook): Likewise. Also remove
- redundant local sym tests.
- * elf64-ppc.c (struct ppc_link_hash_entry): Add is_entry.
- (link_hash_newfunc): Init is_entry.
- (ppc64_elf_copy_indirect_symbol): Copy is_entry.
- (ppc64_elf_link_hash_table_create): Init all_local_syms.
- (create_linkage_sections): Use bfd_make_section_anyway rather than
- bfd_make_section.
- (ppc64_elf_mark_entry_syms): New function.
- (ppc64_elf_check_relocs): Don't bother testing elf_bad_symtab. Set
- up opd entry to function section map.
- (ppc64_elf_gc_mark_hook): Special case opd section relocs, and
- relocs that reference the opd section.
- (edit_opd): New function.
- (ppc64_elf_size_dynamic_sections): Call get_local_syms and edit_opd.
- (ppc64_elf_setup_section_lists): Don't calculate htab->bfd_count here.
- (get_local_syms): Do so here. Exit if we already have local syms.
- Remove bogus comment imported from elf32-hppa.c. Don't attempt to
- read local syms on non-ELF input.
- (ppc64_elf_size_stubs): Call _bfd_elf64_link_read_relocs rather
- than duplicating it's function here. Adjust free of internal
- relocs to suit.
- (ppc64_elf_relocate_section): Adjust local syms in opd section.
- * elf64-ppc.h (ppc64_elf_mark_entry_syms): Declare.
- * elf32-hppa.c (elf32_hppa_size_stubs): Call
- _bfd_elf32_link_read_relocs rather than duplicating it's function
- here. Adjust free of internal relocs to suit.
-
-2002-07-01 Andreas Jaeger <aj@suse.de>
-
- * elf64-x86-64.c (elf64_x86_64_check_relocs): Certain relocations
- are not allowed in shared libs code, enforce -fPIC.
-
-2002-06-29 Hans-Peter Nilsson <hp@bitrange.com>
-
- * mmo.c (mmo_write_loc_chunk): Don't eliminate leading and
- trailing zero-sequences when there's previous left-over data.
-
-2002-06-27 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elf64-hppa.c (elf64_hppa_reloc_type_class): New function.
- (elf64_hppa_finish_dynamic_sections): Check other_rel_sec, dlt_rel_sec
- and opd_rel_sec in order for starting rela section. Check _raw_size.
- (elf_backend_reloc_type_class): Define.
-
-2002-06-27 Kevin Buettner <kevinb@redhat.com>
-
- * dwarf2.c (decode_line_info): Handle older, non-standard, 64-bit
- DWARF2 formats.
-
-2002-06-27 Alan Modra <amodra@bigpond.net.au>
-
- * cpu-powerpc.c: Comment on ordering of arch_info.
- * elf32-ppc.c (ppc_elf_object_p): New function.
- (elf_backend_object_p): Define.
- * elf64-ppc.c (ppc64_elf_object_p): New function.
- (elf_backend_object_p): Define.
-
-2002-06-26 Jason Thorpe <thorpej@wasabisystems.com>
-
- * configure.in (vax-*-netbsd*): Set COREFILE to netbsd-core.lo.
- * configure: Regenerate.
-
-2002-06-25 Jason Eckhardt <jle@rice.edu>
-
- * dwarf2.c (decode_line_info): Check unit->addr_size
- to read in the proper number of prologue bytes.
-
-2002-06-25 Nick Clifton <nickc@cambridge.redhat.com>
-
- * config.bfd (powerpc-*-aix5*): Only create a selvecs for
- aix5coff64_vec if 64-bit bfd support has been enabled.
- (powerpc64-*-aix5*): Only define if 64-bit bfd support has
- been enabled.
-
- * targets.c (_bfd_target_vector[]): Only include
- aix5coff64_vec if 64-bit bfd support has been enabled.
-
-2002-06-25 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc_add_stub): Replace strcpy/strncpy with memcpy.
- * elf32-hppa.c (hppa_add_stub): Likewise.
- * elflink.c (_bfd_elf_link_record_dynamic_symbol): Likewise.
- * elflink.h (elf_add_default_symbol): Fix comment typo.
- (elf_add_default_symbol): Replace strcpy and strncpy with memcpy.
- (elf_link_add_object_symbols): Likewise.
- (elf_link_assign_sym_version): Likewise.
- * hash.c (bfd_hash_lookup): Likewise.
- * linker.c (_bfd_generic_link_add_one_symbol): Likewise.
- * section.c (bfd_get_unique_section_name): Likewise.
- * syms.c (_bfd_stab_section_find_nearest_line): Likewise.
- * elf.c (_bfd_elf_make_section_from_phdr): Likewise.
- (assign_section_numbers): Likewise.
- (_bfd_elfcore_make_pseudosection): Likewise.
- (elfcore_grok_lwpstatus): Likewise.
- (elfcore_grok_win32pstatus): Likewise.
- (elfcore_write_note): Constify input params. Use PTR instead of
- void *. Include terminating NUL in namesz. Correct padding.
- Support NULL "name" param. Use memcpy instead of strcpy.
- (elfcore_write_prpsinfo): Constify input params.
- (elfcore_write_prstatus): Likewise. Use PTR instead of void *.
- (elfcore_write_lwpstatus): Likewise.
- (elfcore_write_pstatus): Likewise.
- (elfcore_write_prfpreg): Likewise.
- (elfcore_write_prxfpreg): Likewise.
- * elf-bfd.h (elfcore_write_note): Update declaration.
- (elfcore_write_prpsinfo): Likewise.
- (elfcore_write_prstatus): Likewise.
- (elfcore_write_pstatus): Likewise.
- (elfcore_write_prfpreg): Likewise.
- (elfcore_write_prxfpreg): Likewise.
- (elfcore_write_lwpstatus): Likewise.
-
-2002-06-25 Jason Eckhardt <jle@rice.edu>
-
- * ecoff.c (ecoff_set_symbol_info): Set BSF_FUNCTION for
- symbols of type stProc and stStaticProc.
-
-2002-06-25 Nick Clifton <nickc@redhat.com>
-
- * ecoff.c: VArious formatting fixes.
-
-2002-06-25 Alan Modra <amodra@bigpond.net.au>
-
- * coff-rs6000.c (xcoff_generate_rtinit): Fix typo.
-
-2002-06-25 Alan Modra <amodra@bigpond.net.au>
-
- * aout-adobe.c: Don't compare against "true" or "false.
- * aout-target.h: Likewise.
- * aoutx.h: Likewise.
- * archive.c: Likewise.
- * bout.c: Likewise.
- * cache.c: Likewise.
- * coff-a29k.c: Likewise.
- * coff-alpha.c: Likewise.
- * coff-i386.c: Likewise.
- * coff-mips.c: Likewise.
- * coff-or32.c: Likewise.
- * coff64-rs6000.c: Likewise.
- * coffcode.h: Likewise.
- * coffgen.c: Likewise.
- * cpu-ns32k.c: Likewise.
- * ecoff.c: Likewise.
- * ecofflink.c: Likewise.
- * elf.c: Likewise.
- * elf32-arm.h: Likewise.
- * elf32-cris.c: Likewise.
- * elf32-d30v.c: Likewise.
- * elf32-i386.c: Likewise.
- * elf32-mcore.c: Likewise.
- * elf32-ppc.c: Likewise.
- * elf32-sh.c: Likewise.
- * elf32-sh64.c: Likewise.
- * elf32-v850.c: Likewise.
- * elf64-alpha.c: Likewise.
- * elf64-sh64.c: Likewise.
- * elfcode.h: Likewise.
- * elfcore.h: Likewise.
- * elflink.h: Likewise.
- * elfxx-mips.c: Likewise.
- * i386os9k.c: Likewise.
- * ieee.c: Likewise.
- * libbfd.c: Likewise.
- * linker.c: Likewise.
- * mmo.c: Likewise.
- * nlm32-alpha.c: Likewise.
- * nlm32-i386.c: Likewise.
- * nlm32-ppc.c: Likewise.
- * nlm32-sparc.c: Likewise.
- * nlmcode.h: Likewise.
- * oasys.c: Likewise.
- * pdp11.c: Likewise.
- * peicode.h: Likewise.
- * reloc.c: Likewise.
- * som.c: Likewise.
- * srec.c: Likewise.
- * tekhex.c: Likewise.
- * vms.c: Likewise.
- * xcofflink.c: Likewise.
- * elf64-sparc.c: Edit comment to not use "== false".
-
- * aoutf1.h: Don't use "? true : false".
- * ecoff.c: Likewise.
- * format.c: Likewise.
- * ieee.c: Likewise.
- * linker.c: Likewise.
- * mmo.c: Likewise.
- * oasys.c: Likewise.
-
-2002-06-23 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (elf_link_add_archive_symbols): For the default
- version, check references with only one `@' first.
-
-2002-06-23 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elf64-hppa.c (elf64_hppa_mark_milli_and_exported_functions): New
- function.
- (allocate_global_data_dlt): Don't add millicode symbols to dynamic
- symbol table.
- (allocate_global_data_opd, allocate_dynrel_entries): Likewise.
- (elf64_hppa_size_dynamic_sections): Revise to use
- elf64_hppa_mark_milli_and_exported_functions.
- (elf64_hppa_finish_dynamic_symbol): Remove code to keep millicode
- symbols out of dynamic symbol table.
-
-2002-06-23 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.in: Regenerate.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
- * configure: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
- * elflink.h: Comment typo fixes.
-
-2002-06-23 H.J. Lu <hjl@gnu.org>
-
- * elf-bfd.h (elf_link_loaded_list): New structure.
- (elf_link_hash_table): Add "loaded".
- * elf.c (_bfd_elf_link_hash_table_init): Initialize "loaded".
- * elflink.h (elf_link_check_versioned_symbol): New function.
- (elf_link_output_extsym): Call elf_link_check_versioned_symbol.
-
-2002-06-19 Nick Clifton <nickc@cambridge.redhat.com>
-
- * elflink.h (size_dynamic_sections): If the target does not
- support an ELF style hash table, return true, indicating that
- nothing needed to be done, rather than false, indicating that the
- section's size could not be computed.
-
-2002-06-18 Dave Brolley <brolley@redhat.com>
-
- From Catherine Moore, Michael Meissner, Dave Brolley:
- * po/SRC-POTFILES.in: Add cpu-frv.c and elf32-frv.c
- * targets.c: Support bfd_elf32_frv_vec.
- * reloc.c: Add FRV relocs.
- * configure.in: Add support for bfd-elf32-frv-vec.
- * config.bfd (targ_cpu): Add support for frv-*-elf.
- * archures.c: Add frv arch and machines.
- * Makefile.am (ALL_MACHINES): Add cpu-frv.lo.
- (ALL_MACHINES_CFILES): Add cpu-frv.c.
- (BFD32_BACKENDS): Add elf32-frv.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-frv.c
- (cpu-frv.lo): New target.
- (elf32-frv.lo): New target.
- * cpu-frv.c: New file.
- * elf32-frv.c: New file.
-
-2002-06-18 Jakub Jelinek <jakub@redhat.com>
-
- * elfcode.h (elf_object_p): Sanity check eh_shoff == 0 implies
- e_shnum == 0.
- Only read the first section header if e_shoff is non-zero.
- Don't consider e_shstrndx if there are no sections.
-
-2002-06-17 Tom Rix <trix@redhat.com>
-
- * elf32-d10v.c (elf_d10v_howto_table): Change R_D10V_10_PCREL_R,
- R_D10V_10_PCREL_L and R_D10V_18_PCREL to use
- complain_overflow_bitfield.
-
-2002-06-17 Alan Modra <amodra@bigpond.net.au>
-
- * opncls.c (bfd_openr): Remove redundant bfd_set_error.
- (bfd_fdopenr): Likewise.
- (bfd_openstreamr): Likewise.
- (bfd_openw): Likewise.
-
- * targets.c: Sort target vecs.
- (_bfd_target_vector): Add aix5coff64_vec, bfd_elf32_sh64_vec,
- bfd_elf32_sh64l_vec, bfd_elf32_sh64lnbsd_vec,
- bfd_elf32_sh64nbsd_vec, bfd_elf64_sh64_vec, bfd_elf64_sh64l_vec,
- bfd_elf64_sh64lnbsd_vec, bfd_elf64_sh64nbsd_vec.
- * configure.in: Sort target vecs. Add m88kmach3_vec.
- * configure: Regenerate.
-
-2002-06-16 Hans-Peter Nilsson <hp@bitrange.com>
-
- * elf64-mmix.c (bpo_reloc_request_sort_fn): Use member
- bpo_reloc_no to break sort order ties, not address of items.
-
-2002-06-16 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elf-hppa.h (elf_hppa_final_link): Fix formatting in comment.
- Skip excluded sections in determing __gp value.
- (elf_hppa_final_link_relocate): Use the symbol's address in
- R_PARISC_FPTR64 relocations that don't need an opd entry.
- * elf64-hppa.c (allocate_dynrel_entries): Simplify code.
- (elf64_hppa_finalize_dynreloc): Likewise.
- (elf64_hppa_size_dynamic_sections): Move comments and fix typo.
- (elf64_hppa_finish_dynamic_symbol): Break up assert.
-
-2002-06-14 Sergey Grigoriev <serge@leopold.Physik.Uni-Augsburg.DE>
-
- * pei-i386.c (COFF_SECTION_ALIGNMENT_ENTRIES): Enable 16 byte
- alignment for .bss, .data and .text sections so that sse and sse2
- code will work.
- * pe-i386.c (COFF_SECTION_ALIGNMENT_ENTRIES): Likewise.
-
-2002-06013 J"orn Rennecke <joern.rennecke@superh.com>
-
- config.bfd: Add support for sh[1234]l*-*-elf* | sh3el*-*-elf*,
- sh[1234]*-elf*.
-
-2002-06-12 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elflink.h (elf_bfd_final_link): Improve error handling for missing
- dynamic sections.
-
- * elf64-hppa.c (allocate_global_data_opd): We don't need an opd entry
- for a symbol that has no output section.
- (allocate_dynrel_entries): Correct comment.
- (elf64_hppa_finalize_dynreloc): Likewise. Don't create an opd entry
- unless we want one.
- (elf64_hppa_finalize_opd): Prevent segfault if dyn_h is NULL.
- (elf64_hppa_finalize_dlt): Likewise. Prevent segfault for symbols
- with no section. Remove unnecessary parentheses.
-
-2002-06-11 Tom Rix <trix@redhat.com>
-
- * coffcode.h (coff_compute_section_file_positions): Add data
- section to AIX loader alignment check.
-
- * coff-rs6000.c (_bfd_xcoff_mkobject): Set default text section
- alignment to 4 bytes.
- (_bfd_xcoff_copy_private_bfd_data): Use text and data alignment
- power accessor macro.
- (do_shared_object_padding): Remove invalid assertion.
-
-2002-06-10 Richard Sandiford <rsandifo@redhat.com>
-
- * section.c (_bfd_strip_section_from_output): Set SEC_EXCLUDE
- for removed output sections.
-
-2002-06-10 Geoffrey Keating <geoffk@redhat.com>
-
- * merge.c (merge_strings): Use htab_create_alloc with calloc, not
- htab_alloc.
- * elf-strtab.c (_bfd_elf_strtab_finalize): Likewise.
-
-2002-06-08 H.J. Lu <hjl@gnu.org>
-
- * elf.c (copy_private_bfd_data): Don't cast to bfd_size_type to
- work around a long long bug in gcc 2.96 on mips.
-
-2002-06-08 Jason Thorpe <thorpej@wasabisystems.com>
-
- * Makefile.am (BFD32_BACKENDS): Add vax1knetbsd.lo.
- (BFD32_BACKENDS_CFILES): Add vax1knetbsd.c.
- Regenerate dependency lists.
- * Makefile.in: Regenerate.
- * config.bfd (vax-*-netbsdelf*, vax-*-netbsdaout*): Add
- vax1knetbsd_vec to targ_selvecs.
- * configure.in: Add vax1knetbsd_vec.
- * configure: Regenerate.
- * targets.c (_bfd_target_vector): Add vax1knetbsd_vec.
- * vax1knetbsd.c: New file.
- * vaxnetbsd.c: Update copyright years.
- (TARGET_PAGE_SIZE): Set to 0x1000.
- (DEFAULT_MID): Set to M_VAX4K_NETBSD.
-
-2002-06-08 Matt Thomas <matt@3am-software.com>
-
- * libaout.h (enum machine_type): Add M_VAX4K_NETBSD.
-
-2002-06-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-sh64.c (sh64_elf64_link_output_symbol_hook): Make static.
-
-2002-06-08 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
-
- * armnetbsd.c: Replace CONST with const.
- * corefile.c: Likewise.
- * elf32-dlx.c: Likewise.
- * elf64-mips.c: Likewise.
- * mmo.c: Likewise.
- * ns32knetbsd.c: Likewise.
-
- * elf64-sparc.c (sparc64_elf_add_symbol_hook): Check the hash
- table is elf64-sparc.
-
-2002-06-08 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c (_bfd_mips_elf_relocate_section): Simplify code.
- Fix RELA addends to get not shifted in the result. Don't do special
- handling of R_MIPS_64 for NewABI.
-
-2002-06-07 Alan Modra <amodra@bigpond.net.au>
-
- * aoutx.h (NAME(aout,slurp_symbol_table)): Use bfd_zmalloc.
- (NAME(aout,slurp_reloc_table)): Likewise.
- * coff-mips.c (mips_relax_section): Use bfd_zalloc.
- * coff-rs6000.c (xcoff_write_armap_big): Use bfd_zmalloc.
- (xcoff_write_archive_contents_big): Likewise.
- (xcoff_generate_rtinit): Likewise.
- (xcoff_generate_rtinit): Likewise, and check error return.
- * coff64-rs6000.c (xcoff64_generate_rtinit): Likewise.
- * coffgen.c (coff_section_symbol): Use bfd_zalloc.
- (coff_get_normalized_symtab): Likewise.
- (coff_make_empty_symbol): Likewise.
- (bfd_coff_set_symbol_class): Likewise.
- * cofflink.c (coff_link_add_symbols): Likewise.
- * ecoff.c (_bfd_ecoff_make_empty_symbol): Likewise.
- * ecofflink.c (ecoff_write_shuffle): Use bfd_zmalloc.
- (bfd_ecoff_write_accumulated_debug): Likewise.
- * elf64-alpha.c (get_got_entry): Use bfd_zalloc.
- * i386linux.c (bfd_i386linux_size_dynamic_sections): Likewise.
- * i386lynx.c (NAME(lynx,slurp_reloc_table)): Use bfd_zmalloc.
- * ieee.c (do_with_relocs): Use bfd_zalloc.
- * m68klinux.c (bfd_m68klinux_size_dynamic_sections): Likewise.
- * pdp11.c (NAME(aout,slurp_symbol_table)): Use bfd_zmalloc.
- (NAME(aout,slurp_reloc_table)): Likewise.
- (NAME(aout,squirt_out_relocs)): Don't memset when zalloc'd.
- * reloc16.c (bfd_coff_reloc16_relax_section): Use bfd_zmalloc.
- * som.c (som_build_and_write_symbol_table): Likewise.
- (som_slurp_string_table): Likewise.
- (som_slurp_symbol_table): Likewise.
- (som_bfd_ar_write_symbol_stuff): Likewise.
- * sparclinux.c (bfd_sparclinux_size_dynamic_sections): Use bfd_zalloc.
- * sunos.c (bfd_sunos_size_dynamic_sections): Likewise.
- * tekhex.c (find_chunk): Likewise. Get rid of unused "sname".
- * vms-gsd.c (_bfd_vms_slurp_gsd): Use bfd_zmalloc.
- * xcofflink.c (xcoff_link_add_symbols): Use bfd_zalloc/bfd_zmalloc.
-
-2002-06-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct bfd_elf_section_data <group_name>): Replace with
- "group" union.
- (elf_group_name): Update.
- (elf_group_id): Define.
- (bfd_elf_set_group_contents): Declare.
- * elf.c (elf_fake_sections): Qualify use of elf_group_name.
- (set_group_contents): Rename to bfd_elf_set_group_contents. Remove
- ATTRIBUTE_UNUSED from failedptrarg. If elf_group_id is set, use
- that sym for the signature.
- (_bfd_elf_compute_section_file_positions): Don't call
- set_group_contents for "ld -r" case.
- (swap_out_syms): Use bfd_zalloc.
- * elflink.h (elf_link_add_archive_symbols): Likewise.
- (NAME(bfd_elf,size_dynamic_sections)): Likewise.
- (elf_bfd_final_link): Call bfd_elf_set_group_contents.
-
-2002-06-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Allow unresolved
- relocs in opd for non-shared too.
-
-2002-06-06 Jeffrey Law <law@redhat.com>
-
- * elf32-h8300.c (elf32_h8_relax_section): Ignore uninteresting
- relocations.
-
-2002-06-06 Nick Clifton <nickc@cambridge.redhat.com>
-
- * merge.c: Include libiberty.h.
- * elf-strtab.c: Include libiberty.h.
-
-2002-06-06 Elias Athanasopoulos <eathan@otenet.gr>
-
- * peXXigen.c (pe_print_idata): Remove unused variable.
-
-2002-06-06 David Heine <dlheine@tensilica.com>
-
- * elf.c (assign_file_positions_for_segments): Remove unallocated
- sections from the section to segment mapping for PT_LOAD segments.
- Update comment about empty loadable segments.
-
-2002-06-06 Richard Sandiford <rsandifo@redhat.com>
-
- * stabs.c (_bfd_link_section_stabs): Check that the symbol offset
- is within the .stabstr section.
-
-2002-06-06 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_size_info <swap_symbol_in>): Function args
- are "const PTR", not "const PTR *".
- (bfd_elf32_swap_symbol_in): Likewise.
- (bfd_elf64_swap_symbol_in): Likewise.
- * elfcode.h (elf_swap_symbol_in): Change input args to const PTR.
- (elf_slurp_symbol_table): Adjust call to elf_swap_symbol_in.
- * elflink.h (elf_link_is_defined_archive_symbol): Likewise.
- (elf_link_add_object_symbols): Likewise.
- (elf_link_record_local_dynamic_symbol): Likewise.
- (elf_link_input_bfd): Likewise.
- (elf_gc_mark): Likewise.
- (elf_reloc_symbol_deleted_p): Likewise.
- * elf-m10200.c (mn10200_elf_relax_section): Likewise.
- (mn10200_elf_relax_delete_bytes): Likewise.
- (mn10200_elf_symbol_address_p): Likewise.
- (mn10200_elf_get_relocated_section_contents): Likewise.
- * elf-m10300.c (mn10300_elf_relax_section): Likewise.
- (mn10300_elf_relax_section): Likewise.
- (mn10300_elf_relax_delete_bytes): Likewise.
- (mn10300_elf_symbol_address_p): Likewise.
- (mn10300_elf_get_relocated_section_contents): Likewise.
- * elf32-h8300.c (elf32_h8_relax_section): Likewise.
- (elf32_h8_relax_delete_bytes): Likewise.
- (elf32_h8_symbol_address_p): Likewise.
- (elf32_h8_get_relocated_section_contents): Likewise.
- * elf32-hppa.c (get_local_syms): Likewise.
- * elf32-m68k.c (bfd_m68k_elf32_create_embedded_relocs): Likewise.
- * elf32-mips.c (bfd_mips_elf32_create_embedded_relocs): Likewise.
- * elf32-sh.c (sh_elf_relax_section): Likewise.
- (sh_elf_relax_delete_bytes): Likewise.
- (sh_elf_get_relocated_section_contents): Likewise.
- * elf32-xstormy16.c (xstormy16_elf_relax_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relax_section): Likewise.
- * elf64-hppa.c (elf64_hppa_check_relocs): Likewise.
- * elf64-mmix.c (mmix_elf_relax_section): Likewise.
- * elf64-ppc.c (get_local_syms): Likewise.
- * elf64-sh64.c (sh_elf64_get_relocated_section_contents): Likewise.
- * elfxx-ia64.c (elfNN_ia64_relax_section): Likewise.
-
-2002-06-05 J"orn Rennecke <joern.rennecke@superh.com>
-
- * config.bfd (sh64l*-*-elf*, shl*-*-elf*): New configurations.
-
-2002-06-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (group_signature): Swap in the whole symbol, and handle
- extracting section symbol names.
- (setup_group): Add comment.
- (set_group_contents): When called from objcopy or ld, arrange for
- section contents to be written. Write group member output section
- indices to allow objcopy to reorganize sections.
- (_bfd_elf_copy_private_section_data): Copy group info.
-
- * elf-bfd.h (struct elf_size_info): Add swap_symbol_in field.
- (bfd_elf32_swap_symbol_in): Update prototype.
- (bfd_elf64_swap_symbol_in): Likewise.
- * elfcode.h (elf_swap_symbol_in): Change input args to const PTR *.
- (elf_slurp_symbol_table): Adjust call to elf_swap_symbol_in.
- * elflink.h (elf_link_is_defined_archive_symbol): Likewise.
- (elf_link_add_object_symbols): Likewise.
- (elf_link_record_local_dynamic_symbol): Likewise.
- (elf_link_input_bfd): Likewise.
- (elf_gc_mark): Likewise.
- (elf_reloc_symbol_deleted_p): Likewise.
- * elf-m10200.c (mn10200_elf_relax_section): Likewise.
- (mn10200_elf_relax_delete_bytes): Likewise.
- (mn10200_elf_symbol_address_p): Likewise.
- (mn10200_elf_get_relocated_section_contents): Likewise.
- * elf-m10300.c (mn10300_elf_relax_section): Likewise.
- (mn10300_elf_relax_section): Likewise.
- (mn10300_elf_relax_delete_bytes): Likewise.
- (mn10300_elf_symbol_address_p): Likewise.
- (mn10300_elf_get_relocated_section_contents): Likewise.
- * elf32-h8300.c (elf32_h8_relax_section): Likewise.
- (elf32_h8_relax_delete_bytes): Likewise.
- (elf32_h8_symbol_address_p): Likewise.
- (elf32_h8_get_relocated_section_contents): Likewise.
- * elf32-hppa.c (get_local_syms): Likewise.
- * elf32-m68k.c (bfd_m68k_elf32_create_embedded_relocs): Likewise.
- * elf32-mips.c (bfd_mips_elf32_create_embedded_relocs): Likewise.
- * elf32-sh.c (sh_elf_relax_section): Likewise.
- (sh_elf_relax_delete_bytes): Likewise.
- (sh_elf_get_relocated_section_contents): Likewise.
- * elf32-xstormy16.c (xstormy16_elf_relax_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relax_section): Likewise.
- * elf64-hppa.c (elf64_hppa_check_relocs): Likewise.
- * elf64-mmix.c (mmix_elf_relax_section): Likewise.
- * elf64-ppc.c (get_local_syms): Likewise.
- * elf64-sh64.c (sh_elf64_get_relocated_section_contents): Likewise.
- * elfxx-ia64.c (elfNN_ia64_relax_section): Likewise.
- * elfcode.h (NAME(_bfd_elf,size_info)): Update initialiser.
- * elf64-alpha.c (alpha_elf_size_info): Likewise.
- * elf64-hppa.c (hppa64_elf_size_info): Likewise.
- * elf64-mips.c (mips_elf64_size_info): Likewise.
- * elf64-s390.c (s390_elf64_size_info): Likewise.
- * elf64-sparc.c (sparc64_elf_size_info): Likewise.
-
-2002-06-05 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * elf32-mips.c (elf32_mips_ignore_discarded_relocs): Move to...
- elfxx-mips.c (_bfd_mips_elf_ignore_discarded_relocs): ... here.
- elf64-mips.c (elf_backend_ignore_discarded_relocs): Use
- _bfd_mips_elf_ignore_discarded_relocs.
- elfxx-mips.h (_bfd_mips_elf_ignore_discarded_relocs): Declare.
-
-2002-06-05 H.J. Lu <hjl@gnu.org>
-
- * elfxx-mips.c (mips_elf_calculate_relocation): Call
- _bfd_elf_rel_local_sym for STT_SECTION relocations against
- the SEC_MERGE section.
-
-2002-06-05 Alan Modra <amodra@bigpond.net.au>
-
- * coff-alpha.c: Update copyright date.
- * coff-mips.c: Likewise.
- * xcoff-target.h: Likewise.
- * bfd-in.h: Remove "taken from the source" comment.
- * libbfd-in.h: Likewise.
- * libcoff-in.h: Likewise.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * libcoff.h: Regenerate.
+2004-01-05 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
- * elf.c (bfd_elf_discard_group): Return true.
- * elf-bfd.h (bfd_elf_discard_group): Declare.
- * bfd-in.h (bfd_elf_discard_group): Don't declare here.
- * section.c (bfd_discard_group): Rename to bfd_generic_discard_group.
- * bfd.c (bfd_discard_group): Define.
- * targets.c (struct bfd_target): Add _bfd_discard_group.
- (BFD_JUMP_TABLE_LINK): Here too.
- * libbfd-in.h (_bfd_nolink_bfd_discard_group): Define.
- * aout-adobe.c (aout_32_bfd_discard_group): Define.
- * aout-target.h (MY_bfd_discard_group): Define.
- * aout-tic30.c (MY_bfd_discard_group): Define.
- * binary.c (binary_bfd_discard_group): Define.
- * bout.c (b_out_bfd_discard_group): Define.
- * coff-alpha.c (_bfd_ecoff_bfd_discard_group): Define.
- * coffcode.h (coff_bfd_discard_group): Define.
- * coff-mips.c (_bfd_ecoff_bfd_discard_group): Define.
- * elfxx-target.h (bfd_elfNN_bfd_discard_group): Define.
- * i386msdos.c (msdos_bfd_discard_group): Define.
- * i386os9k.c (os9k_bfd_discard_group): Define.
- * ieee.c (ieee_bfd_discard_group): Define.
- * ihex.c (ihex_bfd_discard_group): Define.
- * mmo.c (mmo_bfd_discard_group): Define.
- * nlm-target.h (nlm_bfd_discard_group): Define.
- * oasys.c (oasys_bfd_discard_group): Define.
- * ppcboot.c (ppcboot_bfd_discard_group): Define.
- * som.c (som_bfd_discard_group): Define.
- * srec.c (srec_bfd_discard_group): Define.
- * tekhex.c (tekhex_bfd_discard_group): Define.
- * versados.c (versados_bfd_discard_group): Define.
- * vms.c (vms_bfd_discard_group): Define.
- * xcoff-target.h (_bfd_xcoff_bfd_discard_group): Define.
- * coff64-rs6000.c (rs6000coff64_vec): Update initialiser.
- (aix5coff64_vec): Likewise.
- * coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Likewise.
+ * elf32-mips.c (ELF_MAXPAGESIZE): Redefine for traditional
+ targets to support pages of up to 64kB.
+ (elf32_bed): Redefine to get a separate backend data structure for
+ traditional targets.
+ * elf64-mips.c (ELF_MAXPAGESIZE): Redefine for traditional
+ targets to support pages of up to 64kB.
+ (elf64_bed): Redefine to get a separate backend data structure for
+ traditional targets.
+ * elfn32-mips.c (ELF_MAXPAGESIZE): Redefine for traditional
+ targets to support pages of up to 64kB.
+ (elf32_bed): Redefine to get a separate backend data structure for
+ traditional targets.
-2002-06-04 Jason Thorpe <thorpej@wasabisystems.com>
+2004-01-04 Mark Kettenis <kettenis@gnu.org>
- * Makefile.am (BFD32_BACKENDS): Add elf32-sh64-com.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-sh64-com.c.
- (elf32-sh64-com.lo): New dependency list.
- * Makefile.in: Regenerate.
- * configure.in (bfd_elf32_sh64_vec, bfd_elf32_sh64l_vec)
- (bfd_elf32_sh64nbsd_vec, bfd_elf32_sh64lnbsd_vec): Add
- elf32-sh64-com.lo.
- * configure: Regenerate.
- * elf32-sh64.c (sh64_address_in_cranges)
- (sh64_get_contents_type, sh64_address_is_shmedia): Move to...
- (crange_qsort_cmpb, crange_qsort_cmpl, crange_bsearch_cmpb):
- (crange_bsearch_cmpl): Prepend _bfd_sh64_ to name and move to...
- * elf32-sh64-com.c: ...here. New file.
-
-2002-06-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-openrisc.c (openrisc_elf_gc_mark_hook): Remove
- ATTRIBUTE_UNUSED on used params.
- * elf32-vax.c (elf_vax_gc_mark_hook): Remove unnecessary checks
- before calling bfd_section_from_elf_index on local syms.
- * elf64-sh64.c (sh_elf64_gc_mark_hook): Likewise.
-
-2002-06-04 Jason Thorpe <thorpej@wasabisystems.com>
-
- * Makefile.am (BFD32_BACKENDS): Add elf32-sh64-nbsd.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-sh64-nbsd.c.
- (BFD64_BACKENDS): Add elf64-sh64-nbsd.lo.
- (BFD64_BACKENDS_CFILES): Add elf64-sh64-nbsd.c.
- (elf32-sh64-nbsd.lo, elf64-sh64-nbsd.lo): New rules.
- * Makefile.in: Regenerate.
- * config.bfd (sh5le-*-netbsd*, sh5-*-netbsd*, sh64le-*-netbsd*)
- (sh64-*-netbsd*): New targets.
- * configure.in: Add bfd_elf32_sh64nbsd_vec, bfd_elf32_sh64lnbsd_vec,
- bfd_elf64_sh64nbsd_vec, and bfd_elf64_sh64lnbsd_vec.
- * configure: Regenerate.
- * elf32-sh64-nbsd.c: New file.
- * elf64-sh64-nbsd.c: New file.
- * targets.c: Add extern decls for bfd_elf32_sh64nbsd_vec,
- bfd_elf32_sh64lnbsd_vec, bfd_elf64_sh64nbsd_vec, and
- bfd_elf64_sh64lnbsd_vec.
-
-2002-06-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (setup_group): Set SEC_LINK_ONCE on GRP_COMDAT groups.
- (bfd_section_from_shdr): Likewise. Set section name of group
- sections from signature.
- (group_signature): Split out from setup_group. Ensure symbol table
- is available.
- (bfd_elf_discard_group): New function.
- (_bfd_elf_make_section_from_shdr): Don't set SEC_LINK_ONCE on
- .gnu.linkonce* sections if they are members of a group.
- (set_group_contents): Set GRP_COMDAT flag.
- * section.c (bfd_discard_group): New function.
- * bfd-in.h (bfd_elf_discard_group): Declare.
- * bfd-in2.h: Regenerate.
- * elf-bfd.h (struct bfd_elf_section_data): Add linkonce_p field.
- (elf_linkonce_p): Define.
-
-2002-06-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (bfd_section_from_shdr): Make "name" const.
- * elf-bfd.h (elf_backend_section_from_shdr): Likewise.
- * elf32-i370.c (i370_elf_section_from_shdr): Likewise.
- * elf32-ppc.c (ppc_elf_section_from_shdr): Likewise.
- * elf32-sh64.c (sh64_backend_section_from_shdr): Likewise.
- * elf32-v850.c (v850_elf_section_from_shdr): Likewise.
- * elf64-alpha.c (elf64_alpha_section_from_shdr): Likewise.
- * elf64-hppa.c (elf64_hppa_section_from_shdr): Likewise.
- * elf64-ppc.c (ppc64_elf_section_from_shdr): Likewise.
- * elfxx-ia64.c (elfNN_ia64_section_from_shdr): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Likewise.
- * elfxx-mips.h (_bfd_mips_elf_section_from_shdr): Likewise.
-
-2002-06-03 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * elfxx-mips.c (ABI_64_P): Use backend's data to determine the
- ABI.
-
-2002-06-02 Kazu Hirata <kazu@cs.umass.edu>
-
- * elf32-arc.c: Fix formatting.
- * elf32-arm.h: Likewise.
- * elf32-cris.c: Likewise.
- * elf32-dlx.c: Likewise.
- * elf32-hppa.c: Likewise.
- * elf32-i386.c: Likewise.
- * elf32-i386qnx.c: Likewise.
- * elf32-or32.c: Likewise.
- * elf32-s390.c: Likewise.
- * elf32-sh64.c: Likewise.
- * elf32-vax.c: Likewise.
- * elf32-xstormy16.c: Likewise.
- * elf64-alpha.c: Likewise.
- * elf64-mmix.c: Likewise.
- * elf64-ppc.c: Likewise.
- * elf64-s390.c: Likewise.
- * elf64-sh64.c: Likewise.
- * elf64-x86-64.c: Likewise.
-
-2002-06-02 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relocate_section): Don't dereference
- null when there are no got entries for a symbol.
- (elf64_alpha_relax_find_tls_segment): Rearrange to avoid
- uninitialized variable warning.
-
-2002-06-01 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relax_with_lituse): Don't test for
- undefined symbols here.
- (elf64_alpha_relax_section): Do it here. Also test for not
- defined in the current module.
- (elf64_alpha_relocate_section_r): Split out of ...
- (elf64_alpha_relocate_section): ... here. Don't dereference
- NULL when looking up local got entries.
-
-2002-06-01 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relax_with_lituse): Reject undefined
- symbols from JSR relaxation.
- (elf64_alpha_size_plt_section_1): New.
- (elf64_alpha_calc_dynrel_sizes): Split out .rela.got bits ...
- (elf64_alpha_size_rela_got_1): ... here.
- (elf64_alpha_size_dynamic_sections): Split out .rela.got bits ...
- (elf64_alpha_size_rela_got_section): ... here.
- (elf64_alpha_size_plt_section): New.
- (elf64_alpha_relax_section): Call them.
- (elf64_alpha_size_got_sections): Remove output_bfd arg.
- (elf64_alpha_finish_dynamic_symbol): Check gotent use_count.
-
-2002-06-01 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (alpha_get_dtprel_base, alpha_get_tprel_base): New.
- (elf64_alpha_relocate_section): Use them. Reject LE TLS relocs
- in shared libraries. Fix DTPRELHI and TPRELHI value.
- (INSN_ADDQ, INSN_RDUNIQ): New.
- (struct alpha_relax_info): Add symtab_hdr, tls_segment, first_gotent.
- (elf64_alpha_relax_with_lituse): Return boolean. Remove irelend
- argument. Reject dynamic symbols. Use LITUSE symbolic constants.
- (elf64_alpha_relax_got_load): Rename from relax_without_lituse.
- Handle GOTDTPREL and GOTTPREL relocations.
- (elf64_alpha_relax_gprelhilo): New.
- (elf64_alpha_relax_tls_get_addr): New.
- (elf64_alpha_relax_find_tls_segment): New.
- (elf64_alpha_relax_section): Handle TLS relocations.
- (ALPHA_ELF_LINK_HASH_TLS_IE): New.
- (elf64_alpha_check_relocs): Set it.
-
-2002-06-01 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relax_section): Don't store computed gp.
-
- * elf64-alpha.c (elf64_alpha_check_relocs): Fix typo on maybe_dynamic
- check; don't suppress dynamic relocs for non-allocated sections.
-
- * elf64-alpha.c: Remove dead code.
-
-2002-05-31 Alan Modra <amodra@bigpond.net.au>
-
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
- * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Don't allocate
- space for bss .plt.
-
-2002-05-31 Graeme Peterson <gp@qnx.com>
-
- * Makefile.am (BFD32_BACKENDS): Add elf32-i386qnx.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-i386qnx.c.
- Run "make dep-am".
- * Makefile.in: Regenerate.
- * config.bfd: Add i[3456]86-*-nto-qnx* support.
- * configure.in: Add bfd_elf32_i386qnx_vec support.
- * configure: Regenerate.
- * elf-bfd.h (struct elf_backend_data): Add set_nonloadable_filepos,
- is_contained_by_filepos, and copy_private_bfd_data_p.
- * elf.c (assign_file_positions_for_segments): Call backend
- set_nonloadable_filepos. Fix non-K&R call to _bfd_error_handler.
- (IS_CONTAINED_BY_FILEPOS): Define.
- (INCLUDE_SECTION_IN_SEGMENT): Also test IS_CONTAINED_BY_FILEPOS.
- (copy_private_bfd_data): Use IS_CONTAINED_BY_FILEPOS. Typo fix.
- Fix non-K&R call to _bfd_error_handler.
- (_bfd_elf_copy_private_section_data): Use backend
- copy_private_bfd_data_p.
- * elf32-i386.c: Don't include elfxx-target.h when
- ELF32_I386_C_INCLUDED is defined.
- * elf32-i386qnx.c: New QNX elf backend file.
- * elfxx-target.h: Add elf_backend_set_nonloadable_filepos,
- elf_backend_is_contained_by_filepos, and
- elf_backend_do_copy_private_bfd_data.
- * targets.c: Add bfd_target bfd_elf32_i386qnx_vec.
-
-2002-05-31 Alan Modra <amodra@bigpond.net.au>
-
- * elfarm-oabi.c (bfd_elf32_arm_add_glue_sections_to_bfd): Define.
- Move other similar defines to start of file.
-
-2002-05-30 Tom Rix <trix@redhat.com>
-
- * coff-rs6000.c (xcoff_rtype2howto): Handle 16 bit R_RBA.
- * coff64-rs6000.c (xcoff64_rtype2howto): Same.
-
-2002-05-30 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (ALPHA_ELF_LINK_HASH_LU_TLSGD,
- ALPHA_ELF_LINK_HASH_LU_TLSLDM, ALPHA_ELF_LINK_HASH_LU_FUNC): New.
- (ALPHA_ELF_GOT_ENTRY_RELOCS_DONE): Remove.
- (ALPHA_ELF_GOT_ENTRY_RELOCS_XLATED): Remove.
- (struct alpha_elf_got_entry): Add reloc_type, reloc_done, reloc_xlated.
- (struct alpha_elf_obj_tdata): Rename total_got_entries and
- n_local_got_entries to total_got_size and local_got_size.
- (elf64_alpha_howto, elf64_alpha_reloc_map): Update for TLS relocs.
- (alpha_got_entry_size): New.
- (elf64_alpha_relax_with_lituse): Use it.
- (elf64_alpha_relax_without_lituse): Likewise.
- (MAX_GOT_SIZE): Rename from MAX_GOT_ENTRIES.
- (get_got_entry): New.
- (elf64_alpha_check_relocs): Handle TLS relocs. Reorganize.
- (elf64_alpha_adjust_dynamic_symbol): Test LU_FUNC as a mask.
- (elf64_alpha_merge_ind_symbols): Check gotent->reloc_type.
- (elf64_alpha_can_merge_gots, elf64_alpha_merge_gots): Likewise.
- (elf64_alpha_calc_got_offsets_for_symbol): Use alpha_got_entry_size.
- (elf64_alpha_calc_got_offsets): Likewise.
- (alpha_dynamic_entries_for_reloc): New.
- (elf64_alpha_calc_dynrel_sizes): Use it.
- (elf64_alpha_size_dynamic_sections): Likewise.
- (elf64_alpha_relocate_section): Handle TLS relocations.
- * reloc.c: Add Alpha TLS relocations.
- * bfd-in2.h, libbfd.h: Rebuild.
-
-2002-05-29 Ralf Habacker <ralf.habacker@freenet.de>
-
- * peXXigen.c (pe_print_idata): Remove double printed
- import table lines; add Bound-To comment.
-
-2002-05-29 Matt Thomas <matt@3am-software.com>
-
- * Makefile.am (BFD32_BACKENDS): Add elf32-vax.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-vax.c.
- (elf32-vax.lo): New rule.
- * Makefile.in: Regenerate.
- * configure.in (bfd_elf32_vax_vec)
- (vaxnetbsd_vec): New vectors.
- * configure: Regenerate.
- * config.bfd (vax-*-netbsdelf*)
- (vax-*-netbsdaout*)
- (vax-*-netbsd*): New targets.
- * elf32-vax.c: New file.
- * reloc.c: Add VAX relocations.
- * bfd-in2.h: Regenerate.
- * targets.c (_bfd_target_vector): Add bfd_elf32_vax_vec.
-
-2002-05-29 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.bfd (arm-*-netbsd*): Add bfd_elf32_littlearm_vec
- and bfd_elf32_bigarm_vec to targ_selvecs.
-
-2002-05-29 Ralf Habacker <ralf.habacker@freenet.de>
-
- * peXXigen.c (pe_print_idata): Fix seg faults on printing import tables
- with auto-imported symbols.
-
-2002-05-29 Adam Nemet <anemet@lnxw.com>
-
- * elf32-arm.h (bfd_elf32_arm_get_bfd_for_interworking): Don't add glue
- sections only record bfd.
- (bfd_elf32_arm_add_glue_sections_to_bfd): New function.
- * bfd-in.h (bfd_elf32_arm_add_glue_sections_to_bfd): Declare it.
- * bfd-in2.h: Regenerate.
-
-2002-05-28 Nick Clifton <nickc@cambridge.redhat.com>
-
- * syms.c (_bfd_stab_section_find_nearest_line): Move
- declaration and initialisation of saw_line and saw_func out of
- for loop.
-
-2002-05-29 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_get_symbol_info): New function.
- (bfd_elf64_get_symbol_info): Define.
- * elfxx-target.h (bfd_elfNN_get_symbol_info): Only define if undef.
-
-2002-05-29 Andrey Volkov <avolkov@transas.com>
-
- * cpu-h8300.c: Make default h8300 machine first in machine list.
-
-2002-05-28 Kuang Hwa Lin <kuang@sbcglobal.net>
-
- * config.bfd: Added DLX configuraton.
- * Makefile.am: Added DLX configuraton.
- * configure.in: Added DLX configuraton.
- * archures.c: Add DLX architecture.
- * reloc.c: Add DLX relocs.
- * targets.c: Added DLX target vector.
- * configure: Regenerate.
- * Makefile.in: Regenreate.
- * bfd-in2.h: Regenreate.
- * elf32-dlx.c: New file: Support DLX target.
- * cpu-dlx.c: New file: Support DLX target.
-
-2002-05-25 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-m68k.c (elf32_m68k_print_private_bfd_data): Formatting.
-
- * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Revert last change.
- (ppc64_elf_check_relocs): Don't set up function descriptor symbol
- strings to point inside function code sym string.
- (func_desc_adjust): Likewise.
- (ppc64_elf_hide_symbol): Rewrite code to look up function code sym.
-
-2002-05-24 Michal Ludvig <mludvig@suse.cz>
-
- * elf64-x86-64.c (elf64_x86_64_grok_prstatus): Added.
- (elf64_x86_64_grok_psinfo): Added.
-
-2002-05-24 TAMURA Kent <kent@netbsd.org>
-
- * config.bfd: Add a target for i386-netbsdpe.
-
-2002-05-24 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy is_func
- and is_func_descriptor.
- (func_desc_adjust): Hide function code sym in shared libs unless
- there is a matching exported function descriptor sym.
-
-2002-05-23 Jakub Jelinek <jakub@redhat.com>
-
- * elf.c (_bfd_elf_make_section_from_shdr): Set SEC_THREAD_LOCAL
- for symbols from SHF_TLS section.
- (_bfd_elf_print_private_bfd_data): Add PT_TLS.
- (elf_fake_sections): Set SHF_TLS for SEC_THREAD_LOCAL sections.
- (map_sections_to_segments): Build PT_TLS segment if necessary.
- (assign_file_positions_for_segments): Likewise.
- (get_program_header_size): Account for PT_TLS segment.
- (swap_out_syms): Set type of BSF_THREAD_LOCAL symbols and symbols from
- SEC_THREAD_LOCAL sections to STT_TLS.
- * reloc.c: Add 386 and IA-64 TLS relocs.
- * section.c (SEC_THREAD_LOCAL): Define.
- (SEC_CONSTRUCTOR_TEXT, SEC_CONSTRUCTOR_DATA, SEC_CONSTRUCTOR_BSS):
- Remove.
- * elflink.h (elf_link_add_object_symbols): Support .tcommon.
- (size_dynamic_sections): If DF_STATIC_TLS, set DF_FLAGS
- unconditionally.
- (struct elf_final_link_info): Add first_tls_sec.
- (elf_bfd_final_link): Set first_tls_sec.
- Compute elf_hash_table (info)->tls_segment.
- (elf_link_output_extsym): Handle STT_TLS symbols.
- (elf_link_input_bfd): Likewise.
- * syms.c (BSF_THREAD_LOCAL): Define.
- * bfd-in2.h: Rebuilt.
- * libbfd.h: Rebuilt.
- * elf32-i386.c (elf_i386_tls_transition, dtpoff_base, tpoff,
- elf_i386_mkobject, elf_i386_object_p): New functions.
- (elf_howto_table): Add TLS relocs.
- (elf_i386_reloc_type_lookup): Support TLS relocs.
- (elf_i386_info_to_howto_rel): Likewise.
- (struct elf_i386_link_hash_entry): Add tls_type.
- (struct elf_i386_obj_tdata): New.
- (elf_i386_hash_entry, elf_i386_tdata, elf_i386_local_got_tls_type):
- New macros.
- (struct elf_i386_link_hash_table): Add tls_ldm_got.
- (link_hash_newfunc): Clear tls_type.
- (elf_i386_check_relocs): Support TLS relocs.
- (elf_i386_gc_sweep_hook): Likewise.
- (allocate_dynrelocs): Likewise.
- (elf_i386_size_dynamic_sections): Likewise.
- (elf_i386_relocate_section): Likewise.
- (elf_i386_finish_dynamic_symbol): Likewise.
- (bfd_elf32_mkobject, elf_backend_object_p): Define.
- * elfxx-ia64.c (struct elfNN_ia64_dyn_sym_info): Add tprel_offset,
- dtpmod_offset, dtprel_offset, tprel_done, dtpmod_done, dtprel_done,
- want_tprel, want_dtpmod, want_dtprel.
- (elfNN_ia64_tprel_base, elfNN_ia64_dtprel_base): New functions.
- (ia64_howto_table): Add TLS relocs, rename R_IA64_LTOFF_TP22 to
- R_IA64_LTOFF_TPREL22.
- (elf_code_to_howto_index): Add TLS relocs.
- (elfNN_ia64_check_relocs): Support TLS relocs.
- (allocate_global_data_got): Account for TLS .got data.
- (allocate_dynrel_entries): Account for TLS dynamic relocations.
- (elfNN_ia64_install_value): Supprt TLS relocs.
- (set_got_entry): Support TLS relocs.
- (elfNN_ia64_relocate_section): Likewise.
-
-2002-05-23 Nick Clifton <nickc@cambridge.redhat.com>
-
- * elf32-arm.h (elf32_arm_final_link_relocate): For the Thumb
- BLX reloc round the relocation up rather than down.
- * coff-arm.c (coff_arm_relocate_section): Likewise.
-
-2002-05-21 H.J. Lu (hjl@gnu.org)
-
- * linker.c (_bfd_generic_link_add_one_symbol): Allow multiple
- definition.
-
-2002-05-22 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_size_stubs): Don't strip .branch_lt.
- (ppc64_elf_relocate_section): Handle unresolved relocs in opd.
-
-2002-05-22 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Return false for
- unresolved relocs.
- (ppc64_elf_size_dynamic_sections): Check for splt NULL.
-
-2002-05-21 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * bfd.c (bfd_get_arch_size): Remove bfd_set_error call for
- non-ELF targets.
-
-2002-05-21 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf-bfd.h (elf_backend_emit_relocs): Change prototype to return
- an error value.
- * elflink.h (elf_link_output_relocs): Likewise. Improve error message.
- return with false on error.
- (elf_link_input_bfd): Check reloc_emitter return value.
-
-2002-05-21 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.bfd (armeb-*-netbsdelf*): New target.
-
-2002-05-20 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc_build_one_stub): Point undefined function syms
- at the plt call stub.
-
-2002-05-19 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * cpu-mips.c (mips_compatible): Don't try to check machine
- compatibility.
-
-2002-05-18 Tom Rix <trix@redhat.com>
-
- * coff64-rs6000.c (_bfd_xcoff64_swap_aux_out): Fix C_FILE auxent.
-
-2002-05-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_info_to_howto): Formatting.
- (ppc64_elf_relocate_section): Don't warn about reloc overflow when
- we've already warned about an undefined symbol. Report more
- detail on reloc errors.
-
-2002-05-17 Alan Modra <amodra@bigpond.net.au>
-
- * acinclude.m4 (AM_INSTALL_LIBBFD): New.
- * configure.in: Invoke AM_INSTALL_LIBBFD.
- * Makefile.am (install-data-local): Revert 2002-05-13. Move to..
- (install_libbfd): .. New target.
- (uninstall_libbfd): Likewise.
- (install-bfdlibLTLIBRARIES): Likewise.
- (uninstall-bfdlibLTLIBRARIES): Likewise.
- (bfdlibdir): New.
- (bfdincludedir): New.
- (lib_LTLIBRARIES): Rename to bfdlib_LTLIBRARIES.
- * aclocal.m4: Regenerate.
- * configure: Regenerate.
- * Makefile.in: Regenerate.
-
-2002-05-17 Stuart Balfour <sbalfour@cisco.com>
-
- * hash.c (bfd_hash_lookup): Remove computation of len from inside
- hash loop.
-
-2002-05-16 Nick Clifton <nickc@cambridge.redhat.com>
-
- * config.bfd: Add targets for sh64-linux (little endian and
- big endian).
-
-2002-05-15 Laurent Pinchart <laurent.pinchart@skynet.be>
-
- * peXXigen.c (pe_print_idata): Do not assume that the first thunk
- is located in the same section as the import table. Instead
- check, and if necessary load the section containing the thunk.
-
-2002-05-15 Nick Clifton <nickc@cambridge.redhat.com>
-
- * aix5ppc-core.c (xcoff64_core_p): Replace bfd_read with
- bfd_bread.
- (xcoff64_core_file_matches_executable_p): Replace bfd_read
- with bfd_bread.
-
-2002-05-15 Alan Modra <amodra@bigpond.net.au>
-
- * aix5ppc-core.c: Warning fixes.
- * aout-adobe.c (aout_32_bfd_link_just_syms): Define.
- * aout-target.h (MY_bfd_link_just_syms): Define.
- * aout-tic30.c (MY_bfd_link_just_syms): Define.
- * bfd.c (bfd_link_just_syms): Define.
- * binary.c (binary_bfd_link_just_syms): Define.
- * bout.c (b_out_bfd_link_just_syms): Define.
- * coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Update initializer.
- * coff64-rs6000.c (rs6000coff64_vec, aix5coff64_vec): Likewise.
- * coffcode.h (coff_bfd_link_just_syms): Define.
- * elf-bfd.h (enum elf_link_info_type): Add ELF_INFO_TYPE_JUST_SYMS.
- (elf_discarded_section): Check for ELF_INFO_TYPE_JUST_SYMS.
- (_bfd_elf_link_just_syms): Declare.
- * elf.c (_bfd_elf_link_just_syms): New function.
- * elf-eh-frame.c (_bfd_elf_maybe_strip_eh_frame_hdr): Check that
- sections haven't already been discarded by the linker.
- * elflink.h (elf_link_add_object_symbols): Likewise for stab
- sections and SEC_MERGE sections.
- (elf_bfd_discard_info): Similarly here.
- * elfxx-target.h (bfd_elfNN_bfd_link_just_syms): Define.
- * i386msdos.c (msdos_bfd_link_just_syms): Define.
- * i386os9k.c (os9k_bfd_link_just_syms): Define.
- * ieee.c (ieee_bfd_link_just_syms): Define.
- * ihex.c (ihex_bfd_link_just_syms): Define.
- * libbfd-in.h (_bfd_nolink_bfd_link_just_syms): Define.
- (_bfd_generic_link_just_syms): Declare.
- * libecoff.h (_bfd_ecoff_bfd_link_just_syms): Define.
- * linker.c (_bfd_generic_link_just_syms): New function.
- * mmo.c (mmo_bfd_link_just_syms): Define.
- * nlm-target.h (nlm_bfd_link_just_syms): Define.
- * oasys.c (oasys_bfd_link_just_syms): Define.
- * ppcboot.c (ppcboot_bfd_link_just_syms): Define.
- * som.c (som_bfd_link_just_syms): Define.
- * srec.c (srec_bfd_link_just_syms): Define.
- * targets.c (struct bfd_target): Add _bfd_link_just_syms.
- (BFD_JUMP_TABLE_LINK): And here.
- * tekhex.c (tekhex_bfd_link_just_syms): Define.
- * versados.c (versados_bfd_link_just_syms): Define.
- * vms.c (vms_bfd_link_just_syms): Define.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
-
-2002-05-15 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elf32-mips.c: Remove superfluous definitions copied from
- elfxx-mips.c.
- (bfd_elf32_bigmips_vec,bfd_elf32_littlemips_vec): Use the
- SGIish vectors to check the special case.
- (mips_elf_hi16_reloc): Fix comment.
- (mips_elf_got16_reloc): Likewise.
- (_bfd_mips_elf32_gprel16_reloc): Likewise.
- (elf_reloc_map): Code cleanup.
- (mips_reloc_map): Add comment.
- (bfd_elf23_bfd_reloc_type_lookup): Code cleanup.
- (mips_elf32_rtype_to_howto): Likewise.
- (mips_elf32_discard_info): Likewise.
- (elf32_mips_irix_compat): Invert logic: Only SGIish vectors
- lead to IRIX compatibility now.
-
-2002-05-15 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * elfxx-mips.c: Call it IRIX, not Irix in comments.
-
-2002-05-13 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.bfd (shle-*-netbsdelf*): Add target which includes
- sh64 support.
-
-2002-05-13 David Edelsohn <edelsohn@gnu.org>
-
- * configure.in: Revert 2002-04-07. Instead, auto-configure
- HAVE_ST_C_IMPL.
- * configure: Regenerate.
- * config.in: Regenerate.
- * rs6000-core.c (CNEW_IMPL): Guard use of c_impl with HAVE_ST_C_IMPL
- or AIX_5_CORE.
-
-2002-05-11 Federico G. Schwindt <fgsch@olimpo.com.br>
-
- * configure.in (sparc*-*-openbsd*): Support sparc64-openbsd
- corefiles as well.2
- * configure: Regenerate.
-
-2002-05-13 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am (install-data-local): Install headers to
- $(exec_prefix)/include.
- * Makefile.in: Regenerate.
-
-2002-05-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
- Daniel Jacobowitz <drow@mvista.com>
-
- * coff-sh.c (sh_reloc_map): Map to R_SH_IMM32 for non-PE. Don't
- map BFD_RELOC_RVA.
-
-2002-05-11 Federico G. Schwindt <fgsch@olimpo.com.br>
-
- * config.bfd (alpha*-*-openbsd*, sparc64*-*-openbsd*,
- hppa*-*-openbsd*): New targets.
- * configure.in (alpha*-*-openbsd*): Set COREFILE.
- * configure: Regenerate.
-
-2002-05-10 Tom Rix <trix@redhat.com>
-
- * coff64-rs6000.c (xcoff64_reloc_type_br): New function for
- xcoff64_ppc_relocate_section.
- * coff-rs6000.c : Extern common xcoff_reloc_type functions.
- * libxcoff.h: Common xcoff_reloc_type function declaration.
-
-2002-05-10 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-i386.c (elf_i386_relocate_section): Remove overflow checks
- added in 2002-05-09 commit.
-
- * elf32-hppa.c (elf32_hppa_size_stubs): Revert part of 2002-05-04,
- don't look for stubs on all undefined syms.
-
-2002-05-09 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (RA_REGISTER_MASK, RA_REGISTER_SHIFT): Delete.
- (ppc64_elf_howto_raw <R_PPC64_RELATIVE>): Not pc_relative or
- pcrel_offset.
-
- * elf32-i386.c (elf_howto_table): Comments.
- (elf_i386_relocate_section): Handle more relocs for relocatable
- linking and against SEC_MERGE sections.
-
-2002-05-08 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_create_got): New function.
- (ppc_elf_create_dynamic_sections): Call ppc_elf_create_got before
- _bfd_elf_create_dynamic_sections. Correct .plt flags.
- (ppc_elf_check_relocs): Use ppc_elf_create_got in place of
- _bfd_elf_create_got_section.
-
-2002-05-07 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (struct elf_backend_data): Add rela_normal.
- * elfxx-target.h (elf_backend_rela_normal): Define.
- (elfNN_bed): Init rela_normal.
- * elflink.h (elf_link_input_bfd <emit_relocs>): Handle adjustment
- for section symbols here if rela_normal. Simplify abs section test.
- * elf-m10200.c (mn10200_elf_relocate_section): If relocatable,
- return immediately. Remove code handling relocatable linking.
- * elf-m10300.c (mn10300_elf_relocate_section): Likewise.
- * elf32-fr30.c (fr30_elf_relocate_section): Likewise.
- * elf32-i370.c (i370_elf_relocate_section): Likewise.
- * elf32-i860.c (elf32_i860_relocate_section): Likewise.
- * elf32-m68k.c (elf_m68k_relocate_section): Likewise.
- * elf32-mcore.c (mcore_elf_relocate_section): Likewise.
- * elf32-openrisc.c (openrisc_elf_relocate_section): Likewise.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
- * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise.
- * elf32-arm.h (elf32_arm_relocate_section): Likewise #ifndef USE_REL.
- * elf32-m32r.c (m32r_elf_relocate_section): Likewise.
- * elf-m10200.c (elf_backend_rela_normal): Define.
- * elf-m10300.c (elf_backend_rela_normal): Define.
- * elf32-fr30.c (elf_backend_rela_normal): Define.
- * elf32-i370.c (elf_backend_rela_normal): Define.
- * elf32-i860.c (elf_backend_rela_normal): Define.
- * elf32-m68k.c (elf_backend_rela_normal): Define.
- * elf32-mcore.c (elf_backend_rela_normal): Define.
- * elf32-openrisc.c (elf_backend_rela_normal): Define.
- * elf32-ppc.c (elf_backend_rela_normal): Define.
- * elf32-s390.c (elf_backend_rela_normal): Define.
- * elf32-xstormy16.c (elf_backend_rela_normal): Define.
- * elf64-ppc.c (elf_backend_rela_normal): Define.
- * elf64-s390.c (elf_backend_rela_normal): Define.
- * elf64-x86-64.c (elf_backend_rela_normal): Define.
- * elfxx-ia64.c (elf_backend_rela_normal): Define.
- * elf32-arm.h (elf_backend_rela_normal): Define #ifndef USE_REL.
- * elf32-m32r.c (elf_backend_rela_normal): Likewise.
-
-2002-05-06 Nick Clifton <nickc@cambridge.redhat.com>
-
- * elf32-arm.h (elf32_arm_final_link_relocate): Convert
- 'reloc_signed_max' and 'reloc_signed_min' into half-word offsets.
-
-2002-05-06 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_link_input_bfd <emit_relocs>): Adjust r_offset
- when not relocatable. Fix reloc_emitter call for K&R.
-
-2002-05-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_relocate_section): Reinstate code
- reloading local sym addend mistakenly removed in 2002-05-01 change.
-
- * dwarf2.c (struct line_head): Make prologue_length a bfd_vma.
- (read_abbrevs): Change "offset" param to bfd_vma.
- (parse_comp_unit): Change "version" and addr_size to unsigned ints.
- Change "abbrev_offset" to bfd_vma.
- (read_indirect_string): Use correct conversion chars in error
- message format string, cast bfd_vma's to unsigned long.
- (read_abbrevs): Likewise.
- (read_attribute_value): Likewise.
- (decode_line_info): Likewise.
- (scan_unit_for_functions): Likewise.
- (parse_comp_unit): Likewise.
-
-2002-05-04 Tom Rix <trix@redhat.com>
-
- * coffswap.h (coff_swap_reloc_in): Remove XCOFF support.
- (coff_swap_reloc_out): Same.
- * coff-rs6000.c: (xcoff_swap_reloc_in): Moved from coffswap.h.
- (xcoff_swap_reloc_out): Same.
- (xcoff_rtype2howto): Renamed from _bfd_xcoff_rtype2howto. Special
- case some 16 bit relocs. Add reloc value to output.
- (xcoff_howto_table): Remove 64 bit R_POS, add 16 bit
- R_RBR. Improve names.
- (_bfd_xcoff_reloc_type_lookup): Adjust for removal of 64 bit R_POS.
- (bfd_xcoff_backend_data): Update with new reloc swap names.
- (bfd_pmac_xcoff_backend_data) : Same.
- * coff64-rs6000.c: (xcoff64_swap_reloc_in): Moved from coffswap.h.
- (xcoff64_swap_reloc_out): Same.
- (xcoff64_rtype2howto): Special case some 16 bit relocs and 32 bit
- R_POS. Add reloc value to output.
- (xcoff64_howto_table): Move 64 bit R_POS to first entry. Add 16
- bit R_RBR. Improve names, masks.
- (xcoff64_reloc_type_lookup): Adjust for move of 64 bit R_POS.
- (bfd_xcoff_backend_data): Update with new reloc swap names.
- (bfd_xcoff_aix5_backend_data) : Same.
-
-2002-05-04 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-hppa.c (struct elf32_hppa_link_hash_table): Add
- bfd_count top_index, input_list, all_local_syms.
- (elf32_hppa_setup_section_lists): New function, split from
- elf32_hppa_size_stubs.
- (elf32_hppa_next_input_section): Likewise.
- (group_sections): Likewise.
- (get_local_syms): Likewise.
- (elf32_hppa_size_stubs): Adjust for split out functions. Look for
- stubs on undefined syms too.
- (elf32_hppa_set_gp): Use bfd_link_hash* instead of elf_link_hash*.
- Only access htab elf fields when we have an elf hash table.
- * elf32-hppa.h (elf32_hppa_setup_section_lists): Declare.
- (elf32_hppa_next_input_section): Declare.
-
-2002-05-04 Bob Byrnes <byrnes@curl.com>
-
- * opncls.c (_bfd_new_bfd_contained_in): Check return value of
- _bfd_new_bfd.
-
-2002-05-03 H.J. Lu (hjl@gnu.org)
-
- * elfxx-mips.c (mips_elf_link_hash_entry): Add forced_local.
- (mips_elf_link_hash_newfunc): Initialize forced_local to false.
- (mips_elf_record_global_got_symbol): Call _bfd_mips_elf_hide_symbol
- to hide a global symbol.
- (_bfd_mips_elf_hide_symbol): Return if forced_local is true. Set
- forced_local to true.
-
-2002-05-02 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relocate_section): Force relative relocs
- vs SHN_UNDEF to zero.
-
-2002-05-02 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_howto_raw <R_PPC64_SECTOFF>): Change to a
- 16 bit reloc.
- <R_PPC64_SECTOFF_DS>: Likewise.
- (ppc64_elf_reloc_type_lookup): Map from BFD_RELOC_16_BASEREL to
- SECTOFF reloc.
- * elf32-ppc.c (ppc_elf_howto_raw <R_PPC_SECTOFF>): Correct.
- (ppc_elf_reloc_type_lookup): Map from BFD_RELOC_16_BASEREL to
- SECTOFF reloc.
-
- * elf64-ppc.c (ppc64_elf_addr16_ha_reloc): Delete.
- (ppc64_elf_ha_reloc): New function.
- (ppc64_elf_brtaken_reloc): New function.
- (ppc64_elf_sectoff_reloc): New function.
- (ppc64_elf_sectoff_ha_reloc): New function.
- (ppc64_elf_toc_reloc): New function.
- (ppc64_elf_toc_ha_reloc): New function.
- (ppc64_elf_toc64_reloc): New function.
- (ppc64_elf_unhandled_reloc): New function.
- (ppc64_elf_howto_raw): Use the above.
- <R_PPC64_RELATIVE>: Mark pc_relative, pcrel_offset.
- <R_PPC64_SECTOFF>: Not pc_relative or pcrel_offset. Fix dst_mask.
- <R_PPC64_SECTOFF_DS>: Likewise.
- (IS_ABSOLUTE_RELOC): Update.
- (struct ppc_link_hash_table): Add have_undefweak.
- (ppc64_elf_link_hash_table_create): Init.
- (func_desc_adjust): Set have_undefweak.
- (ppc64_elf_func_desc_adjust): Call func_desc_adjust earlier. Only
- add the .sfpr blr when have_undefweak.
- (ppc64_elf_setup_section_lists): Check hash table flavour.
- (ppc64_elf_next_input_section): Move output_section->owner test to
- ppc64elf.em.
- (ppc64_elf_set_toc): Rename to ppc64_elf_toc, remove info param
- and relocatable test. Return TOCstart and don't set elf_gp.
- (ppc64_elf_relocate_section): Correct BRTAKEN/BRNTAKEN branch
- offset calculation. Add assert on weak sym branch tweaks.
- * elf64-ppc.h (ppc64_elf_set_toc): Delete.
- (ppc64_elf_toc): Declare.
- (ppc64_elf_next_input_section): Update.
-
-2002-05-01 Alan Modra <amodra@bigpond.net.au>
-
- * syms.c (_bfd_stab_section_find_nearest_line): Don't bomb on NULL
- file_name.
-
-2002-05-01 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (CROR_151515, CROR_313131): Define.
- (ppc64_elf_relocate_section): Use them. Don't look for plt calls
- on R_PPC64_ADDR24 relocs. Require a nop or no link reg on plt
- call branches. Correct undefined weak destination.
- (ppc64_elf_func_desc_adjust): Always create at least one blr in
- .sfpr, and correct case where either only savef* or restf* is
- needed.
-
- Long branch stubs, multiple stub sections.
- * elf64-ppc.h (ppc64_elf_setup_section_lists): Declare.
- (ppc64_elf_next_input_section): Declare.
- * elf64-ppc.c: Move linker-only prototypes.
- (STUB_SUFFIX): Define.
- (enum ppc_stub_type): New.
- (struct ppc_stub_hash_entry): New.
- (struct ppc_branch_hash_entry): New.
- (struct ppc_link_hash_entry): Add stub_cache, oh.
- (struct ppc_link_hash_table): Add stub_hash_table etc. Remove
- sstub. Add sbrlt, srelbrlt, has_14bit_branch, stub_iteration.
- Rename plt_overflow to stub_error.
- (ppc_stub_hash_lookup): Define.
- (ppc_branch_hash_lookup): Define.
- (stub_hash_newfunc): New function.
- (branch_hash_newfunc): New function.
- (link_hash_newfunc): Init new fields.
- (ppc64_elf_link_hash_table_create): Likewise.
- (ppc64_elf_link_hash_table_free): New function.
- (ppc_stub_name): New function.
- (ppc_get_stub_entry): New function.
- (ppc_add_stub): New function.
- (create_linkage_sections): Use bfd_make_section_anyway. Create
- .branch_lt and .rela.branch_lt sections. Don't create .stub.
- (ppc64_elf_check_relocs): Set has_14bit_branch on R_PPC64_REL14*,
- and set up for plt call stubs. Link func and func desc syms.
- (ppc64_elf_gc_sweep_hook): Handle REL14* as per REL24.
- (func_desc_adjust): Avoid hash lookup when func desc sym available
- via shortcut, and set links when processing.
- (ppc64_elf_hide_symbol): Likewise.
- (allocate_dynrelocs): Don't allocate stub section here.
- (ppc64_elf_size_dynamic_sections): Handle sbrlt and srelbrlt.
- Remove sstub code.
- (ppc_type_of_stub): New function.
- (build_one_stub): Delete.
- (ppc_build_one_stub): New function.
- (ppc_size_one_stub): New function.
- (ppc64_elf_setup_section_lists): New function.
- (ppc64_elf_next_input_section): New function.
- (group_sections): New function.
- (get_local_syms): New function.
- (ppc64_elf_size_stubs): Rewrite.
- (ppc64_elf_build_stubs): Rewrite.
- (ppc64_elf_relocate_section): Look up stub entry for REL24
- relocs. Don't propagate REL14* to dynamic objects. Look for long
- branch stubs if REL14* or REL24 relocs won't reach.
- (bfd_elf64_bfd_link_hash_table_free): Define.
-
-2002-04-30 Mark Mitchell <mark@codesourcery.com>
-
- * config.bfd: Add support for powerpc-*-windiss.
-
-2002-04-30 Tom Rix <trix@redhat.com>
-
- * xcofflink.c (xcoff_link_add_symbols): Always copy undef C_EXT
- symbol names into the hash table.
-
-2002-04-28 Tom Rix <trix@redhat.com>
-
- * coff-rs6000.c (xcoff_calculate_relocation) : Function table for
- calulating relocations.
- (xcoff_complain_overflow) : Function table for relocation errors.
- (xcoff_ppc_relocate_section): Use relocation and complain function
- tables.
- (xcoff_complain_overflow_unsigned_func): New complain function.
- (xcoff_complain_overflow_signed_func): Same.
- (xcoff_complain_overflow_bitfield_func): Same.
- (xcoff_complain_overflow_dont_func): Same.
- (xcoff_reloc_type_crel): New recot function.
- (xcoff_reloc_type_br): Same.
- (xcoff_reloc_type_ba): Same.
- (xcoff_reloc_type_toc): Same.
- (xcoff_reloc_type_rel): Same.
- (xcoff_reloc_type_neg): Same.
- (xcoff_reloc_type_pos): Same.
- (xcoff_reloc_type_fail): Same.
- (xcoff_reloc_type_noop): Same.
- * libxcoff.h : Declare common parts for xcoff64.
- * coff64-rs6000.c (xcoff64_ppc_relocate_section): Use relocation
- and complain function tables.
-
-2002-04-28 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-x86-64.c (struct elf64_x86_64_dyn_relocs): Comment typo.
- * elf32-hppa.c (elf32_hppa_final_link): Formatting.
-
-2002-04-26 Alan Modra <amodra@bigpond.net.au>
-
- * opncls.c (bfd_make_readable): Call bfd_section_list_clear.
- * xcofflink.c (xcoff_link_add_dynamic_symbols): Likewise.
-
- * elflink.h (elf_bfd_final_link): Ensure input bfd class is the
- same as the output before calling elf_link_input_bfd.
-
- * coffcode.h (coff_compute_section_file_positions): Set
- section_tail after shuffling section list.
-
-2002-04-24 Christian Groessler <chris@groessler.org>
-
- * coff-z8k.c (extra_case): Fix R_IMM32 relocations: The
- addresses are 23bit with a special layout, not plain 32bit
- values. Prevent relocation of immediate values.
-
-2002-04-24 Chris G. Demetriou <cgd@broadcom.com>
-
- * elfxx-mips.c (_bfd_mips_elf_print_private_bfd_data): If MDMX or
- MIPS-16 ASE flags are set, print something to indicate that.
-
-2002-04-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-hppa.c (hppa_type_of_stub): Correct and simplify condition
- under which a plt call stub is used.
- (final_link_relocate): Similarly.
- (allocate_plt_static): Clear h-plabel except when plt entry is
- exclusively used for a plabel.
- (allocate_dynrelocs): Use the above to simplify plt sizing.
- (struct elf32_hppa_link_hash_table): Add has_22bit_branch.
- (elf32_hppa_link_hash_table_create): Init.
- (BL22_RP): Define.
- (hppa_build_one_stub): Use BL22_RP if has_22bit_branch.
- (elf32_hppa_check_relocs): Set has_22bit_branch.
-
- * elf32-hppa.c (elf32_hppa_check_relocs): Remove debug message.
- (final_link_relocate): Likewise.
-
-2002-04-22 Jakub Jelinek <jakub@redhat.com>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't build
- search table if some FDE is DW_EH_PE_aligned encoded either.
- (_bfd_elf_write_section_eh_frame): Handle terminating FDE specially.
-
-2002-04-22 Richard Smith <richard@ex-parrot.com>
- Jakub Jelinek <jakub@redhat.com>
-
- * elf-eh-frame.c (struct eh_cie_fde): Add per_encoding_relative.
- (_bfd_elf_discard_section_eh_frame): Set it for CIEs with pcrel
- encoded personality.
- (_bfd_elf_write_section_eh_frame): Adjust pcrel encoded personality
- for CIE/FDE removal.
-
-2002-04-20 Tom Rix <trix@redhat.com>
-
- * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Fix C_FILE auxent.
-
-2002-04-20 Alan Modra <amodra@bigpond.net.au>
-
- * archures.c (bfd_lookup_arch): Move the list order comment..
- (struct bfd_arch_info): ..to where it belongs.
- * bfd-in2.h: Regenerate.
-
- * archures.c (bfd_lookup_arch): Add comment on list order.
- (bfd_default_set_arch_mach): Use bfd_lookup_arch.
- * cpu-powerpc.c (bfd_powerpc_archs): Re-order so that the default
- is always at head of list.
-
-2002-04-18 Nick Clifton <nickc@cambridge.redhat.com>
-
- * coff-arm.c (coff_thumb_pcrel_12, coff_thumb_pcrel_9,
- insert_thumb_branch, record_thumb_to_arm_glue): Suppress
- definition of these functions for ARM_WINCE builds as they are
- not used.
- (SWAP_IN_RELOC_OFFSET, SWAP_OUT_RELOC_OFFSET): Do not define
- for ARM_WINCE builds.
-
-2002-04-18 Nick Clifton <nickc@cambridge.redhat.com>
-
- * coff-arm.c (bfd_arm_process_before_allocation):
-
-2002-04-17 J"orn Rennecke <joern.rennecke@superh.com>
-
- * cpu-sh.c (scan_mach): Delete.
- (arch_info_struct): Replace scan_mach with bfd_default_scan.
- (bfd_sh_arch): Likewise.
-
-2002-04-16 Nick Clifton <nickc@cambridge.redhat.com>
-
- * ihex.c (ihex_write_object_contents): Fix check for records
- crossing 64K boundaries.
-
-2002-04-16 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-m32r.c (m32r_elf_add_symbol_hook): Check the hash table
- type rather than just assuming entries are ELF.
- * elf32-sh64.c (sh64_elf_add_symbol_hook): Likewise.
- * elf64-sh64.c (sh64_elf64_add_symbol_hook): Likewise.
- * elf64-sparc.c (sparc64_elf_add_symbol_hook): Likewise.
- * elf64-mmix.c (mmix_elf_add_symbol_hook): Use bfd_link_hash_entry
- rather than elf_link_hash_entry.
-
-2002-04-15 Richard Henderson <rth@redhat.com>
-
- * elf32-mips.c (mips_elf32_object_p): Revert 0404 fragment: allow
- n32 binaries.
-
-2002-04-15 Michael Snyder <msnyder@redhat.com>
-
- * opncls.c (bfd_close): Write contents if writeable.
- Minor formatting tidy-ups.
-
-2002-04-15 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-ppc.c (ppc_elf_add_symbol_hook): Check the hash table type.
-
-2002-04-12 Michael Snyder <msnyder@redhat.com>
-
- * bfd-in.h (bfd_get_section_lma): New access macro.
- Minor white-space fix-up.
-
-2002-04-12 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (prep_headers): Don't zero EI_OSABI, EI_ABIVERSION or
- header pad.
-
-2002-04-09 DJ Delorie <dj@redhat.com>
-
- * elfarm-nabi.c (elf32_arm_howto_table): Fix ABS16 masks.
-
-2002-04-09 Casper S. Hornstrup <chorns@users.sourceforge.net>
-
- * coffcode.h (coff_read_word): New.
- (coff_compute_checksum): New.
- (coff_apply_checksum): New.
- (coff_write_object_contents): Call coff_apply_checksum () to
- apply checksum to PE image.
-
-2002-04-08 Randolph Chung <tausq@debian.org>
-
- * elf32-hppa.c (hppa_unwind_entry_compare): Move to elf-hppa.h.
- (elf32_hppa_final_link): Split out sorting logic to..
- * elf-hppa.h (elf_hppa_sort_unwind): ..here.
- (elf_hppa_final_link): Call elf_hppa_sort_unwind.
-
-2002-04-07 Andrew Cagney <ac131313@redhat.com>
-
- * configure.in: Add missing ``|'' to powerpc-*-aix4.[4-9]*
- pattern.
- * configure: Re-generate.
-
-2002-04-07 Andrew Cagney <ac131313@redhat.com>
-
- * configure.in: Only define AIX_CORE_DUMPX_CORE when AIX version
- is greater or equal to 4.3.3.
- * configure: Regenerate.
- Fix PR gdb/344.
-
-2002-04-05 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (cris_elf_howto_table) <R_CRIS_16_PCREL,
- R_CRIS_32_PCREL>: Fix typo in name.
- (cris_elf_check_relocs): Always create .rela.got here when
- R_CRIS_16_GOTPLT or R_CRIS_32_GOTPLT is seen.
- (elf_cris_adjust_gotplt_to_got): Don't create .rela.got here;
- assume it's created.
-
-2002-04-04 Daniel Jacobowitz <drow@mvista.com>
-
- * aout-adobe.c (aout_32_bfd_link_hash_table_free): Define.
- * aout-target.h (MY_bfd_link_hash_table_free): Conditionally
- define.
- * aout-tic30.c (MY_bfd_link_hash_table_free): Likewise.
- * bfd.c (bfd_link_hash_table_free): Define.
- * binary.c (binary_bfd_link_hash_table_free): Define.
- * bout.c (b_out_bfd_link_hash_table_free): Define.
- * coff-rs6000.c (rs6000coff_vec): Include
- _bfd_generic_link_hash_table_free.
- (pmac_xcoff_vec): Likewise.
- * coff64-rs6000.c (rs6000coff64_vec): Likewise.
- (aix5coff64_vec): Likewise.
- * coffcode.h (coff_bfd_link_hash_table_free): Conditionally define.
- * elf-m10300.c (elf32_mn10300_link_hash_table_free): New function.
- (bfd_elf32_bfd_link_hash_table_free): Define.
- * elf32-hppa.c (elf32_hppa_link_hash_table_free): New function.
- (bfd_elf32_bfd_link_hash_table_free): Define.
- * elfxx-target.h (bfd_elfNN_bfd_link_hash_table_free): Conditionally
- define.
- * i386msdos.c (msdos_bfd_link_hash_table_free): Define.
- * i386os9k.c (os9k_bfd_link_hash_table_free): Define.
- * ieee.c (ieee_bfd_link_hash_table_free): Define.
- * ihex.c (ihex_bfd_link_hash_table_free): Define.
- * libbfd-in.h (_bfd_nolink_bfd_link_hash_table_free): Define.
- (_bfd_generic_link_hash_table_free): Add prototype.
- * libcoff-in.h (_bfd_xcoff_bfd_link_hash_table_free): Add prototype.
- * libecoff.h (_bfd_ecoff_bfd_link_hash_table_free): Define.
- * linker.c (_bfd_generic_link_hash_table_free): New function.
- * mmo.c (mmo_bfd_link_hash_table_free): Define.
- * nlm-target.h (nlm_bfd_link_hash_table_free): Define.
- * oasys.c (oasys_bfd_link_hash_table_free): Define.
- * ppcboot.c (ppcboot_bfd_link_hash_table_free): Define.
- * som.c (som_bfd_link_hash_table_free): Define.
- * srec.c (srec_bfd_link_hash_table_free): Define.
- * tekhex.c (tekhex_bfd_link_hash_table_free): Define.
- * versados.c (versados_bfd_link_hash_table_free): Define.
- * vms.c (vms_bfd_link_hash_table_free): New function.
- * xcofflink.c (_bfd_xcoff_bfd_link_hash_table_free): New function.
-
- * coff-arm.c (coff_arm_link_hash_table_create): Use bfd_malloc
- instead of bfd_alloc.
- * coff-h8300.c (h8300_coff_link_hash_table_create): Likewise.
- * coff-mcore.c (coff_mcore_link_hash_table_create): Likewise.
- * coff-ppc.c (ppc_coff_link_hash_table_create): Likewise.
- * cofflink.c (_bfd_coff_link_hash_table_create): Likewise.
- * ecoff.c (_bfd_ecoff_bfd_link_hash_table_create): Likewise.
- * elf-m10300.c (elf32_mn10300_link_hash_table_create): Likewise.
- * elf.c (_bfd_elf_link_hash_table_create): Likewise.
- * elf32-arm.h (elf32_arm_link_hash_table_create): Likewise.
- * elf32-cris.c (elf_cris_link_hash_table_create): Likewise.
- * elf32-hppa.c (elf32_hppa_link_hash_table_create): Likewise.
- * elf32-i386.c (elf_i386_link_hash_table_create): Likewise.
- * elf32-m68k.c (elf_m68k_link_hash_table_create): Likewise.
- * elf32-s390.c (elf_s390_link_hash_table_create): Likewise.
- * elf32-sh.c (sh_elf_link_hash_table_create): Likewise.
- * elf64-alpha.c (elf64_alpha_bfd_link_hash_table_create): Likewise.
- * elf64-ppc.c (ppc64_elf_link_hash_table_create): Likewise.
- * elf64-s390.c (elf_s390_link_hash_table_create): Likewise.
- * elf64-sh64.c (sh64_elf64_link_hash_table_create): Likewise.
- * elf64-sparc.c (sparc64_elf_bfd_link_hash_table_create): Likewise.
- * elf64-x86-64.c (elf64_x86_64_link_hash_table_create): Likewise.
- * elfxx-mips.c (_bfd_mips_elf_link_hash_table_create): Likewise.
- * linker.c (_bfd_generic_link_hash_table_create): Likewise.
- * m68klinux.c (linux_link_hash_table_create): Likewise.
- * sparclinux.c (linux_link_hash_table_create): Likewise.
- * sunos.c (sunos_link_hash_table_create): Likewise.
- * xcofflink.c (_bfd_xcoff_bfd_link_hash_table_create): Likewise.
-
- * targets.c: Add _bfd_link_hash_table_free to xvec.
-
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * libcoff.h: Regenerate.
-
-2002-04-04 Alan Modra <amodra@bigpond.net.au>
-
- * dep-in.sed: Cope with absolute paths.
- * Makefile.am (dep.sed): Subst TOPDIR, and not INCDIR.
- Run "make dep-am".
- * Makefile.in: Regenerate.
- * coff-arm.c: Fix copyright date.
- * cpu-h8300.c: Likewise.
- * cpu-i370.c: Likewise.
- * cpu-s390.c: Likewise.
- * cpu-mips.c: Likewise.
- * po/SRC-POTFILES.in: Regenerate.
-
-2002-04-04 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * Makefile.am: Add elfxx-mips.c to the known backends.
- (elf32-mips.lo): remove dependency to coff/external.h.
- * Makefile.in: Regenerate.
- * configure.in: Add elfxx-mips.lo to all vectors using elf32-mips.lo
- Remove elf32-mips.lo from 64 bit vectors. Update dependencies
- accordingly.
- * configure: Regenerate.
- * elf-bfd.h: Move all MIPS ELF specific prototypes to elfxx-mips.h.
- (irix_compat_t): IRIX compatibility level, moved from elf32-mips.c.
- (elf_backend_mips_irix_compat, elf_backend_mips_rtype_to_howto): New
- MIPS specific backend functions.
- * elf32-mips.c: Moved most code to elfxx-mips.c.
- (mips_elf_hi16_reloc): Rename from _bfd_mips_elf_hi16_reloc and make
- static.
- (mips_elf_lo16_reloc): Likewise, was _bfd_mips_elf_lo16_reloc.
- (mips_elf_got16_reloc): Likewise, was _bfd_mips_elf_got16_reloc.
- (mips_elf_gprel32_reloc): Likewise, was _bfd_mips_elf_gprel32_reloc.
- (mips_elf32_rtype_to_howto): Rename from mips_rtype_to_howto. Changed
- interface to allow selection of the right REL or RELA howto table.
- (mips_elf32_object_p): Rename from _bfd_mips_elf_object_p and made
- static. Let it refuse n32 objects.
- (elf32_mips_grok_prstatus): Rename from _bfd_elf32_mips_grok_prstatus.
- (elf32_mips_grok_psinfo): Rename from _bfd_elf32_mips_grok_psinfo.
- (elf32_mips_discard_info): Rename from _bfd_elf32_mips_discard_info.
- (elf32_mips_ignore_discarded_relocs): Rename from
- _bfd_elf32_mips_ignore_discarded_relocs.
- (elf32_mips_write_section): Rename from _bfd_elf32_mips_write_section.
- (elf32_mips_irix_compat): New function, replaces IRIX_COMPAT.
- (elf_mips_howto_table_rela): Remove.
- * elf64-mips.c: Moved most code to elfxx-mips.c.
- (bfd_elf64_bfd_reloc_type_lookup): Make static.
- (mips_elf64_rtype_to_howto): New function.
- (mips_elf64_object_p): Likewise.
- (elf64_mips_irix_compat): Likewise.
- * elfxx-mips.c: New file containing common code merged together from
- elf32-mips.c and elf64-mips.c.
- * elfxx-mips.h: New file containing MIPS specific prototypes from
- elf-bfd.h.
- * elfxx-target.h: Add handling for elf_backend_mips_irix_compat and
- elf_backend_mips_rtype_to_howto.
-
-2002-04-04 Alan Modra <amodra@bigpond.net.au>
-
- * srec.c (MAXCHUNK, Chunk): Revise comments.
- (srec_write_record): Correct buffer size.
- (srec_write_header): Do without intermediate buffer.
- (srec_write_section): Validate Chunk.
- (srec_write_terminator): Pass NULL instead of dummy buffer.
- (srec_write_symbols): Pass file and symbol names directly to
- bfd_bwrite so sprintf won't overflow buffer.
-
-2002-04-03 Jakub Jelinek <jakub@redhat.com>
-
- * elf32-sparc.c (elf32_sparc_relocate_section): Don't emit dynamic
- PC relative relocs against hidden symbols.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
-
-2002-04-03 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (_bfd_elf_make_section_from_shdr): When setting section
- LMAs, loop over segments until p_vaddr and p_memsz specify an
- extent enclosing the section.
-
-2002-04-02 Nick Clifton <nickc@cambridge.redhat.com>
-
- * ihex.c (ihex_write_object_contents): Do not allow records to
- cross a 64K boundary - wrap if necessary.
-
-2002-04-01 Nathan Williams <nathanw@wasabisystems.com>
-
- * elf.c (elfcore_netbsd_get_lwpid): Fix off-by-one error
- which caused the returned LWP ID to always be 0.
-
-2002-04-01 Richard Henderson <rth@redhat.com>
-
- * elf32-sparc.c (WILL_CALL_FINISH_DYNAMIC_SYMBOL): New.
- (elf32_sparc_relocate_section): Use it to figure out when to
- initialize .got entries.
- * elf64-sparc.c: Similarly.
-
-2002-03-28 Alan Modra <amodra@bigpond.net.au>
-
- * linker.c (link_action): Ignore duplicate warning syms.
- (_bfd_generic_link_write_global_symbol): Follow warning symbol link.
- * elflink.h (elf_adjust_dynstr_offsets): Likewise.
- (elf_adjust_dynamic_symbol): Likewise.
- (elf_export_symbol): Likewise.
- (elf_link_find_version_dependencies): Likewise.
- (elf_link_assign_sym_version): Likewise.
- (elf_link_sec_merge_syms): Likewise.
- (elf_link_output_extsym): Likewise.
- (elf_gc_sweep_symbol): Likewise.
- (elf_gc_propagate_vtable_entries_used): Likewise.
- (elf_gc_smash_unused_vtentry_relocs): Likewise.
- (elf_gc_allocate_got_offsets): Likewise.
- (elf_collect_hash_codes): Likewise.
- * elflink.c (elf_link_renumber_hash_table_dynsyms): Likewise.
- * elf-hppa.h (elf_hppa_unmark_useless_dynamic_symbols): Likewise.
- (elf_hppa_remark_useless_dynamic_symbols): Likewise.
- * elf-m10300.c (elf32_mn10300_finish_hash_table_entry): Likewise.
- * elf32-arm.h (elf32_arm_discard_copies): Likewise.
- * elf32-cris.c (elf_cris_adjust_gotplt_to_got): Likewise.
- (elf_cris_discard_excess_dso_dynamics): Likewise.
- * elf32-hppa.c (clobber_millicode_symbols): Likewise.
- (mark_PIC_calls): Likewise.
- (allocate_plt_static): Likewise.
- (allocate_dynrelocs): Likewise.
- (readonly_dynrelocs): Likewise.
- * elf32-i386.c (allocate_dynrelocs): Likewise.
- (readonly_dynrelocs): Likewise.
- * elf32-i370.c (i370_elf_adjust_dynindx): Likewise.
- * elf32-m68k.c (elf_m68k_discard_copies): Likewise.
- * elf32-mips.c (mips_elf_output_extsym): Likewise.
- (mips_elf_sort_hash_table_f): Likewise.
- (mips_elf_check_mips16_stubs): Likewise.
- * elf32-s390.c (allocate_dynrelocs): Likewise.
- (readonly_dynrelocs): Likewise.
- * elf32-sh.c (sh_elf_discard_copies): Likewise.
- * elf32-xstormy16.c (xstormy16_relax_plt_check): Likewise.
- (xstormy16_relax_plt_realloc): Likewise.
- * elf64-alpha.c (elf64_alpha_calc_got_offsets_for_symbol): Likewise.
- (elf64_alpha_output_extsym): Likewise.
- * elf64-hppa.c (elf64_hppa_mark_exported_functions): Likewise.
- * elf64-mips.c (mips_elf64_sort_hash_table_f): Likewise.
- (mips_elf64_check_mips16_stubs): Likewise.
- (mips_elf64_output_extsym): Likewise.
- * elf64-ppc.c (func_desc_adjust): Likewise.
- (allocate_dynrelocs): Likewise.
- (readonly_dynrelocs): Likewise.
- * elf64-s390.c (allocate_dynrelocs): Likewise.
- (readonly_dynrelocs): Likewise.
- * elf64-sh64.c (sh64_elf64_discard_copies): Likewise.
- * elf64-x86-64.c (allocate_dynrelocs): Likewise.
- (readonly_dynrelocs): Likewise.
- * elfxx-ia64.c (elfNN_ia64_global_dyn_sym_thunk): Likewise.
- * aoutx.h (aout_link_write_other_symbol): Likewise.
- * cofflink.c (_bfd_coff_write_task_globals): Likewise.
- (_bfd_coff_write_global_sym): Likewise.
- * i386linux.c (linux_tally_symbols): Likewise.
- * m68klinux.c (linux_tally_symbols): Likewise.
- * sparclinux.c (linux_tally_symbols): Likewise.
- * pdp11.c (aout_link_write_other_symbol): Likewise.
- * sunos.c (sunos_scan_dynamic_symbol): Likewise.
- * xcofflink.c (xcoff_build_ldsyms): Likewise.
- (xcoff_write_global_symbol): Likewise.
-
- * cofflink.c (_bfd_coff_final_link): Formatting.
- * cpu-mips.c (mips_compatible): Make static, prototype.
- * elf32-i386.c (elf_i386_check_relocs): Formatting.
- * elf32-sh.c (sh_elf_size_dynamic_sections): Likewise.
- * elf64-alpha.c (elf64_alpha_output_extsym): Likewise.
- * elf64-mips.c (mips_elf64_sort_hash_table): Likewise.
- (mips_elf64_final_link): Likewise.
- * elflink.h (elf_link_find_version_dependencies): Remove duplicate
- prototype.
-
-2002-03-27 Nick Clifton <nickc@cambridge.redhat.com>
-
- * coff-arm.c (SWAP_IN_RELOC_OFFSET): Define.
- (SWAP_OUT_RELOC_OFFSET): Define.
-
-2002-03-27 Gregory Steuck <greg@nest.cx>
-
- * elf.c (_bfd_elf_get_symtab_upper_bound): Leave space for
- terminating NULL if empty symbol table.
- (_bfd_elf_get_dynamic_symtab_upper_bound): Likewise.
-
-2002-03-26 H.J. Lu (hjl@gnu.org)
-
- * elflink.h (elf_link_input_bfd): Revert the last change since
- the gcc exception handling isn't fixed yet.
-
-2002-03-26 H.J. Lu (hjl@gnu.org)
-
- * elflink.h (elf_link_input_bfd): Complain about relocations
- against local symbols in discarded sections.
-
-2002-03-26 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.h (elf_gc_mark): Don't recurse into non-ELF sections.
-
-2002-03-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (_bfd_elf_make_section_from_shdr): Don't set lma based on
- section file offset for !SEC_LOAD sections.
-
-2002-03-21 Richard Earnshaw <rearnsha@arm.com>
-
- * elf32-arm.h (elf32_arm_final_link_relocate <case R_ARM_GOTOFF>,
- <case R_ARM_GOT>): Handle relocations to Thumb functions.
-
-2002-03-21 Alan Modra <amodra@bigpond.net.au>
-
- * coff64-rs6000.c (_bfd_xcoff64_put_symbol_name): Prototype.
- Whitespace changes.
- * archive.c: Update copyright date.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
- * Makefile.am: Run "make dep-am"
- * Makefile.in: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
-2002-03-20 Daniel Jacobowitz <drow@mvista.com>
-
- * dwarf2.c (struct funcinfo): Move up.
- (lookup_address_in_function_table): New argument function_ptr.
- Set it.
- (lookup_address_in_line_table): New argument function. If function
- is non-NULL, use it to handle ``addr'' before the first line note of
- the function.
- (comp_unit_find_nearest_line): Update and swap calls to
- lookup_address_in_function_table and lookup_address_in_line_table.
- * syms.c (_bfd_stab_section_find_nearest_line): Use the first
- N_SLINE encountered if we see an N_FUN before any N_SLINE.
-
-2002-03-20 Tom Rix <trix@redhat.com>
-
- * coff-rs6000.c (_bfd_xcoff_stat_arch_elt): Renamed from
- _bfd_xcoff_generic_stat_arch_elt. Fix format check.
- * coff64-rs6000.c : Use _bfd_xcoff_stat_arch_elt.
-
-2002-03-19 Tom Rix <trix@redhat.com>
-
- * xcofflink.c (_bfd_xcoff_bfd_link_add_symbols): Look through all
- dynamic objects in archives.
-
-2002-03-19 Hans-Peter Nilsson <hp@bitrange.com>
-
- * elflink.h (NAME(bfd_elf,record_link_assignment)): Don't set
- STT_NOTYPE symbols to STT_OBJECT.
-
-2002-03-18 Jan Hubicka <jh@suse.cz>
-
- * cpu-i386.c (bfd_x86_64_arch): Rename to "i386:x86-64"
-
-2002-03-18 Tom Rix <trix@redhat.com>
-
- * aix5ppc.core.c : New file for AIX 5 64 bit core support.
- * bfd-in.h : Add bfd_xcoff_ar_archive_set_magic declaration.
- * coff-rs6000 (do_pad) : New function for archive padding.
- (do_copy) : New function for object file copying in archives.
- (do_shared_object_padding) : New function for padding shared
- objects to their text section alignment in archives.
- (bfd_xcoff_ar_achive_set_magic) : Stub.
- (xcoff_write_armap_big) : Use do_copy and do_pad.
- (xcoff_write_archive_contents_big) : Use do_shared_object_padding,
- do_copy and do_pad.
- * coff64-rs6000.c (xcoff64_write_ojbect_contents) : Use
- bfd_xcoff_magic_number.
- (xcoff64_bad_format_hook) : New function for _bfd_bad_format_hook
- fop.
- (xcoff_backend_data_r) : Use xcoff64_bad_format_hook.
- (bfd_xcoff_aix5_backend_data) : New Aix 5 backend data.
- (aix5coff64_vec) : New Aix 5 target aix5coff64-rs6000.
- * rs6000-core.c : Update copyright date.
- * xcofflink.c (bfd_xcoff_size_dynamic_sections): Check for NULL
- csectpp.
- * coffcode.h (coff_new_section_hook) : Use new accessor macros.
- (coff_set_arch_mach_hook) : Add Aix 5 U64_TOCMAGIC magic #.
- (coff_set_flags) : Use bfd_xcoff_magic_number.
- * libxcoff.h (bfd_xcoff_is_xcoff64): Add U64_TOCMAGIC.
- * configure.in : Add powerpc-*-aix5 and rs6000-*-aix5 support.
- * Makefile.am : Same.
- * config.bfd : Same.
- * targets.c : Same.
- * configure : Regnerate.
- * Makefile.in : Same.
- * bfd-in2.h : Same.
-
-2002-03-18 Nick Clifton <nickc@cambridge.redhat.com>
-
- * po/fr.po: Updated version.
-
-2002-03-18 Alan Modra <amodra@bigpond.net.au>
-
- * libbfd.c (bfd_write_bigendian_4byte_int): Return true iff success.
- * libbfd.h: Regenerate.
- * archive.c (coff_write_armap): Pass on failures from
- bfd_write_bigendian_4byte_int.
-
-2002-03-14 H.J. Lu <hjl@gnu.org>
-
- * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Set the BFD
- error to bfd_error_nonrepresentable_section for reinit_array
- section in DSO.
-
-2002-03-14 Nick Clifton <nickc@cambridge.redhat.com>
-
- * coffcode.h (coff_slurp_symbol_table): When adding BSF_WEAK flag,
- OR it in rather than replacing previously selected flags.
-
- * elfxx-target.h (TARGET_BIG_SYM): Set ar_max_namelen to 15.
- (TARGET_LITTLE_SYM): Set ar_max_namelen to 15.
-
-2002-03-14 Alan Modra <amodra@bigpond.net.au>
-
- * cpu-mips.c (mips_compatible): New. Don't check bits_per_word.
- (N): Use the above.
- * elflink.h (elf_bfd_final_link): Revert last change. Instead,
- ensure reloc size matches before calling elf_link_input_bfd.
- Add an assert to check reloc size when counting output relocs.
-
-2002-03-14 Nick Clifton <nickc@cambridge.redhat.com>
+ * elf32-sparc.c (elf32_sparc_grok_psinfo): New function.
- * mmo.c (mmo_get_loc): Return NULL rather than false.
+2004-01-02 Mark Kettenis <kettenis@gnu.org>
-2002-03-13 Nick Clifton <nickc@cambridge.redhat.com>
+ * elf32-i386.c (elf_i386_grok_prstatus): Add support for FreeBSD.
+ (elf_i386_grok_psinfo): Likewise.
- * po/fr.po: Updated version.
+2004-01-02 Bernardo Innocenti <bernie@develer.com>
-2002-03-13 Alan Modra <amodra@bigpond.net.au>
+ * config.bfd: Add m68k-uClinux target.
- * archures.c (bfd_default_compatible): Test bits_per_word.
- * cpu-i386.c (i386_compatible): Remove. Replace occurrences with
- bfd_default_compatible.
- * cpu-i370.c (i370_compatible): Likewise.
- * cpu-sparc.c (sparc_compatible): Likewise.
- * cpu-h8300.c (compatible): Test in->arch == out->arch.
+2004-01-01 Grant Edwards <grante@visi.com>
- * elflink.h: Formatting fixes.
- (elf_link_output_extsym): Merge undefined and undef weak cases.
-
- * elflink.h (elf_bfd_final_link): Only call elf_link_input_bfd
- when word size of input matches output word size.
-
-2002-03-12 Andreas Jaeger <aj@suse.de>
-
- * cpu-i386.c (i386_compatible): New. Use it instead of
- bfd_default_compatible.
-
-2002-03-07 H.J. Lu (hjl@gnu.org)
-
- * coff-sh.c (shcoff_reloc_map): Use bfd_reloc_code_real_type
- as the type for bfd_reloc_val.
-
-2002-03-05 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elf-hppa.h (elf_hppa_is_dynamic_loader_symbol): New function.
- (elf_hppa_relocate_section): Ignore undefined dynamic loader symbols.
- (elf_hppa_final_link_relocate): Correct relocations for indirect
- references to local data through the DLT. Fix .opd creation for
- local symbols using R_PARISC_LTOFF_FPTR32 and R_PARISC_FPTR64
- relocations. Use e_lsel selector for R_PARISC_DLTIND21L,
- R_PARISC_LTOFF_FPTR21L and R_PARISC_LTOFF_TP21L as per
- "Processor-Specific ELF for PA_RISC, Version 1.43" document.
- Similarly, use e_rsel for DLT and LTOFF 'R' relocations.
- * elf32-hppa.c (final_link_relocate): Revise relocation selectors
- as per "Processor-Specific ELF for PA_RISC, Version 1.43" document.
-
-2002-03-05 Jakub Jelinek <jakub@redhat.com>
-
- * merge.c (_bfd_merge_sections): Don't segfault if there
- is nothing to merge due to GC.
-
-2002-03-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-hppa.c (clobber_millicode_symbols): Remove hack to keep
- symbols that have been forced local.
-
- * elflink.h (elf_bfd_final_link): Call elf_link_output_extsym
- to output forced local syms for non-shared link.
- (elf_link_output_extsym): Tweak condition for calling backend
- adjust_dynamic_symbol so that previous behaviour is kept.
- Whitespace changes throughout file.
-
-2002-03-04 H.J. Lu <hjl@gnu.org>
-
- * elf.c (bfd_section_from_shdr): Handle special sections,
- .init_array, .fini_array and .preinit_array.
- (elf_fake_sections): Likewise.
-
- * elflink.h (NAME(bfd_elf,size_dynamic_sections)): Create the
- DT entry only if the section is in output for .init_array,
- .fini_array and .preinit_array. Complain about .preinit_array
- section in DSO.
- (elf_bfd_final_link): Warn zero size for .init_array,
- .fini_array and .preinit_array sections.
-
- * elfxx-ia64.c (elfNN_ia64_section_from_shdr): Remove
- SHT_INIT_ARRAY, SHT_FINI_ARRAY and SHT_PREINIT_ARRAY.
- (elfNN_ia64_fake_sections): Remove .init_array, .fini_array and
- .preinit_array.
-
-2002-03-04 Alan Modra <amodra@bigpond.net.au>
-
- * configure.in (WIN32LIBADD): Don't eval PICFLAG assignment.
- * configure: Regenerate.
-
-2002-03-02 Tom Rix <trix@redhat.com>
-
- * coff64-rs6000.c (xcoff64_howto_table): Replace howto types with
- symbolic equiv.
- * coff-rs6000.c (xcoff_howto_table): Same.
-
-2002-03-01 David Mosberger <davidm@hpl.hp.com>
-
- * elflink.h (size_dynamic_sections): If section named
- ".preinit_array" exists, create DT_PREINIT_ARRAY and
- DT_PREINIT_ARRAYSZ entries in dynamic table. Analogously for
- ".init_array" and ".fini_array".
- (elf_bfd_final_link): Handle DT_PREINIT_ARRAYSZ, DT_INIT_ARRAYSZ,
- DT_FINI_ARRAYSZ, DT_PREINIT_ARRAY, DT_INIT_ARRAY, and
- DT_FINI_ARRAY.
-
-2002-02-26 Andrew Macleod <amacleod@cygnus.com>
-
- * elflink.h (elf_bfd_final_link): Don't crash on SHN_UNDEF local
- dynsyms.
-
-2002-02-25 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-hppa.h: Update copyright date.
-
- * elf64-ppc.c (ppc64_elf_check_relocs): Warning fix.
- (ppc64_elf_relocate_section): Don't generate power4 style branch
- hints for *_BRTAKEN and *_BRNTAKEN relocs.
-
-2002-02-22 Jakub Jelinek <jakub@redhat.com>
-
- * elf64-sh64.c (sh_elf64_relocate_section): Fix a typo from my
- last patch.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
-
-2002-02-21 Andreas Jaeger <aj@suse.de>
-
- * elf64-x86-64.c: Major rework that introduces all recent changes
- to the x86-64 backend. Get a closer match to elf32-i386.
- (struct elf64_x86_64_dyn_relocs): Rename from
- elf64_x86_64_pcrel_relocs_copied, add additional fields. Change
- all users.
- (struct elf64_x86_64_link_hash_table): Add short cuts to some
- sections.
- (link_hash_newfunc): Rename from elf64_x86_64_link_hash_newfunc,
- remove casts, initialize new hash members.
- (create_got_section): New.
- (elf64_x86_64_create_dynamic_sections): New.
- (elf64_x86_64_copy_indirect_symbol): New.
- (elf64_x86_64_check_relocs): Don't allocate space for dynamic
- relocs, .got or .relgot here but do it in allocate_dynrelocs.
- Reference count possible .plt and .got entries. Don't test input
- section SEC_READONLY here to try to avoid copy relocs, and keep
- dyn_relocs regardless of ELF_LINK_NON_GOT_REF. Don't set
- DF_TEXTREL here. Delay setting of variables until needed. Cache
- pointer to "sreloc" section in elf_section_data. Tweak condition
- under which .got created. Report files with bad relocation
- section names.
- (elf64_x86_64_gc_sweep_hook): Sweep dyn_relocs and local_dynrel.
- Reference count possible .plt entries. Don't deallocate .got and
- .relgot space here.
- (elf64_x86_64_adjust_dynamic_symbol): Handle nocopyreloc. Don't
- do copy reloc processing for weakdefs. Remove redundant casts and
- aborts. Delay setting of vars until needed. Move creation of
- dynamic symbols and allocation of .plt and .rela.plt to
- allocate_dynrelocs. Replace BFD_ASSERT with abort.
- (WILL_CALL_FINISH_DYNAMIC_SYMBOL): New.
- (allocate_dynrelocs): New.
- (readonly_dynrelocs): New.
- (elf64_x86_64_size_dynamic_sections): Call readonly_dynrelocs.
- Allocate space for dyn relocs. Replace BFD_ASSERT with abort.
- Zero out the dynamic allocated content space.
- (elf64_x86_64_discard_copies): Removed.
- (elf64_x86_64_relocate_section): Make use of dynamic section
- short-cuts. Localise vars, and delay setting. Better error
- reporting, replace BFD_ASSERT with abort. Check
- ELF_LINK_HASH_DEF_DYNAMIC to see if a symbol is not defined in the
- regular object file and tread the weak definition as the normal
- one. Don't discard relocs for undefweak or undefined symbols and
- check !DEF_REGULAR as well as DEF_DYNAMIC in test for avoided copy
- relocs.
- (elf64_x86_64_finish_dynamic_symbol): Don't copy relocs for
- symbols that have been forced local. Use same test to decide if
- we can use a relative reloc for got as relocate_section. Expand
- SHN_UNDEF comment. Move expressions out of function calls.
- Replace BFD_ASSERT with abort.
- (bfd_elf64_bfd_final_link): Removed.
- (elf_backend_copy_indirect_symbol): Define.
-
-2002-02-20 Tom Rix <trix@redhat.com>
-
- * coff-rs6000.c (xcoff_howto_table): Add 16 bit R_BA.
- (_bfd_xcoff_reloc_type_lookup): Use it.
- * coff64-rs6000.c (xcoff64_howto_table): Same.
- (xcoff64_reloc_type_lookup): Same.
-
-2002-02-20 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
-
- * osf-core.c (osf_core_vec): OSF/1 (Digital Unix) core files are
- little endian.
-
-2002-02-19 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * archures.c (bfd_mach_s390_esa): Rename to bfd_mach_s390_31.
- (bfd_mach_s390_esame): Rename to bfd_mach_s390_64.
- * bfd-in2.h: Regenerate.
- * cpu-s390.c (arch_info_struct): Use renamed architecture defines.
- Replace architecture name "s390" with "s390:31-bit" and "s390:esame"
- with "s390:64-bit".
- * elf32-s390.c (elf_howto_table): Add 32 bit pc relative relocations.
- (elf_s390_reloc_type_lookup): Likewise.
- (elf_s390_check_relocs): Likewise.
- (elf_s390_gc_sweep_hook): Likewise.
- (elf_s390_relocate_section): Likewise.
- (elf_s390_object_p): Use renamed architecture define.
- * elf64-s390.c (elf_s390_object_p): Use renamed architecture define.
-
-2002-02-19 Frank Ch. Eigler <fche@redhat.com>
-
- * syms.c (stt[]): Sorted. Added .init/.fini -> "t" mapping.
-
-2002-02-19 Jakub Jelinek <jakub@redhat.com>
-
- * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Enable
- absptr -> pcrel optimization for shared libs.
- Only create minimal .eh_frame_hdr if absptr FDE encoding in shared
- library cannot be converted to pcrel.
- (_bfd_elf_eh_frame_section_offset): Return -2 if making absptr
- relative.
- * elf32-i386.c (elf_i386_relocate_section): If
- _bfd_elf_section_offset returned -2, skip, but make sure the
- relocation is installed.
- * elf32-arm.h (elf32_arm_final_link_relocate): Likewise.
- * elf32-cris.c (cris_elf_relocate_section): Likewise.
- * elf32-hppa.c (elf32_hppa_relocate_section): Likewise.
- * elf32-i370.c (i370_elf_relocate_section): Likewise.
- * elf32-m68k.c (elf_m68k_relocate_section): Likewise.
- * elf32-ppc.c (ppc_elf_relocate_section): Likewise.
- * elf32-s390.c (elf_s390_relocate_section): Likewise.
- * elf32-sh.c (sh_elf_relocate_section): Likewise.
- * elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
- * elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
- * elf64-s390.c (elf_s390_relocate_section): Likewise.
- * elf64-sh64.c (sh_elf64_relocate_section): Likewise.
- * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
- * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise.
- * elf64-alpha.c (elf64_alpha_relocate_section): Handle
- _bfd_elf_section_offset returning -2 the same way as -1.
- * elfxx-ia64.c (elfNN_ia64_install_dyn_reloc): Likewise.
- * elf32-mips.c (mips_elf_create_dynamic_relocation): Add FIXME
- and BFD_ASSERT.
- * elf64-mips.c (mips_elf64_create_dynamic_relocation): Likewise.
-
-2002-02-18 Tom Rix <trix@redhat.com>
-
- * xcofflink.c (bfd_xcoff_link_gernate_rtinit): Add -brtl support.
- (bfd_xcoff_size_dynamic_sections): Same.
- * bfd-in.h (bfd_xcoff_link_generate_rtinit): Same.
- (bfd_xcoff_size_dynamic_sections): Same.
- * coff-rs6000.c (xcoff_generate_rtinit): Same.
- * coff-rs646000.c (xcoff64_generate_rtinit): Same.
- * libxcoff.h (struct xcoff_backend_data_rec): Same.
- * xcofflink.c (xcoff_build_ldsyms, xcoff_link_add_symbols): Clean.
- * bfd-in2.h: Regenerate.
-
-2002-02-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (STFD_FR0_0R1, LFD_FR0_0R1, BLR): Define.
- (struct ppc_link_hash_table): Add sfpr.
- (ppc64_elf_link_hash_table_create): Init it.
- (ppc64_elf_create_dynamic_sections): Split creation of .stub and
- .glink out to..
- (create_linkage_sections): ..here. Make .sfpr too.
- (ppc64_elf_check_relocs): Call create_linkage_sections, and set
- dynobj early.
- (MIN_SAVE_FPR, MAX_SAVE_FPR): Define.
- (ppc64_elf_func_desc_adjust): Look for missing ._savef* and
- ._restf* functions, and create as needed.
- (func_desc_adjust): Only force_local for shared libs.
-
-2002-02-18 David O'Brien <obrien@FreeBSD.org>
-
- * configure.in: Bump version number post 2.12 branching.
- * configure: Regenerate.
-
-2002-02-17 Hans-Peter Nilsson <hp@bitrange.com>
-
- * mmo.c: Correct and improve comments.
- (mmo_write_chunk): Store trailing byte in bfd buffer; don't
- zero-pad. Use input to fill up non-empty bfd buffer.
- (mmo_flush_chunk): New function.
- (mmo_write_loc_chunk): Add parameter last_vmap, all callers
- changed. Don't emit location specifier if VMA is same as
- *LAST_VMAP after omitting leading zero contents. Call
- mmo_flush_chunk before emitting location specifier.
- (mmo_write_loc_chunk_list): Call mmo_flush_chunk when finished
- with mmo_write_loc_chunk calls.
- (mmo_internal_write_section): Call mmo_flush_chunk after
- mmo_write_chunk.
- (mmo_write_symbols_and_terminator): Move :Main to first position
- in symbol array. Add faked one if it does not exist if there are
- other symbols. Don't add it if there are no symbols at all. Move
- out test for value of :Main from symbol loop. Rename table
- fakemain to maintable and variable mainsym to fakemain.
-
-2002-02-15 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_relocate_section) [BRSGP]: A target
- section with no got matches any got. Simplify error generaion.
-
-2002-02-15 Alan Modra <amodra@bigpond.net.au>
-
- Support arbitrary length fill patterns.
- * linker.c (bfd_new_link_order): Zero all fields with bfd_zalloc.
- (_bfd_default_link_order): Remove bfd_fill_link_order code.
- Call default_data_link_order.
- (default_fill_link_order): Delete.
- (default_data_link_order): New function.
- * elf32-mips.c (_bfd_mips_elf_final_link): Replace occurrences
- of bfd_fill_link_order with bfd_data_link_order.
- * elf64-alpha.c (elf64_alpha_final_link): Likewise.
- * elf64-mips.c (mips_elf64_final_link): Likewise.
-
- * bfd.c (bfd_scan_vma): Clamp overflows to max bfd_vma value.
- Correct value returned in "end" for "0x<non-hex>".
-
-2002-02-14 Nick Clifton <nickc@cambridge.redhat.com>
-
- * cpu-arm.c (processors): Replace 'arch' field with 'mach'.
- (scan): Test against 'mach' field in info structure.
-
-2002-02-14 Alan Modra <amodra@bigpond.net.au>
-
- * elf.c (elf_fake_sections): Use SHT_NOBITS when SEC_NEVER_LOAD.
-
-2002-02-14 Matt Fredette <fredette@netbsd.org>
-
- * elf32-m68k.c (elf32_m68k_print_private_bfd_data): Recognize
- EF_M68000.
-
-2002-02-13 Nick Clifton <nickc@cambridge.redhat.com>
-
- * elf.c (_bfd_elf_make_section_from_shdr): Do not insist on
- non-zero physical addresses when adjusting the LMAs of new
- sections.
-
-2002-02-12 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * elf-hppa.h (elf_hppa_reloc_final_type): New function stripped
- from _bfd_elf_hppa_gen_reloc_type.
- (_bfd_elf_hppa_gen_reloc_type): Remove duplicate prototype.
- * elf32-hppa.h (elf32_hppa_reloc_final_type): Add protptype.
- * elf32-hppa.c: Include elf32-hppa.h before elf-hppa.h.
- * elf64-hppa.h (elf64_hppa_reloc_final_type): Add protptype.
-
-2002-02-12 Alexandre Oliva <aoliva@redhat.com>
-
- * elf-m10300.c (mn10300_elf_relax_section): Skip section before
- loading its contents if there's nothing to do in it.
-
-2002-02-12 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_size_stubs): Correct test for crossing
- 64k boundary.
-
- * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Add dynamic
- DT_PPC64_OPD and DT_PPC64_OPDSZ tags.
- (ppc64_elf_finish_dynamic_sections): Set values for them.
-
-2002-02-11 Michael Snyder <msnyder@redhat.com>
-
- * elf-bfd.h (elfcore_write_lwpstatus): Add prototype.
- * elf.c (elfcore_grok_pstatus): Add prototype.
- (elfcore_grok_lwpstatus): Add prototype.
- (elfcore_write_lwpstatus): New function.
- (elfcore_write_pstatus): Fix typo, eliminate unnecessary memcpy.
-
-2002-02-11 Alexandre Oliva <aoliva@redhat.com>
-
- * elf32-sh.c: Added missing prototypes.
- * elf32-sh64.c: Likewise.
- (sh_elf_align_loads): Mark unused args as such.
- * elf64-sh64.c: Added missing prototypes.
- (struct elf_sh64_link_hash_entry): Fix typo.
- (sh_elf64_relocate_section): Fix info argument passed to
- _bfd_elf_section_offset.
-
-2002-02-11 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am: "make dep-am".
- * Makefile.in: Regenerate.
- * aclocal.m4: Regenerate.
- * config.in: Regenerate.
- * configure: Regenerate.
-
-2002-02-10 Daniel Jacobowitz <drow@mvista.com>
-
- * coff-rs6000.c (xcoff_generate_rtinit): Silence uninitialized
- variable warnings.
- * elf32-sh.c (sh_elf_relax_section): Silence signed/unsigned
- comparison warning.
- * trad-core.c (trad_unix_core_file_p): Silence pointer/integer
- cast warnings for the common case.
-
-2002-02-10 Hans-Peter Nilsson <hp@bitrange.com>
-
- * config.bfd (sh-*-linux*, sh-*-elf* | sh-*-rtemself*): Add sh64
- vectors.
- (sh-*-netbsdelf*): New, to trump sh*-*-netbsdelf* and add sh64
- vectors.
-
-2002-02-09 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_howto): Add R_ALPHA_BRSGP.
- (elf64_alpha_reloc_map, elf64_alpha_check_relocs): Likewise.
- (elf64_alpha_relocate_section): Likewise.
- * reloc.c (BFD_RELOC_ALPHA_BRSGP): New.
- * bfd-in2.h, libbfd.h: Rebuild.
-
-2002-02-09 Hans-Peter Nilsson <hp@bitrange.com>
-
- * elf64-mmix.c (_bfd_mmix_finalize_linker_allocated_gregs): Check
- that base-plus-offset reloc accounting is consistent.
- (mmix_elf_relax_section): Keep base-plus-offset reloc accounting
- up to date for undefined symbols.
-
-2002-02-08 Eric Christopher <echristo@redhat.com>
-
- From Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * elf32-mips.c (_bfd_mips_elf_fake_sections): Don't create .rela
- sections for the O32 ABI.
-
-2002-02-08 Chris Demetriou <cgd@broadcom.com>
-
- * elf32-arm.h: Fix formatting of _("...").
- * elf32-d10v.c: Likewise.
- * elf32-m68k.c: Likewise.
- * elf32-mips.c: Likewise.
-
-2002-02-08 Ivan Guzvinec <ivang@opencores.org>
-
- * coff-or32.c: Fix compile time warning messages.
-
-2002-02-08 Alexandre Oliva <aoliva@redhat.com>
-
- Contribute sh64-elf.
- 2002-01-23 Alexandre Oliva <aoliva@redhat.com>
- * reloc.c (R_SH_GOTPLT32, R_SH_GOT_LOW16, R_SH_GOT_MEDLOW16,
- R_SH_GOT_MEDHI16, R_SH_GOT_HI16, R_SH_GOTPLT_LOW16,
- R_SH_GOTPLT_MEDLOW16, R_SH_GOTPLT_MEDHI16, R_SH_GOTPLT_HI16,
- R_SH_PLT_LOW16, R_SH_PLT_MEDLOW16, R_SH_PLT_MEDHI16,
- R_SH_PLT_HI16, R_SH_GOTOFF_LOW16, R_SH_GOTOFF_MEDLOW16,
- R_SH_GOTOFF_MEDHI16, R_SH_GOTOFF_HI16, R_SH_GOTPC_LOW16,
- R_SH_GOTPC_MEDLOW16, R_SH_GOTPC_MEDHI16, R_SH_GOTPC_HI16,
- R_SH_GOT10BY4, R_SH_GOTPLT10BY4, R_SH_GOT10BY8, R_SH_GOTPLT10BY8,
- R_SH_COPY64, R_SH_GLOB_DAT64, R_SH_JMP_SLOT64, R_SH_RELATIVE64):
- New relocs.
- * libbfd.h, bfd-in2.h: Rebuilt.
- * elf32-sh.c (sh_elf_howto_table): Define new relocs.
- (sh_reloc_map): Map them.
- (PLT_ENTRY_SIZE, elf_sh_plt0_entry_be, elf_sh_plt0_entry_le,
- elf_sh_plt_entry_be, elf_sh_plt_entry_le, elf_sh_pic_plt_entry_be,
- elf_sh_pic_plt_entry_le, elf_sh_plt0_entry, elf_sh_plt_entry,
- elf_sh_pic_plt_entry, elf_sh_sizeof_plt, elf_sh_plt_plt0_offset,
- elf_sh_plt0_gotplt_offset, elf_sh_plt_temp_offset,
- elf_sh_plt_symbol_offset, elf_sh_plt_reloc_offset,
- movi_shori_putval) [INCLUDE_SHMEDIA]: New.
- (elf_sh_link_hash_entry) [INCLUDE_SHMEDIA]: Add
- datalabel_got_offset.
- (sh_elf_link_hash_newfunc): Initialize it.
- (sh_elf_relocate_section): Augment the scope of
- seen_stt_datalabel. Introduce GOTPLT support. Extend GOTPC, PLT,
- GOT and GOTOFF handling to new SHmedia relocation types. Support
- GOT_BIAS.
- (sh_elf_check_relocs): Likewise.
- (sh_elf_finish_dynamic_symbol) [TARGET_SHMEDIA]: Set up values in
- PLT entries using movi_shori_putval. Support GOT_BIAS.
- (sh_elf_finish_dynamic_sections): Likewise.
- * elf32-sh64.c (shmedia_prepare_reloc): Do not add addend to
- relocation, it's now done by the caller.
- (GOT_BIAS): New.
- * elf64-sh64.c (GOT_BIAS, PLT_ENTRY_SIZE, elf_sh64_sizeof_plt,
- elf_sh64_plt_plt0_offset, elf_sh64_plt0_gotplt_offset,
- elf_sh64_plt_temp_offset, elf_sh64_plt_symbol_offset,
- elf_sh64_plt_reloc_offset, ELF_DYNAMIC_INTERPRETER,
- elf_sh64_pcrel_relocs_copied, elf_sh64_link_hash_entry,
- elf_sh64_link_hash_table, sh64_elf64_link_hash_traverse,
- sh64_elf64_hash_table): New.
- (sh_elf64_howto_table): Introduce new relocs.
- (sh_elf64_info_to_howto): Accept new PIC relocs.
- (sh_elf64_relocate_section): Augment the scope of
- seen_stt_datalabel. Support new PIC relocs.
- (sh_elf64_check_relocs): Support new PIC relocs.
- (elf_sh64_plt0_entry_be, elf_sh64_plt0_entry_le,
- elf_sh64_plt_entry_be, elf_sh64_plt_entry_le,
- elf_sh64_pic_plt_entry_be, elf_sh64_pic_plt_entry_le,
- elf_sh64_plt0_entry, elf_sh64_plt_entry, elf_sh64_pic_plt_entry,
- sh64_elf64_link_hash_newfunc, sh64_elf64_link_hash_table_create,
- movi_shori_putval, movi_3shori_putval,
- sh64_elf64_create_dynamic_sections,
- sh64_elf64_adjust_dynamic_symbol, sh64_elf64_discard_copies,
- sh64_elf64_size_dynamic_sections,
- sh64_elf64_finish_dynamic_symbol,
- sh64_elf64_finish_dynamic_sections): New.
- (elf_backend_create_dynamic-sections,
- bfd_elf64_bfd_link_hash_table_create,
- elf_backend_adjust_dynamic_symbol,
- elf_backend_size_dynamic_sections,
- elf_backend_finish_dynamic_symbol,
- elf_backend_finish_dynamic_sections, elf_backend_want_got_plt,
- elf_backend_plt_readonly, elf_backend_want_plt_sym,
- elf_backend_got_header_size, elf_backend_plt_header_size):
- Define.
- 2001-05-16 Alexandre Oliva <aoliva@redhat.com>
- * elf32-sh.c: Renumbered and renamed some SH5 relocations to
- match official numbers and names; moved unmaching ones to the
- range 0xf2-0xff.
- * elf32-sh64.c, elf64-sh64.c: Likewise.
- 2001-03-12 DJ Delorie <dj@redhat.com>
- * elf32-sh.c (sh_elf_relax_section): Don't relax SHmedia
- sections.
- 2001-03-12 DJ Delorie <dj@redhat.com>
- * elf32-sh64.c (shmedia_prepare_reloc): Validate relocs that must
- be aligned.
- * elf64-sh64.c (sh_elf64_relocate_section): Ditto.
- 2001-01-14 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf32-sh64.c (bfd_elf32_bfd_copy_private_section_data): Define.
- (sh64_elf_fake_sections): Set type to SHT_SH5_CR_SORTED for a
- .cranges section with SEC_SORT_ENTRIES set.
- (sh64_backend_section_from_shdr): Set SEC_SORT_ENTRIES on an
- incoming sorted .cranges section.
- (sh64_bfd_elf_copy_private_section_data): New.
- (sh64_elf_final_write_processing): Only sort .cranges and modify
- start address if called by linker.
- 2001-01-08 Ben Elliston <bje@redhat.com>
- * elf32-sh64.c (sh64_elf_final_write_processing): Activate
- Hans-Peter Nilsson's set bit 0 patch from 2001-01-06.
- * elf64-sh64.c (sh64_elf64_final_write_processing): Ditto.
- 2001-01-06 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf64-sh64.c (sh_elf64_howto_table): No open brace at start of
- line. Add comments before all entries.
- <R_SH_PT_16, R_SH_SHMEDIA_CODE>: Correct and clarify describing
- comment.
- (sh_elf64_reloc): Correct head comment.
- (sh_elf64_relocate_section): Correct spacing.
- <relocating for a local symbol>: Do not honour STO_SH5_ISA32;
- instead call reloc_dangerous callback.
- <case R_SH_SHMEDIA_CODE>: New case.
- (sh_elf64_gc_mark_hook): Correct spacing.
- (sh_elf64_check_relocs): Ditto.
- * elf32-sh64.c (shmedia_prepare_reloc) <case R_SH_SHMEDIA_CODE>:
- New case.
- * elf32-sh.c: Correct #endif comments for #ifndef-wrapped
- functions.
- (sh_elf_howto_table) <R_SH_PT_16, R_SH_SHMEDIA_CODE>: Correct,
- clarify describing comment. Add comments before all entries.
- (sh_elf_relocate_section) <relocating for a local symbol>: Do not
- honour STO_SH5_ISA32; instead call reloc_dangerous callback.
- 2001-01-06 Hans-Peter Nilsson <hpn@cygnus.com>
- Sort .cranges section in final link. Prepare to set bit 0 on
- entry address.
- * elf32-sh64.c (struct sh64_find_section_vma_data): New.
- (sh64_elf_link_output_symbol_hook): Fix typo in prototype.
- (sh64_elf_set_mach_from_flags): Set SEC_DEBUGGING on incoming
- .cranges section.
- (sh64_backend_section_from_shdr): New, to recognize
- SHT_SH5_CR_SORTED on incoming .cranges section.
- (elf_backend_section_from_shdr): Define.
- (sh64_elf_final_write_processing): Sort outgoing .cranges
- section. (New, temporarily disabled:) Set bit 0 on entry address
- according to ISA type.
- (sh64_find_section_for_address): New.
- (crange_qsort_cmpb, crange_qsort_cmpl, crange_bsearch_cmpb,
- crange_bsearch_cmpl): Move here from opcodes/sh64-dis.c.
- (sh64_address_in_cranges): Move here from opcodes/sh64-dis.c. Use
- bfd_malloc, not xmalloc.
- (sh64_get_contents_type): Move here from opcodes/sh64-dis.c. Make
- global.
- * elf32-sh64.c (sh64_elf64_final_write_processing): New, (but
- temporarily disabled) setting bit 0 on entry address.
- (elf_backend_final_write_processing): Define.
- 2001-01-05 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf32-sh.c (sh_elf_howto_table) <R_SH_PT_16>: Adjust fields to
- be a proper relocation for PTA and PTB rather than a marker.
- <R_SH_IMMU5, R_SH_IMMS6, R_SH_IMMU6, R_SH_IMMS10, R_SH_IMMS10BY2,
- R_SH_IMMS10BY4, R_SH_IMMS10BY8, R_SH_IMMS16, R_SH_IMMU16,
- R_SH_IMM_LOW16, R_SH_IMM_LOW16_PCREL, R_SH_IMM_MEDLOW16,
- R_SH_IMM_MEDLOW16_PCREL, R_SH_IMM_MEDHI16, R_SH_IMM_MEDHI16_PCREL,
- R_SH_IMM_HI16, R_SH_IMM_HI16_PCREL, R_SH_64, R_SH_64_PCREL>:
- Zero src_mask.
- * elf64-sh64.c: Ditto.
- (sh_elf64_relocate_section) <case R_SH_PT_16>: New case.
- * elf32-sh64.c: Include opcodes/sh64-opc.h
- (shmedia_prepare_reloc): Take a bfd_link_info pointer as first
- argument. Drop const qualifiers from "bfd *" and "bfd_byte *"
- parameters. No unused parameters. Caller changed.
- <case R_SH_PT_16>: New case.
- * Makefile.am (elf32-sh64.lo): Add dependency on sh64-opc.h.
- * Makefile.in: Regenerate.
- 2000-12-30 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf64-sh64.c (sh64_elf64_fake_sections): Set SHF_SH5_ISA32 for
- all code sections.
- (sh_elf64_set_mach_from_flags): Change from EF_SH64 to EF_SH5.
- (sh64_elf_merge_private_data): Ditto.
- * elf32-sh64.c (sh64_elf_fake_sections): Use sh64_elf_section_data
- to access stored section flags.
- (sh64_elf_final_write_processing): Return immediately unless
- called by linker. Use sh64_elf_section_data (cranges) to get size
- of linker-generated cranges entries.
- (sh64_elf_copy_private_data): Add missing "return true".
- (sh64_elf_set_mach_from_flags): Change from EF_SH64 to EF_SH5.
- (sh_elf64_merge_private_data): Ditto.
- 2000-12-19 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf64-sh64.c (sh64_elf64_fake_sections): New, copy of
- elf64-sh64.c:sh64_elf_fake_sections.
- (elf_backend_fake_sections): Define as sh64_elf64_fake_sections.
- 2000-12-18 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf32-sh64.c (sh64_elf_copy_private_data_internal): Delete.
- (sh64_elf_final_write_processing): New.
- (elf_backend_final_write_processing): Define.
- (sh64_elf_fake_sections): Get header flags from tdata field.
- (sh64_elf_copy_private_data): Do not call
- sh64_elf_copy_private_data_internal, just copy e_flags field.
- (sh64_elf_merge_private_data): Do not call
- sh64_elf_copy_private_data_internal.
- 2000-12-12 Hans-Peter Nilsson <hpn@cygnus.com>
- Remove EF_SH64_ABI64, let ELF size make difference.
- Remove SH64-specific BFD section flag.
- * elf32-sh64.c (sh64_elf_fake_sections): Recognize section as
- containing SHmedia through elf_section_data (asect)->tdata
- non-zero, not using a BFD section flag.
- (sh64_elf_set_mach_from_flags): Don't recognize EF_SH64_ABI64.
- (sh64_elf_merge_private_data): Similar.
- (elf_backend_section_flags): Don't define.
- (sh64_elf_backend_section_flags): Delete.
- * elf64-sh64.c (sh_elf64_set_mach_from_flags): Recognize EF_SH64,
- not EF_SH64_ABI64.
- (sh_elf64_merge_private_data): Similar.
- * section.c (Section flags definitions): Don't define
- SEC_SH_ISA_SHMEDIA.
- (bfd-in2.h): Regenerate.
- 2000-12-09 Hans-Peter Nilsson <hpn@cygnus.com>
- Make DataLabel references work with partial linking.
- * elf32-sh64.c: Fix formatting.
- (sh64_elf_link_output_symbol_hook): New.
- (elf_backend_link_output_symbol_hook): Define to
- sh64_elf_link_output_symbol_hook.
- (sh64_elf_add_symbol_hook): Make DataLabel symbol just global
- undefined if partial linking. Adjust sanity check.
- * elf64-sh64.c (sh64_elf64_link_output_symbol_hook): New.
- (elf_backend_link_output_symbol_hook): Define to
- sh64_elf64_link_output_symbol_hook.
- (sh64_elf64_add_symbol_hook): Make DataLabel symbol just global
- undefined if partial linking. Adjust sanity check.
- 2000-12-07 Hans-Peter Nilsson <hpn@cygnus.com>
- Implement semantics for inter-file DataLabel references.
- * elf64-sh64.c (DATALABEL_SUFFIX): Define.
- (sh64_elf64_add_symbol_hook): New.
- (sh_elf64_relocate_section): If passing an indirect symbol with
- st_type STT_DATALABEL on the way to a symbol with st_other
- STO_SH5_ISA32, do not bitor 1 to the relocation.
- (elf_backend_add_symbol_hook): Define to
- sh64_elf64_add_symbol_hook.
- * elf64-sh32.c: Tweak comments.
- (DATALABEL_SUFFIX): Define.
- (sh64_elf_add_symbol_hook): New.
- (elf_backend_add_symbol_hook): Define to sh64_elf_add_symbol_hook.
- * elf32-sh.c (sh_elf_relocate_section): If passing an indirect
- symbol with st_type STT_DATALABEL on the way to a symbol with
- st_other STO_SH5_ISA32, do not bitor 1 to the relocation.
- 2000-12-05 Hans-Peter Nilsson <hpn@cygnus.com>
- Pass through STT_DATALABEL.
- * elf32-sh64.c (sh64_elf_get_symbol_type): New.
- (elf_backend_get_symbol_type): Define.
- * elf64-sh64.c (sh64_elf64_get_symbol_type): New.
- (elf_backend_get_symbol_type): Define.
- 2000-11-30 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf32-sh64.c: Tweak comments.
- (sh64_elf_copy_private_data_internal): Add prototype.
- (bfd_elf32_bfd_set_private_flags): Define.
- (sh64_elf_copy_private_data_internal): Compare machine name, not
- textual BFD target name, to check whether to copy section flag
- SHF_SH5_ISA32.
- (sh64_elf_merge_private_data): Validize bfd_get_arch_size.
- Tweak section-contents-type-mismatch message.
- (shmedia_prepare_reloc): Add ATTRIBUTE_UNUSED markers.
- Validize reloc-types.
- * elf64-sh64.c: New file.
- * targets.c (bfd_elf64_sh64_vec, bfd_elf64_sh64l_vec): Declare.
- * Makefile.am (BFD64_BACKENDS): Add elf64-sh64.lo.
- (BFD64_BACKENDS_CFILES): Add elf64-sh64.c.
- Regenerate dependencies.
- * Makefile.in: Regenerate.
- * config.bfd (sh64-*-elf*): Add bfd_elf64_sh64_vec and
- bfd_elf64_sh64l_vec.
- * configure.in: Handle bfd_elf64_sh64_vec and
- bfd_elf64_sh64l_vec.
- * configure: Regenerate.
- * po/POTFILES.in: Regenerate.
- * po/bfd.pot: Regenerate.
- 2000-11-29 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf32-sh64.c (sh64_elf_set_mach_from_flags): Do not recognize
- anything else but EF_SH64 and EF_SH64_ABI64.
- (sh64_elf_merge_private_data): Emit error for anything else but
- EF_SH64 and EF_SH64_ABI64.
- * config.bfd: Remove bfd_elf32_shblin_vec and bfd_elf32_shlin_vec
- from targ_selvecs.
- * configure.in: Add cofflink.lo to bfd_elf32_sh64_vec and
- bfd_elf32_sh64l_vec as a temporary measure.
- * configure: Regenerate.
- 2000-11-27 Hans-Peter Nilsson <hpn@cygnus.com>
- * cpu-sh.c (arch_info_struct): Include sh5 item
- unconditionalized.
- * config.bfd (sh64-*-elf*): Do not set targ_cflags.
- Add targ_selvecs bfd_elf32_sh_vec, bfd_elf32_shl_vec,
- bfd_elf32_shblin_vec and bfd_elf32_shlin_vec.
- * elf32-sh64.c: Tweak comments.
- (sh64_elf_set_mach_from_flags): Recognize all machine flags that
- are proper subsets of SH64 as bfd_mach_sh5. Add EF_SH64_ABI64.
- (sh64_elf_copy_private_data_internal): Wrap long line.
- (sh64_elf_merge_private_data): Rewrite to allow objects from
- SH64 subsets to be linked together.
- (INCLUDE_SHMEDIA): Define.
- * elf32-sh.c (sh_elf_relocate_section) <local symbol>:
- Parenthesize plus-expression inside or-expression.
- <global symbol>: Ditto.
- (sh_elf_set_mach_from_flags): Remove code refusing
- deleted EF_SH64_32BIT_ABI flag.
- 2000-11-26 Hans-Peter Nilsson <hpn@cygnus.com>
- * elf32-sh.c (sh_elf_howto_table) <R_SH_IMM_LOW16_PCREL,
- R_SH_IMM_MEDLOW16_PCREL, R_SH_IMM_MEDHI16_PCREL,
- R_SH_IMM_HI16_PCREL, R_SH_64_PCREL>: Set pcrel_offset to true.
- (sh_elf_relocate_section) <local symbol>: Or 1 in
- calculation of relocation if sym->st_other & STO_SH5_ISA32.
- <global symbol>: Ditto if h->other & STO_SH5_ISA32.
- * elf32-sh64.c (shmedia_prepare_reloc): Add rel->r_addend to
- relocation.
- 2000-11-24 Hans-Peter Nilsson <hpn@cygnus.com>
- * Makefile.am (BFD32_BACKENDS): Add elf32-sh64.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-sh64.c.
- Regenerate dependencies.
- * Makefile.in: Regenerate.
- * archures.c: Add bfd_mach_sh5.
- * config.bfd: Map targ_cpu sh* to bfd_sh_arch.
- Handle sh64-*-elf*. Set targ_cflags to -DINCLUDE_SHMEDIA.
- * configure.in: Handle bfd_elf32_sh64_vec and bfd_elf32_sh64l_vec.
- * configure: Regenerate.
- * reloc.c (BFD_RELOC_SH_SHMEDIA_CODE, BFD_RELOC_SH_IMMU5,
- BFD_RELOC_SH_IMMS6, BFD_RELOC_SH_IMMS6BY32, BFD_RELOC_SH_IMMU6,
- BFD_RELOC_SH_IMMS10, BFD_RELOC_SH_IMMS10BY2,
- BFD_RELOC_SH_IMMS10BY4, BFD_RELOC_SH_IMMS10BY8,
- BFD_RELOC_SH_IMMS16, BFD_RELOC_SH_IMMU16, BFD_RELOC_SH_IMM_LOW16,
- BFD_RELOC_SH_IMM_LOW16_PCREL, BFD_RELOC_SH_IMM_MEDLOW16,
- BFD_RELOC_SH_IMM_MEDLOW16_PCREL, BFD_RELOC_SH_IMM_MEDHI16,
- BFD_RELOC_SH_IMM_MEDHI16_PCREL, BFD_RELOC_SH_IMM_HI16,
- BFD_RELOC_SH_IMM_HI16_PCREL, BFD_RELOC_SH_PT_16): New relocations.
- * cpu-sh.c [INCLUDE_SHMEDIA] (arch_info_struct): Define and link
- in item for SH5.
- * elf32-sh.c [INCLUDE_SHMEDIA] (sh_elf_howto_table): Add howto items
- for SHmedia relocs.
- [INCLUDE_SHMEDIA] (sh_rel): Add mappings for SHmedia relocs.
- [INCLUDE_SHMEDIA] (sh_elf_relocate_section) [default]: Call
- shmedia_prepare_reloc, goto final_link_relocate if it returns
- non-zero, else fail as before.
- (sh_elf_set_mach_from_flags): Provide function only if not defined
- as macro. Do not recognize objects with EF_SH64_32BIT_ABI set.
- (sh_elf_set_private_flags): Provide function only if not defined
- as a macro.
- (sh_elf_copy_private_data): Similar.
- (sh_elf_merge_private_data): Similar.
- * section.c (SEC_SH_ISA_SHMEDIA): New.
- * targets.c (bfd_elf32_sh64_vec, bfd_elf32_sh64l_vec): Declare.
- * elf32-sh64.c: New file.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
- * po/POTFILES.in: Regenerate.
- * po/bfd.pot: Regenerate.
- * bfd-in2.h: Regenerate.
- * libbfd.h: Regenerate.
-
-2002-02-07 Daniel Jacobowitz <drow@mvista.com>
-
- * bfd-in.h: Update <stdbool.h> check to only see if <stdbool.h> has
- been included, not drag it in.
- * bfd-in2.h: Regenerate.
-
-2002-02-06 H.J. Lu (hjl@gnu.org)
-
- * elf32-mips.c (_bfd_mips_elf_merge_private_bfd_data): Update
- the mach and ISA fields if necessary.
-
-2002-02-06 Nick Clifton <nickc@cambridge.redhat.com>
-
- * coffcode.h (coff_set_arch_mach_hook): Select the highest known
- ARM architecture when an F_ARM_5 flag is detected, since we cannot
- be sure exactly which architecture this represents.
-
-2002-02-05 Nick Clifton <nickc@redhat.com>
-
- * po/tr.po: Updated translation.
-
-2002-02-05 Alan Modra <amodra@bigpond.net.au>
-
- From Jimi X <jimix@watson.ibm.com>
- * archures (bfd_mach_ppc64): Define.
- (bfd_powerpc_arch): Rename to bfd_powerpc_archs.
- (bfd_powerpc_arch): Define.
- * bfd-in2.h: Regenerate.
- * cpu-powerpc.c (arch_info_struct): Rename to bfd_powerpc_archs.
- (bfd_powerpc_arch): Move to tail of bfd_powerpc_archs.
- (bfd_powerpc_archs): Add default powerpc64 arch.
-
-2002-02-05 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Check for relocs
- against section syms in readonly sections. Don't do the global
- sym check if we find one.
- * elf64-s390.c (elf_s390_size_dynamic_sections): Likewise.
- * elf32-hppa.c (elf32_hppa_size_dynamic_sections): Likewise.
- * elf32-i386.c (elf_i386_size_dynamic_sections): Likewise.
- * elf32-s390.c (elf_s390_size_dynamic_sections): Likewise.
- (elf_s390_grok_prstatus): Add missing prototype.
-
-2002-02-04 Hans-Peter Nilsson <hp@bitrange.com>
-
- * elf64-mmix.c (mmix_dump_bpo_gregs): New function.
- (mmix_elf_check_common_relocs) <case R_MMIX_BASE_PLUS_OFFSET>:
- Call bfd_get_section_by_name only once. Initialize
- bpodata->n_bpo_relocs_this_section.
- (_bfd_mmix_prepare_linker_allocated_gregs): Remove comment
- referring to DSOs.
- (bpo_reloc_request_sort_fn): Don't use difference of values as
- return-value.
-
-2002-02-02 David O'Brien <obrien@FreeBSD>
-
- * configure.in: Tweak the FreeBSD 4.x recognition more. Only treat
- version 4.5 and later the same as 5-CURRENT.
- * configure: Re-generate.
-
-2002-02-02 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.bfd (hppa*-*-netbsd*): New target.
-
-2002-01-31 Philipp Thomas <pthomas@suse.de>
-
- * coff-arm.c (coff_arm_merge_private_bfd_data): Move ERROR
- to front of message. Unify messages with elf32-arm.h. Use
- commas where neccessary.
- * elf32-arm.h (elf32_arm_merge_private_bfd_data): Use all upcase
- ERROR in messages. Unify messages with coff-arm.c. Correct
- VFP/FPA error message.
- (elf32_arm_print_private_bfd_data): Don't mark APCS-26 and
- APCS-32 for translation.
-
-2002-02-01 Hans-Peter Nilsson <hp@bitrange.com>
-
- Perform on-demand global register allocation from
- R_MMIX_BASE_PLUS_OFFSET relocs.
- * elf64-mmix.c (struct bpo_reloc_section_info, struct
- bpo_reloc_request, struct bpo_greg_section_info): New.
- (mmix_elf_check_common_relocs, mmix_elf_gc_sweep_hook,
- bpo_reloc_request_sort_fn, mmix_elf_relax_section,
- _bfd_mmix_check_all_relocs,
- _bfd_mmix_prepare_linker_allocated_gregs,
- _bfd_mmix_finalize_linker_allocated_gregs): New functions.
- (elf_mmix_howto_table): Correct src_mask for most relocs.
- (mmix_elf_perform_relocation) <case R_MMIX_BASE_PLUS_OFFSET>: New
- case.
- (mmix_final_link_relocate) <case R_MMIX_BASE_PLUS_OFFSET>: New
- case. Fix typo in comment. New label do_mmix_reloc.
- (mmix_elf_check_relocs): Abuse bfd_link_info member base_file to
- store first object file with a base-plus-offset reloc. Call
- mmix_elf_check_common_relocs for the part common with mmo.
- (mmix_elf_final_link): Write out linker-allocated register
- contents section.
+ * elflink.h (elf_gc_sections): Warn when gc-sections option is ignored.
+ * elf32-h8300.c (elf32_h8_gc_mark_hook): New function.
+ (elf32_h8_gc_sweep_hook): New function.
+ (elf_backend_gc_mark_hook): Define.
(elf_backend_gc_sweep_hook): Define.
- (bfd_elf64_bfd_relax_section): Define.
-
- * mmo.c: Don't include <ctype.h>
- (mmo_init): Correct init-once logic.
-
-2002-02-01 Tom Rix <trix@redhat.com>
-
- * config.bfd: Conditionally support <aiaff> for pre AIX 4.3.
-
-2002-02-01 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am: Run "make dep-am"
- * Makefile.in: Regenerate.
-
-2002-01-31 David O'Brien <obrien@FreeBSD>
-
- * configure.in: Recognize the differences in core files from FreeBSD
- 4.{0,1} and later versions of 4.x. This treats 4.2+ the same as
- 5-CURRENT.
- * configure: Regenerate.
-
-2002-01-31 Ivan Guzvinec <ivang@opencores.org>
-
- * coff-or32.c: New file.
- * cpu-or32.c: New file.
- * elf32-or32.c: New file.
- * archures.c: Add support for or32.
- * targets.c: Add support for or32.
- * bfd-in2.h: Regenerate.
- * coffcode.h (coff_set_arch_mach_hook, coff_set_flags,
- coff_write_object_contents): Add support for or32.
- * config.bfd: Add target.
- * configure.in: Add support for or32.
- * configure: Regenerate.
- * Makefile.am: Add support for or32.
- * Makefile.in: Regenerate.
- * po/SRC-POTFILES.in: Add or32 files.
- * po/bfd.pot: Regenerate.
-
-2002-01-31 Nick Clifton <nickc@cambridge.redhat.com>
- Don Lindsay <lindsayd@cisco.com>
-
- * elf32-mips.c (mips_elf_calculate_relocation): Replace 'return
- false' with a return of a bfd_reloc_ error code.
-
-2002-01-31 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (elf_cris_discard_excess_program_dynamics): Don't
- unexport unreferenced symbols when --export-dynamic. Call
- _bfd_elf_strtab_delref when unexporting.
-
-2002-01-30 Daniel Jacobowitz <drow@mvista.com>
-
- * bfd-in.h: Include <stdbool.h> if it is available.
- * bfd-in2.h: Regenerated.
-
-2002-01-31 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (func_desc_adjust): STV_PROTECTED functions should
- not go via the plt.
-
-2002-01-30 Nick Clifton <nickc@cambridge.redhat.com>
-
- * archures.c: Tidy up formatting of embedded comments.
- * bfd.c: Tidy up formatting of embedded comments.
- * bfd-in.h: Fix formatting of comments.
- * reloc.c: Tidy up formatting of ordinary & embedded comments.
- * section.c: Tidy up formatting of embedded comments.
- * syms.c: Tidy up formatting of embedded comments.
- * targets.c: Tidy up formatting of embedded comments.
-
- * bfd-in2.h: Regenerate.
-
-2002-01-30 Nick Clifton <nickc@cambridge.redhat.com>
-
- * vms-tir.c (cmd_name): New function.
- (tir_cmd_name): New function.
- (etir_sta, etir_sto, etir_opr, etir_stc): Use cmd_name().
- (tir_opr, tir_ctl, tir_cmd): use tir_cmd_name().
- Fix formatting.
-
- * peXXigen.c (pe_print_idata): Rearrange message to aid in
- translation.
- (pe_print_pdata): Rearrange message to aid in translation.
-
- * libbfd.c (warn_deprecated): Rearrange error message to aid in
- translation.
-
- * ihex.c (ihex_write_object_contents): Fix spelling typo.
-
- * ieee.c (ieee_slurp_external_symbols): Remove spurious space.
-
- * elf64-sparc.c (sparc64_elf_add_symbol_hook): Rearrange error
- message to aid in translation.
-
- * elf64-mmix.c (mmix_final_link_relocate): Rearrange error message
- to aid in translation.
-
- * elf32-arm.h (elf32_arm_merge_private_bfd_data): Fix typo.
-
-2002-01-30 Philipp Thomas <pthomas@suse.de>
-
- * coff-arm.c, elf32-elf.h: Unify messages.
-
-2002-01-30 Nick Clifton <nickc@redhat.com>
-
- * po/sv.po: Updated translation.
-
-2002-01-30 Philipp Thomas <pthomas@suse.de>
-
- * dwarf2.c (read_abbrev): Use full section name in error message.
- (decode_line_info): Likewise.
-
- * elf.c (_bfd_elf_symbol_from_bfd_symbol): Don't translate debugging
- message.
-
-2002-01-30 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (func_desc_adjust): Only provide missing function
- descriptor symbols for undefined function code syms. Clear
- ELF_LINK_NON_ELF so that they can stay weak.
-
-2002-01-29 Chris Demetriou <cgd@broadcom.com>
- Mitch Lichtenberg <mpl@broadcom.com>
-
- * bfd-in.h (bfd_mips_elf32_create_embedded_relocs): New prototype.
- * elf32-mips.c (bfd_mips_elf32_create_embedded_relocs): New function
- to handle 32-bit ELF embedded reloc (ld --embedded-relocs)
- generation.
- * bfd-in2.h: Regenerate.
-
-2002-01-29 Chris Demetriou <cgd@broadcom.com>
-
- * elf32-mips.c: Add additional comments about HI16 relocation
- processing.
- (_bfd_mips_elf_hi16_reloc): Don't subtract address here for
- pc-relative relocations. (Reverts change made on 2001-10-31.)
- (_bfd_mips_elf_lo16_reloc): Subtract address of LO16 part here
- for pc-relative relocations.
- (mips_elf_calculate_relocation): Add a comment about a kludge
- in the R_MIPS_GNU_REL_HI16 handling.
- (_bfd_mips_elf_relocate_section): Implement that kludge;
- adjust pc-relative HI16 relocation for difference in HI16 and
- LO16 addresses, since it can't easily be done in
- mips_elf_calculate_relocation.
-
-2002-01-29 Martin Schwidefsky <schwidefsky@de.ibm.com>
-
- * elf32-i386 (elf_i386_adjust_dynamic_symbol): Do not replace PLT32
- relocations with PC32 relocations for undefined or weak symbols.
- * elf32-s390 (elf_i386_adjust_dynamic_symbol): Likewise.
- * elf64-s390x (elf_i386_adjust_dynamic_symbol): Likewise.
-
-2002-01-28 Jason Thorpe <thorpej@wasabisystems.com>
-
- * elfcore.h (elf_core_file_p): Improve comment for last change.
-
-2002-01-27 Daniel Jacobowitz <drow@mvista.com>
-
- * configure: Regenerated.
-
-2002-01-27 Jason Thorpe <thorpej@wasabisystems.com>
-
- * elfcore.h (elf_core_file_p): Set the machine architecture
- before processing the program headers.
-
-2002-01-26 Hans-Peter Nilsson <hp@bitrange.com>
-
- * configure.in <64-bit configuration>: If using gcc, check and
- emit error for egcs-1.1.2.
- * configure: Regenerate.
-
-2002-01-26 Egor Duda <deo@logos-m.ru>
-
- * elf.c (elfcore_grok_win32pstatus): Copy only as much information
- as possible to avoid stack corruption.
-
-2002-01-26 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_check_relocs): Don't set reltext
- for non-allocated sections.
-
-2002-01-25 Mark Kettenis <kettenis@gnu.org>
-
- * elf.c (elfcore_write_prstatus): Make sure we pass the address of
- prstat.pr_reg even if it is a struct.
-
-2002-01-25 Steve Ellcey <sje@cup.hp.com>
-
- * elfxx-ia64.c: Reset AIX vector function overrides for HP-UX.
-
-2002-01-25 Philipp Thomas <pthomas@suse.de>
-
- * coffgen.c (coff_print_symbol): Don't mark info message
- for translation.
-
-2002-01-25 Nick Clifton <nickc@redhat.com>
-
- * po/fr.po: Updated translation.
- * po/es.po: Updated translation.
-
-2002-01-25 Philipp Thomas <pthomas@suse.de>
-
- * coff-alpha.c (alpha_relocate_section): Unify warning message
- for GP relative relocations without GP defined.
- * coff-mips.c (mips_relocate_section): Likewise.
-
-2002-01-25 Alan Modra <amodra@bigpond.net.au>
-
- * elf-eh-frame.c (_bfd_elf_eh_frame_section_offset): Avoid
- unsigned overflow when new_offset < old_offset.
-
-2002-01-24 Philipp Thomas <pthomas@suse.de>
-
- * bfd.c (_bfd_abort): Fix typo.
-
-2002-01-23 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (elf64_alpha_adjust_dynamic_symbol): Don't suppress
- plt entries for undefweak symbols.
-
-2002-01-23 Steve Ellcey <sje@cup.hp.com>
-
- * targets.c (bfd_elf32_ia64_hpux_big_vec): Add to DEFAULT_VECTOR.
- (bfd_elf64_ia64_hpux_big_vec): Ditto.
- (bfd_elf32_h8300_vec): Ditto.
-
-2002-01-23 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c: Remove stale part of ABI comment.
- (NO_OPD_RELOCS): Define.
- (ppc64_elf_check_relocs): Use it.
- (ppc64_elf_relocate_section): Here too.
- (build_one_stub): Don't point function syms at the stub. Instead,
- hijack plt.offset.
- (ppc64_elf_relocate_section): Check whether REL24 relocs should
- really go to the stub. Make all dynamic relocs in opd against
- locals.
- (ppc64_elf_finish_dynamic_symbol): Allow for non-standard use of
- plt.offset.
-
-2002-01-22 Richard Henderson <rth@redhat.com>
-
- * elf64-alpha.c (INSN_UNOP): Encode with RB as $sp.
-
-2002-01-22 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_finish_dynamic_sections): Correct sign of
- TOC_BASE_OFF adjustment.
-
- * Makefile.am: Run "make dep-am".
- * Makefile.in: Regenerate.
- * po/SRC-POTFILES.in: Regenerate.
-
-2002-01-22 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * configure.host (hppa*64*-*-hpux*, hppa*64*-*-linux*): Add new
- host defines.
-
-2002-01-21 Hans-Peter Nilsson <hp@axis.com>
-
- * elf32-cris.c (cris_elf_relocate_section) <case R_CRIS_32_GOTREL>:
- Check for and emit error if sgot is NULL at this point.
-
-2002-01-21 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.bfd (ia64*-*-netbsd*): New target.
-
-2002-01-21 Thomas Klausner <wiz@danbala.ifoer.tuwien.ac.at>
-
- * som.c (som_write_space_strings): Comment typo fix.
-
-2002-01-21 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (struct ppc_link_hash_entry): Add is_func and
- is_func_descriptor fields.
- (link_hash_newfunc): Init them.
- (ppc64_elf_check_relocs): Only R_PPC24_REL24 syms starting with a
- dot are candidates for plt entries. When processing .opd relocs,
- set function descriptor strings to point inside function code
- string, and set new ppc_link_hash_entry fields.
- (ppc64_elf_gc_sweep_hook): Don't sweep R_PPC64_REL24 relocs.
- (ppc64_elf_adjust_dynamic_symbol): Remove most code dealing with
- function descriptors. It's now done in..
- (func_desc_adjust): New.
- (ppc64_elf_func_desc_adjust): New.
- (define elf_backend_always_size_sections): Define.
- (ppc64_elf_hide_symbol): New.
- (define elf_backend_hide_symbol): Define.
- (allocate_dynrelocs): Remove code looking up function descriptors
- as that has been done earlier.
- (ppc64_elf_size_dynamic_sections): Use htab shortcut to elf hash
- table.
- (ppc64_elf_finish_dynamic_symbol): Likewise. Remove code looking
- up function descriptor.
- (build_one_stub): Look up the function code sym. Check for
- invalid plt offsets.
- (ppc64_elf_relocate_section): Tweak calls to undefined weak syms.
- Convert R_PPC64_TOC relocs to R_PPC64_RELATIVE in shared libs.
-
- * elf-bfd.h (elf_backend_data <elf_backend_hide_symbol>): Add
- boolean param.
- (_bfd_elf_link_hash_hide_symbol): Likewise.
- * elflink.h (elf_link_add_object_symbols): Adjust call to
- elf_backend_hide_symbol.
- (elf_fix_symbol_flags): Likewise.
- (elf_link_assign_sym_version): Likewise. Use bfd_malloc rather
- than bfd_alloc.
- * elf.c (_bfd_elf_link_hash_hide_symbol): Add "force_local" param.
- Set ELF_LINK_FORCED_LOCAL and call _bfd_elf_strtab_delref.
- * elf32-hppa.c (elf32_hppa_hide_symbol): Likewise.
- (clobber_millicode_symbols): Adjust to suit new hide_symbol.
- * elf32-cris.c (elf_cris_hide_symbol): Add "force_local" param
- and adjust to suit.
- * elf32-mips.c (_bfd_mips_elf_hide_symbol): Likewise, and call
- _bfd_elf_link_hash_hide_symbol rather than duplicating code.
- * elfxx-ia64.c (elfNN_ia64_hash_hide_symbol): Likewise.
-
-2002-01-18 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Test for a
- dynamic function descriptor symbol, not the associated function
- symbol.
-
-2002-01-17 Eric Christopher <echristo@redhat.com>
-
- * elf32-mips.c (mips_elf_calculate_relocation): Fix typo.
-
-2002-01-17 Nick Clifton <nickc@cambridge.redhat.com>
-
- * po/bfd.pot: Regenerate.
- * po/fr.po: Regenerate.
-
-2002-01-17 Alan Modra <amodra@bigpond.net.au>
-
- * elf-bfd.h (elf_backend_data <elf_backend_section_from_bfd_section>):
- Remove "Elf_Internal_Shdr *" param.
- (_bfd_mips_elf_section_from_bfd_section): Ditto.
- * elf32-mips.c (_bfd_mips_elf_section_from_bfd_section): Ditto.
- * elf32-m32r.c (_bfd_m32r_elf_section_from_bfd_section): Ditto.
- * elf32-v850.c (v850_elf_section_from_bfd_section): Ditto.
- * elf64-mmix.c (mmix_elf_section_from_bfd_section): Ditto.
- * elfxx-ia64.c (elfNN_hpux_backend_section_from_bfd_section): Ditto.
- * elf.c (_bfd_elf_section_from_bfd_section): Allow backend
- function to override special sections. Remove hdr arg from
- backend call, and don't loop.
-
-2002-01-16 Eric Christopher <echristo@redhat.com>
-
- * elf32-mips.c (mips_elf_calculate_relocation): Set require_jalxp
- on R_MIPS_26 and target is 16bit. Add R_MIPS16_GPREL to list of
- relocations requiring gp0 and gp.
-
-2002-01-16 Richard Earnshaw <rearnsha@arm.com>
-
- * elf32-arm.h (elf32_arm_merge_private_bfd_data): Handle
- EF_ARM_VFP_FLOAT.
- (elf32_arm_print_private_bfd_data): Likewise.
-
-2002-01-16 Nick Clifton <nickc@cambridge.redhat.com>
-
- * po/tr.po: Import new version.
-
-2002-01-16 Alan Modra <amodra@bigpond.net.au>
-
- * elf64-ppc.c (ppc64_elf_howto_raw): Remove stale FIXMEs.
- (ppc64_elf_reloc_type_lookup): Use proper CTOR reloc.
- (ORI_R0_R0_0): Correct.
-
-2002-01-16 Alan Modra <amodra@bigpond.net.au>
-
- * elflink.c (_bfd_elf_create_dynamic_sections): Don't set SEC_CODE
- when plt_not_loaded.
- * elf64-ppc.c (ppc64_elf_create_dynamic_sections): No need to
- clear .plt SEC_CODE here. Create .stub and correct .glink flags.
- (PLT_INITIAL_ENTRY_SIZE): Set to 24.
- (ppc64_elf_glink_code): Delete.
- (PPC64_ELF_GLINK_SIZE): Delete.
- (ADDIS_R12_R2, STD_R2_40R1, LD_R11_0R12, LD_R2_0R12, MTCTR_R11,
- BCTR, ADDIS_R12_R12_1, LD_R2_40R1, NOP, LI_R0_0, B_DOT, LIS_R0_0,
- ORI_R0_R0_0): Define.
- (PLT_CALL_STUB_SIZE, GLINK_CALL_STUB_SIZE): Define.
- (struct ppc_link_hash_table): Add sstub and plt_overflow.
- (ppc64_elf_link_hash_table_create): Init them.
- (ppc64_elf_check_relocs <R_PPC64_REL24>): Refcount .plt entry.
- Don't copy to shared lib.
- (ppc64_elf_check_relocs): Call bfd_set_error on errors.
- (ppc64_elf_gc_sweep_hook <R_PPC64_REL24>): Sweep plt refcount.
- (allocate_dynrelocs <plt>): Don't change function sym here. Make
- room for .stub and .glink code.
- (ppc64_elf_size_dynamic_sections): Handle .stub. Make entry for
- DT_PPC64_GLINK.
- (ppc64_elf_final_link): Rename to ppc64_elf_set_toc. Don't call
- bfd_elf64_bfd_final_link.
- (bfd_elf64_bfd_final_link): Don't define.
- (ppc64_elf_size_stubs): New.
- (build_plt_stub): New.
- (build_one_stub): New.
- (ppc64_elf_build_stubs): New.
- (ppc64_elf_relocate_section <toc relocs>): Remove assert.
- (ppc64_elf_relocate_section): Don't copy R_PPC64_REL24 relocs.
- (ppc64_elf_finish_dynamic_symbol): Don't build stubs here. Set
- DT_PPC64_GLINK entry. Tweak DT_PLTGOT, DT_JMPREL, DT_PLTRELSZ in
- case output sections not separate. Adjust DT_RELASZ to not
- include plt relocs. Set reserved got entry. Set got and plt
- entry size.
- (elf_backend_got_header_size): Set to 8.
- * elf64-ppc.h: New file.
-
-2002-01-16 Alan Modra <amodra@bigpond.net.au>
-
- * elf32-arm.h (elf32_arm_size_dynamic_sections): When removing
- sections, use bfd_section_list_remove.
- * elf32-i370.c (i370_elf_size_dynamic_sections): Likewise.
- * elflink.h (elf_link_add_object_symbols): When removing all
- sections, use bfd_section_list_clear.
-
-2002-01-15 Nick Clifton <nickc@cambridge.redhat.com>
-
- * po/sv.po: New file: Swedish translation.
- * configure.in (ALL_LINGUAS): Add sv.
- * configure: Regenerate.
-
-2002-01-15 Jakub Jelinek <jakub@redhat.com>
-
- * elflink.h (elf_link_input_bfd): Back out 2002-01-07 change.
- * elf.c (merge_sections_remove_hook): New function.
- (_bfd_elf_merge_sections): Pass it as 3rd argument to
- _bfd_merge_sections.
- * libbfd-in.h (_bfd_merge_sections): Add 3rd argument.
- * libbfd.h: Rebuilt.
- * merge.c (_bfd_merge_sections): Add remove_hook argument.
- Call remove_hook if a SEC_EXCLUDE section is encountered.
-
-2002-01-15 Nick Clifton <nickc@cambridge.redhat.com>
-
- * elf32-xstormy16.c (xstormy16_reloc_map): Add new field 'table'.
- (xstormy16_reloc_map): Initialise new field with correct howto
- table.
- (xstormy16_reloc_type_lookup): Use 'table' field to locate correct
- howto entry.
-
-2002-01-10 Michael Snyder <msnyder@redhat.com>
-
- * elf.c (elfcore_write_prstatus): Use long instead of pid_t;
- (elfcore_write_pstatus): Use long instead of pid_t;
- * elf-bfd.h: Change prototypes to use long instead of pid_t;
-
-2002-01-09 Jason Thorpe <thorpej@wasabisystems.com>
-
- * elf.c: Update copyright years.
- (elfcore_grok_netbsd_note): Use NT_NETBSDCORE_PROCINFO
- and NT_NETBSDCORE_FIRSTMACH. Improve a comment.
-
-2002-01-08 Michael Snyder <msnyder@redhat.com>
-
- Add capability to write corefile note sections, for gdb.
- * elf.c (elfcore_write_note): New function.
- (elfcore_write_prpsinfo): New function.
- (elfcore_write_prstatus): New function.
- (elfcore_write_pstatus): New function.
- (elfcore_write_prfpreg): New function.
- (elfcore_write_prxfpreg): New function.
- * elf-bfd.h: Add prototypes for above functions.
-
-2002-01-08 Alexandre Oliva <aoliva@redhat.com>
-
- * elf.c (elf_fake_sections): Propagate errors from
- elf_backend_fake_section.
-
-2002-01-07 Jason Thorpe <thorpej@wasabisystems.com>
-
- * Makefile.am (BFD32_BACKENDS): Add elf32-sh-nbsd.lo.
- (BFD32_BACKENDS_CFILES): Add elf32-sh-nbsd.c.
- (elf32-sh-nbsd.lo): New rule.
- * Makefile.in: Regenerate.
- * config.bfd (sh*le-*-netbsdelf*): New target.
- (sh*-*-netbsdelf*): New target.
- * configure.in: Include netbsd-core.lo for native sh*-*-netbsd*.
- (bfd_elf32_shnbsd_vec): New vector.
- (bfd_elf32_shlnbsd_vec): New vector.
- * configure: Regenerate.
- * elf32-sh-nbsd.c: New file.
- * targets.c: Update copyright years.
- (_bfd_target_vector): Add bfd_elf32_shlnbsd_vec and
- bfd_elf32_shnbsd_vec.
-
-2002-01-07 Aldy Hernandez <aldyh@redhat.com>
-
- * coff-rs6000.c (READ20): Use bfd_scan_vma.
-
-2002-01-07 Geoffrey Keating <geoffk@redhat.com>
-
- * elflink.h (elf_link_input_bfd): Don't ask for the merged offset
- of a symbol in a section that will be deleted.
-
-2002-01-07 Nick Clifton <nickc@cambridge.redhat.com>
-
- * po/es.po: New file: Spanish translation.
- * configure.in (ALL_LINGUAS): Add es.
- * configure: Regenerate.
-
-2002-01-06 Steve Ellcey <sje@cup.hp.com>
-
- * elfxx-ia64.c (is_unwind_section_name): Add target vector as
- argument so we can handle HP-UX specially.
- (elfNN_ia64_hpux_vec): New for use in is_unwind_section_name.
- (elfNN_hpux_backend_section_from_bfd_section): New for support
- of SHN_IA_64_ANSI_COMMON.
- (elfNN_ia64_relax_section): Add support for SHN_IA_64_ANSI_COMMON.
- (is_unwind_section_name): Add special HP-UX support.
- (elfNN_ia64_section_from_shdr): Add support for more sections.
- (elfNN_ia64_fake_sections): Modify is_unwind_section_name call and
- add support for more sections.
- (elfNN_ia64_additional_program_headers): Modify
- is_unwind_section_name call.
- (elfNN_ia64_modify_segment_map): Remove assumption that there is
- only one unwind section in segment.
-
-2002-01-06 Alan Modra <amodra@bigpond.net.au>
-
- * syms.c (_bfd_generic_make_empty_symbol): New function.
- * libbfd-in.h (_bfd_nosymbols_make_empty_symbol): Define as
- _bfd_generic_make_empty_symbol.
- * libbfd.h: Regenerate.
- * bfd-in2.h: Regenerate.
- * hppabsd-core.c (hppabsd_core_make_empty_symbol): Delete function.
- (hppabsd_core_get_symtab_upper_bound): Don't define.
- (hppabsd_core_get_symtab): Likewise.
- (hppabsd_core_print_symbol): Likewise.
- (hppabsd_core_get_symbol_info): Likewise.
- (hppabsd_core_bfd_is_local_label_name): Likewise.
- (hppabsd_core_get_lineno): Likewise.
- (hppabsd_core_find_nearest_line): Likewise.
- (hppabsd_core_bfd_make_debug_symbol): Likewise.
- (hppabsd_core_read_minisymbols): Likewise.
- (hppabsd_core_minisymbol_to_symbol): Likewise.
- (hppabsd_core_vec): Use BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols).
- Formatting fixes.
- * hpux-core.c: Similarly.
- * irix-core.c: Similarly.
- * osf-core.c: Similarly.
- * sco5-core.c: Similarly.
- * binary.c (binary_make_empty_symbol): Remove function, define as
- _bfd_generic_make_empty_symbol.
- * ihex.c (ihex_make_empty_symbol): Likewise.
- * mmo.c (mmo_make_empty_symbol): Likewise.
- * ppcboot.c (ppcboot_make_empty_symbol): Likewise.
- * srec.c (srec_make_empty_symbol): Likewise.
- * versados.c (versados_make_empty_symbol): Likewise.
- * vms.c (_bfd_vms_make_empty_symbol): Remove.
- (vms_make_empty_symbol): Define as _bfd_generic_make_empty_symbol.
- * vms-gsd.c (_bfd_vms_slurp_gsd): Call bfd_make_empty_symbol
- rather than _bfd_vms_make_empty_symbol.
- * vms-misc.c (new_symbol): Likewise.
-
-2002-01-05 Alan Modra <amodra@bigpond.net.au>
-
- * section.c (bfd_section_init): Remove unnecessary initialisations.
- (bfd_section_list_clear): New function.
- (bfd_section_list_remove, bfd_section_list_insert): New macros.
- (_bfd_strip_section_from_output): Use them.
- * coffcode.h (coff_set_alignment_hook): Likewise.
- * elf32-mips.c (_bfd_mips_elf_final_link): Likewise.
- * elf64-mips.c (mips_elf64_final_link): Likewise.
- * elf64-mmix.c (mmix_elf_final_link): Likewise.
- * sunos.c (sunos_add_dynamic_symbols): Likewise.
- * xcofflink.c (_bfd_xcoff_bfd_final_link): Likewise.
- * bfd-in2.h: Regenerate.
-
- * netbsd-core.c (netbsd_core_file_p): Use bfd_make_section_anyway
- rather than doing our own section handling. Clean up after errors
- with bfd_release and bfd_section_list_clear. Handle unexpected
- flags.
- * aoutf1.h (sunos4_core_file_p): Likewise.
- * aix386-core.c (aix386_core_file_p): Likewise.
- * cisco-core.c (cisco_core_file_validate): Likewise.
- * ptrace-core.c (ptrace_unix_core_file_p): Likewise.
- * trad-core.c (trad_unix_core_file_p): Likewise.
-
- * hppabsd-core.c (hppabsd_core_core_file_p): Clean up after errors
- with bfd_release and bfd_section_list_clear.
- * hpux-core.c (hpux_core_core_file_p): Likewise.
- * irix-core.c (irix_core_core_file_p): Likewise.
- * lynx-core.c (lynx_core_file_p): Likewise.
- * osf-core.c (osf_core_core_file_p): Likewise.
- * rs6000-core.c (rs6000coff_core_p): Likewise.
- * sco5-core.c (sco5_core_file_p): Likewise.
-
- * elf32-mips.c (_bfd_mips_elf_lo16_reloc): Simplify, and perform
- sign extension adjustments without conditionals.
-
-2002-01-04 Jakub Jelinek <jakub@redhat.com>
-
- * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Don't crash if
- CIE at .eh_frame start is removed due to no FDEs referencing it.
-
-2002-01-04 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.bfd (x86_64-*-netbsd*): New target.
- * configure.in (x86_64-*-netbsd*): Set COREFILE
- to netbsd-core.lo.
- * configure: Regenerated.
-
-2002-01-03 Tom Rix <trix@redhat.com>
-
- * xcofflink.c (_bfd_xcoff_bfd_final_link): Update .pad section ordering
- for recent bfd_make_section_anyway change.
-
-2002-01-03 Nick Clifton <nickc@cambridge.redhat.com>
-
- * elf32-arm.h (elf32_arm_final_link_relocate): Handle
- R_ARM_THM_PC11 reloc.
-
-2002-01-02 Nick Clifton <nickc@cambridge.redhat.com>
-
- * configure.in (LINGUAS): Add ja.
- * configure: Regenerate.
- * po/ja.po: Import from translation project's web site.
-
-2002-01-02 Nick Clifton <nickc@cambridge.redhat.com>
-
- * elf32-arm.h (elf32_arm_merge_private_bfd_data): Reformat error
- messages to ease translation into other languages.
+ (elf_backend_can_gc_sections): Define.
-For older changes see ChangeLog-0001
+For older changes see ChangeLog-0203
Local Variables:
mode: change-log
diff --git a/bfd/acinclude.m4 b/bfd/acinclude.m4
index b1bd1be..63b4bf9 100644
--- a/bfd/acinclude.m4
+++ b/bfd/acinclude.m4
@@ -1,7 +1,7 @@
sinclude(../config/accross.m4)
dnl See whether we need to use fopen-bin.h rather than fopen-same.h.
-AC_DEFUN(BFD_BINARY_FOPEN,
+AC_DEFUN([BFD_BINARY_FOPEN],
[AC_REQUIRE([AC_CANONICAL_SYSTEM])
case "${host}" in
changequote(,)dnl
@@ -11,7 +11,7 @@ changequote([,])dnl
esac])dnl
dnl Get a default for CC_FOR_BUILD to put into Makefile.
-AC_DEFUN(BFD_CC_FOR_BUILD,
+AC_DEFUN([BFD_CC_FOR_BUILD],
[# Put a plausible default for CC_FOR_BUILD in Makefile.
if test -z "$CC_FOR_BUILD"; then
if test "x$cross_compiling" = "xno"; then
@@ -44,7 +44,7 @@ fi
AC_SUBST(EXEEXT_FOR_BUILD)])dnl
dnl See whether we need a declaration for a function.
-AC_DEFUN(BFD_NEED_DECLARATION,
+AC_DEFUN([BFD_NEED_DECLARATION],
[AC_MSG_CHECKING([whether $1 must be declared])
AC_CACHE_VAL(bfd_cv_decl_needed_$1,
[AC_TRY_COMPILE([
@@ -73,7 +73,7 @@ fi
dnl Check for existence of a type $1 in sys/procfs.h
-AC_DEFUN(BFD_HAVE_SYS_PROCFS_TYPE,
+AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE],
[AC_MSG_CHECKING([for $1 in sys/procfs.h])
AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_$1,
[AC_TRY_COMPILE([
@@ -93,7 +93,7 @@ AC_DEFUN(BFD_HAVE_SYS_PROCFS_TYPE,
dnl Check for existence of member $2 in type $1 in sys/procfs.h
-AC_DEFUN(BFD_HAVE_SYS_PROCFS_TYPE_MEMBER,
+AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE_MEMBER],
[AC_MSG_CHECKING([for $1.$2 in sys/procfs.h])
AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_member_$1_$2,
[AC_TRY_COMPILE([
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 2afcf7f..f66c29c 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -2356,6 +2356,20 @@ to compensate for the borrow when the low bits are added. */
BFD_RELOC_FRV_GPREL32,
BFD_RELOC_FRV_GPRELHI,
BFD_RELOC_FRV_GPRELLO,
+ BFD_RELOC_FRV_GOT12,
+ BFD_RELOC_FRV_GOTHI,
+ BFD_RELOC_FRV_GOTLO,
+ BFD_RELOC_FRV_FUNCDESC,
+ BFD_RELOC_FRV_FUNCDESC_GOT12,
+ BFD_RELOC_FRV_FUNCDESC_GOTHI,
+ BFD_RELOC_FRV_FUNCDESC_GOTLO,
+ BFD_RELOC_FRV_FUNCDESC_VALUE,
+ BFD_RELOC_FRV_FUNCDESC_GOTOFF12,
+ BFD_RELOC_FRV_FUNCDESC_GOTOFFHI,
+ BFD_RELOC_FRV_FUNCDESC_GOTOFFLO,
+ BFD_RELOC_FRV_GOTOFF12,
+ BFD_RELOC_FRV_GOTOFFHI,
+ BFD_RELOC_FRV_GOTOFFLO,
/* This is a 24bit GOT-relative reloc for the mn10300. */
@@ -2807,6 +2821,22 @@ used when the lower 16 bits are treated as signed. */
add3, load, and store instructions. */
BFD_RELOC_M32R_SDA16,
+/* For PIC. */
+ BFD_RELOC_M32R_GOT24,
+ BFD_RELOC_M32R_26_PLTREL,
+ BFD_RELOC_M32R_COPY,
+ BFD_RELOC_M32R_GLOB_DAT,
+ BFD_RELOC_M32R_JMP_SLOT,
+ BFD_RELOC_M32R_RELATIVE,
+ BFD_RELOC_M32R_GOTOFF,
+ BFD_RELOC_M32R_GOTPC24,
+ BFD_RELOC_M32R_GOT16_HI_ULO,
+ BFD_RELOC_M32R_GOT16_HI_SLO,
+ BFD_RELOC_M32R_GOT16_LO,
+ BFD_RELOC_M32R_GOTPC_HI_ULO,
+ BFD_RELOC_M32R_GOTPC_HI_SLO,
+ BFD_RELOC_M32R_GOTPC_LO,
+
/* This is a 9-bit reloc */
BFD_RELOC_V850_9_PCREL,
@@ -3347,6 +3377,10 @@ value and a 8-bit page number. The symbol address is transformed
to follow the 16K memory bank of 68HC12 (seen as mapped in the window). */
BFD_RELOC_M68HC11_24,
+/* Motorola 68HC12 reloc.
+This is the 5 bits of a value. */
+ BFD_RELOC_M68HC12_5B,
+
/* These relocs are only used within the CRIS assembler. They are not
(at present) written to any object files. */
BFD_RELOC_CRIS_BDISP8,
diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c
index 9b26123..e51d07d 100644
--- a/bfd/coff-arm.c
+++ b/bfd/coff-arm.c
@@ -268,7 +268,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
2,
2,
24,
- FALSE,
+ TRUE,
0,
complain_overflow_dont,
aoutarm_fix_pcrel_26_done,
@@ -276,7 +276,7 @@ static reloc_howto_type aoutarm_std_reloc_howto[] =
FALSE,
0x00ffffff,
0x0,
- FALSE),
+ PCRELOFFSET),
HOWTO (ARM_32,
0,
2,
@@ -1250,7 +1250,8 @@ coff_arm_relocate_section (output_bfd, info, input_bfd, input_section,
when doing a relocatable link. However, we want to convert
ARM_26 to ARM_26D relocs if possible. We return a fake howto in
this case without pcrel_offset set, and adjust the addend to
- compensate. */
+ compensate. 'partial_inplace' is also set, since we want 'done'
+ relocations to be reflected in section's data. */
if (rel->r_type == ARM_26
&& h != NULL
&& info->relocatable
@@ -1269,12 +1270,17 @@ coff_arm_relocate_section (output_bfd, info, input_bfd, input_section,
complain_overflow_signed,
aoutarm_fix_pcrel_26 ,
"ARM_26",
- FALSE,
+ TRUE,
0x00ffffff,
0x00ffffff,
FALSE);
addend -= rel->r_vaddr - input_section->vma;
+#ifdef ARM_WINCE
+ /* FIXME: I don't know why, but the hack is necessary for correct
+ generation of bl's instruction offset. */
+ addend -= 8;
+#endif
howto = &fake_arm26_reloc;
}
@@ -1734,10 +1740,13 @@ coff_arm_relocate_section (output_bfd, info, input_bfd, input_section,
#endif
else
#endif /* THUMBEXTENSION */
- rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
- contents,
- rel->r_vaddr - input_section->vma,
- val, addend);
+ if (info->relocatable && ! howto->partial_inplace)
+ rstat = bfd_reloc_ok;
+ else
+ rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
+ contents,
+ rel->r_vaddr - input_section->vma,
+ val, addend);
#if 1 /* THUMBEXTENSION */
/* FIXME:
Is this the best way to fix up thumb addresses? krk@cygnus.com
diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c
index e9d1964..bd798a6 100644
--- a/bfd/coff-h8300.c
+++ b/bfd/coff-h8300.c
@@ -1,6 +1,6 @@
/* BFD back-end for Renesas H8/300 COFF binaries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003
+ 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
Written by Steve Chamberlain, <sac@cygnus.com>.
@@ -265,8 +265,8 @@ static reloc_howto_type howto_table[] = {
the function vector's entry in the jsr instruction. */
HOWTO (R_MEM_INDIRECT, 0, 0, 8, FALSE, 0, complain_overflow_bitfield, special, "8/indirect", FALSE, 0x000000ff, 0x000000ff, FALSE),
- /* Internal reloc for relaxing. This is created when a 16bit pc-relative
- branch is turned into an 8bit pc-relative branch. */
+ /* Internal reloc for relaxing. This is created when a 16-bit pc-relative
+ branch is turned into an 8-bit pc-relative branch. */
HOWTO (R_PCRWORD_B, 0, 0, 8, TRUE, 0, complain_overflow_bitfield, special, "relaxed bCC:16", FALSE, 0x000000ff, 0x000000ff, FALSE),
HOWTO (R_MOVL1, 0, 2, 32, FALSE, 0, complain_overflow_bitfield,special, "32/24 relaxable move", FALSE, 0xffffffff, 0xffffffff, FALSE),
@@ -458,8 +458,8 @@ h8300_reloc16_estimate (bfd *abfd, asection *input_section, arelent *reloc,
/* Only examine the relocs which might be relaxable. */
switch (reloc->howto->type)
{
- /* This is the 16/24 bit absolute branch which could become an 8 bit
- pc-relative branch. */
+ /* This is the 16-/24-bit absolute branch which could become an
+ 8-bit pc-relative branch. */
case R_JMP1:
case R_JMPL1:
/* Get the address of the target of this branch. */
@@ -547,7 +547,7 @@ h8300_reloc16_estimate (bfd *abfd, asection *input_section, arelent *reloc,
}
break;
- /* This is the 16 bit pc-relative branch which could become an 8 bit
+ /* This is the 16-bit pc-relative branch which could become an 8-bit
pc-relative branch. */
case R_PCRWORD:
/* Get the address of the target of this branch, add one to the value
@@ -575,8 +575,8 @@ h8300_reloc16_estimate (bfd *abfd, asection *input_section, arelent *reloc,
}
break;
- /* This is a 16 bit absolute address in a mov.b insn, which can
- become an 8 bit absolute address if it's in the right range. */
+ /* This is a 16-bit absolute address in a mov.b insn, which can
+ become an 8-bit absolute address if it's in the right range. */
case R_MOV16B1:
/* Get the address of the data referenced by this mov.b insn. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -595,9 +595,9 @@ h8300_reloc16_estimate (bfd *abfd, asection *input_section, arelent *reloc,
}
break;
- /* Similarly for a 24 bit absolute address in a mov.b. Note that
- if we can't relax this into an 8 bit absolute, we'll fall through
- and try to relax it into a 16bit absolute. */
+ /* Similarly for a 24-bit absolute address in a mov.b. Note that
+ if we can't relax this into an 8-bit absolute, we'll fall through
+ and try to relax it into a 16-bit absolute. */
case R_MOV24B1:
/* Get the address of the data referenced by this mov.b insn. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -616,11 +616,11 @@ h8300_reloc16_estimate (bfd *abfd, asection *input_section, arelent *reloc,
break;
}
- /* FALLTHROUGH and try to turn the 32/24 bit reloc into a 16 bit
+ /* FALLTHROUGH and try to turn the 24-/32-bit reloc into a 16-bit
reloc. */
- /* This is a 24/32 bit absolute address in a mov insn, which can
- become an 16 bit absolute address if it's in the right range. */
+ /* This is a 24-/32-bit absolute address in a mov insn, which can
+ become an 16-bit absolute address if it's in the right range. */
case R_MOVL1:
/* Get the address of the data referenced by this mov insn. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -666,10 +666,11 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
bfd_vma value;
bfd_vma dot;
int gap, tmp;
+ unsigned char temp_code;
switch (reloc->howto->type)
{
- /* Generic 8bit pc-relative relocation. */
+ /* Generic 8-bit pc-relative relocation. */
case R_PCRBYTE:
/* Get the address of the target of this branch. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -699,7 +700,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
/* All done. */
break;
- /* Generic 16bit pc-relative relocation. */
+ /* Generic 16-bit pc-relative relocation. */
case R_PCRWORD:
/* Get the address of the target of this branch. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -730,7 +731,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
/* All done. */
break;
- /* Generic 8bit absolute relocation. */
+ /* Generic 8-bit absolute relocation. */
case R_RELBYTE:
/* Get the address of the object referenced by this insn. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -742,7 +743,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
/* All done. */
break;
- /* Various simple 16bit absolute relocations. */
+ /* Various simple 16-bit absolute relocations. */
case R_MOV16B1:
case R_JMP1:
case R_RELWORD:
@@ -752,7 +753,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
src_address += 2;
break;
- /* Various simple 24/32bit absolute relocations. */
+ /* Various simple 24-/32-bit absolute relocations. */
case R_MOV24B1:
case R_MOVL1:
case R_RELLONG:
@@ -763,7 +764,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
src_address += 4;
break;
- /* Another 24/32bit absolute relocation. */
+ /* Another 24-/32-bit absolute relocation. */
case R_JMPL1:
/* Get the address of the target of this branch. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -775,8 +776,15 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
src_address += 4;
break;
- /* A 16bit absolute relocation that was formerly a 24/32bit
- absolute relocation. */
+ /* This is a 24-/32-bit absolute address in one of the following
+ instructions:
+
+ "band", "bclr", "biand", "bild", "bior", "bist", "bixor",
+ "bld", "bnot", "bor", "bset", "bst", "btst", "bxor", and
+ "mov.[bwl]"
+
+ We may relax this into an 16-bit absolute address if it's in
+ the right range. */
case R_MOVL2:
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
value = bfd_h8300_pad_address (abfd, value);
@@ -784,11 +792,12 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
/* Sanity check. */
if (value <= 0x7fff || value >= 0xffff8000u)
{
- /* Insert the 16bit value into the proper location. */
+ /* Insert the 16-bit value into the proper location. */
bfd_put_16 (abfd, value, data + dst_address);
- /* Fix the opcode. For all the move insns, we simply
- need to turn off bit 0x20 in the previous byte. */
+ /* Fix the opcode. For all the instructions that belong to
+ this relaxation, we simply need to turn off bit 0x20 in
+ the previous byte. */
data[dst_address - 1] &= ~0x20;
dst_address += 2;
src_address += 4;
@@ -803,7 +812,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
}
break;
- /* A 16bit absolute branch that is now an 8-bit pc-relative branch. */
+ /* A 16-bit absolute branch that is now an 8-bit pc-relative branch. */
case R_JMP2:
/* Get the address of the target of this branch. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -833,7 +842,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
bfd_put_8 (abfd, 0x55, data + dst_address - 1);
break;
case 0x5a:
- /* jmp ->bra */
+ /* jmp -> bra */
bfd_put_8 (abfd, 0x40, data + dst_address - 1);
break;
@@ -841,7 +850,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
abort ();
}
- /* Write out the 8bit value. */
+ /* Write out the 8-bit value. */
bfd_put_8 (abfd, gap, data + dst_address);
dst_address += 1;
@@ -849,7 +858,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
break;
- /* A 16bit pc-relative branch that is now an 8-bit pc-relative branch. */
+ /* A 16-bit pc-relative branch that is now an 8-bit pc-relative branch. */
case R_PCRWORD_B:
/* Get the address of the target of this branch. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -876,12 +885,15 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
{
case 0x58:
/* bCC:16 -> bCC:8 */
- /* Get the condition code from the original insn. */
+ /* Get the second byte of the original insn, which contains
+ the condition code. */
tmp = data[dst_address - 1];
+
+ /* Compute the fisrt byte of the relaxed instruction. The
+ original sequence 0x58 0xX0 is relaxed to 0x4X, where X
+ represents the condition code. */
tmp &= 0xf0;
tmp >>= 4;
-
- /* Now or in the high nibble of the opcode. */
tmp |= 0x40;
/* Write it. */
@@ -900,13 +912,13 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
/* Output the target. */
bfd_put_8 (abfd, gap, data + dst_address - 1);
- /* We don't advance dst_address -- the 8bit reloc is applied at
+ /* We don't advance dst_address -- the 8-bit reloc is applied at
dst_address - 1, so the next insn should begin at dst_address. */
src_address += 2;
break;
- /* Similarly for a 24bit absolute that is now 8 bits. */
+ /* Similarly for a 24-bit absolute that is now 8 bits. */
case R_JMPL2:
/* Get the address of the target of this branch. */
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
@@ -939,23 +951,52 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
break;
- /* A 16bit absolute mov.b that is now an 8bit absolute mov.b. */
+ /* This is a 16-bit absolute address in one of the following
+ instructions:
+
+ "band", "bclr", "biand", "bild", "bior", "bist", "bixor",
+ "bld", "bnot", "bor", "bset", "bst", "btst", "bxor", and
+ "mov.b"
+
+ We may relax this into an 8-bit absolute address if it's in
+ the right range. */
case R_MOV16B2:
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
- /* Sanity check. */
+ /* All instructions with R_H8_DIR16B2 start with 0x6a. */
if (data[dst_address - 2] != 0x6a)
abort ();
+ temp_code = data[src_address - 1];
+
+ /* If this is a mov.b instruction, clear the lower nibble, which
+ contains the source/destination register number. */
+ if ((temp_code & 0x10) != 0x10)
+ temp_code &= 0xf0;
+
/* Fix up the opcode. */
- switch (data[src_address - 1] & 0xf0)
+ switch (temp_code)
{
case 0x00:
+ /* This is mov.b @aa:16,Rd. */
data[dst_address - 2] = (data[src_address - 1] & 0xf) | 0x20;
break;
case 0x80:
+ /* This is mov.b Rs,@aa:16. */
data[dst_address - 2] = (data[src_address - 1] & 0xf) | 0x30;
break;
+ case 0x18:
+ /* This is a bit-maniputation instruction that stores one
+ bit into memory, one of "bclr", "bist", "bnot", "bset",
+ and "bst". */
+ data[dst_address - 2] = 0x7f;
+ break;
+ case 0x10:
+ /* This is a bit-maniputation instruction that loads one bit
+ from memory, one of "band", "biand", "bild", "bior",
+ "bixor", "bld", "bor", "btst", and "bxor". */
+ data[dst_address - 2] = 0x7e;
+ break;
default:
abort ();
}
@@ -964,23 +1005,52 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
src_address += 2;
break;
- /* Similarly for a 24bit mov.b */
+ /* This is a 24-bit absolute address in one of the following
+ instructions:
+
+ "band", "bclr", "biand", "bild", "bior", "bist", "bixor",
+ "bld", "bnot", "bor", "bset", "bst", "btst", "bxor", and
+ "mov.b"
+
+ We may relax this into an 8-bit absolute address if it's in
+ the right range. */
case R_MOV24B2:
value = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
- /* Sanity check. */
+ /* All instructions with R_MOV24B2 start with 0x6a. */
if (data[dst_address - 2] != 0x6a)
abort ();
+ temp_code = data[src_address - 1];
+
+ /* If this is a mov.b instruction, clear the lower nibble, which
+ contains the source/destination register number. */
+ if ((temp_code & 0x30) != 0x30)
+ temp_code &= 0xf0;
+
/* Fix up the opcode. */
- switch (data[src_address - 1] & 0xf0)
+ switch (temp_code)
{
case 0x20:
+ /* This is mov.b @aa:24/32,Rd. */
data[dst_address - 2] = (data[src_address - 1] & 0xf) | 0x20;
break;
case 0xa0:
+ /* This is mov.b Rs,@aa:24/32. */
data[dst_address - 2] = (data[src_address - 1] & 0xf) | 0x30;
break;
+ case 0x38:
+ /* This is a bit-maniputation instruction that stores one
+ bit into memory, one of "bclr", "bist", "bnot", "bset",
+ and "bst". */
+ data[dst_address - 2] = 0x7f;
+ break;
+ case 0x30:
+ /* This is a bit-maniputation instruction that loads one bit
+ from memory, one of "band", "biand", "bild", "bior",
+ "bixor", "bld", "bor", "btst", and "bxor". */
+ data[dst_address - 2] = 0x7e;
+ break;
default:
abort ();
}
@@ -1025,7 +1095,7 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info,
src_address += 4;
break;
- /* An 8bit memory indirect instruction (jmp/jsr).
+ /* An 8-bit memory indirect instruction (jmp/jsr).
There's several things that need to be done to handle
this relocation.
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index ccac05b..15d9709 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -1064,7 +1064,11 @@ styp_to_sec_flags (abfd, hdr, name, section, flags_ptr)
sec_flags &= ~ SEC_READONLY;
break;
case IMAGE_SCN_MEM_DISCARDABLE:
- sec_flags |= SEC_DEBUGGING;
+ /* The MS PE spec sets the DISCARDABLE flag on .reloc sections
+ but we do not want them to be labelled as debug section, since
+ then strip would remove them. */
+ if (strncmp (name, ".reloc", sizeof ".reloc" - 1) != 0)
+ sec_flags |= SEC_DEBUGGING;
break;
case IMAGE_SCN_MEM_SHARED:
sec_flags |= SEC_SHARED;
diff --git a/bfd/config.bfd b/bfd/config.bfd
index c1ca87e..da8d946 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -329,7 +329,7 @@ case "${targ}" in
targ_defvec=bfd_elf32_fr30_vec
;;
- frv-*-elf)
+ frv-*-elf | frv-*-*linux*)
targ_defvec=bfd_elf32_frv_vec
;;
@@ -597,6 +597,21 @@ case "${targ}" in
targ_defvec=bfd_elf32_iq2000_vec
;;
+ m32r*le-*-linux*)
+ targ_defvec=bfd_elf32_m32rlelin_vec
+ targ_selvecs="bfd_elf32_m32rlin_vec bfd_elf32_m32rlelin_vec"
+ ;;
+
+ m32r*-*-linux*)
+ targ_defvec=bfd_elf32_m32rlin_vec
+ targ_selvecs="bfd_elf32_m32rlin_vec bfd_elf32_m32rlelin_vec"
+ ;;
+
+ m32r*le-*-*)
+ targ_defvec=bfd_elf32_m32rle_vec
+ targ_selvecs="bfd_elf32_m32r_vec bfd_elf32_m32rle_vec"
+ ;;
+
m32r-*-*)
targ_defvec=bfd_elf32_m32r_vec
;;
@@ -636,7 +651,7 @@ case "${targ}" in
targ_defvec=m68kcoff_vec
targ_selvecs="m68kcoff_vec versados_vec ieee_vec aout0_big_vec"
;;
- m68*-*-elf* | m68*-*-sysv4*)
+ m68*-*-elf* | m68*-*-sysv4* | m68*-*-uclinux*)
targ_defvec=bfd_elf32_m68k_vec
targ_selvecs="m68kcoff_vec ieee_vec"
;;
diff --git a/bfd/configure b/bfd/configure
index 42345bb..5704aef 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -6320,6 +6320,9 @@ do
bfd_elf32_littlearm_vec) tb="$tb elfarm-nabi.lo elf32.lo $elf" ;;
bfd_elf32_littlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_m32r_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
+ bfd_elf32_m32rle_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
+ bfd_elf32_m32rlin_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
+ bfd_elf32_m32rlelin_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
bfd_elf32_m68hc11_vec) tb="$tb elf32-m68hc11.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
bfd_elf32_m68hc12_vec) tb="$tb elf32-m68hc12.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
bfd_elf32_m68k_vec) tb="$tb elf32-m68k.lo elf32.lo $elf" ;;
@@ -6579,10 +6582,10 @@ case ${host64}-${target64}-${want64} in
if test -n "$GCC" ; then
bad_64bit_gcc=no;
echo $ac_n "checking for gcc version with buggy 64-bit support""... $ac_c" 1>&6
-echo "configure:6583: checking for gcc version with buggy 64-bit support" >&5
+echo "configure:6586: checking for gcc version with buggy 64-bit support" >&5
# Add more tests for gcc versions with non-working 64-bit support here.
cat > conftest.$ac_ext <<EOF
-#line 6586 "configure"
+#line 6589 "configure"
#include "confdefs.h"
:__GNUC__:__GNUC_MINOR__:__i386__:
EOF
@@ -6628,17 +6631,17 @@ for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6632: checking for $ac_hdr" >&5
+echo "configure:6635: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6637 "configure"
+#line 6640 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6642: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6645: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6667,12 +6670,12 @@ done
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6671: checking for $ac_func" >&5
+echo "configure:6674: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6676 "configure"
+#line 6679 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6695,7 +6698,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6720,7 +6723,7 @@ fi
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:6724: checking for working mmap" >&5
+echo "configure:6727: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6728,7 +6731,7 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 6732 "configure"
+#line 6735 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
@@ -6868,7 +6871,7 @@ main()
}
EOF
-if { (eval echo configure:6872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@@ -6893,12 +6896,12 @@ fi
for ac_func in madvise mprotect
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6897: checking for $ac_func" >&5
+echo "configure:6900: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6902 "configure"
+#line 6905 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6921,7 +6924,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
diff --git a/bfd/configure.in b/bfd/configure.in
index 72c32bd..760bfe3 100644
--- a/bfd/configure.in
+++ b/bfd/configure.in
@@ -631,6 +631,9 @@ do
bfd_elf32_littlearm_vec) tb="$tb elfarm-nabi.lo elf32.lo $elf" ;;
bfd_elf32_littlemips_vec) tb="$tb elf32-mips.lo elfxx-mips.lo elf32.lo $elf ecofflink.lo" ;;
bfd_elf32_m32r_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
+ bfd_elf32_m32rle_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
+ bfd_elf32_m32rlin_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
+ bfd_elf32_m32rlelin_vec) tb="$tb elf32-m32r.lo elf32.lo $elf" ;;
bfd_elf32_m68hc11_vec) tb="$tb elf32-m68hc11.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
bfd_elf32_m68hc12_vec) tb="$tb elf32-m68hc12.lo elf32-m68hc1x.lo elf32.lo $elf" ;;
bfd_elf32_m68k_vec) tb="$tb elf32-m68k.lo elf32.lo $elf" ;;
diff --git a/bfd/doc/ChangeLog b/bfd/doc/ChangeLog
index 3636ed8..3316383 100644
--- a/bfd/doc/ChangeLog
+++ b/bfd/doc/ChangeLog
@@ -1,594 +1,9 @@
-2003-10-15 Andrew Cagney <cagney@redhat.com>
-
- * bfdint.texi (BFD target vector symbols): Rename _get_symtab to
- _canonicalize_symtab.
-
-2003-10-08 David Taylor <dtaylor@emc.com>
-
- * bfd.texinfo: Remove spurious backslash.
-
-2003-07-04 Josh Baratz <baratz@intersystems.com>
-
- * Makefile.am (MKDOC rule): Add $(CFLAGS) in case it contains
- CC_FOR_BUILD specific switches.
- * Makefile.in: Regenerate.
-
-2003-06-29 Alan Modra <amodra@bigpond.net.au>
-
- * chew.c (paramstuff): Don't emit PARAMS.
-
-2003-02-12 Bob Wilson <bob.wilson@acm.org>
-
- * bfd.texinfo: Fix quotes for texinfo. Make section title
- capitalization more consistent. Use @example instead of @lisp.
- Replace FDL appendix with include of fdl.texi.
- * fdl.texi: New file.
-
-2002-11-18 Klee Dienes <kdienes@apple.com>
-
- * Makefile.am (DOCFILES): Add bfdwin.texi, bfdio.texi.
- (PROTOS): Add bfdio.p, bfdwin.p.
- (SRCDOC): Add bfdio.c, bfdwin.c.
- (SRCPROT): Add bfdio.c, bfdwin.c.
- (SRCIPROT): Add bfdio.c, bfdwin.c.
- (LIBBFD_H_DEP): Add bfdio.c, bfdwin.c.
- (BFD_H_DEP): Add bfdio.c, bfdwin.c.
- Add rules for bfdio.texi, bfdwin.text.
- * bfd.texinfo: Include bfdio.texi.
-
-2002-10-14 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.in: Regenerate.
-
-2002-10-11 Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.in: Regenerated.
-
-2002-08-29 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * chew.c (paramstuff, outputdots, perform, bang and usage): Remove
- void from function definitions.
-
-2002-08-13 Alan Modra <amodra@bigpond.net.au>
-
- * header.sed: Strip tabs.
-
-2002-06-08 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am: Fix quote style in last change.
- * Makefile.in: Regenerate.
-
-2002-06-07 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am (libbfd.h): Don't use "echo -n".
- (libcoff.h, bfd.h): Likewise.
- * Makefile.in: Regenerate.
-
-2002-06-06 Lars Brinkhoff <lars@nocrew.org>
-
- * bfdint.texi: Change registry@sco.com to registry@caldera.com.
-
-2002-06-05 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am (libbfd.h): Add "Extracted from.." comment.
- (libcoff.h, bfd.h): Likewise.
- * Makefile.in: Regenerate.
-
-2002-05-25 Alan Modra <amodra@bigpond.net.au>
-
- * chew.c: Use #include "" instead of <> for local header files.
-
-2002-04-20 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.in: Regenerate.
-
-2002-02-11 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.in: Regenerate.
-
-2002-02-01 Alan Modra <amodra@bigpond.net.au>
-
- * chew.c (WORD): Eliminate.
-
-2002-01-31 Ivan Guzvinec <ivang@opencores.org>
-
- * Makefile.in: Regenerate.
-
-2002-01-31 Alan Modra <amodra@bigpond.net.au>
-
- * chew.c (courierize): Don't modify @command params.
-
-2002-01-30 Nick Clifton <nickc@cambridge.redhat.com>
-
- * proto.str (ENUMDOC): Place two spaces between the end of
- the text and the closing comment marker.
-
-2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
-
- * bfdint.texi (BFD target vector miscellaneous): Add
- bfd_target_mmo_flavour.
- * bfd.texinfo (BFD back ends): Add entry for mmo.
- * Makefile.am (DOCFILES): Add mmo.texi.
- (SRCDOC): Add mmo.c.
- (s-mmo, mmo.texi): New rules.
-
-2001-10-29 Kazu Hirata <kazu@hxi.com>
-
- * bfdsumm.texi: Fix a typo.
-
-2001-10-26 Nick Clifton <nickc@cambridge.redhat.com>
-
- * bfd.texinfo: Change footer to refer to FSF. Change subtitle
- to refer to original creation date.
-
-2002-01-26 Hans-Peter Nilsson <hp@bitrange.com>
-
- * Makefile.am (install): Depend on install-info.
- * Makefile.in: Regenerate.
-
-2001-10-03 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.am (BFD_H_DEP): Add ../version.h.
- * Makefile.in: Regenerate.
-
-2001-10-02 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.in: Regenerate.
-
-2001-10-01 Alan Modra <amodra@bigpond.net.au>
-
- * header.sed: New file, adds header to generated files.
- * Makefile.am: Rewrite rules generating libbfd.h, libcoff.h and
- bfd.h, using above. Add missing elf.c dependecy for libbfd.h.
- * Makefile.in: Regenerate.
-
-2001-09-21 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.in: Regenerate.
-
-2001-09-18 Alan Modra <amodra@bigpond.net.au>
-
- * bfdint.texi: Replace reference to bfd_read with bfd_bread.
- Likewise for bfd_write.
-
-2001-07-24 Alan Modra <amodra@bigpond.net.au>
-
- * Makefile.in: Regenerate.
-
-2001-06-21 Hans-Peter Nilsson <hp@axis.com>
-
- * bfdint.texi (BFD relocation functions) <different formats>:
- 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.
-
-2001-01-25 Kazu Hirata <kazu@hxi.com>
-
- * chew.c: Do not output trailing whitespaces in type and
- functionname. Update copyright.
-
-2001-01-24 Kazu Hirata <kazu@hxi.com>
-
- * chew.c: Do not output a trailing whitespace.
-
-2000-11-06 Nick Clifton <nickc@redhat.com>
-
- * bfd.texinfo: Add GNU Free Documentation License.
-
-2000-07-09 Alan Modra <alan@linuxcare.com.au>
-
- * Makefile.in: Regenerate.
-
-2000-07-08 Alan Modra <alan@linuxcare.com.au>
-
- * chew.c (outputdots): Don't add a space before `/*'.
- (courierize): Likewise.
-
-Wed May 24 12:03:25 2000 Hans-Peter Nilsson <hp@axis.com>
-
- * bfdint.texi (BFD ELF processor required): Add paragraph about
- target necessities for readelf.
-
-2000-04-30 Ben Elliston <bje@redhat.com>
-
- * bfdint.texi (BFD generated files): Fix another typo.
-
-2000-04-17 Ben Elliston <bje@redhat.com>
-
- * bfdint.texi (BFD_JUMP_TABLE macros): Fix typo.
-
-2000-04-07 Andrew Cagney <cagney@b1.cygnus.com>
-
- * Makefile.in: Rebuild with current autoconf/automake.
-
-1999-02-04 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in: Rebuild with current autoconf/automake.
-
-1998-07-23 Nick Clifton <nickc@cygnus.com>
-
- * bfdint.texi (BFD ELF processor required): Add paragraph
- describing the necessity to create "include/elf/CPU.h".
-
-1998-05-07 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.am (chew.o): Add -I options for intl srcdir and
- objdir.
- * Makefile.in: Rebuild.
-
-1998-04-27 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdint.texi: New file.
- * Makefile.am (noinst_TEXINFOS): New variable.
- * Makefile.in: Rebuild.
-
-1998-04-13 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in: Rebuild.
-
-1998-04-06 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.am (STAGESTUFF): Remove variable.
- (CLEANFILES): Don't remove $(STAGESTUFF).
- (DISTCLEANFILES, MAINTAINERCLEANFILES): New variables.
- * Makefile.in: Rebuild.
-
-1998-03-27 Ian Lance Taylor <ian@cygnus.com>
-
- * chew.c (skip_white_and_starts): Remove unused declaration.
- (skip_white_and_stars): Add casts to avoid warnings.
- (skip_trailing_newlines, paramstuff, courierize): Likewise.
- (bulletize, do_fancy_stuff, iscommand): Likewise.
- (kill_bogus_lines, nextword, main): Likewise.
- (manglecomments): Comment out.
- (outputdots, kill_bogus_lines): Remove unused local variables.
- (perform, compile): Likewise.
- (courierize): Fully parenthesize expression.
- (copy_past_newline): Declare return value.
- (print): Change printf format string.
- (main): Call usage for an unrecognized option.
-
-1998-02-13 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.am (AUTOMAKE_OPTIONS): Define.
- * Makefile.in: Rebuild.
-
-1998-01-26 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * doc.str (bodytext): Don't output @* at the end.
- * chew.c (kill_bogus_lines): Make sure that a period at the
- beginning is recognized.
- (indent): Don't put indentation at the end.
- (copy_past_newline): Expand tabs.
- * Makefile.am (s-reloc, s-syms): Depend on doc.str.
- * Makefile.in: Rebuild.
-
-1997-10-01 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.am (libbfd.h): Don't use cpu-h8300.c, cpu-i960.c, or
- elfcode.h as input files; they don't contribute anything.
- * Makefile.in: Rebuild.
-
-1997-08-15 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.am (libbfd.h, libcoff.h): Invoke $(MKDOC) as ./$(MKDOC).
- * Makefile.in: Rebuild.
-
-1997-08-01 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.am (CC_FOR_BUILD): Don't set explicitly.
- * Makefile.in: Rebuild.
-
-1997-07-31 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.am: New file, based on old Makefile.in.
- * Makefile.in: Now built with automake.
-
-1997-07-22 Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>
-
- * Makefile.in: Change stamp-* files to s-* files. Use bfdt.texi
- rather than bfd.texi.
- (DOCFILES): Change bfd.texi to bfdt.texi.
- * bfd.texinfo: Include bfdt.texi, not bfd.texi.
-
-1997-06-16 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (CC, CFLAGS): Substitute from configure script.
- From Jeff Makey <jeff@cts.com>.
-
-1997-04-15 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (install-info): Use mkinstalldirs to build
- $(infodir).
-
-1997-04-08 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (install-info): Permit info files to be in srcdir.
- (stamp-*): Add a stamp-X target for each X.texi target.
- (*.texi): Just depend upon stamp-X.
- (clean): Remove stamp-*.
- (distclean): Depend upon mostlyclean. Remove stamp-*. Don't
- remove $(DOCFILES).
-
-1997-04-07 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (distclean): Don't remove *.info files.
-
-1997-02-13 Klaus Kaempf (kkaempf@progis.de)
-
- * makefile.vms: New file.
-
-1996-06-18 Ian Lance Taylor <ian@cygnus.com>
-
- * chew.c (kill_bogus_lines): Reset sl when not at the start of a
- line. From Uwe Ohse <uwe@tirka.gun.de>.
-
-1996-01-30 Ian Lance Taylor <ian@cygnus.com>
-
- From Ronald F. Guilmette <rfg@monkeys.com>:
- * Makefile.in (libbfd.h): Depend upon proto.str.
- (libcoff.h, bfd.h): Likewise.
-
-1995-11-03 Fred Fish <fnf@cygnus.com>
-
- * Makefile.in (SRCDOC, SRCPROT, core.texi, bfd.h): Use corefile.c,
- renamed from core.c.
-
-1995-11-01 Manfred Hollstein KS/EF4A 60/1F/110 #40283 <manfred@lts.sel.alcatel.de>
-
- * chew.c: Include <ctype.h>.
-
-1995-10-06 Ken Raeburn <raeburn@cygnus.com>
-
- Mon Sep 25 22:49:32 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * Makefile.in (Makefile): Only remake this Makefile.
-
-1995-10-04 Ken Raeburn <raeburn@cygnus.com>
-
- * chew.c: Include <stdio.h>.
-
-1995-09-12 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (maintainer-clean): New target.
-
-1995-08-31 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (bfd.h): Add additional #endif at end of bfd.h if
- __cplusplus is defined.
-
-1994-11-29 Doug Evans <dje@canuck.cygnus.com>
-
- * chew.c (write_buffer): New argument `f', all callers changed.
- (stdout, stderr, print, drop, idrop): New forth words.
- * proto.str (COMMENT): New command.
- * doc.str (COMMENT): Likewise.
-
-1994-09-12 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * Makefile.in (DOCFILES): Remove ctor.texi.
- (IPROTOS): Remove ctor.ip.
- (SRCIPROT): Remove $(srcdir)/../ctor.c.
- (ctor.texi): Remove target.
- (libbfd.h): Remove dependency on $(srcdir)/../ctor.c. Remove
- $(MKDOC) run on $(srcdir)/../ctor.c.
- * bfd.texinfo (Constructors): Remove section.
-
-1994-09-02 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * chew.c: Include assert.h. Added prototypes for most functions.
- Changed most uses of int to long. Do bounds checking on the
- stacks. Added comment at the beginning documenting most of the
- intrinsics. Lots of whitespace changes. Re-ordered some
- functions.
- (die, check_range, icheck_range): New functions.
- (strip_trailing_newlines, print_stack_level): New functions.
- (translatecomments): Don't insert tab before "/*".
- (iscommand): Minimum command length is now 4.
- (nextword): Handle some \-sequences.
- (push_addr): Deleted.
- (main): Add new intrinsics strip_trailing_newlines and
- print_stack_level. Complain at end if stack contains more than
- one element, or less.
- (remchar): Make sure the string is not empty before chopping off a
- character.
-
- * doc.str, proto.str: Handle new commands SENUM, ENUM, ENUMX,
- ENUMEQ, ENUMEQX, ENUMDOC.
-
-1994-01-12 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfd.texinfo: Added Linker Functions node.
- * Makefile.in (DOCFILES): Added linker.texi.
- (SRCDOC): Added linker.c.
- (linker.texi): New target.
-
-1994-01-04 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * chew.c: Don't rely on a correct declaration of exit.
- (chew_exit): New function which just calls exit.
- (main): Use it.
-
-1994-01-03 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfd.texinfo: Added Hash Tables node.
- * Makefile.in (DOCFILES): Added hash.texi.
- (SRCDOC): Added hash.c.
- (hash.texi): New target.
-
-1993-12-30 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * Makefile.in: Delete all references to seclet.c, since it's just
- been deleted. Don't mention hash.c, linker.c, or genlink.h yet,
- since they don't contain documentation yet (hint, hint!).
-
-1993-11-05 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * bfd.texinfo: Small cleanups.
-
-1993-11-19 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * Makefile.in (archures.texi): Depends on $(MKDOC).
-
-1993-08-10 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * bfd.texinfo (BFD back end): Don't include elfcode.texi, since
- it's empty now and that triggers a makeinfo bug.
-
-1993-08-09 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * bfd.texinfo (BFD back end): New section on ELF, includes
- elf.texi and elfcode.texi.
- * Makefile.in (DOCFILES): Include elf.texi, elfcode.texi.
- (SRCDOC): Include elfcode.h, elf.c.
- (elf.texi, elfcode.texi): New intermediate targets.
-
-1993-06-24 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * Makefile.in (.c.o, chew.o): Put CFLAGS last.
- * bfdsumm.texi: New file, broken out of bfd.texinfo, to share
- with ld.texinfo.
-
-1993-06-14 david d `zoo' zuhn (zoo at rtl.cygnus.com)
-
- * Makefile.in (install-info): remove parentdir cruft,
-
-1993-06-09 Jim Kingdon (kingdon@cygnus.com)
-
- * Makefile.in (mostlyclean): Remove chew.o.
-
-1993-05-25 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * Makefile.in (libbfd.h): Use elfcode.h, not elf32.c.
-
-1993-05-24 Ken Raeburn (raeburn@cygnus.com)
-
- * chew.c (compile): Add a couple of missing casts.
-
-1993-05-12 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (CC_FOR_BUILD): New variable, define to be $(CC).
- (chew.o, $(MKDOC)): Build using CC_FOR_BUILD rather than CC, since
- it must run on the build machine.
-
-1993-04-07 John Gilmore (gnu@cygnus.com)
-
- * Makefile.in (chew): Don't compile from .c to executable in a
- single step; it puts a temporary .o filename into the executable,
- which makes multi-stage comparisons fail. Compile chew.c to
- chew.o, and link that, which makes identical executables every time.
-
-1993-03-24 david d `zoo' zuhn (zoo at poseidon.cygnus.com)
-
- * Makefile.in: fix typo (bfd.texinfo not bfd.texino)
-
-1993-03-19 Ken Raeburn (raeburn@kr-pc.cygnus.com)
-
- * bfd.texinfo: Since BFD version number has been bumped, do same
- to "version number" on title page, and elsewhere. Should be
- fixed to extract real version number.
-
-1993-03-16 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Add *clean rules.
-
-1993-01-11 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * Makefile.in (libbfd.h): Removed duplicate init.c and libbfd.c.
- Added seclet.c.
- (bfd.h): Added dependency on bfd.c and seclet.c. Added seclet.c
- to build.
-
-1992-12-17 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in: added dvi target, define and use $(TEXI2DVI)
-
-1992-12-03 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * Makefile.in (TEXIDIR): New variable.
- (bfd.dvi): Look for bfd.texinfo in $(srcdir). Generate index.
-
- * bfd.texinfo: Minor doc fixes.
-
-1992-11-05 John Gilmore (gnu@cygnus.com)
-
- Cleanup: Replace all uses of EXFUN in the BFD sources, with PARAMS.
-
- * chew.c (exfunstuff): Eliminate.
- (paramstuff): Replace exfunstuff with function to generate PARAMS.
- * proto.str: Use paramstuff rather than exfunstuff.
-
-1992-08-17 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * chew.c: various patches provided by Howard Chu.
-
-1992-06-19 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in (libbfd.h): Add elf.c as a source of prototypes.
-
-1992-05-11 John Gilmore (gnu at cygnus.com)
-
- * chew.c: exit() should be declared by config files, not by
- portable source code. Its type could be int or void function.
-
-1992-05-04 K. Richard Pixley (rich@rtl.cygnus.com)
-
- * Makefile.in: another CFLAGS correction.
-
-1992-04-28 K. Richard Pixley (rich@rtl.cygnus.com)
-
- * Makefile.in: Do the CFLAGS thing.
-
-1992-04-11 Fred Fish (fnf@cygnus.com)
-
- * Makefile.in (MINUS_G): Add macro and default to -g.
-
-1992-03-06 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * chew.c: now has -w switch turn on warnings
-
-1992-02-26 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
-1991-12-10 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: build chew into the current directory. Complete
- the MKDOC macro transition.
-
-1991-12-10 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * chew.c: don't core dump when can't open file
- * Makefile.in: get proto.str from the right place when built in
- odd directories
-
-1991-12-10 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: infodir belongs in datadir.
-
-1991-12-07 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * chew.c: Much modified
- * proto.str, doc.str: New files for extracting to product
- prototypes and documents respectively.
-
-
-1991-12-06 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: added standards.text support, host/site/target
- inclusion hooks, install using INSTALL_DATA rather than cp,
- don't echo on install.
-
-1991-12-05 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: idestdir and ddestdir go away. Added copyrights
- and shift gpl to v2. Added ChangeLog if it didn't exist. docdir
- and mandir now keyed off datadir by default.
+For older changes see ChangeLog-9103
Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 74
version-control: never
End:
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index 68b3660..c109fa7 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -1,6 +1,6 @@
/* DWARF 2 support.
- Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
+ Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+ 2004 Free Software Foundation, Inc.
Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
(gavin@cygnus.com).
@@ -200,51 +200,6 @@ struct attr_abbrev
#define ATTR_ALLOC_CHUNK 4
#endif
-static unsigned int read_1_byte PARAMS ((bfd *, char *));
-static int read_1_signed_byte PARAMS ((bfd *, char *));
-static unsigned int read_2_bytes PARAMS ((bfd *, char *));
-static unsigned int read_4_bytes PARAMS ((bfd *, char *));
-static bfd_vma read_8_bytes PARAMS ((bfd *, char *));
-static char *read_n_bytes PARAMS ((bfd *, char *, unsigned int));
-static char *read_string PARAMS ((bfd *, char *, unsigned int *));
-static char *read_indirect_string PARAMS ((struct comp_unit *, char *, unsigned int *));
-static unsigned int read_unsigned_leb128
- PARAMS ((bfd *, char *, unsigned int *));
-static int read_signed_leb128
- PARAMS ((bfd *, char *, unsigned int *));
-static bfd_vma read_address PARAMS ((struct comp_unit *, char *));
-static struct abbrev_info *lookup_abbrev
- PARAMS ((unsigned int, struct abbrev_info **));
-static struct abbrev_info **read_abbrevs
- PARAMS ((bfd *, bfd_vma, struct dwarf2_debug *));
-static char *read_attribute
- PARAMS ((struct attribute *, struct attr_abbrev *,
- struct comp_unit *, char *));
-static char *read_attribute_value
- PARAMS ((struct attribute *, unsigned,
- struct comp_unit *, char *));
-static void add_line_info
- PARAMS ((struct line_info_table *, bfd_vma, char *,
- unsigned int, unsigned int, int));
-static char *concat_filename PARAMS ((struct line_info_table *, unsigned int));
-static void arange_add PARAMS ((struct comp_unit *, bfd_vma, bfd_vma));
-static struct line_info_table *decode_line_info
- PARAMS ((struct comp_unit *, struct dwarf2_debug *));
-static bfd_boolean lookup_address_in_line_info_table
- PARAMS ((struct line_info_table *, bfd_vma, struct funcinfo *,
- const char **, unsigned int *));
-static bfd_boolean lookup_address_in_function_table
- PARAMS ((struct funcinfo *, bfd_vma, struct funcinfo **, const char **));
-static bfd_boolean scan_unit_for_functions PARAMS ((struct comp_unit *));
-static struct comp_unit *parse_comp_unit
- PARAMS ((bfd *, struct dwarf2_debug *, bfd_vma, unsigned int));
-static bfd_boolean comp_unit_contains_address
- PARAMS ((struct comp_unit *, bfd_vma));
-static bfd_boolean comp_unit_find_nearest_line
- PARAMS ((struct comp_unit *, bfd_vma, const char **, const char **,
- unsigned int *, struct dwarf2_debug *));
-static asection *find_debug_info PARAMS ((bfd *, asection *));
-
/* VERBATIM
The following function up to the END VERBATIM mark are
copied directly from dwarf2read.c. */
@@ -252,74 +207,39 @@ static asection *find_debug_info PARAMS ((bfd *, asection *));
/* Read dwarf information from a buffer. */
static unsigned int
-read_1_byte (abfd, buf)
- bfd *abfd ATTRIBUTE_UNUSED;
- char *buf;
+read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, char *buf)
{
- return bfd_get_8 (abfd, (bfd_byte *) buf);
+ return bfd_get_8 (abfd, buf);
}
static int
-read_1_signed_byte (abfd, buf)
- bfd *abfd ATTRIBUTE_UNUSED;
- char *buf;
+read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, char *buf)
{
- return bfd_get_signed_8 (abfd, (bfd_byte *) buf);
+ return bfd_get_signed_8 (abfd, buf);
}
static unsigned int
-read_2_bytes (abfd, buf)
- bfd *abfd;
- char *buf;
-{
- return bfd_get_16 (abfd, (bfd_byte *) buf);
-}
-
-#if 0 /* This is not used. */
-
-static int
-read_2_signed_bytes (abfd, buf)
- bfd *abfd;
- char *buf;
+read_2_bytes (bfd *abfd, char *buf)
{
- return bfd_get_signed_16 (abfd, (bfd_byte *) buf);
+ return bfd_get_16 (abfd, buf);
}
-#endif
-
static unsigned int
-read_4_bytes (abfd, buf)
- bfd *abfd;
- char *buf;
+read_4_bytes (bfd *abfd, char *buf)
{
- return bfd_get_32 (abfd, (bfd_byte *) buf);
+ return bfd_get_32 (abfd, buf);
}
-#if 0 /* This is not used. */
-
-static int
-read_4_signed_bytes (abfd, buf)
- bfd *abfd;
- char *buf;
-{
- return bfd_get_signed_32 (abfd, (bfd_byte *) buf);
-}
-
-#endif
-
static bfd_vma
-read_8_bytes (abfd, buf)
- bfd *abfd;
- char *buf;
+read_8_bytes (bfd *abfd, char *buf)
{
- return bfd_get_64 (abfd, (bfd_byte *) buf);
+ return bfd_get_64 (abfd, buf);
}
static char *
-read_n_bytes (abfd, buf, size)
- bfd *abfd ATTRIBUTE_UNUSED;
- char *buf;
- unsigned int size ATTRIBUTE_UNUSED;
+read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
+ char *buf,
+ unsigned int size ATTRIBUTE_UNUSED)
{
/* If the size of a host char is 8 bits, we can return a pointer
to the buffer, otherwise we have to copy the data to a buffer
@@ -328,10 +248,9 @@ read_n_bytes (abfd, buf, size)
}
static char *
-read_string (abfd, buf, bytes_read_ptr)
- bfd *abfd ATTRIBUTE_UNUSED;
- char *buf;
- unsigned int *bytes_read_ptr;
+read_string (bfd *abfd ATTRIBUTE_UNUSED,
+ char *buf,
+ unsigned int *bytes_read_ptr)
{
/* Return a pointer to the embedded string. */
if (*buf == '\0')
@@ -345,10 +264,9 @@ read_string (abfd, buf, bytes_read_ptr)
}
static char *
-read_indirect_string (unit, buf, bytes_read_ptr)
- struct comp_unit* unit;
- char *buf;
- unsigned int *bytes_read_ptr;
+read_indirect_string (struct comp_unit* unit,
+ char *buf,
+ unsigned int *bytes_read_ptr)
{
bfd_vma offset;
struct dwarf2_debug *stash = unit->stash;
@@ -374,12 +292,12 @@ read_indirect_string (unit, buf, bytes_read_ptr)
}
stash->dwarf_str_size = msec->_raw_size;
- stash->dwarf_str_buffer = (char*) bfd_alloc (abfd, msec->_raw_size);
+ stash->dwarf_str_buffer = bfd_alloc (abfd, msec->_raw_size);
if (! stash->dwarf_abbrev_buffer)
return NULL;
if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
- (bfd_vma) 0, msec->_raw_size))
+ 0, msec->_raw_size))
return NULL;
}
@@ -398,10 +316,9 @@ read_indirect_string (unit, buf, bytes_read_ptr)
}
static unsigned int
-read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
- bfd *abfd ATTRIBUTE_UNUSED;
- char *buf;
- unsigned int *bytes_read_ptr;
+read_unsigned_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
+ char *buf,
+ unsigned int *bytes_read_ptr)
{
unsigned int result;
unsigned int num_read;
@@ -414,7 +331,7 @@ read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
do
{
- byte = bfd_get_8 (abfd, (bfd_byte *) buf);
+ byte = bfd_get_8 (abfd, buf);
buf ++;
num_read ++;
result |= ((byte & 0x7f) << shift);
@@ -428,10 +345,9 @@ read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
}
static int
-read_signed_leb128 (abfd, buf, bytes_read_ptr)
- bfd *abfd ATTRIBUTE_UNUSED;
- char *buf;
- unsigned int * bytes_read_ptr;
+read_signed_leb128 (bfd *abfd ATTRIBUTE_UNUSED,
+ char *buf,
+ unsigned int * bytes_read_ptr)
{
int result;
int shift;
@@ -444,7 +360,7 @@ read_signed_leb128 (abfd, buf, bytes_read_ptr)
do
{
- byte = bfd_get_8 (abfd, (bfd_byte *) buf);
+ byte = bfd_get_8 (abfd, buf);
buf ++;
num_read ++;
result |= ((byte & 0x7f) << shift);
@@ -463,18 +379,16 @@ read_signed_leb128 (abfd, buf, bytes_read_ptr)
/* END VERBATIM */
static bfd_vma
-read_address (unit, buf)
- struct comp_unit* unit;
- char *buf;
+read_address (struct comp_unit *unit, char *buf)
{
switch (unit->addr_size)
{
case 8:
- return bfd_get_64 (unit->abfd, (bfd_byte *) buf);
+ return bfd_get_64 (unit->abfd, buf);
case 4:
- return bfd_get_32 (unit->abfd, (bfd_byte *) buf);
+ return bfd_get_32 (unit->abfd, buf);
case 2:
- return bfd_get_16 (unit->abfd, (bfd_byte *) buf);
+ return bfd_get_16 (unit->abfd, buf);
default:
abort ();
}
@@ -483,9 +397,7 @@ read_address (unit, buf)
/* Lookup an abbrev_info structure in the abbrev hash table. */
static struct abbrev_info *
-lookup_abbrev (number,abbrevs)
- unsigned int number;
- struct abbrev_info **abbrevs;
+lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
{
unsigned int hash_number;
struct abbrev_info *abbrev;
@@ -510,10 +422,7 @@ lookup_abbrev (number,abbrevs)
in a hash table. */
static struct abbrev_info**
-read_abbrevs (abfd, offset, stash)
- bfd * abfd;
- bfd_vma offset;
- struct dwarf2_debug *stash;
+read_abbrevs (bfd *abfd, bfd_vma offset, struct dwarf2_debug *stash)
{
struct abbrev_info **abbrevs;
char *abbrev_ptr;
@@ -551,7 +460,7 @@ read_abbrevs (abfd, offset, stash)
}
amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
- abbrevs = (struct abbrev_info**) bfd_zalloc (abfd, amt);
+ abbrevs = bfd_zalloc (abfd, amt);
abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
@@ -561,7 +470,7 @@ read_abbrevs (abfd, offset, stash)
while (abbrev_number)
{
amt = sizeof (struct abbrev_info);
- cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
+ cur_abbrev = bfd_zalloc (abfd, amt);
/* Read in abbrev header. */
cur_abbrev->number = abbrev_number;
@@ -583,8 +492,7 @@ read_abbrevs (abfd, offset, stash)
{
amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
amt *= sizeof (struct attr_abbrev);
- cur_abbrev->attrs = ((struct attr_abbrev *)
- bfd_realloc (cur_abbrev->attrs, amt));
+ cur_abbrev->attrs = bfd_realloc (cur_abbrev->attrs, amt);
if (! cur_abbrev->attrs)
return 0;
}
@@ -625,11 +533,10 @@ read_abbrevs (abfd, offset, stash)
/* Read an attribute value described by an attribute form. */
static char *
-read_attribute_value (attr, form, unit, info_ptr)
- struct attribute *attr;
- unsigned form;
- struct comp_unit *unit;
- char *info_ptr;
+read_attribute_value (struct attribute *attr,
+ unsigned form,
+ struct comp_unit *unit,
+ char *info_ptr)
{
bfd *abfd = unit->abfd;
unsigned int bytes_read;
@@ -648,7 +555,7 @@ read_attribute_value (attr, form, unit, info_ptr)
break;
case DW_FORM_block2:
amt = sizeof (struct dwarf_block);
- blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
+ blk = bfd_alloc (abfd, amt);
blk->size = read_2_bytes (abfd, info_ptr);
info_ptr += 2;
blk->data = read_n_bytes (abfd, info_ptr, blk->size);
@@ -657,7 +564,7 @@ read_attribute_value (attr, form, unit, info_ptr)
break;
case DW_FORM_block4:
amt = sizeof (struct dwarf_block);
- blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
+ blk = bfd_alloc (abfd, amt);
blk->size = read_4_bytes (abfd, info_ptr);
info_ptr += 4;
blk->data = read_n_bytes (abfd, info_ptr, blk->size);
@@ -686,7 +593,7 @@ read_attribute_value (attr, form, unit, info_ptr)
break;
case DW_FORM_block:
amt = sizeof (struct dwarf_block);
- blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
+ blk = bfd_alloc (abfd, amt);
blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
info_ptr += bytes_read;
blk->data = read_n_bytes (abfd, info_ptr, blk->size);
@@ -695,7 +602,7 @@ read_attribute_value (attr, form, unit, info_ptr)
break;
case DW_FORM_block1:
amt = sizeof (struct dwarf_block);
- blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
+ blk = bfd_alloc (abfd, amt);
blk->size = read_1_byte (abfd, info_ptr);
info_ptr += 1;
blk->data = read_n_bytes (abfd, info_ptr, blk->size);
@@ -754,11 +661,10 @@ read_attribute_value (attr, form, unit, info_ptr)
/* Read an attribute described by an abbreviated attribute. */
static char *
-read_attribute (attr, abbrev, unit, info_ptr)
- struct attribute *attr;
- struct attr_abbrev *abbrev;
- struct comp_unit *unit;
- char *info_ptr;
+read_attribute (struct attribute *attr,
+ struct attr_abbrev *abbrev,
+ struct comp_unit *unit,
+ char *info_ptr)
{
attr->name = abbrev->name;
info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
@@ -814,16 +720,15 @@ struct funcinfo
line_info->prev_line always accesses an equal or smaller VMA. */
static void
-add_line_info (table, address, filename, line, column, end_sequence)
- struct line_info_table* table;
- bfd_vma address;
- char* filename;
- unsigned int line;
- unsigned int column;
- int end_sequence;
+add_line_info (struct line_info_table *table,
+ bfd_vma address,
+ char *filename,
+ unsigned int line,
+ unsigned int column,
+ int end_sequence)
{
bfd_size_type amt = sizeof (struct line_info);
- struct line_info* info = (struct line_info*) bfd_alloc (table->abfd, amt);
+ struct line_info* info = bfd_alloc (table->abfd, amt);
/* Find the correct location for 'info'. Normally we will receive
new line_info data 1) in order and 2) with increasing VMAs.
@@ -912,9 +817,7 @@ add_line_info (table, address, filename, line, column, end_sequence)
responsibility to free it. */
static char *
-concat_filename (table, file)
- struct line_info_table* table;
- unsigned int file;
+concat_filename (struct line_info_table *table, unsigned int file)
{
char* filename;
@@ -951,10 +854,7 @@ concat_filename (table, file)
}
static void
-arange_add (unit, low_pc, high_pc)
- struct comp_unit *unit;
- bfd_vma low_pc;
- bfd_vma high_pc;
+arange_add (struct comp_unit *unit, bfd_vma low_pc, bfd_vma high_pc)
{
struct arange *arange;
@@ -987,8 +887,7 @@ arange_add (unit, low_pc, high_pc)
}
/* Need to allocate a new arange and insert it into the arange list. */
- arange = (struct arange *)
- bfd_zalloc (unit->abfd, (bfd_size_type) sizeof (*arange));
+ arange = bfd_zalloc (unit->abfd, sizeof (*arange));
arange->low = low_pc;
arange->high = high_pc;
@@ -999,9 +898,7 @@ arange_add (unit, low_pc, high_pc)
/* Decode the line number information for UNIT. */
static struct line_info_table*
-decode_line_info (unit, stash)
- struct comp_unit *unit;
- struct dwarf2_debug *stash;
+decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
{
bfd *abfd = unit->abfd;
struct line_info_table* table;
@@ -1044,7 +941,7 @@ decode_line_info (unit, stash)
}
amt = sizeof (struct line_info_table);
- table = (struct line_info_table*) bfd_alloc (abfd, amt);
+ table = bfd_alloc (abfd, amt);
table->abfd = abfd;
table->comp_dir = unit->comp_dir;
@@ -1096,7 +993,7 @@ decode_line_info (unit, stash)
lh.opcode_base = read_1_byte (abfd, line_ptr);
line_ptr += 1;
amt = lh.opcode_base * sizeof (unsigned char);
- lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
+ lh.standard_opcode_lengths = bfd_alloc (abfd, amt);
lh.standard_opcode_lengths[0] = 1;
@@ -1115,7 +1012,7 @@ decode_line_info (unit, stash)
{
amt = table->num_dirs + DIR_ALLOC_CHUNK;
amt *= sizeof (char *);
- table->dirs = (char **) bfd_realloc (table->dirs, amt);
+ table->dirs = bfd_realloc (table->dirs, amt);
if (! table->dirs)
return 0;
}
@@ -1134,7 +1031,7 @@ decode_line_info (unit, stash)
{
amt = table->num_files + FILE_ALLOC_CHUNK;
amt *= sizeof (struct fileinfo);
- table->files = (struct fileinfo *) bfd_realloc (table->files, amt);
+ table->files = bfd_realloc (table->files, amt);
if (! table->files)
return 0;
}
@@ -1225,8 +1122,7 @@ decode_line_info (unit, stash)
{
amt = table->num_files + FILE_ALLOC_CHUNK;
amt *= sizeof (struct fileinfo);
- table->files =
- (struct fileinfo *) bfd_realloc (table->files, amt);
+ table->files = bfd_realloc (table->files, amt);
if (! table->files)
return 0;
}
@@ -1322,13 +1218,11 @@ decode_line_info (unit, stash)
LINENUMBER_PTR, are pointers to the objects to be filled in. */
static bfd_boolean
-lookup_address_in_line_info_table (table, addr, function, filename_ptr,
- linenumber_ptr)
- struct line_info_table* table;
- bfd_vma addr;
- struct funcinfo *function;
- const char **filename_ptr;
- unsigned int *linenumber_ptr;
+lookup_address_in_line_info_table (struct line_info_table *table,
+ bfd_vma addr,
+ struct funcinfo *function,
+ const char **filename_ptr,
+ unsigned int *linenumber_ptr)
{
/* Note: table->last_line should be a descendingly sorted list. */
struct line_info* next_line = table->last_line;
@@ -1401,12 +1295,10 @@ lookup_address_in_line_info_table (table, addr, function, filename_ptr,
/* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE. */
static bfd_boolean
-lookup_address_in_function_table (table, addr, function_ptr,
- functionname_ptr)
- struct funcinfo* table;
- bfd_vma addr;
- struct funcinfo** function_ptr;
- const char **functionname_ptr;
+lookup_address_in_function_table (struct funcinfo *table,
+ bfd_vma addr,
+ struct funcinfo **function_ptr,
+ const char **functionname_ptr)
{
struct funcinfo* each_func;
@@ -1431,8 +1323,7 @@ lookup_address_in_function_table (table, addr, function_ptr,
to the function table. */
static bfd_boolean
-scan_unit_for_functions (unit)
- struct comp_unit *unit;
+scan_unit_for_functions (struct comp_unit *unit)
{
bfd *abfd = unit->abfd;
char *info_ptr = unit->first_child_die_ptr;
@@ -1467,7 +1358,7 @@ scan_unit_for_functions (unit)
if (abbrev->tag == DW_TAG_subprogram)
{
bfd_size_type amt = sizeof (struct funcinfo);
- func = (struct funcinfo *) bfd_zalloc (abfd, amt);
+ func = bfd_zalloc (abfd, amt);
func->prev_func = unit->function_table;
unit->function_table = func;
}
@@ -1538,11 +1429,10 @@ scan_unit_for_functions (unit)
to get to the line number information for the compilation unit. */
static struct comp_unit *
-parse_comp_unit (abfd, stash, unit_length, offset_size)
- bfd* abfd;
- struct dwarf2_debug *stash;
- bfd_vma unit_length;
- unsigned int offset_size;
+parse_comp_unit (bfd *abfd,
+ struct dwarf2_debug *stash,
+ bfd_vma unit_length,
+ unsigned int offset_size)
{
struct comp_unit* unit;
unsigned int version;
@@ -1615,7 +1505,7 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
}
amt = sizeof (struct comp_unit);
- unit = (struct comp_unit*) bfd_zalloc (abfd, amt);
+ unit = bfd_zalloc (abfd, amt);
unit->abfd = abfd;
unit->addr_size = addr_size;
unit->offset_size = offset_size;
@@ -1655,7 +1545,7 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
{
/* Irix 6.2 native cc prepends <machine>.: to the compilation
directory, get rid of it. */
- char *cp = (char*) strchr (comp_dir, ':');
+ char *cp = strchr (comp_dir, ':');
if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
comp_dir = cp + 1;
@@ -1676,9 +1566,7 @@ parse_comp_unit (abfd, stash, unit_length, offset_size)
/* Return TRUE if UNIT contains the address given by ADDR. */
static bfd_boolean
-comp_unit_contains_address (unit, addr)
- struct comp_unit* unit;
- bfd_vma addr;
+comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
{
struct arange *arange;
@@ -1706,14 +1594,12 @@ comp_unit_contains_address (unit, addr)
FALSE otherwise. */
static bfd_boolean
-comp_unit_find_nearest_line (unit, addr, filename_ptr, functionname_ptr,
- linenumber_ptr, stash)
- struct comp_unit* unit;
- bfd_vma addr;
- const char **filename_ptr;
- const char **functionname_ptr;
- unsigned int *linenumber_ptr;
- struct dwarf2_debug *stash;
+comp_unit_find_nearest_line (struct comp_unit *unit,
+ bfd_vma addr,
+ const char **filename_ptr,
+ const char **functionname_ptr,
+ unsigned int *linenumber_ptr,
+ struct dwarf2_debug *stash)
{
bfd_boolean line_p;
bfd_boolean func_p;
@@ -1768,9 +1654,7 @@ comp_unit_find_nearest_line (unit, addr, filename_ptr, functionname_ptr,
#define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
static asection *
-find_debug_info (abfd, after_sec)
- bfd * abfd;
- asection * after_sec;
+find_debug_info (bfd *abfd, asection *after_sec)
{
asection * msec;
@@ -1800,18 +1684,15 @@ find_debug_info (abfd, after_sec)
used. */
bfd_boolean
-_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
- filename_ptr, functionname_ptr,
- linenumber_ptr, addr_size, pinfo)
- bfd *abfd;
- asection *section;
- asymbol **symbols;
- bfd_vma offset;
- const char **filename_ptr;
- const char **functionname_ptr;
- unsigned int *linenumber_ptr;
- unsigned int addr_size;
- PTR *pinfo;
+_bfd_dwarf2_find_nearest_line (bfd *abfd,
+ asection *section,
+ asymbol **symbols,
+ bfd_vma offset,
+ const char **filename_ptr,
+ const char **functionname_ptr,
+ unsigned int *linenumber_ptr,
+ unsigned int addr_size,
+ void **pinfo)
{
/* Read each compilation unit from the section .debug_info, and check
to see if it contains the address we are searching for. If yes,
@@ -1821,7 +1702,7 @@ _bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
We keep a list of all the previously read compilation units, and
a pointer to the next un-read compilation unit. Check the
previously read units before reading more. */
- struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
+ struct dwarf2_debug *stash = *pinfo;
/* What address are we looking for? */
bfd_vma addr = offset + section->vma;
@@ -1845,11 +1726,11 @@ _bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
asection *msec;
bfd_size_type amt = sizeof (struct dwarf2_debug);
- stash = (struct dwarf2_debug*) bfd_zalloc (abfd, amt);
+ stash = bfd_zalloc (abfd, amt);
if (! stash)
return FALSE;
- *pinfo = (PTR) stash;
+ *pinfo = stash;
msec = find_debug_info (abfd, NULL);
if (! msec)
@@ -1866,7 +1747,7 @@ _bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
total_size += msec->_raw_size;
- stash->info_ptr = (char *) bfd_alloc (abfd, total_size);
+ stash->info_ptr = bfd_alloc (abfd, total_size);
if (stash->info_ptr == NULL)
return FALSE;
diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h
index d42eb27..7c284c1 100644
--- a/bfd/elf32-arm.h
+++ b/bfd/elf32-arm.h
@@ -205,8 +205,6 @@ struct elf32_arm_relocs_copied
asection * section;
/* Number of relocs copied in this section. */
bfd_size_type count;
- /* Number of relocs copied in this section. */
- bfd_size_type pc_count;
};
/* Arm ELF linker hash entry. */
@@ -383,7 +381,6 @@ elf32_arm_copy_indirect_symbol (const struct elf_backend_data *bed,
for (q = edir->relocs_copied; q != NULL; q = q->next)
if (q->section == p->section)
{
- q->pc_count += p->pc_count;
q->count += p->count;
*pp = p->next;
break;
@@ -1307,21 +1304,44 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
#ifndef OLD_ARM_ABI
case R_ARM_XPC25:
#endif
+ case R_ARM_PLT32:
/* r_symndx will be zero only for relocs against symbols
from removed linkonce sections, or sections discarded by
a linker script. */
if (r_symndx == 0)
return bfd_reloc_ok;
+ /* Handle relocations which should use the PLT entry. ABS32/REL32
+ will use the symbol's value, which may point to a PLT entry, but we
+ don't need to handle that here. If we created a PLT entry, all
+ branches in this object should go to it. */
+ if ((r_type != R_ARM_ABS32 && r_type != R_ARM_REL32)
+ && h != NULL
+ && splt != NULL
+ && h->plt.offset != (bfd_vma) -1)
+ {
+ /* If we've created a .plt section, and assigned a PLT entry to
+ this function, it should not be known to bind locally. If
+ it were, we would have cleared the PLT entry. */
+ BFD_ASSERT (!SYMBOL_CALLS_LOCAL (info, h));
+
+ value = (splt->output_section->vma
+ + splt->output_offset
+ + h->plt.offset);
+ return _bfd_final_link_relocate (howto, input_bfd, input_section,
+ contents, rel->r_offset, value,
+ (bfd_vma) 0);
+ }
+
/* When generating a shared object, these relocations are copied
into the output file to be resolved at run time. */
- if ((info->shared
- && (input_section->flags & SEC_ALLOC)
- && (h == NULL
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
- || h->root.type != bfd_link_hash_undefweak)
- && (r_type != R_ARM_PC24
- || !SYMBOL_CALLS_LOCAL (info, h))))
+ if (info->shared
+ && (input_section->flags & SEC_ALLOC)
+ && (h == NULL
+ || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+ || h->root.type != bfd_link_hash_undefweak)
+ && r_type != R_ARM_PC24
+ && r_type != R_ARM_PLT32)
{
Elf_Internal_Rela outrel;
bfd_byte *loc;
@@ -1364,8 +1384,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
memset (&outrel, 0, sizeof outrel);
else if (h != NULL
&& h->dynindx != -1
- && (r_type == R_ARM_PC24
- || !info->shared
+ && (!info->shared
|| !info->symbolic
|| (h->elf_link_hash_flags
& ELF_LINK_HASH_DEF_REGULAR) == 0))
@@ -1397,6 +1416,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
case R_ARM_XPC25: /* Arm BLX instruction. */
#endif
case R_ARM_PC24: /* Arm B/BL instruction */
+ case R_ARM_PLT32:
#ifndef OLD_ARM_ABI
if (r_type == R_ARM_XPC25)
{
@@ -1869,37 +1889,6 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
contents, rel->r_offset, value,
(bfd_vma) 0);
- case R_ARM_PLT32:
- /* Relocation is to the entry for this symbol in the
- procedure linkage table. */
-
- /* Resolve a PLT32 reloc against a local symbol directly,
- without using the procedure linkage table. */
- if (h == NULL)
- return _bfd_final_link_relocate (howto, input_bfd, input_section,
- contents, rel->r_offset, value,
- (bfd_vma) 0);
-
- if (h->plt.offset == (bfd_vma) -1
- || globals->splt == NULL)
- /* We didn't make a PLT entry for this symbol. This
- happens when statically linking PIC code, or when
- using -Bsymbolic. */
- return _bfd_final_link_relocate (howto, input_bfd, input_section,
- contents, rel->r_offset, value,
- (bfd_vma) 0);
-
- BFD_ASSERT(splt != NULL);
- if (splt == NULL)
- return bfd_reloc_notsupported;
-
- value = (splt->output_section->vma
- + splt->output_offset
- + h->plt.offset);
- return _bfd_final_link_relocate (howto, input_bfd, input_section,
- contents, rel->r_offset, value,
- (bfd_vma) 0);
-
case R_ARM_SBREL32:
return bfd_reloc_notsupported;
@@ -2808,6 +2797,7 @@ elf32_arm_gc_sweep_hook (abfd, info, sec, relocs)
case R_ARM_ABS32:
case R_ARM_REL32:
case R_ARM_PC24:
+ case R_ARM_PLT32:
r_symndx = ELF32_R_SYM (rel->r_info);
if (r_symndx >= symtab_hdr->sh_info)
{
@@ -2817,31 +2807,24 @@ elf32_arm_gc_sweep_hook (abfd, info, sec, relocs)
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
- if (!info->shared && h->plt.refcount > 0)
+ if (h->plt.refcount > 0)
h->plt.refcount -= 1;
- eh = (struct elf32_arm_link_hash_entry *) h;
-
- for (pp = &eh->relocs_copied; (p = *pp) != NULL; pp = &p->next)
- if (p->section == sec)
- {
- if (ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
- p->pc_count -= 1;
- p->count -= 1;
- if (p->count == 0)
- *pp = p->next;
- break;
- }
- }
- break;
+ if (ELF32_R_TYPE (rel->r_info) == R_ARM_ABS32
+ || ELF32_R_TYPE (rel->r_info) == R_ARM_REL32)
+ {
+ eh = (struct elf32_arm_link_hash_entry *) h;
- case R_ARM_PLT32:
- r_symndx = ELF32_R_SYM (rel->r_info);
- if (r_symndx >= symtab_hdr->sh_info)
- {
- h = sym_hashes[r_symndx - symtab_hdr->sh_info];
- if (h->plt.refcount > 0)
- h->plt.refcount -= 1;
+ for (pp = &eh->relocs_copied; (p = *pp) != NULL;
+ pp = &p->next)
+ if (p->section == sec)
+ {
+ p->count -= 1;
+ if (p->count == 0)
+ *pp = p->next;
+ break;
+ }
+ }
}
break;
@@ -2902,23 +2885,6 @@ elf32_arm_check_relocs (abfd, info, sec, relocs)
switch (ELF32_R_TYPE (rel->r_info))
{
- case R_ARM_PLT32:
- /* This symbol requires a procedure linkage table entry. We
- actually build the entry in adjust_dynamic_symbol,
- because this might be a case of linking PIC code which is
- never referenced by a dynamic object, in which case we
- don't need to generate a procedure linkage table entry
- after all. */
-
- /* If this is a local symbol, we resolve it directly without
- creating a procedure linkage table entry. */
- if (h == NULL)
- continue;
-
- h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
- h->plt.refcount++;
- break;
-
case R_ARM_GOT32:
/* This symbol requires a global offset table entry. */
if (h != NULL)
@@ -2961,7 +2927,8 @@ elf32_arm_check_relocs (abfd, info, sec, relocs)
case R_ARM_ABS32:
case R_ARM_REL32:
case R_ARM_PC24:
- if (h != NULL && !info->shared)
+ case R_ARM_PLT32:
+ if (h != NULL)
{
/* If this reloc is in a read-only section, we might
need a copy reloc. We can't check reliably at this
@@ -2969,10 +2936,19 @@ elf32_arm_check_relocs (abfd, info, sec, relocs)
sections have not yet been mapped to output sections.
Tentatively set the flag for now, and correct in
adjust_dynamic_symbol. */
- h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
-
+ if (!info->shared)
+ h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
+
/* We may need a .plt entry if the function this reloc
- refers to is in a shared lib. */
+ refers to is in a different object. We can't tell for
+ sure yet, because something later might force the
+ symbol local. */
+ if (ELF32_R_TYPE (rel->r_info) == R_ARM_PC24
+ || ELF32_R_TYPE (rel->r_info) == R_ARM_PLT32)
+ h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
+
+ /* If we create a PLT entry, this relocation will reference
+ it, even if it's an ABS32 relocation. */
h->plt.refcount += 1;
}
@@ -2990,7 +2966,8 @@ elf32_arm_check_relocs (abfd, info, sec, relocs)
relocs_copied field of the hash table entry. */
if (info->shared
&& (sec->flags & SEC_ALLOC) != 0
- && (ELF32_R_TYPE (rel->r_info) != R_ARM_PC24
+ && ((ELF32_R_TYPE (rel->r_info) != R_ARM_PC24
+ && ELF32_R_TYPE (rel->r_info) != R_ARM_PLT32)
|| (h != NULL
&& (! info->symbolic
|| (h->elf_link_hash_flags
@@ -3068,12 +3045,11 @@ elf32_arm_check_relocs (abfd, info, sec, relocs)
*head = p;
p->section = sec;
p->count = 0;
- p->pc_count = 0;
}
- p->count += 1;
- if (ELF32_R_TYPE (rel->r_info) == R_ARM_PC24)
- p->pc_count += 1;
+ if (ELF32_R_TYPE (rel->r_info) == R_ARM_ABS32
+ || ELF32_R_TYPE (rel->r_info) == R_ARM_REL32)
+ p->count += 1;
}
break;
@@ -3348,7 +3324,7 @@ allocate_dynrelocs (h, inf)
}
if (info->shared
- || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
+ || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
{
asection *s = htab->splt;
@@ -3432,29 +3408,8 @@ allocate_dynrelocs (h, inf)
if (info->shared)
{
- /* The only reloc that uses pc_count is R_ARM_PC24, which will
- appear on a call or on something like ".long foo - .". We
- want calls to protected symbols to resolve directly to the
- function rather than going via the plt. If people want
- function pointer comparisons to work as expected then they
- should avoid writing assembly like ".long foo - .". */
- if (SYMBOL_CALLS_LOCAL (info, h))
- {
- struct elf32_arm_relocs_copied **pp;
-
- for (pp = &eh->relocs_copied; (p = *pp) != NULL; )
- {
- p->count -= p->pc_count;
- p->pc_count = 0;
- if (p->count == 0)
- *pp = p->next;
- else
- pp = &p->next;
- }
- }
-
- /* Also discard relocs on undefined weak syms with non-default
- visibility. */
+ /* Discard relocs on undefined weak syms with non-default
+ visibility. */
if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
&& h->root.type == bfd_link_hash_undefweak)
eh->relocs_copied = NULL;
diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c
index 2c63474..e2a51f6 100644
--- a/bfd/elf32-cris.c
+++ b/bfd/elf32-cris.c
@@ -1770,26 +1770,27 @@ cris_elf_gc_sweep_hook (abfd, info, sec, relocs)
struct elf_link_hash_entry **sym_hashes;
bfd_signed_vma *local_got_refcounts;
const Elf_Internal_Rela *rel, *relend;
- unsigned long r_symndx;
- struct elf_link_hash_entry *h;
bfd *dynobj;
asection *sgot;
asection *srelgot;
- symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
- sym_hashes = elf_sym_hashes (abfd);
- local_got_refcounts = elf_local_got_refcounts (abfd);
-
dynobj = elf_hash_table (info)->dynobj;
if (dynobj == NULL)
return TRUE;
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ local_got_refcounts = elf_local_got_refcounts (abfd);
+
sgot = bfd_get_section_by_name (dynobj, ".got");
srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
relend = relocs + sec->reloc_count;
for (rel = relocs; rel < relend; rel++)
{
+ unsigned long r_symndx;
+ struct elf_link_hash_entry *h;
+
switch (ELF32_R_TYPE (rel->r_info))
{
case R_CRIS_16_GOT:
diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c
index 5157f40..016f233 100644
--- a/bfd/elf32-frv.c
+++ b/bfd/elf32-frv.c
@@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/frv.h"
+#include "hashtab.h"
/* Forward declarations. */
static bfd_reloc_status_type elf32_frv_relocate_lo16
@@ -236,6 +237,229 @@ static reloc_howto_type elf32_frv_howto_table [] =
0xffff, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
+
+ /* A 12-bit signed operand with the GOT offset for the address of
+ the symbol. */
+ HOWTO (R_FRV_GOT12, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_GOT12", /* name */
+ FALSE, /* partial_inplace */
+ 0xfff, /* src_mask */
+ 0xfff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The upper 16 bits of the GOT offset for the address of the
+ symbol. */
+ HOWTO (R_FRV_GOTHI, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_GOTHI", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The lower 16 bits of the GOT offset for the address of the
+ symbol. */
+ HOWTO (R_FRV_GOTLO, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_GOTLO", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The 32-bit address of the canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* A 12-bit signed operand with the GOT offset for the address of
+ canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC_GOT12, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_GOT12", /* name */
+ FALSE, /* partial_inplace */
+ 0xfff, /* src_mask */
+ 0xfff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The upper 16 bits of the GOT offset for the address of the
+ canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC_GOTHI, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_GOTHI", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The lower 16 bits of the GOT offset for the address of the
+ canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC_GOTLO, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_GOTLO", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The 32-bit address of the canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC_VALUE, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_VALUE", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* A 12-bit signed operand with the GOT offset for the address of
+ canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC_GOTOFF12, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_GOTOFF12", /* name */
+ FALSE, /* partial_inplace */
+ 0xfff, /* src_mask */
+ 0xfff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The upper 16 bits of the GOT offset for the address of the
+ canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC_GOTOFFHI, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_GOTOFFHI", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The lower 16 bits of the GOT offset for the address of the
+ canonical descriptor of a function. */
+ HOWTO (R_FRV_FUNCDESC_GOTOFFLO, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_GOTOFFLO", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* A 12-bit signed operand with the GOT offset for the address of
+ the symbol. */
+ HOWTO (R_FRV_GOTOFF12, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 12, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_GOTOFF12", /* name */
+ FALSE, /* partial_inplace */
+ 0xfff, /* src_mask */
+ 0xfff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The upper 16 bits of the GOT offset for the address of the
+ symbol. */
+ HOWTO (R_FRV_GOTOFFHI, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_GOTOFFHI", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* The lower 16 bits of the GOT offset for the address of the
+ symbol. */
+ HOWTO (R_FRV_GOTOFFLO, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_GOTOFFLO", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
};
/* GNU extension to record C++ vtable hierarchy. */
@@ -269,6 +493,54 @@ static reloc_howto_type elf32_frv_vtentry_howto =
0, /* src_mask */
0, /* dst_mask */
FALSE); /* pcrel_offset */
+
+/* The following 3 relocations are REL. The only difference to the
+ entries in the table above are that partial_inplace is TRUE. */
+static reloc_howto_type elf32_frv_rel_32_howto =
+ HOWTO (R_FRV_32, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_32", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE); /* pcrel_offset */
+
+static reloc_howto_type elf32_frv_rel_funcdesc_howto =
+ HOWTO (R_FRV_FUNCDESC, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE); /* pcrel_offset */
+
+static reloc_howto_type elf32_frv_rel_funcdesc_value_howto =
+ HOWTO (R_FRV_FUNCDESC_VALUE, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 64, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_FRV_FUNCDESC_VALUE", /* name */
+ TRUE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE); /* pcrel_offset */
+
/* Map BFD reloc types to FRV ELF reloc types. */
#if 0
@@ -291,11 +563,743 @@ static const struct frv_reloc_map frv_reloc_map [] =
{ BFD_RELOC_FRV_GPREL32, R_FRV_GPREL32 },
{ BFD_RELOC_FRV_GPRELHI, R_FRV_GPRELHI },
{ BFD_RELOC_FRV_GPRELLO, R_FRV_GPRELLO },
+ { BFD_RELOC_FRV_GOT12, R_FRV_GOT12 },
+ { BFD_RELOC_FRV_GOTHI, R_FRV_GOTHI },
+ { BFD_RELOC_FRV_GOTLO, R_FRV_GOTLO },
+ { BFD_RELOC_FRV_FUNCDESC, R_FRV_FUNCDESC },
+ { BFD_RELOC_FRV_FUNCDESC_GOT12, R_FRV_FUNCDESC_GOT12 },
+ { BFD_RELOC_FRV_FUNCDESC_GOTHI, R_FRV_FUNCDESC_GOTHI },
+ { BFD_RELOC_FRV_FUNCDESC_GOTLO, R_FRV_FUNCDESC_GOTLO },
+ { BFD_RELOC_FRV_FUNCDESC_VALUE, R_FRV_FUNCDESC_VALUE },
+ { BFD_RELOC_FRV_FUNCDESC_GOTOFF12, R_FRV_FUNCDESC_GOTOFF12 },
+ { BFD_RELOC_FRV_FUNCDESC_GOTOFFHI, R_FRV_FUNCDESC_GOTOFFHI },
+ { BFD_RELOC_FRV_FUNCDESC_GOTOFFLO, R_FRV_FUNCDESC_GOTOFFLO },
+ { BFD_RELOC_FRV_GOTOFF12, R_FRV_GOTOFF12 },
+ { BFD_RELOC_FRV_GOTOFFHI, R_FRV_GOTOFFHI },
+ { BFD_RELOC_FRV_GOTOFFLO, R_FRV_GOTOFFLO },
{ BFD_RELOC_VTABLE_INHERIT, R_FRV_GNU_VTINHERIT },
{ BFD_RELOC_VTABLE_ENTRY, R_FRV_GNU_VTENTRY },
};
#endif
+
+/* An extension of the elf hash table data structure, containing some
+ additional FRV-specific data. */
+struct frv_elf_link_hash_table
+{
+ struct elf_link_hash_table elf;
+
+ /* A pointer to the .got section. */
+ asection *sgot;
+ /* A pointer to the .rel.got section. */
+ asection *sgotrel;
+ /* A pointer to the .rofixup section. */
+ asection *sgotfixup;
+ /* A pointer to the .plt section. */
+ asection *splt;
+ /* A pointer to the .rel.plt section. */
+ asection *spltrel;
+ /* GOT base offset. */
+ bfd_vma got0;
+ /* Location of the first non-lazy PLT entry, i.e., the number of
+ bytes taken by lazy PLT entries. */
+ bfd_vma plt0;
+ /* A hash table holding information about which symbols were
+ referenced with which PIC-related relocations. */
+ struct htab *relocs_info;
+};
+
+/* Get the FRV ELF linker hash table from a link_info structure. */
+
+#define frv_hash_table(info) \
+ ((struct frv_elf_link_hash_table *) ((info)->hash))
+
+#define frv_got_section(info) \
+ (frv_hash_table (info)->sgot)
+#define frv_gotrel_section(info) \
+ (frv_hash_table (info)->sgotrel)
+#define frv_gotfixup_section(info) \
+ (frv_hash_table (info)->sgotfixup)
+#define frv_plt_section(info) \
+ (frv_hash_table (info)->splt)
+#define frv_pltrel_section(info) \
+ (frv_hash_table (info)->spltrel)
+#define frv_relocs_info(info) \
+ (frv_hash_table (info)->relocs_info)
+#define frv_got_initial_offset(info) \
+ (frv_hash_table (info)->got0)
+#define frv_plt_initial_offset(info) \
+ (frv_hash_table (info)->plt0)
+
+/* Create an FRV ELF linker hash table. */
+
+static struct bfd_link_hash_table *
+frv_elf_link_hash_table_create (bfd *abfd)
+{
+ struct frv_elf_link_hash_table *ret;
+ bfd_size_type amt = sizeof (struct frv_elf_link_hash_table);
+
+ ret = bfd_zalloc (abfd, amt);
+ if (ret == NULL)
+ return NULL;
+
+ if (! _bfd_elf_link_hash_table_init (&ret->elf, abfd,
+ _bfd_elf_link_hash_newfunc))
+ {
+ free (ret);
+ return NULL;
+ }
+
+ return &ret->elf.root;
+}
+
+/* Decide whether a reference to a symbol can be resolved locally or
+ not. If the symbol is protected, we want the local address, but
+ its function descriptor must be assigned by the dynamic linker. */
+#define FRV_SYM_LOCAL(INFO, H) \
+ (_bfd_elf_symbol_refs_local_p ((H), (INFO), 1) \
+ || ! elf_hash_table (INFO)->dynamic_sections_created \
+ || (H)->root.type == bfd_link_hash_undefweak \
+ || (/* The condition below is an ugly hack to get .scommon data to
+ be regarded as local. For some reason the
+ ELF_LINK_HASH_DEF_REGULAR bit is not set on such common
+ symbols, and the SEC_IS_COMMON bit is not set any longer
+ when we need to perform this test. Hopefully this
+ approximation is good enough. */ \
+ ((H)->root.type == bfd_link_hash_defined \
+ || (H)->root.type == bfd_link_hash_defweak) \
+ && (H)->root.u.def.section->output_section \
+ && ((H)->root.u.def.section->flags & SEC_LINKER_CREATED)))
+#define FRV_FUNCDESC_LOCAL(INFO, H) \
+ ((H)->dynindx == -1 || ! elf_hash_table (INFO)->dynamic_sections_created)
+
+/* This structure collects information on what kind of GOT, PLT or
+ function descriptors are required by relocations that reference a
+ certain symbol. */
+struct frv_pic_relocs_info
+{
+ /* The index of the symbol, as stored in the relocation r_info, if
+ we have a local symbol; -1 otherwise. */
+ long symndx;
+ union
+ {
+ /* The input bfd in which the symbol is defined, if it's a local
+ symbol. */
+ bfd *abfd;
+ /* If symndx == -1, the hash table entry corresponding to a global
+ symbol (even if it turns out to bind locally, in which case it
+ should ideally be replaced with section's symndx + addend). */
+ struct elf_link_hash_entry *h;
+ } d;
+ /* The addend of the relocation that references the symbol. */
+ bfd_vma addend;
+
+ /* The fields above are used to identify an entry. The fields below
+ contain information on how an entry is used and, later on, which
+ locations it was assigned. */
+ /* The following 3 fields record whether the symbol+addend above was
+ ever referenced with a GOT relocation. The 12 suffix indicates a
+ GOT12 relocation; los is used for GOTLO relocations that are not
+ matched by a GOTHI relocation; hilo is used for GOTLO/GOTHI
+ pairs. */
+ unsigned got12:1;
+ unsigned gotlos:1;
+ unsigned gothilo:1;
+ /* Whether a FUNCDESC relocation references symbol+addend. */
+ unsigned fd:1;
+ /* Whether a FUNCDESC_GOT relocation references symbol+addend. */
+ unsigned fdgot12:1;
+ unsigned fdgotlos:1;
+ unsigned fdgothilo:1;
+ /* Whether a FUNCDESC_GOTOFF relocation references symbol+addend. */
+ unsigned fdgoff12:1;
+ unsigned fdgofflos:1;
+ unsigned fdgoffhilo:1;
+ /* Whether symbol+addend is referenced with GOTOFF12, GOTOFFLO or
+ GOTOFFHI relocations. The addend doesn't really matter, since we
+ envision that this will only be used to check whether the symbol
+ is mapped to the same segment as the got. */
+ unsigned gotoff:1;
+ /* Whether symbol+addend is referenced by a LABEL24 relocation. */
+ unsigned call:1;
+ /* Whether symbol+addend is referenced by a 32 or FUNCDESC_VALUE
+ relocation. */
+ unsigned sym:1;
+ /* Whether we need a PLT entry for a symbol. Should be implied by
+ something like:
+ (call && symndx == -1 && ! FRV_SYM_LOCAL (info, d.h)) */
+ unsigned plt:1;
+ /* Whether a function descriptor should be created in this link unit
+ for symbol+addend. Should be implied by something like:
+ (plt || fdgotoff12 || fdgotofflos || fdgotofflohi
+ || ((fd || fdgot12 || fdgotlos || fdgothilo)
+ && (symndx != -1 || FRV_FUNCDESC_LOCAL (info, d.h)))) */
+ unsigned privfd:1;
+ /* Whether a lazy PLT entry is needed for this symbol+addend.
+ Should be implied by something like:
+ (privfd && symndx == -1 && ! FRV_SYM_LOCAL (info, d.h)
+ && ! (info->flags & DF_BIND_NOW)) */
+ unsigned lazyplt:1;
+ /* Whether we've already emitted GOT relocations and PLT entries as
+ needed for this symbol. */
+ unsigned done:1;
+
+ /* The number of R_FRV_32, R_FRV_FUNCDESC and R_FRV_FUNCDESC_VALUE
+ relocations referencing the symbol. */
+ unsigned relocs32, relocsfd, relocsfdv;
+
+ /* The offsets of the GOT entries assigned to symbol+addend, to the
+ function descriptor's address, and to a function descriptor,
+ respectively. Should be zero if unassigned. The offsets are
+ counted from the value that will be assigned to the PIC register,
+ not from the beginning of the .got section. */
+ bfd_signed_vma got_entry, fdgot_entry, fd_entry;
+ /* The offsets of the PLT entries assigned to symbol+addend,
+ non-lazy and lazy, respectively. If unassigned, should be
+ (bfd_vma)-1. */
+ bfd_vma plt_entry, lzplt_entry;
+};
+
+/* Compute a hash with the key fields of an frv_pic_relocs_info entry. */
+static hashval_t
+frv_pic_relocs_info_hash (const void *entry_)
+{
+ const struct frv_pic_relocs_info *entry = entry_;
+
+ return (entry->symndx == -1
+ ? entry->d.h->root.root.hash
+ : entry->symndx + entry->d.abfd->id * 257) + entry->addend;
+}
+
+/* Test whether the key fields of two frv_pic_relocs_info entries are
+ identical. */
+static int
+frv_pic_relocs_info_eq (const void *entry1, const void *entry2)
+{
+ const struct frv_pic_relocs_info *e1 = entry1;
+ const struct frv_pic_relocs_info *e2 = entry2;
+
+ return e1->symndx == e2->symndx && e1->addend == e2->addend
+ && (e1->symndx == -1 ? e1->d.h == e2->d.h : e1->d.abfd == e2->d.abfd);
+}
+
+/* Find or create an entry in a hash table HT that matches the key
+ fields of the given ENTRY. If it's not found, memory for a new
+ entry is allocated in ABFD's obstack. */
+static struct frv_pic_relocs_info *
+frv_pic_relocs_info_find (struct htab *ht,
+ bfd *abfd,
+ const struct frv_pic_relocs_info *entry)
+{
+ struct frv_pic_relocs_info **loc =
+ (struct frv_pic_relocs_info **) htab_find_slot (ht, entry, INSERT);
+
+ if (*loc)
+ return *loc;
+
+ *loc = bfd_zalloc (abfd, sizeof (**loc));
+
+ if (! *loc)
+ return *loc;
+
+ (*loc)->symndx = entry->symndx;
+ (*loc)->d = entry->d;
+ (*loc)->addend = entry->addend;
+ (*loc)->plt_entry = (bfd_vma)-1;
+ (*loc)->lzplt_entry = (bfd_vma)-1;
+
+ return *loc;
+}
+
+/* Obtain the address of the entry in HT associated with H's symbol +
+ addend, creating a new entry if none existed. ABFD is only used
+ for memory allocation purposes. */
+inline static struct frv_pic_relocs_info *
+frv_pic_relocs_info_for_global (struct htab *ht,
+ bfd *abfd,
+ struct elf_link_hash_entry *h,
+ bfd_vma addend)
+{
+ struct frv_pic_relocs_info entry;
+
+ entry.symndx = -1;
+ entry.d.h = h;
+ entry.addend = addend;
+
+ return frv_pic_relocs_info_find (ht, abfd, &entry);
+}
+
+/* Obtain the address of the entry in HT associated with the SYMNDXth
+ local symbol of the input bfd ABFD, plus the addend, creating a new
+ entry if none existed. */
+inline static struct frv_pic_relocs_info *
+frv_pic_relocs_info_for_local (struct htab *ht,
+ bfd *abfd,
+ long symndx,
+ bfd_vma addend)
+{
+ struct frv_pic_relocs_info entry;
+
+ entry.symndx = symndx;
+ entry.d.abfd = abfd;
+ entry.addend = addend;
+
+ return frv_pic_relocs_info_find (ht, abfd, &entry);
+}
+
+/* Every block of 65535 lazy PLT entries shares a single call to the
+ resolver, inserted in the 32768th lazy PLT entry (i.e., entry #
+ 32767, counting from 0). All other lazy PLT entries branch to it
+ in a single instruction. */
+
+#define FRV_LZPLT_BLOCK_SIZE ((bfd_vma) 8 * 65535 + 4)
+#define FRV_LZPLT_RESOLV_LOC (8 * 32767)
+
+/* Add a dynamic relocation to the SRELOC section. */
+
+inline static bfd_vma
+_frv_add_dyn_reloc (bfd *output_bfd, asection *sreloc, bfd_vma offset,
+ int reloc_type, long dynindx, bfd_vma addend)
+{
+ Elf_Internal_Rela outrel;
+ bfd_vma reloc_offset;
+
+ outrel.r_offset = offset;
+ outrel.r_info = ELF32_R_INFO (dynindx, reloc_type);
+ outrel.r_addend = addend;
+
+ reloc_offset = sreloc->reloc_count * sizeof (Elf32_External_Rel);
+ BFD_ASSERT (reloc_offset < sreloc->_raw_size);
+ bfd_elf32_swap_reloc_out (output_bfd, &outrel,
+ sreloc->contents + reloc_offset);
+ sreloc->reloc_count++;
+
+ return reloc_offset;
+}
+
+/* Add a fixup to the ROFIXUP section. */
+
+static bfd_vma
+_frv_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset)
+{
+ bfd_vma fixup_offset;
+
+ if (rofixup->flags & SEC_EXCLUDE)
+ return -1;
+
+ fixup_offset = rofixup->reloc_count * 4;
+ if (rofixup->contents)
+ {
+ BFD_ASSERT (fixup_offset < rofixup->_raw_size);
+ bfd_put_32 (output_bfd, offset, rofixup->contents + fixup_offset);
+ }
+ rofixup->reloc_count++;
+
+ return fixup_offset;
+}
+
+/* Find the segment number in which OSEC, and output section, is
+ located. */
+
+static unsigned
+_frv_osec_to_segment (bfd *output_bfd, asection *osec)
+{
+ struct elf_segment_map *m;
+ Elf_Internal_Phdr *p;
+
+ /* Find the segment that contains the output_section. */
+ for (m = elf_tdata (output_bfd)->segment_map,
+ p = elf_tdata (output_bfd)->phdr;
+ m != NULL;
+ m = m->next, p++)
+ {
+ int i;
+
+ for (i = m->count - 1; i >= 0; i--)
+ if (m->sections[i] == osec)
+ break;
+
+ if (i >= 0)
+ break;
+ }
+
+ return p - elf_tdata (output_bfd)->phdr;
+}
+
+inline static bfd_boolean
+_frv_osec_readonly_p (bfd *output_bfd, asection *osec)
+{
+ unsigned seg = _frv_osec_to_segment (output_bfd, osec);
+
+ return ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W);
+}
+
+/* Generate relocations for GOT entries, function descriptors, and
+ code for PLT and lazy PLT entries. */
+
+inline static bfd_boolean
+_frv_emit_got_relocs_plt_entries (struct frv_pic_relocs_info *entry,
+ bfd *output_bfd,
+ struct bfd_link_info *info,
+ asection *sec,
+ Elf_Internal_Sym *sym,
+ bfd_vma addend)
+
+{
+ bfd_vma fd_lazy_rel_offset = (bfd_vma)-1;
+ int dynindx = -1;
+
+ if (entry->done)
+ return TRUE;
+ entry->done = 1;
+
+ if (entry->got_entry || entry->fdgot_entry || entry->fd_entry)
+ {
+ /* If the symbol is dynamic, consider it for dynamic
+ relocations, otherwise decay to section + offset. */
+ if (entry->symndx == -1 && entry->d.h->dynindx != -1)
+ dynindx = entry->d.h->dynindx;
+ else
+ {
+ if (sec->output_section
+ && ! bfd_is_abs_section (sec->output_section)
+ && ! bfd_is_und_section (sec->output_section))
+ dynindx = elf_section_data (sec->output_section)->dynindx;
+ else
+ dynindx = 0;
+ }
+ }
+
+ /* Generate relocation for GOT entry pointing to the symbol. */
+ if (entry->got_entry)
+ {
+ int idx = dynindx;
+ bfd_vma ad = addend;
+
+ /* If the symbol is dynamic but binds locally, use
+ section+offset. */
+ if (sec && (entry->symndx != -1 || FRV_SYM_LOCAL (info, entry->d.h)))
+ {
+ if (entry->symndx == -1)
+ ad += entry->d.h->root.u.def.value;
+ else
+ ad += sym->st_value;
+ ad += sec->output_offset;
+ if (sec->output_section && elf_section_data (sec->output_section))
+ idx = elf_section_data (sec->output_section)->dynindx;
+ else
+ idx = 0;
+ }
+
+ /* If we're linking an executable at a fixed address, we can
+ omit the dynamic relocation as long as the symbol is local to
+ this module. */
+ if (info->executable && !info->pie
+ && (entry->symndx != -1 || FRV_SYM_LOCAL (info, entry->d.h)))
+ {
+ if (sec)
+ ad += sec->output_section->vma;
+ if (entry->symndx != -1 ||
+ entry->d.h->root.type != bfd_link_hash_undefweak)
+ _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
+ frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info)
+ + entry->got_entry);
+ }
+ else
+ _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ frv_got_section (info),
+ frv_got_initial_offset (info)
+ + entry->got_entry)
+ + frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset,
+ R_FRV_32, idx, ad);
+
+ bfd_put_32 (output_bfd, ad,
+ frv_got_section (info)->contents
+ + frv_got_initial_offset (info)
+ + entry->got_entry);
+ }
+
+ /* Generate relocation for GOT entry pointing to a canonical
+ function descriptor. */
+ if (entry->fdgot_entry)
+ {
+ int reloc, idx;
+ bfd_vma ad;
+
+ /* If the symbol is dynamic and there may be dynamic symbol
+ resolution because we are or are linked with a shared
+ library, emit a FUNCDESC relocation such that the dynamic
+ linker will allocate the function descriptor. */
+ if (entry->symndx == -1 && ! FRV_FUNCDESC_LOCAL (info, entry->d.h))
+ {
+ reloc = R_FRV_FUNCDESC;
+ idx = dynindx;
+ ad = addend;
+ if (ad)
+ return FALSE;
+ }
+ else
+ {
+ /* Otherwise, we know we have a private function descriptor,
+ so reference it directly. */
+ if (elf_hash_table (info)->dynamic_sections_created)
+ BFD_ASSERT (entry->privfd);
+ reloc = R_FRV_32;
+ idx = elf_section_data (frv_got_section (info)->output_section)
+ ->dynindx;
+ ad = frv_got_section (info)->output_offset +
+ frv_got_initial_offset (info) + entry->fd_entry;
+ }
+
+ /* If there is room for dynamic symbol resolution, emit the
+ dynamic relocation. However, if we're linking an executable
+ at a fixed location, we won't have emitted a dynamic symbol
+ entry for the got section, so idx will be zero, which means
+ we can and should compute the address of the private
+ descriptor ourselves. */
+ if (info->executable && !info->pie
+ && (entry->symndx != -1 || FRV_FUNCDESC_LOCAL (info, entry->d.h)))
+ {
+ if (entry->symndx == -1
+ && entry->d.h->root.type == bfd_link_hash_undefweak)
+ ad = 0;
+ else
+ {
+ ad += frv_got_section (info)->output_section->vma;
+ _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
+ frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info)
+ + entry->fdgot_entry);
+ }
+ }
+ else
+ _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ frv_got_section (info),
+ frv_got_initial_offset (info)
+ + entry->fdgot_entry)
+ + frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset,
+ reloc, idx, ad);
+
+ bfd_put_32 (output_bfd, ad,
+ frv_got_section (info)->contents
+ + frv_got_initial_offset (info)
+ + entry->fdgot_entry);
+ }
+
+ /* Generate relocation to fill in a private function descriptor in
+ the GOT. */
+ if (entry->fd_entry)
+ {
+ int idx = dynindx;
+ bfd_vma ad = addend;
+ bfd_vma ofst;
+ long lowword, highword;
+
+ /* If the symbol is dynamic but binds locally, use
+ section+offset. */
+ if (sec && (entry->symndx != -1 || FRV_SYM_LOCAL (info, entry->d.h)))
+ {
+ if (entry->symndx == -1)
+ ad += entry->d.h->root.u.def.value;
+ else
+ ad += sym->st_value;
+ ad += sec->output_offset;
+ if (sec->output_section && elf_section_data (sec->output_section))
+ idx = elf_section_data (sec->output_section)->dynindx;
+ else
+ idx = 0;
+ }
+
+ /* If we're linking an executable at a fixed address, we can
+ omit the dynamic relocation as long as the symbol is local to
+ this module. */
+ if (info->executable && !info->pie
+ && (entry->symndx != -1 || FRV_SYM_LOCAL (info, entry->d.h)))
+ {
+ if (sec)
+ ad += sec->output_section->vma;
+ ofst = 0;
+ if (entry->symndx != -1 ||
+ entry->d.h->root.type != bfd_link_hash_undefweak)
+ {
+ _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
+ frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info)
+ + entry->fd_entry);
+ _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
+ frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info)
+ + entry->fd_entry + 4);
+ }
+ }
+ else
+ {
+ ofst =
+ _frv_add_dyn_reloc (output_bfd,
+ entry->lazyplt ? frv_pltrel_section (info)
+ : frv_gotrel_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ frv_got_section (info),
+ frv_got_initial_offset (info)
+ + entry->fd_entry)
+ + frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset,
+ R_FRV_FUNCDESC_VALUE, idx, ad);
+ }
+
+ /* If we've omitted the dynamic relocation, just emit the fixed
+ addresses of the symbol and of the local GOT base offset. */
+ if (info->executable && !info->pie && sec && sec->output_section)
+ {
+ lowword = ad;
+ highword = frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info);
+ }
+ else if (entry->lazyplt)
+ {
+ if (ad)
+ return FALSE;
+
+ fd_lazy_rel_offset = ofst;
+
+ /* A function descriptor used for lazy or local resolving is
+ initialized such that its high word contains the output
+ section index in which the PLT entries are located, and
+ the low word contains the address of the lazy PLT entry
+ entry point, that must be within the memory region
+ assigned to that section. */
+ lowword = entry->lzplt_entry + 4
+ + frv_plt_section (info)->output_offset
+ + frv_plt_section (info)->output_section->vma;
+ highword = _frv_osec_to_segment
+ (output_bfd, frv_plt_section (info)->output_section);
+ }
+ else
+ {
+ /* A function descriptor for a local function gets the index
+ of the section. For a non-local function, it's
+ disregarded. */
+ lowword = ad;
+ if (entry->symndx == -1 && entry->d.h->dynindx != -1
+ && entry->d.h->dynindx == idx)
+ highword = 0;
+ else
+ highword = _frv_osec_to_segment (output_bfd, sec->output_section);
+ }
+
+ bfd_put_32 (output_bfd, lowword,
+ frv_got_section (info)->contents
+ + frv_got_initial_offset (info)
+ + entry->fd_entry);
+ bfd_put_32 (output_bfd, highword,
+ frv_got_section (info)->contents
+ + frv_got_initial_offset (info)
+ + entry->fd_entry + 4);
+ }
+
+ /* Generate code for the PLT entry. */
+ if (entry->plt_entry != (bfd_vma) -1)
+ {
+ bfd_byte *plt_code = frv_plt_section (info)->contents + entry->plt_entry;
+
+ BFD_ASSERT (entry->fd_entry);
+
+ /* Figure out what kind of PLT entry we need, depending on the
+ location of the function descriptor within the GOT. */
+ if (entry->fd_entry >= -(1 << (12 - 1))
+ && entry->fd_entry < (1 << (12 - 1)))
+ {
+ /* lddi @(gr15, fd_entry), gr14 */
+ bfd_put_32 (output_bfd,
+ 0x9cccf000 | (entry->fd_entry & ((1 << 12) - 1)),
+ plt_code);
+ plt_code += 4;
+ }
+ else
+ {
+ if (entry->fd_entry >= -(1 << (16 - 1))
+ && entry->fd_entry < (1 << (16 - 1)))
+ {
+ /* setlos lo(fd_entry), gr14 */
+ bfd_put_32 (output_bfd,
+ 0x9cfc0000
+ | (entry->fd_entry & (((bfd_vma)1 << 16) - 1)),
+ plt_code);
+ plt_code += 4;
+ }
+ else
+ {
+ /* sethi.p hi(fd_entry), gr14
+ setlo lo(fd_entry), gr14 */
+ bfd_put_32 (output_bfd,
+ 0x1cf80000
+ | ((entry->fd_entry >> 16)
+ & (((bfd_vma)1 << 16) - 1)),
+ plt_code);
+ bfd_put_32 (output_bfd,
+ 0x9cf40000
+ | (entry->fd_entry & (((bfd_vma)1 << 16) - 1)),
+ plt_code);
+ plt_code += 8;
+ }
+ /* ldd @(gr14,gr15),gr14 */
+ bfd_put_32 (output_bfd, 0x9c08e14f, plt_code);
+ plt_code += 4;
+ }
+ /* jmpl @(gr14,gr0) */
+ bfd_put_32 (output_bfd, 0x8030e000, plt_code);
+ }
+
+ /* Generate code for the lazy PLT entry. */
+ if (entry->lzplt_entry != (bfd_vma) -1)
+ {
+ bfd_byte *lzplt_code = frv_plt_section (info)->contents
+ + entry->lzplt_entry;
+ bfd_vma resolverStub_addr;
+
+ bfd_put_32 (output_bfd, fd_lazy_rel_offset, lzplt_code);
+ lzplt_code += 4;
+
+ resolverStub_addr = entry->lzplt_entry / FRV_LZPLT_BLOCK_SIZE
+ * FRV_LZPLT_BLOCK_SIZE + FRV_LZPLT_RESOLV_LOC;
+ if (resolverStub_addr >= frv_plt_initial_offset (info))
+ resolverStub_addr = frv_plt_initial_offset (info) - 12;
+
+ if (entry->lzplt_entry == resolverStub_addr)
+ {
+ /* This is a lazy PLT entry that includes a resolver call. */
+ /* ldd @(gr15,gr0), gr4
+ jmpl @(gr4,gr0) */
+ bfd_put_32 (output_bfd, 0x8808f140, lzplt_code);
+ bfd_put_32 (output_bfd, 0x80304000, lzplt_code + 4);
+ }
+ else
+ {
+ /* bra resolverStub */
+ bfd_put_32 (output_bfd,
+ 0xc01a0000
+ | (((resolverStub_addr - entry->lzplt_entry)
+ / 4) & (((bfd_vma)1 << 16) - 1)),
+ lzplt_code);
+ }
+ }
+
+ return TRUE;
+}
+
/* Handle an FRV small data reloc. */
static bfd_reloc_status_type
@@ -555,6 +1559,10 @@ frv_reloc_type_lookup (abfd, code)
return &elf32_frv_howto_table[ (int) R_FRV_NONE];
case BFD_RELOC_32:
+ if (elf_elfheader (abfd)->e_type == ET_EXEC
+ || elf_elfheader (abfd)->e_type == ET_DYN)
+ return &elf32_frv_rel_32_howto;
+ /* Fall through. */
case BFD_RELOC_CTOR:
return &elf32_frv_howto_table[ (int) R_FRV_32];
@@ -585,6 +1593,54 @@ frv_reloc_type_lookup (abfd, code)
case BFD_RELOC_FRV_GPRELLO:
return &elf32_frv_howto_table[ (int) R_FRV_GPRELLO];
+ case BFD_RELOC_FRV_GOT12:
+ return &elf32_frv_howto_table[ (int) R_FRV_GOT12];
+
+ case BFD_RELOC_FRV_GOTHI:
+ return &elf32_frv_howto_table[ (int) R_FRV_GOTHI];
+
+ case BFD_RELOC_FRV_GOTLO:
+ return &elf32_frv_howto_table[ (int) R_FRV_GOTLO];
+
+ case BFD_RELOC_FRV_FUNCDESC:
+ if (elf_elfheader (abfd)->e_type == ET_EXEC
+ || elf_elfheader (abfd)->e_type == ET_DYN)
+ return &elf32_frv_rel_funcdesc_howto;
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC];
+
+ case BFD_RELOC_FRV_FUNCDESC_GOT12:
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC_GOT12];
+
+ case BFD_RELOC_FRV_FUNCDESC_GOTHI:
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC_GOTHI];
+
+ case BFD_RELOC_FRV_FUNCDESC_GOTLO:
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC_GOTLO];
+
+ case BFD_RELOC_FRV_FUNCDESC_VALUE:
+ if (elf_elfheader (abfd)->e_type == ET_EXEC
+ || elf_elfheader (abfd)->e_type == ET_DYN)
+ return &elf32_frv_rel_funcdesc_value_howto;
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC_VALUE];
+
+ case BFD_RELOC_FRV_FUNCDESC_GOTOFF12:
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC_GOTOFF12];
+
+ case BFD_RELOC_FRV_FUNCDESC_GOTOFFHI:
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC_GOTOFFHI];
+
+ case BFD_RELOC_FRV_FUNCDESC_GOTOFFLO:
+ return &elf32_frv_howto_table[ (int) R_FRV_FUNCDESC_GOTOFFLO];
+
+ case BFD_RELOC_FRV_GOTOFF12:
+ return &elf32_frv_howto_table[ (int) R_FRV_GOTOFF12];
+
+ case BFD_RELOC_FRV_GOTOFFHI:
+ return &elf32_frv_howto_table[ (int) R_FRV_GOTOFFHI];
+
+ case BFD_RELOC_FRV_GOTOFFLO:
+ return &elf32_frv_howto_table[ (int) R_FRV_GOTOFFLO];
+
case BFD_RELOC_VTABLE_INHERIT:
return &elf32_frv_vtinherit_howto;
@@ -621,6 +1677,34 @@ frv_info_to_howto_rela (abfd, cache_ptr, dst)
break;
}
}
+
+/* Set the howto pointer for an FRV ELF REL reloc. */
+static void
+frv_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
+ arelent *cache_ptr, Elf_Internal_Rela *dst)
+{
+ unsigned int r_type;
+
+ r_type = ELF32_R_TYPE (dst->r_info);
+ switch (r_type)
+ {
+ case R_FRV_32:
+ cache_ptr->howto = &elf32_frv_rel_32_howto;
+ break;
+
+ case R_FRV_FUNCDESC:
+ cache_ptr->howto = &elf32_frv_rel_funcdesc_howto;
+ break;
+
+ case R_FRV_FUNCDESC_VALUE:
+ cache_ptr->howto = &elf32_frv_rel_funcdesc_value_howto;
+ break;
+
+ default:
+ cache_ptr->howto = NULL;
+ break;
+ }
+}
/* Perform a single relocation. By default we use the standard BFD
routines, but a few relocs, we have to do them ourselves. */
@@ -687,6 +1771,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
struct elf_link_hash_entry **sym_hashes;
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
+ unsigned isec_segment, got_segment, plt_segment, gprel_segment,
+ check_segment[2];
+ int silence_segment_error = !(info->shared || info->pie);
if (info->relocatable)
return TRUE;
@@ -695,6 +1782,27 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
+ isec_segment = _frv_osec_to_segment (output_bfd,
+ input_section->output_section);
+ if (frv_got_section (info))
+ got_segment = _frv_osec_to_segment (output_bfd,
+ frv_got_section (info)
+ ->output_section);
+ else
+ got_segment = -1;
+ if (frv_gotfixup_section (info))
+ gprel_segment = _frv_osec_to_segment (output_bfd,
+ frv_gotfixup_section (info)
+ ->output_section);
+ else
+ gprel_segment = -1;
+ if (elf_hash_table (info)->dynamic_sections_created)
+ plt_segment = _frv_osec_to_segment (output_bfd,
+ frv_plt_section (info)
+ ->output_section);
+ else
+ plt_segment = -1;
+
for (rel = relocs; rel < relend; rel ++)
{
reloc_howto_type *howto;
@@ -706,6 +1814,9 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
bfd_reloc_status_type r;
const char * name = NULL;
int r_type;
+ asection *osec;
+ struct frv_pic_relocs_info *picrel;
+ bfd_vma orig_addend = rel->r_addend;
r_type = ELF32_R_TYPE (rel->r_info);
@@ -723,7 +1834,7 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
- sec = local_sections [r_symndx];
+ osec = sec = local_sections [r_symndx];
relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
name = bfd_elf_string_from_elf_section
@@ -740,6 +1851,14 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
name = h->root.root.string;
+ if ((h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && ! FRV_SYM_LOCAL (info, h))
+ {
+ sec = NULL;
+ relocation = 0;
+ }
+ else
if (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)
{
@@ -752,6 +1871,11 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
{
relocation = 0;
}
+ else if ( ! info->executable
+ && ! info->symbolic
+ && info->unresolved_syms_in_objects == RM_IGNORE
+ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+ relocation = 0;
else
{
if (! ((*info->callbacks->undefined_symbol)
@@ -760,6 +1884,464 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section,
return FALSE;
relocation = 0;
}
+ osec = sec;
+ }
+
+ switch (r_type)
+ {
+ case R_FRV_LABEL24:
+ case R_FRV_32:
+ case R_FRV_GOT12:
+ case R_FRV_GOTHI:
+ case R_FRV_GOTLO:
+ case R_FRV_FUNCDESC_GOT12:
+ case R_FRV_FUNCDESC_GOTHI:
+ case R_FRV_FUNCDESC_GOTLO:
+ case R_FRV_GOTOFF12:
+ case R_FRV_GOTOFFHI:
+ case R_FRV_GOTOFFLO:
+ case R_FRV_FUNCDESC_GOTOFF12:
+ case R_FRV_FUNCDESC_GOTOFFHI:
+ case R_FRV_FUNCDESC_GOTOFFLO:
+ case R_FRV_FUNCDESC:
+ case R_FRV_FUNCDESC_VALUE:
+ if (h != NULL)
+ picrel = frv_pic_relocs_info_for_global (frv_relocs_info (info),
+ input_bfd, h,
+ orig_addend);
+ else
+ /* In order to find the entry we created before, we must
+ use the original addend, not the one that may have been
+ modified by _bfd_elf_rela_local_sym(). */
+ picrel = frv_pic_relocs_info_for_local (frv_relocs_info (info),
+ input_bfd, r_symndx,
+ orig_addend);
+ if (! picrel)
+ return FALSE;
+
+ if (!_frv_emit_got_relocs_plt_entries (picrel, output_bfd, info,
+ osec, sym, rel->r_addend))
+ {
+ info->callbacks->warning
+ (info, _("Dynamic relocation references symbol with nonzero addend"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+
+ }
+
+ break;
+
+ default:
+ picrel = NULL;
+ if (h && ! FRV_SYM_LOCAL (info, h))
+ {
+ info->callbacks->warning
+ (info, _("relocation references symbol not defined in the module"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+ }
+ break;
+ }
+
+ switch (r_type)
+ {
+ case R_FRV_LABEL24:
+ check_segment[0] = isec_segment;
+ if (picrel->plt)
+ {
+ relocation = frv_plt_section (info)->output_section->vma
+ + frv_plt_section (info)->output_offset
+ + picrel->plt_entry;
+ check_segment[1] = plt_segment;
+ }
+ /* We don't want to warn on calls to undefined weak symbols,
+ as calls to them must be protected by non-NULL tests
+ anyway, and unprotected calls would invoke undefined
+ behavior. */
+ else if (picrel->symndx == -1
+ && picrel->d.h->root.type == bfd_link_hash_undefweak)
+ check_segment[1] = check_segment[0];
+ else
+ check_segment[1] = sec
+ ? _frv_osec_to_segment (output_bfd, sec->output_section)
+ : (unsigned)-1;
+ break;
+
+ case R_FRV_GOT12:
+ case R_FRV_GOTHI:
+ case R_FRV_GOTLO:
+ relocation = picrel->got_entry;
+ check_segment[0] = check_segment[1] = got_segment;
+ break;
+
+ case R_FRV_FUNCDESC_GOT12:
+ case R_FRV_FUNCDESC_GOTHI:
+ case R_FRV_FUNCDESC_GOTLO:
+ relocation = picrel->fdgot_entry;
+ check_segment[0] = check_segment[1] = got_segment;
+ break;
+
+ case R_FRV_GOTOFFHI:
+ case R_FRV_GOTOFF12:
+ case R_FRV_GOTOFFLO:
+ relocation -= frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info);
+ check_segment[0] = got_segment;
+ check_segment[1] = sec
+ ? _frv_osec_to_segment (output_bfd, sec->output_section)
+ : (unsigned)-1;
+ break;
+
+ case R_FRV_FUNCDESC_GOTOFF12:
+ case R_FRV_FUNCDESC_GOTOFFHI:
+ case R_FRV_FUNCDESC_GOTOFFLO:
+ relocation = picrel->fd_entry;
+ check_segment[0] = check_segment[1] = got_segment;
+ break;
+
+ case R_FRV_FUNCDESC:
+ {
+ int dynindx;
+ bfd_vma addend = rel->r_addend;
+
+ /* If the symbol is dynamic and there may be dynamic
+ symbol resolution because we are or are linked with a
+ shared library, emit a FUNCDESC relocation such that
+ the dynamic linker will allocate the function
+ descriptor. */
+ if (h && ! FRV_FUNCDESC_LOCAL (info, h))
+ {
+ if (addend)
+ {
+ info->callbacks->warning
+ (info, _("R_FRV_FUNCDESC references dynamic symbol with nonzero addend"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+ }
+ dynindx = h->dynindx;
+ }
+ else
+ {
+ /* Otherwise, we know we have a private function
+ descriptor, so reference it directly. */
+ BFD_ASSERT (picrel->privfd);
+ r_type = R_FRV_32;
+ dynindx = elf_section_data (frv_got_section
+ (info)->output_section)->dynindx;
+ addend = frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info)
+ + picrel->fd_entry;
+ }
+
+ /* If there is room for dynamic symbol resolution, emit
+ the dynamic relocation. However, if we're linking an
+ executable at a fixed location, we won't have emitted a
+ dynamic symbol entry for the got section, so idx will
+ be zero, which means we can and should compute the
+ address of the private descriptor ourselves. */
+ if (info->executable && !info->pie
+ && (!h || FRV_FUNCDESC_LOCAL (info, h)))
+ {
+ addend += frv_got_section (info)->output_section->vma;
+ if ((bfd_get_section_flags (output_bfd,
+ input_section->output_section)
+ & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+ {
+ if (_frv_osec_readonly_p (output_bfd,
+ input_section->output_section))
+ {
+ info->callbacks->warning
+ (info,
+ _("cannot emit fixups in read-only section"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+ }
+ if (! h || h->root.type != bfd_link_hash_undefweak)
+ _frv_add_rofixup (output_bfd,
+ frv_gotfixup_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset)
+ + input_section->output_section->vma
+ + input_section->output_offset);
+ }
+ }
+ else if ((bfd_get_section_flags (output_bfd,
+ input_section->output_section)
+ & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+ {
+ if (_frv_osec_readonly_p (output_bfd,
+ input_section->output_section))
+ {
+ info->callbacks->warning
+ (info,
+ _("cannot emit dynamic relocations in read-only section"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+ }
+ _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset)
+ + input_section->output_section->vma
+ + input_section->output_offset,
+ r_type, dynindx, addend);
+ }
+
+ /* We want the addend in-place because dynamic
+ relocations are REL. Setting relocation to it should
+ arrange for it to be installed. */
+ relocation = addend - rel->r_addend;
+ }
+ check_segment[0] = check_segment[1] = got_segment;
+ break;
+
+ case R_FRV_32:
+ case R_FRV_FUNCDESC_VALUE:
+ {
+ int dynindx;
+ bfd_vma addend = rel->r_addend;
+
+ /* If the symbol is dynamic but binds locally, use
+ section+offset. */
+ if (h && ! FRV_SYM_LOCAL (info, h))
+ {
+ if (addend && r_type == R_FRV_FUNCDESC_VALUE)
+ {
+ info->callbacks->warning
+ (info, _("R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+ }
+ dynindx = h->dynindx;
+ }
+ else
+ {
+ if (h)
+ addend += h->root.u.def.value;
+ else
+ addend += sym->st_value;
+ if (osec)
+ addend += osec->output_offset;
+ if (osec && osec->output_section
+ && ! bfd_is_abs_section (osec->output_section)
+ && ! bfd_is_und_section (osec->output_section))
+ dynindx = elf_section_data (osec->output_section)->dynindx;
+ else
+ dynindx = 0;
+ }
+
+ /* If we're linking an executable at a fixed address, we
+ can omit the dynamic relocation as long as the symbol
+ is defined in the current link unit (which is implied
+ by its output section not being NULL). */
+ if (info->executable && !info->pie
+ && (!h || FRV_SYM_LOCAL (info, h)))
+ {
+ if (osec)
+ addend += osec->output_section->vma;
+ if ((elf_elfheader (input_bfd)->e_flags & EF_FRV_FDPIC)
+ && (bfd_get_section_flags (output_bfd,
+ input_section->output_section)
+ & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+ {
+ if (_frv_osec_readonly_p (output_bfd,
+ input_section->output_section))
+ {
+ info->callbacks->warning
+ (info,
+ _("cannot emit fixups in read-only section"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+ }
+ if (!h || h->root.type != bfd_link_hash_undefweak)
+ {
+ _frv_add_rofixup (output_bfd,
+ frv_gotfixup_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset)
+ + input_section->output_section->vma
+ + input_section->output_offset);
+ if (r_type == R_FRV_FUNCDESC_VALUE)
+ _frv_add_rofixup
+ (output_bfd,
+ frv_gotfixup_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset)
+ + input_section->output_section->vma
+ + input_section->output_offset + 4);
+ }
+ }
+ }
+ else
+ {
+ if ((bfd_get_section_flags (output_bfd,
+ input_section->output_section)
+ & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD))
+ {
+ if (_frv_osec_readonly_p (output_bfd,
+ input_section->output_section))
+ {
+ info->callbacks->warning
+ (info,
+ _("cannot emit dynamic relocations in read-only section"),
+ name, input_bfd, input_section, rel->r_offset);
+ return FALSE;
+ }
+ _frv_add_dyn_reloc (output_bfd, frv_gotrel_section (info),
+ _bfd_elf_section_offset
+ (output_bfd, info,
+ input_section, rel->r_offset)
+ + input_section->output_section->vma
+ + input_section->output_offset,
+ r_type, dynindx, addend);
+ }
+ /* We want the addend in-place because dynamic
+ relocations are REL. Setting relocation to it
+ should arrange for it to be installed. */
+ relocation = addend - rel->r_addend;
+ }
+
+ if (r_type == R_FRV_FUNCDESC_VALUE)
+ {
+ /* If we've omitted the dynamic relocation, just emit
+ the fixed addresses of the symbol and of the local
+ GOT base offset. */
+ if (info->executable && !info->pie
+ && (!h || FRV_SYM_LOCAL (info, h)))
+ bfd_put_32 (output_bfd,
+ frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info),
+ contents + rel->r_offset + 4);
+ else
+ /* A function descriptor used for lazy or local
+ resolving is initialized such that its high word
+ contains the output section index in which the
+ PLT entries are located, and the low word
+ contains the offset of the lazy PLT entry entry
+ point into that section. */
+ bfd_put_32 (output_bfd,
+ h && ! FRV_SYM_LOCAL (info, h)
+ ? 0
+ : _frv_osec_to_segment (output_bfd,
+ sec->output_section),
+ contents + rel->r_offset + 4);
+ }
+ }
+ check_segment[0] = check_segment[1] = got_segment;
+ break;
+
+ case R_FRV_GPREL12:
+ case R_FRV_GPRELU12:
+ case R_FRV_GPREL32:
+ case R_FRV_GPRELHI:
+ case R_FRV_GPRELLO:
+ check_segment[0] = gprel_segment;
+ check_segment[1] = sec
+ ? _frv_osec_to_segment (output_bfd, sec->output_section)
+ : (unsigned)-1;
+ break;
+
+ default:
+ check_segment[0] = isec_segment;
+ check_segment[1] = sec
+ ? _frv_osec_to_segment (output_bfd, sec->output_section)
+ : (unsigned)-1;
+ break;
+ }
+
+ if (check_segment[0] != check_segment[1]
+ && (elf_elfheader (output_bfd)->e_flags & EF_FRV_FDPIC))
+ {
+#if 1
+ /* This helps catch problems in GCC while we can't do more
+ than static linking. The idea is to test whether the
+ input file basename is crt0.o only once. */
+ if (silence_segment_error == 1)
+ silence_segment_error =
+ (strlen (input_bfd->filename) == 6
+ && strcmp (input_bfd->filename, "crt0.o") == 0)
+ || (strlen (input_bfd->filename) > 6
+ && strcmp (input_bfd->filename
+ + strlen (input_bfd->filename) - 7,
+ "/crt0.o") == 0)
+ ? -1 : 0;
+#endif
+ if (!silence_segment_error
+ /* We don't want duplicate errors for undefined
+ symbols. */
+ && !(picrel && picrel->symndx == -1
+ && picrel->d.h->root.type == bfd_link_hash_undefined))
+ info->callbacks->warning
+ (info,
+ (info->shared || info->pie)
+ ? _("relocations between different segments are not supported")
+ : _("warning: relocation references a different segment"),
+ name, input_bfd, input_section, rel->r_offset);
+ if (!silence_segment_error && (info->shared || info->pie))
+ return FALSE;
+ elf_elfheader (output_bfd)->e_flags |= EF_FRV_PIC;
+ }
+
+ switch (r_type)
+ {
+ case R_FRV_GOTOFFHI:
+ /* We need the addend to be applied before we shift the
+ value right. */
+ relocation += rel->r_addend;
+ /* Fall through. */
+ case R_FRV_GOTHI:
+ case R_FRV_FUNCDESC_GOTHI:
+ case R_FRV_FUNCDESC_GOTOFFHI:
+ relocation >>= 16;
+ /* Fall through. */
+
+ case R_FRV_GOTLO:
+ case R_FRV_FUNCDESC_GOTLO:
+ case R_FRV_GOTOFFLO:
+ case R_FRV_FUNCDESC_GOTOFFLO:
+ relocation &= 0xffff;
+ break;
+
+ default:
+ break;
+ }
+
+ switch (r_type)
+ {
+ case R_FRV_LABEL24:
+ if (! picrel->plt)
+ break;
+ /* Fall through. */
+
+ /* When referencing a GOT entry, a function descriptor or a
+ PLT, we don't want the addend to apply to the reference,
+ but rather to the referenced symbol. The actual entry
+ will have already been created taking the addend into
+ account, so cancel it out here. */
+ case R_FRV_GOT12:
+ case R_FRV_GOTHI:
+ case R_FRV_GOTLO:
+ case R_FRV_FUNCDESC_GOT12:
+ case R_FRV_FUNCDESC_GOTHI:
+ case R_FRV_FUNCDESC_GOTLO:
+ case R_FRV_FUNCDESC_GOTOFF12:
+ case R_FRV_FUNCDESC_GOTOFFHI:
+ case R_FRV_FUNCDESC_GOTOFFLO:
+ /* Note that we only want GOTOFFHI, not GOTOFFLO or GOTOFF12
+ here, since we do want to apply the addend to the others.
+ Note that we've applied the addend to GOTOFFHI before we
+ shifted it right. */
+ case R_FRV_GOTOFFHI:
+ relocation -= rel->r_addend;
+ break;
+
+ default:
+ break;
}
if (r_type == R_FRV_HI16)
@@ -929,9 +2511,1270 @@ elf32_frv_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
return TRUE;
}
+/* Create a .got section, as well as its additional info field. This
+ is almost entirely copied from
+ elflink.c:_bfd_elf_create_got_section(). */
+
+static bfd_boolean
+_frv_create_got_section (bfd *abfd, struct bfd_link_info *info)
+{
+ flagword flags;
+ asection *s;
+ struct elf_link_hash_entry *h;
+ struct bfd_link_hash_entry *bh;
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+ int ptralign;
+
+ /* This function may be called more than once. */
+ s = bfd_get_section_by_name (abfd, ".got");
+ if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0)
+ return TRUE;
+
+ /* Machine specific: although pointers are 32-bits wide, we want the
+ GOT to be aligned to a 64-bit boundary, such that function
+ descriptors in it can be accessed with 64-bit loads and
+ stores. */
+ ptralign = 3;
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED);
+
+ s = bfd_make_section (abfd, ".got");
+ if (s == NULL
+ || !bfd_set_section_flags (abfd, s, flags)
+ || !bfd_set_section_alignment (abfd, s, ptralign))
+ return FALSE;
+
+ if (bed->want_got_plt)
+ {
+ s = bfd_make_section (abfd, ".got.plt");
+ if (s == NULL
+ || !bfd_set_section_flags (abfd, s, flags)
+ || !bfd_set_section_alignment (abfd, s, ptralign))
+ return FALSE;
+ }
+
+ if (bed->want_got_sym)
+ {
+ /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
+ (or .got.plt) section. We don't do this in the linker script
+ because we don't want to define the symbol if we are not creating
+ a global offset table. */
+ bh = NULL;
+ if (!(_bfd_generic_link_add_one_symbol
+ (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
+ bed->got_symbol_offset, (const char *) NULL, FALSE,
+ bed->collect, &bh)))
+ return FALSE;
+ h = (struct elf_link_hash_entry *) bh;
+ h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+ h->type = STT_OBJECT;
+
+ /* Machine-specific: we want the symbol for executables as
+ well. */
+ if (! _bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+
+ elf_hash_table (info)->hgot = h;
+ }
+
+ /* The first bit of the global offset table is the header. */
+ s->_raw_size += bed->got_header_size + bed->got_symbol_offset;
+
+ /* This is the machine-specific part. Create and initialize section
+ data for the got. */
+ frv_got_section (info) = s;
+ frv_relocs_info (info) = htab_try_create (1, frv_pic_relocs_info_hash,
+ frv_pic_relocs_info_eq,
+ (htab_del) NULL);
+ if (! frv_relocs_info (info))
+ return FALSE;
+
+ s = bfd_make_section (abfd, ".rel.got");
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, (flags | SEC_READONLY))
+ || ! bfd_set_section_alignment (abfd, s, 2))
+ return FALSE;
+
+ frv_gotrel_section (info) = s;
+
+ /* Machine-specific. */
+ s = bfd_make_section (abfd, ".rofixup");
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, (flags | SEC_READONLY))
+ || ! bfd_set_section_alignment (abfd, s, 2))
+ return FALSE;
+
+ frv_gotfixup_section (info) = s;
+
+ /* Define _gp in .rofixup, for FDPIC. If it turns out that
+ we're linking with a different linker script, the linker script
+ will override it. */
+ bh = NULL;
+ if (!(_bfd_generic_link_add_one_symbol
+ (info, abfd, "_gp", BSF_GLOBAL, s, -2048, (const char *) NULL, FALSE,
+ bed->collect, &bh)))
+ return FALSE;
+ h = (struct elf_link_hash_entry *) bh;
+ h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+ h->type = STT_OBJECT;
+
+ /* Machine-specific: we want the symbol for executables as well. */
+ if (! _bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Make sure the got and plt sections exist, and that our pointers in
+ the link hash table point to them. */
+
+static bfd_boolean
+elf32_frv_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
+{
+ /* This is mostly copied from
+ elflink.c:_bfd_elf_create_dynamic_sections(). */
+ flagword flags, pltflags;
+ asection *s;
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+
+ /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
+ .rel[a].bss sections. */
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED);
+
+ pltflags = flags;
+ pltflags |= SEC_CODE;
+ if (bed->plt_not_loaded)
+ pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS);
+ if (bed->plt_readonly)
+ pltflags |= SEC_READONLY;
+
+ s = bfd_make_section (abfd, ".plt");
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, pltflags)
+ || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
+ return FALSE;
+ /* FRV-specific: remember it. */
+ frv_plt_section (info) = s;
+
+ if (bed->want_plt_sym)
+ {
+ /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
+ .plt section. */
+ struct elf_link_hash_entry *h;
+ struct bfd_link_hash_entry *bh = NULL;
+
+ if (! (_bfd_generic_link_add_one_symbol
+ (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s, 0, NULL,
+ FALSE, get_elf_backend_data (abfd)->collect, &bh)))
+ return FALSE;
+ h = (struct elf_link_hash_entry *) bh;
+ h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+ h->type = STT_OBJECT;
+
+ if (! info->executable
+ && ! _bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
+ /* FRV-specific: we want rel relocations for the plt. */
+ s = bfd_make_section (abfd, ".rel.plt");
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
+ || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
+ return FALSE;
+ /* FRV-specific: remember it. */
+ frv_pltrel_section (info) = s;
+
+ /* FRV-specific: we want to create the GOT in the FRV way. */
+ if (! _frv_create_got_section (abfd, info))
+ return FALSE;
+
+ /* FRV-specific: make sure we created everything we wanted. */
+ BFD_ASSERT (frv_got_section (info) && frv_gotrel_section (info)
+ && frv_gotfixup_section (info)
+ && frv_plt_section (info) && frv_pltrel_section (info));
+
+ if (bed->want_dynbss)
+ {
+ /* The .dynbss section is a place to put symbols which are defined
+ by dynamic objects, are referenced by regular objects, and are
+ not functions. We must allocate space for them in the process
+ image and use a R_*_COPY reloc to tell the dynamic linker to
+ initialize them at run time. The linker script puts the .dynbss
+ section into the .bss section of the final image. */
+ s = bfd_make_section (abfd, ".dynbss");
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, SEC_ALLOC | SEC_LINKER_CREATED))
+ return FALSE;
+
+ /* The .rel[a].bss section holds copy relocs. This section is not
+ normally needed. We need to create it here, though, so that the
+ linker will map it to an output section. We can't just create it
+ only if we need it, because we will not know whether we need it
+ until we have seen all the input files, and the first time the
+ main linker code calls BFD after examining all the input files
+ (size_dynamic_sections) the input sections have already been
+ mapped to the output sections. If the section turns out not to
+ be needed, we can discard it later. We will never need this
+ section when generating a shared object, since they do not use
+ copy relocs. */
+ if (! info->shared)
+ {
+ s = bfd_make_section (abfd,
+ (bed->default_use_rela_p
+ ? ".rela.bss" : ".rel.bss"));
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
+ || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/* The name of the dynamic interpreter. This is put in the .interp
+ section. */
+
+#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
+
+#define DEFAULT_STACK_SIZE 0x20000
+
+/* This structure is used to collect the number of entries present in
+ each addressable range of the got. */
+struct _frv_dynamic_got_info
+{
+ /* Several bits of information about the current link. */
+ struct bfd_link_info *info;
+ /* Total size needed for GOT entries within the 12-, 16- or 32-bit
+ ranges. */
+ bfd_vma got12, gotlos, gothilo;
+ /* Total size needed for function descriptor entries within the 12-,
+ 16- or 32-bit ranges. */
+ bfd_vma fd12, fdlos, fdhilo;
+ /* Total size needed function descriptor entries referenced in PLT
+ entries, that would be profitable to place in offsets close to
+ the PIC register. */
+ bfd_vma fdplt;
+ /* Total size needed by lazy PLT entries. */
+ bfd_vma lzplt;
+ /* Number of relocations carried over from input object files. */
+ unsigned long relocs;
+ /* Number of fixups introduced by relocations in input object files. */
+ unsigned long fixups;
+};
+
+/* Compute the total GOT size required by each symbol in each range.
+ Symbols may require up to 4 words in the GOT: an entry pointing to
+ the symbol, an entry pointing to its function descriptor, and a
+ private function descriptors taking two words. */
+
+static int
+_frv_count_got_plt_entries (void **entryp, void *dinfo_)
+{
+ struct frv_pic_relocs_info *entry = *entryp;
+ struct _frv_dynamic_got_info *dinfo = dinfo_;
+
+ /* Allocate space for a GOT entry pointing to the symbol. */
+ if (entry->got12)
+ dinfo->got12 += 4;
+ else if (entry->gotlos)
+ dinfo->gotlos += 4;
+ else if (entry->gothilo)
+ dinfo->gothilo += 4;
+ else
+ entry->relocs32--;
+ entry->relocs32++;
+
+ /* Allocate space for a GOT entry pointing to the function
+ descriptor. */
+ if (entry->fdgot12)
+ dinfo->got12 += 4;
+ else if (entry->fdgotlos)
+ dinfo->gotlos += 4;
+ else if (entry->fdgothilo)
+ dinfo->gothilo += 4;
+ else
+ entry->relocsfd--;
+ entry->relocsfd++;
+
+ /* Decide whether we need a PLT entry, a function descriptor in the
+ GOT, and a lazy PLT entry for this symbol. */
+ entry->plt = entry->call
+ && entry->symndx == -1 && ! FRV_SYM_LOCAL (dinfo->info, entry->d.h)
+ && elf_hash_table (dinfo->info)->dynamic_sections_created;
+ entry->privfd = entry->plt
+ || entry->fdgoff12 || entry->fdgofflos || entry->fdgoffhilo
+ || ((entry->fd || entry->fdgot12 || entry->fdgotlos || entry->fdgothilo)
+ && (entry->symndx != -1
+ || FRV_FUNCDESC_LOCAL (dinfo->info, entry->d.h)));
+ entry->lazyplt = entry->privfd
+ && entry->symndx == -1 && ! FRV_SYM_LOCAL (dinfo->info, entry->d.h)
+ && ! (dinfo->info->flags & DF_BIND_NOW)
+ && elf_hash_table (dinfo->info)->dynamic_sections_created;
+
+ /* Allocate space for a function descriptor. */
+ if (entry->fdgoff12)
+ dinfo->fd12 += 8;
+ else if (entry->fdgofflos)
+ dinfo->fdlos += 8;
+ else if (entry->privfd && entry->plt)
+ dinfo->fdplt += 8;
+ else if (entry->privfd)
+ dinfo->fdhilo += 8;
+ else
+ entry->relocsfdv--;
+ entry->relocsfdv++;
+
+ if (entry->lazyplt)
+ dinfo->lzplt += 8;
+
+ if (!dinfo->info->executable || dinfo->info->pie)
+ dinfo->relocs += entry->relocs32 + entry->relocsfd + entry->relocsfdv;
+ else
+ {
+ if (entry->symndx != -1 || FRV_SYM_LOCAL (dinfo->info, entry->d.h))
+ {
+ if (entry->symndx != -1
+ || entry->d.h->root.type != bfd_link_hash_undefweak)
+ dinfo->fixups += entry->relocs32 + 2 * entry->relocsfdv;
+ }
+ else
+ dinfo->relocs += entry->relocs32 + entry->relocsfdv;
+ if (entry->symndx != -1 || FRV_FUNCDESC_LOCAL (dinfo->info, entry->d.h))
+ {
+ if (entry->symndx != -1
+ || entry->d.h->root.type != bfd_link_hash_undefweak)
+ dinfo->fixups += entry->relocsfd;
+ }
+ else
+ dinfo->relocs += entry->relocsfd;
+ }
+
+ return 1;
+}
+
+/* This structure is used to assign offsets to got entries, function
+ descriptors, plt entries and lazy plt entries. */
+
+struct _frv_dynamic_got_plt_info
+{
+ /* Summary information collected with _frv_count_got_plt_entries. */
+ struct _frv_dynamic_got_info g;
+
+ /* For each addressable range, we record a MAX (positive) and MIN
+ (negative) value. CUR is used to assign got entries, and it's
+ incremented from an initial positive value to MAX, then from MIN
+ to FDCUR (unless FDCUR wraps around first). FDCUR is used to
+ assign function descriptors, and it's decreased from an initial
+ non-positive value to MIN, then from MAX down to CUR (unless CUR
+ wraps around first). All of MIN, MAX, CUR and FDCUR always point
+ to even words. ODD, if non-zero, indicates an odd word to be
+ used for the next got entry, otherwise CUR is used and
+ incremented by a pair of words, wrapping around when it reaches
+ MAX. FDCUR is decremented (and wrapped) before the next function
+ descriptor is chosen. FDPLT indicates the number of remaining
+ slots that can be used for function descriptors used only by PLT
+ entries. */
+ struct _frv_dynamic_got_alloc_data
+ {
+ bfd_signed_vma max, cur, odd, fdcur, min;
+ bfd_vma fdplt;
+ } got12, gotlos, gothilo;
+};
+
+/* Determine the positive and negative ranges to be used by each
+ offset range in the GOT. FDCUR and CUR, that must be aligned to a
+ double-word boundary, are the minimum (negative) and maximum
+ (positive) GOT offsets already used by previous ranges, except for
+ an ODD entry that may have been left behind. GOT and FD indicate
+ the size of GOT entries and function descriptors that must be
+ placed within the range from -WRAP to WRAP. If there's room left,
+ up to FDPLT bytes should be reserved for additional function
+ descriptors. */
+
+inline static bfd_signed_vma
+_frv_compute_got_alloc_data (struct _frv_dynamic_got_alloc_data *gad,
+ bfd_signed_vma fdcur,
+ bfd_signed_vma odd,
+ bfd_signed_vma cur,
+ bfd_vma got,
+ bfd_vma fd,
+ bfd_vma fdplt,
+ bfd_vma wrap)
+{
+ bfd_signed_vma wrapmin = -wrap;
+
+ /* Start at the given initial points. */
+ gad->fdcur = fdcur;
+ gad->cur = cur;
+
+ /* If we had an incoming odd word and we have any got entries that
+ are going to use it, consume it, otherwise leave gad->odd at
+ zero. We might force gad->odd to zero and return the incoming
+ odd such that it is used by the next range, but then GOT entries
+ might appear to be out of order and we wouldn't be able to
+ shorten the GOT by one word if it turns out to end with an
+ unpaired GOT entry. */
+ if (odd && got)
+ {
+ gad->odd = odd;
+ got -= 4;
+ odd = 0;
+ }
+ else
+ gad->odd = 0;
+
+ /* If we're left with an unpaired GOT entry, compute its location
+ such that we can return it. Otherwise, if got doesn't require an
+ odd number of words here, either odd was already zero in the
+ block above, or it was set to zero because got was non-zero, or
+ got was already zero. In the latter case, we want the value of
+ odd to carry over to the return statement, so we don't want to
+ reset odd unless the condition below is true. */
+ if (got & 4)
+ {
+ odd = cur + got;
+ got += 4;
+ }
+
+ /* Compute the tentative boundaries of this range. */
+ gad->max = cur + got;
+ gad->min = fdcur - fd;
+ gad->fdplt = 0;
+
+ /* If function descriptors took too much space, wrap some of them
+ around. */
+ if (gad->min < wrapmin)
+ {
+ gad->max += wrapmin - gad->min;
+ gad->min = wrapmin;
+ }
+ /* If there is space left and we have function descriptors
+ referenced in PLT entries that could take advantage of shorter
+ offsets, place them here. */
+ else if (fdplt && gad->min > wrapmin)
+ {
+ bfd_vma fds;
+ if ((bfd_vma) (gad->min - wrapmin) < fdplt)
+ fds = gad->min - wrapmin;
+ else
+ fds = fdplt;
+
+ fdplt -= fds;
+ gad->min -= fds;
+ gad->fdplt += fds;
+ }
+
+ /* If GOT entries took too much space, wrap some of them around.
+ This may well cause gad->min to become lower than wrapmin. This
+ will cause a relocation overflow later on, so we don't have to
+ report it here . */
+ if ((bfd_vma) gad->max > wrap)
+ {
+ gad->min -= gad->max - wrap;
+ gad->max = wrap;
+ }
+ /* If there is more space left, try to place some more function
+ descriptors for PLT entries. */
+ else if (fdplt && (bfd_vma) gad->max < wrap)
+ {
+ bfd_vma fds;
+ if ((bfd_vma) (wrap - gad->max) < fdplt)
+ fds = wrap - gad->max;
+ else
+ fds = fdplt;
+
+ fdplt -= fds;
+ gad->max += fds;
+ gad->fdplt += fds;
+ }
+
+ /* If odd was initially computed as an offset past the wrap point,
+ wrap it around. */
+ if (odd > gad->max)
+ odd = gad->min + odd - gad->max;
+
+ /* _frv_get_got_entry() below will always wrap gad->cur if needed
+ before returning, so do it here too. This guarantees that,
+ should cur and fdcur meet at the wrap point, they'll both be
+ equal to min. */
+ if (gad->cur == gad->max)
+ gad->cur = gad->min;
+
+ return odd;
+}
+
+/* Compute the location of the next GOT entry, given the allocation
+ data for a range. */
+
+inline static bfd_signed_vma
+_frv_get_got_entry (struct _frv_dynamic_got_alloc_data *gad)
+{
+ bfd_signed_vma ret;
+
+ if (gad->odd)
+ {
+ /* If there was an odd word left behind, use it. */
+ ret = gad->odd;
+ gad->odd = 0;
+ }
+ else
+ {
+ /* Otherwise, use the word pointed to by cur, reserve the next
+ as an odd word, and skip to the next pair of words, possibly
+ wrapping around. */
+ ret = gad->cur;
+ gad->odd = gad->cur + 4;
+ gad->cur += 8;
+ if (gad->cur == gad->max)
+ gad->cur = gad->min;
+ }
+
+ return ret;
+}
+
+/* Compute the location of the next function descriptor entry in the
+ GOT, given the allocation data for a range. */
+
+inline static bfd_signed_vma
+_frv_get_fd_entry (struct _frv_dynamic_got_alloc_data *gad)
+{
+ /* If we're at the bottom, wrap around, and only then allocate the
+ next pair of words. */
+ if (gad->fdcur == gad->min)
+ gad->fdcur = gad->max;
+ return gad->fdcur -= 8;
+}
+
+/* Assign GOT offsets for every GOT entry and function descriptor.
+ Doing everything in a single pass is tricky. */
+
+static int
+_frv_assign_got_entries (void **entryp, void *info_)
+{
+ struct frv_pic_relocs_info *entry = *entryp;
+ struct _frv_dynamic_got_plt_info *dinfo = info_;
+
+ if (entry->got12)
+ entry->got_entry = _frv_get_got_entry (&dinfo->got12);
+ else if (entry->gotlos)
+ entry->got_entry = _frv_get_got_entry (&dinfo->gotlos);
+ else if (entry->gothilo)
+ entry->got_entry = _frv_get_got_entry (&dinfo->gothilo);
+
+ if (entry->fdgot12)
+ entry->fdgot_entry = _frv_get_got_entry (&dinfo->got12);
+ else if (entry->fdgotlos)
+ entry->fdgot_entry = _frv_get_got_entry (&dinfo->gotlos);
+ else if (entry->fdgothilo)
+ entry->fdgot_entry = _frv_get_got_entry (&dinfo->gothilo);
+
+ if (entry->fdgoff12)
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->got12);
+ else if (entry->plt && dinfo->got12.fdplt)
+ {
+ dinfo->got12.fdplt -= 8;
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->got12);
+ }
+ else if (entry->fdgofflos)
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->gotlos);
+ else if (entry->plt && dinfo->gotlos.fdplt)
+ {
+ dinfo->gotlos.fdplt -= 8;
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->gotlos);
+ }
+ else if (entry->plt)
+ {
+ dinfo->gothilo.fdplt -= 8;
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->gothilo);
+ }
+ else if (entry->privfd)
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->gothilo);
+
+ return 1;
+}
+
+/* Assign GOT offsets to private function descriptors used by PLT
+ entries (or referenced by 32-bit offsets), as well as PLT entries
+ and lazy PLT entries. */
+
+static int
+_frv_assign_plt_entries (void **entryp, void *info_)
+{
+ struct frv_pic_relocs_info *entry = *entryp;
+ struct _frv_dynamic_got_plt_info *dinfo = info_;
+
+ /* If this symbol requires a local function descriptor, allocate
+ one. */
+ if (entry->privfd && entry->fd_entry == 0)
+ {
+ if (dinfo->got12.fdplt)
+ {
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->got12);
+ dinfo->got12.fdplt -= 8;
+ }
+ else if (dinfo->gotlos.fdplt)
+ {
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->gotlos);
+ dinfo->gotlos.fdplt -= 8;
+ }
+ else
+ {
+ BFD_ASSERT (dinfo->gothilo.fdplt)
+ entry->fd_entry = _frv_get_fd_entry (&dinfo->gothilo);
+ dinfo->gothilo.fdplt -= 8;
+ }
+ }
+
+ if (entry->plt)
+ {
+ int size;
+
+ /* We use the section's raw size to mark the location of the
+ next PLT entry. */
+ entry->plt_entry = frv_plt_section (dinfo->g.info)->_raw_size;
+
+ /* Figure out the length of this PLT entry based on the
+ addressing mode we need to reach the function descriptor. */
+ BFD_ASSERT (entry->fd_entry);
+ if (entry->fd_entry >= -(1 << (12 - 1))
+ && entry->fd_entry < (1 << (12 - 1)))
+ size = 8;
+ else if (entry->fd_entry >= -(1 << (16 - 1))
+ && entry->fd_entry < (1 << (16 - 1)))
+ size = 12;
+ else
+ size = 16;
+
+ frv_plt_section (dinfo->g.info)->_raw_size += size;
+ }
+
+ if (entry->lazyplt)
+ {
+ entry->lzplt_entry = dinfo->g.lzplt;
+ dinfo->g.lzplt += 8;
+ /* If this entry is the one that gets the resolver stub, account
+ for the additional instruction. */
+ if (entry->lzplt_entry % FRV_LZPLT_BLOCK_SIZE == FRV_LZPLT_RESOLV_LOC)
+ dinfo->g.lzplt += 4;
+ }
+
+ return 1;
+}
+
+/* Follow indirect and warning hash entries so that each got entry
+ points to the final symbol definition. P must point to a pointer
+ to the hash table we're traversing. Since this traversal may
+ modify the hash table, we set this pointer to NULL to indicate
+ we've made a potentially-destructive change to the hash table, so
+ the traversal must be restarted. */
+static int
+_frv_resolve_final_relocs_info (void **entryp, void *p)
+{
+ struct frv_pic_relocs_info *entry = *entryp;
+ htab_t *htab = p;
+
+ if (entry->symndx == -1)
+ {
+ struct elf_link_hash_entry *h = entry->d.h;
+
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *)h->root.u.i.link;
+
+ if (entry->d.h == h)
+ return 1;
+
+ entry->d.h = h;
+
+ /* If we can't find this entry with the new bfd hash, re-insert
+ it, and get the traversal restarted. */
+ if (! htab_find (*htab, entry))
+ {
+ htab_clear_slot (*htab, entryp);
+ entryp = htab_find_slot (*htab, entry, INSERT);
+ if (! *entryp)
+ *entryp = entry;
+ /* Abort the traversal, since the whole table may have
+ moved, and leave it up to the parent to restart the
+ process. */
+ *(htab_t *)p = NULL;
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+/* Set the sizes of the dynamic sections. */
+
+static bfd_boolean
+elf32_frv_size_dynamic_sections (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ bfd *dynobj;
+ asection *s;
+ struct _frv_dynamic_got_plt_info gpinfo;
+ bfd_signed_vma odd;
+ bfd_vma limit;
+
+ dynobj = elf_hash_table (info)->dynobj;
+ BFD_ASSERT (dynobj != NULL);
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ /* Set the contents of the .interp section to the interpreter. */
+ if (info->executable)
+ {
+ s = bfd_get_section_by_name (dynobj, ".interp");
+ BFD_ASSERT (s != NULL);
+ s->_raw_size = sizeof ELF_DYNAMIC_INTERPRETER;
+ s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER;
+ }
+ }
+
+ memset (&gpinfo, 0, sizeof (gpinfo));
+ gpinfo.g.info = info;
+
+ for (;;)
+ {
+ htab_t relocs = frv_relocs_info (info);
+
+ htab_traverse (relocs, _frv_resolve_final_relocs_info, &relocs);
+
+ if (relocs == frv_relocs_info (info))
+ break;
+ }
+
+ htab_traverse (frv_relocs_info (info), _frv_count_got_plt_entries,
+ &gpinfo.g);
+
+ odd = 12;
+ /* Compute the total size taken by entries in the 12-bit and 16-bit
+ ranges, to tell how many PLT function descriptors we can bring
+ into the 12-bit range without causing the 16-bit range to
+ overflow. */
+ limit = odd + gpinfo.g.got12 + gpinfo.g.gotlos
+ + gpinfo.g.fd12 + gpinfo.g.fdlos;
+ if (limit < (bfd_vma)1 << 16)
+ limit = ((bfd_vma)1 << 16) - limit;
+ else
+ limit = 0;
+ if (gpinfo.g.fdplt < limit)
+ limit = gpinfo.g.fdplt;
+
+ /* Determine the ranges of GOT offsets that we can use for each
+ range of addressing modes. */
+ odd = _frv_compute_got_alloc_data (&gpinfo.got12,
+ 0,
+ odd,
+ 16,
+ gpinfo.g.got12,
+ gpinfo.g.fd12,
+ limit,
+ (bfd_vma)1 << (12-1));
+ odd = _frv_compute_got_alloc_data (&gpinfo.gotlos,
+ gpinfo.got12.min,
+ odd,
+ gpinfo.got12.max,
+ gpinfo.g.gotlos,
+ gpinfo.g.fdlos,
+ gpinfo.g.fdplt - gpinfo.got12.fdplt,
+ (bfd_vma)1 << (16-1));
+ odd = _frv_compute_got_alloc_data (&gpinfo.gothilo,
+ gpinfo.gotlos.min,
+ odd,
+ gpinfo.gotlos.max,
+ gpinfo.g.gothilo,
+ gpinfo.g.fdhilo,
+ gpinfo.g.fdplt - gpinfo.got12.fdplt
+ - gpinfo.gotlos.fdplt,
+ (bfd_vma)1 << (32-1));
+
+ /* Now assign (most) GOT offsets. */
+ htab_traverse (frv_relocs_info (info), _frv_assign_got_entries, &gpinfo);
+
+ frv_got_section (info)->_raw_size = gpinfo.gothilo.max - gpinfo.gothilo.min
+ /* If an odd word is the last word of the GOT, we don't need this
+ word to be part of the GOT. */
+ - (odd + 4 == gpinfo.gothilo.max ? 4 : 0);
+ if (frv_got_section (info)->_raw_size == 0)
+ frv_got_section (info)->flags |= SEC_EXCLUDE;
+ else if (frv_got_section (info)->_raw_size == 12
+ && ! elf_hash_table (info)->dynamic_sections_created)
+ {
+ frv_got_section (info)->flags |= SEC_EXCLUDE;
+ frv_got_section (info)->_raw_size = 0;
+ }
+ else
+ {
+ frv_got_section (info)->contents =
+ (bfd_byte *) bfd_zalloc (dynobj, frv_got_section (info)->_raw_size);
+ if (frv_got_section (info)->contents == NULL)
+ return FALSE;
+ }
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ /* Subtract the number of lzplt entries, since those will generate
+ relocations in the pltrel section. */
+ frv_gotrel_section (info)->_raw_size =
+ (gpinfo.g.relocs - gpinfo.g.lzplt / 8)
+ * get_elf_backend_data (output_bfd)->s->sizeof_rel;
+ else
+ BFD_ASSERT (gpinfo.g.relocs == 0);
+ if (frv_gotrel_section (info)->_raw_size == 0)
+ frv_gotrel_section (info)->flags |= SEC_EXCLUDE;
+ else
+ {
+ frv_gotrel_section (info)->contents =
+ (bfd_byte *) bfd_zalloc (dynobj, frv_gotrel_section (info)->_raw_size);
+ if (frv_gotrel_section (info)->contents == NULL)
+ return FALSE;
+ }
+
+ if (elf_elfheader (output_bfd)->e_flags & EF_FRV_FDPIC)
+ frv_gotfixup_section (info)->_raw_size = (gpinfo.g.fixups + 1) * 4;
+ if (frv_gotfixup_section (info)->_raw_size == 0)
+ frv_gotfixup_section (info)->flags |= SEC_EXCLUDE;
+ else
+ {
+ frv_gotfixup_section (info)->contents =
+ (bfd_byte *) bfd_zalloc (dynobj,
+ frv_gotfixup_section (info)->_raw_size);
+ if (frv_gotfixup_section (info)->contents == NULL)
+ return FALSE;
+ }
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ frv_pltrel_section (info)->_raw_size =
+ gpinfo.g.lzplt / 8 * get_elf_backend_data (output_bfd)->s->sizeof_rel;
+ if (frv_pltrel_section (info)->_raw_size == 0)
+ frv_pltrel_section (info)->flags |= SEC_EXCLUDE;
+ else
+ {
+ frv_pltrel_section (info)->contents =
+ (bfd_byte *) bfd_zalloc (dynobj,
+ frv_pltrel_section (info)->_raw_size);
+ if (frv_pltrel_section (info)->contents == NULL)
+ return FALSE;
+ }
+ }
+
+ /* Add 4 bytes for every block of at most 65535 lazy PLT entries,
+ such that there's room for the additional instruction needed to
+ call the resolver. Since _frv_assign_got_entries didn't account
+ for them, our block size is 4 bytes smaller than the real block
+ size. */
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ frv_plt_section (info)->_raw_size = gpinfo.g.lzplt
+ + ((gpinfo.g.lzplt + (FRV_LZPLT_BLOCK_SIZE - 4) - 8)
+ / (FRV_LZPLT_BLOCK_SIZE - 4) * 4);
+ }
+
+ /* Reset it, such that _frv_assign_plt_entries() can use it to
+ actually assign lazy PLT entries addresses. */
+ gpinfo.g.lzplt = 0;
+
+ /* Save information that we're going to need to generate GOT and PLT
+ entries. */
+ frv_got_initial_offset (info) = -gpinfo.gothilo.min;
+
+ if (get_elf_backend_data (output_bfd)->want_got_sym)
+ elf_hash_table (info)->hgot->root.u.def.value
+ += frv_got_initial_offset (info);
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ frv_plt_initial_offset (info) = frv_plt_section (info)->_raw_size;
+
+ htab_traverse (frv_relocs_info (info), _frv_assign_plt_entries, &gpinfo);
+
+ /* Allocate the PLT section contents only after
+ _frv_assign_plt_entries has a chance to add the size of the
+ non-lazy PLT entries. */
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ if (frv_plt_section (info)->_raw_size == 0)
+ frv_plt_section (info)->flags |= SEC_EXCLUDE;
+ else
+ {
+ frv_plt_section (info)->contents =
+ (bfd_byte *) bfd_zalloc (dynobj, frv_plt_section (info)->_raw_size);
+ if (frv_plt_section (info)->contents == NULL)
+ return FALSE;
+ }
+ }
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ if (frv_got_section (info)->_raw_size)
+ if (! bfd_elf32_add_dynamic_entry (info, DT_PLTGOT, 0))
+ return FALSE;
+
+ if (frv_pltrel_section (info)->_raw_size)
+ if (! bfd_elf32_add_dynamic_entry (info, DT_PLTRELSZ, 0)
+ || ! bfd_elf32_add_dynamic_entry (info, DT_PLTREL, DT_REL)
+ || ! bfd_elf32_add_dynamic_entry (info, DT_JMPREL, 0))
+ return FALSE;
+
+ if (frv_gotrel_section (info)->_raw_size)
+ if (! bfd_elf32_add_dynamic_entry (info, DT_REL, 0)
+ || ! bfd_elf32_add_dynamic_entry (info, DT_RELSZ, 0)
+ || ! bfd_elf32_add_dynamic_entry (info, DT_RELENT,
+ sizeof (Elf32_External_Rel)))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+elf32_frv_always_size_sections (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ if (!info->relocatable
+ && elf_elfheader (output_bfd)->e_flags & EF_FRV_FDPIC)
+ {
+ struct elf_link_hash_entry *h;
+ asection *sec;
+
+ /* Force a PT_GNU_STACK segment to be created. */
+ if (! elf_tdata (output_bfd)->stack_flags)
+ elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X;
+
+ /* Define __stacksize if it's not defined yet. */
+ h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+ FALSE, FALSE, FALSE);
+ if (! h || h->root.type != bfd_link_hash_defined
+ || h->type != STT_OBJECT
+ || !(h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
+ {
+ struct bfd_link_hash_entry *bh;
+
+ if (!(_bfd_generic_link_add_one_symbol
+ (info, output_bfd, "__stacksize",
+ BSF_GLOBAL, bfd_abs_section_ptr, DEFAULT_STACK_SIZE,
+ (const char *) NULL, FALSE,
+ get_elf_backend_data (output_bfd)->collect, &bh)))
+ return FALSE;
+
+ h = (struct elf_link_hash_entry *) bh;
+ h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+ h->type = STT_OBJECT;
+ }
+
+ /* Create a stack section, and set its alignment. */
+ sec = bfd_make_section (output_bfd, ".stack");
+
+ if (sec == NULL
+ || ! bfd_set_section_alignment (output_bfd, sec, 3))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bfd_boolean
+elf32_frv_modify_segment_map (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ if (elf_elfheader (output_bfd)->e_flags & EF_FRV_FDPIC)
+ {
+ struct elf_segment_map *m;
+
+ for (m = elf_tdata (output_bfd)->segment_map; m != NULL; m = m->next)
+ if (m->p_type == PT_GNU_STACK)
+ break;
+
+ if (m)
+ {
+ asection *sec = bfd_get_section_by_name (output_bfd, ".stack");
+ struct elf_link_hash_entry *h;
+
+ if (sec)
+ {
+ /* Obtain the pointer to the __stacksize symbol. */
+ h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize",
+ FALSE, FALSE, FALSE);
+ while (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *)h->root.u.i.link;
+ BFD_ASSERT (h->root.type == bfd_link_hash_defined);
+
+ /* Set the section size from the symbol value. We
+ intentionally ignore the symbol section. */
+ if (h->root.type == bfd_link_hash_defined)
+ sec->_raw_size = h->root.u.def.value;
+ else
+ sec->_raw_size = DEFAULT_STACK_SIZE;
+
+ /* Add the stack section to the PT_GNU_STACK segment,
+ such that its size and alignment requirements make it
+ to the segment. */
+ m->sections[m->count] = sec;
+ m->count++;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+/* Fill in code and data in dynamic sections. */
+
+static bfd_boolean
+elf32_frv_finish_dynamic_sections (bfd *output_bfd,
+ struct bfd_link_info *info)
+{
+ bfd *dynobj;
+ asection *sdyn;
+
+ dynobj = elf_hash_table (info)->dynobj;
+
+ if (frv_got_section (info))
+ {
+ BFD_ASSERT (frv_gotrel_section (info)->_raw_size
+ == (frv_gotrel_section (info)->reloc_count
+ * sizeof (Elf32_External_Rel)));
+
+ if (frv_gotfixup_section (info))
+ {
+ if (elf_elfheader (output_bfd)->e_flags & EF_FRV_FDPIC)
+ {
+ struct elf_link_hash_entry *hgot = elf_hash_table (info)->hgot;
+ bfd_vma got_value = hgot->root.u.def.value
+ + hgot->root.u.def.section->output_section->vma
+ + hgot->root.u.def.section->output_offset;
+
+ _frv_add_rofixup (output_bfd, frv_gotfixup_section (info),
+ got_value);
+ }
+
+ if (frv_gotfixup_section (info)->_raw_size
+ != (frv_gotfixup_section (info)->reloc_count * 4))
+ {
+ if (!elf_hash_table (info)->dynamic_sections_created)
+ {
+ info->callbacks->warning
+ (info, "no dynamic sections, missing -melf32frvfd?",
+ ".rofixup", NULL, NULL, 0);
+ return FALSE;
+ }
+ BFD_ASSERT (0);
+ }
+ }
+ }
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ BFD_ASSERT (frv_pltrel_section (info)->_raw_size
+ == (frv_pltrel_section (info)->reloc_count
+ * sizeof (Elf32_External_Rel)));
+ }
+
+ sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+
+ if (elf_hash_table (info)->dynamic_sections_created)
+ {
+ Elf32_External_Dyn * dyncon;
+ Elf32_External_Dyn * dynconend;
+
+ BFD_ASSERT (sdyn != NULL);
+
+ dyncon = (Elf32_External_Dyn *) sdyn->contents;
+ dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
+
+ for (; dyncon < dynconend; dyncon++)
+ {
+ Elf_Internal_Dyn dyn;
+
+ bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
+
+ switch (dyn.d_tag)
+ {
+ default:
+ break;
+
+ case DT_PLTGOT:
+ dyn.d_un.d_ptr = frv_got_section (info)->output_section->vma
+ + frv_got_section (info)->output_offset
+ + frv_got_initial_offset (info);
+ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ break;
+
+ case DT_JMPREL:
+ dyn.d_un.d_ptr = frv_pltrel_section (info)->output_section->vma
+ + frv_pltrel_section (info)->output_offset;
+ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ break;
+
+ case DT_PLTRELSZ:
+ if (frv_pltrel_section (info)->_cooked_size != 0)
+ dyn.d_un.d_val = frv_pltrel_section (info)->_cooked_size;
+ else
+ dyn.d_un.d_val = frv_pltrel_section (info)->_raw_size;
+ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ break;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+ regular object. */
+
+static bfd_boolean
+elf32_frv_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
+{
+ bfd * dynobj;
+
+ dynobj = elf_hash_table (info)->dynobj;
+
+ /* Make sure we know what is going on here. */
+ BFD_ASSERT (dynobj != NULL
+ && (h->weakdef != NULL
+ || ((h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_REF_REGULAR) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0)));
+
+ /* If this is a weak symbol, and there is a real definition, the
+ processor independent code will have arranged for us to see the
+ real definition first, and we can just use the same value. */
+ if (h->weakdef != NULL)
+ {
+ BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
+ || h->weakdef->root.type == bfd_link_hash_defweak);
+ h->root.u.def.section = h->weakdef->root.u.def.section;
+ h->root.u.def.value = h->weakdef->root.u.def.value;
+ }
+
+ return TRUE;
+}
+
+/* Perform any actions needed for dynamic symbols. */
+
+static bfd_boolean
+elf32_frv_finish_dynamic_symbol (bfd *output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ struct elf_link_hash_entry *h ATTRIBUTE_UNUSED,
+ Elf_Internal_Sym *sym ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
/* Look through the relocs for a section during the first phase.
- Since we don't do .gots or .plts, we just need to consider the
- virtual table relocs for gc. */
+
+ Besides handling virtual table relocs for gc, we have to deal with
+ all sorts of PIC-related relocations. We describe below the
+ general plan on how to handle such relocations, even though we only
+ collect information at this point, storing them in hash tables for
+ perusal of later passes.
+
+ 32 relocations are propagated to the linker output when creating
+ position-independent output. LO16 and HI16 relocations are not
+ supposed to be encountered in this case.
+
+ LABEL16 should always be resolvable by the linker, since it's only
+ used by branches.
+
+ LABEL24, on the other hand, is used by calls. If it turns out that
+ the target of a call is a dynamic symbol, a PLT entry must be
+ created for it, which triggers the creation of a private function
+ descriptor and, unless lazy binding is disabled, a lazy PLT entry.
+
+ GPREL relocations require the referenced symbol to be in the same
+ segment as _gp, but this can only be checked later.
+
+ All GOT, GOTOFF and FUNCDESC relocations require a .got section to
+ exist. LABEL24 might as well, since it may require a PLT entry,
+ that will require a got.
+
+ Non-FUNCDESC GOT relocations require a GOT entry to be created
+ regardless of whether the symbol is dynamic. However, since a
+ global symbol that turns out to not be exported may have the same
+ address of a non-dynamic symbol, we don't assign GOT entries at
+ this point, such that we can share them in this case. A relocation
+ for the GOT entry always has to be created, be it to offset a
+ private symbol by the section load address, be it to get the symbol
+ resolved dynamically.
+
+ FUNCDESC GOT relocations require a GOT entry to be created, and
+ handled as if a FUNCDESC relocation was applied to the GOT entry in
+ an object file.
+
+ FUNCDESC relocations referencing a symbol that turns out to NOT be
+ dynamic cause a private function descriptor to be created. The
+ FUNCDESC relocation then decays to a 32 relocation that points at
+ the private descriptor. If the symbol is dynamic, the FUNCDESC
+ relocation is propagated to the linker output, such that the
+ dynamic linker creates the canonical descriptor, pointing to the
+ dynamically-resolved definition of the function.
+
+ Non-FUNCDESC GOTOFF relocations must always refer to non-dynamic
+ symbols that are assigned to the same segment as the GOT, but we
+ can only check this later, after we know the complete set of
+ symbols defined and/or exported.
+
+ FUNCDESC GOTOFF relocations require a function descriptor to be
+ created and, unless lazy binding is disabled or the symbol is not
+ dynamic, a lazy PLT entry. Since we can't tell at this point
+ whether a symbol is going to be dynamic, we have to decide later
+ whether to create a lazy PLT entry or bind the descriptor directly
+ to the private function.
+
+ FUNCDESC_VALUE relocations are not supposed to be present in object
+ files, but they may very well be simply propagated to the linker
+ output, since they have no side effect.
+
+
+ A function descriptor always requires a FUNCDESC_VALUE relocation.
+ Whether it's in .plt.rel or not depends on whether lazy binding is
+ enabled and on whether the referenced symbol is dynamic.
+
+ The existence of a lazy PLT requires the resolverStub lazy PLT
+ entry to be present.
+
+
+ As for assignment of GOT, PLT and lazy PLT entries, and private
+ descriptors, we might do them all sequentially, but we can do
+ better than that. For example, we can place GOT entries and
+ private function descriptors referenced using 12-bit operands
+ closer to the PIC register value, such that these relocations don't
+ overflow. Those that are only referenced with LO16 relocations
+ could come next, but we may as well place PLT-required function
+ descriptors in the 12-bit range to make them shorter. Symbols
+ referenced with LO16/HI16 may come next, but we may place
+ additional function descriptors in the 16-bit range if we can
+ reliably tell that we've already placed entries that are ever
+ referenced with only LO16. PLT entries are therefore generated as
+ small as possible, while not introducing relocation overflows in
+ GOT or FUNCDESC_GOTOFF relocations. Lazy PLT entries could be
+ generated before or after PLT entries, but not intermingled with
+ them, such that we can have more lazy PLT entries in range for a
+ branch to the resolverStub. The resolverStub should be emitted at
+ the most distant location from the first lazy PLT entry such that
+ it's still in range for a branch, or closer, if there isn't a need
+ for so many lazy PLT entries. Additional lazy PLT entries may be
+ emitted after the resolverStub, as long as branches are still in
+ range. If the branch goes out of range, longer lazy PLT entries
+ are emitted.
+
+ We could further optimize PLT and lazy PLT entries by giving them
+ priority in assignment to closer-to-gr17 locations depending on the
+ number of occurrences of references to them (assuming a function
+ that's called more often is more important for performance, so its
+ PLT entry should be faster), or taking hints from the compiler.
+ Given infinite time and money... :-) */
static bfd_boolean
elf32_frv_check_relocs (abfd, info, sec, relocs)
@@ -944,6 +3787,8 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
const Elf_Internal_Rela *rel;
const Elf_Internal_Rela *rel_end;
+ bfd *dynobj;
+ struct frv_pic_relocs_info *picrel;
if (info->relocatable)
return TRUE;
@@ -954,6 +3799,7 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
if (!elf_bad_symtab (abfd))
sym_hashes_end -= symtab_hdr->sh_info;
+ dynobj = elf_hash_table (info)->dynobj;
rel_end = relocs + sec->reloc_count;
for (rel = relocs; rel < rel_end; rel++)
{
@@ -967,7 +3813,114 @@ elf32_frv_check_relocs (abfd, info, sec, relocs)
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_FRV_LABEL24:
+ case R_FRV_32:
+ case R_FRV_GOT12:
+ case R_FRV_GOTHI:
+ case R_FRV_GOTLO:
+ case R_FRV_FUNCDESC_GOT12:
+ case R_FRV_FUNCDESC_GOTHI:
+ case R_FRV_FUNCDESC_GOTLO:
+ case R_FRV_GOTOFF12:
+ case R_FRV_GOTOFFHI:
+ case R_FRV_GOTOFFLO:
+ case R_FRV_FUNCDESC_GOTOFF12:
+ case R_FRV_FUNCDESC_GOTOFFHI:
+ case R_FRV_FUNCDESC_GOTOFFLO:
+ case R_FRV_FUNCDESC:
+ case R_FRV_FUNCDESC_VALUE:
+ if (! dynobj)
+ {
+ elf_hash_table (info)->dynobj = dynobj = abfd;
+ if (! _frv_create_got_section (abfd, info))
+ return FALSE;
+ }
+ if (h != NULL)
+ {
+ if (h->dynindx == -1)
+ switch (ELF_ST_VISIBILITY (h->other))
+ {
+ case STV_INTERNAL:
+ case STV_HIDDEN:
+ break;
+ default:
+ bfd_elf32_link_record_dynamic_symbol (info, h);
+ break;
+ }
+ picrel
+ = frv_pic_relocs_info_for_global (frv_relocs_info (info),
+ abfd, h,
+ rel->r_addend);
+ }
+ else
+ picrel = frv_pic_relocs_info_for_local (frv_relocs_info (info),
+ abfd, r_symndx,
+ rel->r_addend);
+ if (! picrel)
+ return FALSE;
+ break;
+
+ default:
+ picrel = NULL;
+ break;
+ }
+
+ switch (ELF32_R_TYPE (rel->r_info))
{
+ case R_FRV_LABEL24:
+ picrel->call = 1;
+ break;
+
+ case R_FRV_FUNCDESC_VALUE:
+ picrel->relocsfdv++;
+ if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
+ picrel->relocs32--;
+ /* Fall through. */
+ case R_FRV_32:
+ picrel->sym = 1;
+ if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC)
+ picrel->relocs32++;
+ break;
+
+ case R_FRV_GOT12:
+ picrel->got12 = 1;
+ break;
+
+ case R_FRV_GOTHI:
+ case R_FRV_GOTLO:
+ picrel->gothilo = 1;
+ break;
+
+ case R_FRV_FUNCDESC_GOT12:
+ picrel->fdgot12 = 1;
+ break;
+
+ case R_FRV_FUNCDESC_GOTHI:
+ case R_FRV_FUNCDESC_GOTLO:
+ picrel->fdgothilo = 1;
+ break;
+
+ case R_FRV_GOTOFF12:
+ case R_FRV_GOTOFFHI:
+ case R_FRV_GOTOFFLO:
+ picrel->gotoff = 1;
+ break;
+
+ case R_FRV_FUNCDESC_GOTOFF12:
+ picrel->fdgoff12 = 1;
+ break;
+
+ case R_FRV_FUNCDESC_GOTOFFHI:
+ case R_FRV_FUNCDESC_GOTOFFLO:
+ picrel->fdgoffhilo = 1;
+ break;
+
+ case R_FRV_FUNCDESC:
+ picrel->fd = 1;
+ picrel->relocsfd++;
+ break;
+
/* This relocation describes the C++ object vtable hierarchy.
Reconstruct it for later use during GC. */
case R_FRV_GNU_VTINHERIT:
@@ -1067,6 +4020,9 @@ frv_elf_merge_private_bfd_data (ibfd, obfd)
new_flags = elf_elfheader (ibfd)->e_flags;
old_flags = elf_elfheader (obfd)->e_flags;
+ if (new_flags & EF_FRV_FDPIC)
+ new_flags &= ~EF_FRV_PIC;
+
#ifdef DEBUG
(*_bfd_error_handler) ("old_flags = 0x%.8lx, new_flags = 0x%.8lx, init = %s, filename = %s",
old_flags, new_flags, elf_flags_init (obfd) ? "yes" : "no",
@@ -1369,6 +4325,12 @@ frv_elf_print_private_bfd_data (abfd, ptr)
if (flags & EF_FRV_BIGPIC)
fprintf (file, " -fPIC");
+ if (flags & EF_FRV_LIBPIC)
+ fprintf (file, " -mlibrary-pic");
+
+ if (flags & EF_FRV_FDPIC)
+ fprintf (file, " -mfdpic");
+
if (flags & EF_FRV_NON_PIC_RELOCS)
fprintf (file, " non-pic relocations");
@@ -1387,7 +4349,7 @@ frv_elf_print_private_bfd_data (abfd, ptr)
#define TARGET_BIG_SYM bfd_elf32_frv_vec
#define TARGET_BIG_NAME "elf32-frv"
-#define elf_info_to_howto_rel NULL
+#define elf_info_to_howto_rel frv_info_to_howto_rel
#define elf_info_to_howto frv_info_to_howto_rela
#define elf_backend_relocate_section elf32_frv_relocate_section
#define elf_backend_gc_mark_hook elf32_frv_gc_mark_hook
@@ -1405,4 +4367,33 @@ frv_elf_print_private_bfd_data (abfd, ptr)
#define bfd_elf32_bfd_merge_private_bfd_data frv_elf_merge_private_bfd_data
#define bfd_elf32_bfd_print_private_bfd_data frv_elf_print_private_bfd_data
+#define bfd_elf32_bfd_link_hash_table_create frv_elf_link_hash_table_create
+#define elf_backend_always_size_sections \
+ elf32_frv_always_size_sections
+#define elf_backend_modify_segment_map \
+ elf32_frv_modify_segment_map
+
+#define elf_backend_create_dynamic_sections \
+ elf32_frv_create_dynamic_sections
+#define elf_backend_adjust_dynamic_symbol \
+ elf32_frv_adjust_dynamic_symbol
+#define elf_backend_size_dynamic_sections \
+ elf32_frv_size_dynamic_sections
+#define elf_backend_finish_dynamic_symbol \
+ elf32_frv_finish_dynamic_symbol
+#define elf_backend_finish_dynamic_sections \
+ elf32_frv_finish_dynamic_sections
+
+#define elf_backend_want_got_sym 1
+#define elf_backend_got_header_size 0
+#define elf_backend_want_got_plt 0
+#define elf_backend_plt_readonly 1
+#define elf_backend_want_plt_sym 0
+#define elf_backend_plt_header_size 0
+
+#define elf_backend_may_use_rel_p 1
+#define elf_backend_may_use_rela_p 1
+/* We use REL for dynamic relocations only. */
+#define elf_backend_default_use_rela_p 1
+
#include "elf32-target.h"
diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c
index 18d87d4..1a17621 100644
--- a/bfd/elf32-h8300.c
+++ b/bfd/elf32-h8300.c
@@ -1,5 +1,5 @@
/* BFD back-end for Renesas H8/300 ELF binaries.
- Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2003
+ Copyright 1993, 1995, 1998, 1999, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -30,23 +30,23 @@ static void elf32_h8_info_to_howto
(bfd *, arelent *, Elf_Internal_Rela *);
static void elf32_h8_info_to_howto_rel
(bfd *, arelent *, Elf_Internal_Rela *);
-static unsigned long elf32_h8_mach
- (flagword);
-static void elf32_h8_final_write_processing
- (bfd *, bfd_boolean);
-static bfd_boolean elf32_h8_object_p
- (bfd *);
-static bfd_boolean elf32_h8_merge_private_bfd_data
- (bfd *, bfd *);
+static unsigned long elf32_h8_mach (flagword);
+static void elf32_h8_final_write_processing (bfd *, bfd_boolean);
+static bfd_boolean elf32_h8_object_p (bfd *);
+static bfd_boolean elf32_h8_merge_private_bfd_data (bfd *, bfd *);
static bfd_boolean elf32_h8_relax_section
(bfd *, asection *, struct bfd_link_info *, bfd_boolean *);
static bfd_boolean elf32_h8_relax_delete_bytes
(bfd *, asection *, bfd_vma, int);
-static bfd_boolean elf32_h8_symbol_address_p
- (bfd *, asection *, bfd_vma);
+static bfd_boolean elf32_h8_symbol_address_p (bfd *, asection *, bfd_vma);
static bfd_byte *elf32_h8_get_relocated_section_contents
(bfd *, struct bfd_link_info *, struct bfd_link_order *,
bfd_byte *, bfd_boolean, asymbol **);
+static asection *elf32_h8_gc_mark_hook
+ (asection *, struct bfd_link_info *, Elf_Internal_Rela *,
+ struct elf_link_hash_entry *, Elf_Internal_Sym *);
+static bfd_boolean elf32_h8_gc_sweep_hook
+ (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);
static bfd_reloc_status_type elf32_h8_final_link_relocate
(unsigned long, bfd *, bfd *, asection *,
bfd_byte *, bfd_vma, bfd_vma, bfd_vma,
@@ -348,7 +348,7 @@ elf32_h8_final_link_relocate (unsigned long r_type, bfd *input_bfd,
value += addend;
/* HIT_DATA is the address for the first byte for the relocated
- value. Subtract 1 so that we can manipulate the data in 32bit
+ value. Subtract 1 so that we can manipulate the data in 32-bit
hunks. */
hit_data--;
@@ -358,7 +358,7 @@ elf32_h8_final_link_relocate (unsigned long r_type, bfd *input_bfd,
/* Retrieve the type byte for value from the section contents. */
value |= (bfd_get_32 (input_bfd, hit_data) & 0xff000000);
- /* Now scribble it out in one 32bit hunk. */
+ /* Now scribble it out in one 32-bit hunk. */
bfd_put_32 (input_bfd, value, hit_data);
return bfd_reloc_ok;
@@ -640,8 +640,8 @@ elf32_h8_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
&& bfd_get_mach (obfd) < bfd_get_mach (ibfd))
{
if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
- bfd_get_mach (ibfd)))
- return FALSE;
+ bfd_get_mach (ibfd)))
+ return FALSE;
}
return TRUE;
@@ -659,9 +659,16 @@ elf32_h8_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
bCC:16 -> bCC:8 2 bytes
bsr:16 -> bsr:8 2 bytes
+ bset:16 -> bset:8 2 bytes
+ bset:24/32 -> bset:8 4 bytes
+ (also applicable to other bit manipulation instructions)
+
mov.b:16 -> mov.b:8 2 bytes
mov.b:24/32 -> mov.b:8 4 bytes
+ bset:24/32 -> bset:16 2 bytes
+ (also applicable to other bit manipulation instructions)
+
mov.[bwl]:24/32 -> mov.[bwl]:16 2 bytes */
static bfd_boolean
@@ -804,7 +811,7 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
the linker is run. */
switch (ELF32_R_TYPE (irel->r_info))
{
- /* Try to turn a 24 bit absolute branch/call into an 8 bit
+ /* Try to turn a 24-bit absolute branch/call into an 8-bit
pc-relative branch/call. */
case R_H8_DIR24R8:
{
@@ -915,8 +922,10 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
}
if (code == 0x5e)
+ /* This is jsr. */
bfd_put_8 (abfd, 0x55, contents + irel->r_offset - 1);
else if (code == 0x5a)
+ /* This is jmp. */
bfd_put_8 (abfd, 0x40, contents + irel->r_offset - 1);
else
abort ();
@@ -937,7 +946,7 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
break;
}
- /* Try to turn a 16bit pc-relative branch into a 8bit pc-relative
+ /* Try to turn a 16-bit pc-relative branch into a 8-bit pc-relative
branch. */
case R_H8_PCREL16:
{
@@ -971,14 +980,21 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
if (code == 0x58)
{
/* bCC:16 -> bCC:8 */
- /* Get the condition code from the original insn. */
+ /* Get the second byte of the original insn, which
+ contains the condition code. */
code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
+
+ /* Compute the fisrt byte of the relaxed
+ instruction. The original sequence 0x58 0xX0
+ is relaxed to 0x4X, where X represents the
+ condition code. */
code &= 0xf0;
code >>= 4;
code |= 0x40;
bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
}
else if (code == 0x5c)
+ /* This is bsr. */
bfd_put_8 (abfd, 0x55, contents + irel->r_offset - 2);
else
abort ();
@@ -1000,8 +1016,15 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
break;
}
- /* This is a 16 bit absolute address in a "mov.b" insn, which may
- become an 8 bit absolute address if its in the right range. */
+ /* This is a 16-bit absolute address in one of the following
+ instructions:
+
+ "band", "bclr", "biand", "bild", "bior", "bist", "bixor",
+ "bld", "bnot", "bor", "bset", "bst", "btst", "bxor", and
+ "mov.b"
+
+ We may relax this into an 8-bit absolute address if it's in
+ the right range. */
case R_H8_DIR16A8:
{
bfd_vma value;
@@ -1010,6 +1033,7 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
if (value >= 0xffffff00u)
{
unsigned char code;
+ unsigned char temp_code;
/* Note that we've changed the relocs, section contents,
etc. */
@@ -1020,22 +1044,46 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
/* Get the opcode. */
code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
- /* Sanity check. */
+ /* All instructions with R_H8_DIR16A8 start with
+ 0x6a. */
if (code != 0x6a)
abort ();
- code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
+ temp_code = code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
+ /* If this is a mov.b instruction, clear the lower
+ nibble, which contains the source/destination
+ register number. */
+ if ((temp_code & 0x10) != 0x10)
+ temp_code &= 0xf0;
- if ((code & 0xf0) == 0x00)
- bfd_put_8 (abfd,
- (code & 0xf) | 0x20,
- contents + irel->r_offset - 2);
- else if ((code & 0xf0) == 0x80)
- bfd_put_8 (abfd,
- (code & 0xf) | 0x30,
- contents + irel->r_offset - 2);
- else
- abort ();
+ switch (temp_code)
+ {
+ case 0x00:
+ /* This is mov.b @aa:16,Rd. */
+ bfd_put_8 (abfd, (code & 0xf) | 0x20,
+ contents + irel->r_offset - 2);
+ break;
+ case 0x80:
+ /* This is mov.b Rs,@aa:16. */
+ bfd_put_8 (abfd, (code & 0xf) | 0x30,
+ contents + irel->r_offset - 2);
+ break;
+ case 0x18:
+ /* This is a bit-maniputation instruction that
+ stores one bit into memory, one of "bclr",
+ "bist", "bnot", "bset", and "bst". */
+ bfd_put_8 (abfd, 0x7f, contents + irel->r_offset - 2);
+ break;
+ case 0x10:
+ /* This is a bit-maniputation instruction that
+ loads one bit from memory, one of "band",
+ "biand", "bild", "bior", "bixor", "bld", "bor",
+ "btst", and "bxor". */
+ bfd_put_8 (abfd, 0x7e, contents + irel->r_offset - 2);
+ break;
+ default:
+ abort ();
+ }
/* Fix the relocation's type. */
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
@@ -1056,8 +1104,15 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
break;
}
- /* This is a 24 bit absolute address in a "mov.b" insn, which may
- become an 8 bit absolute address if its in the right range. */
+ /* This is a 24-bit absolute address in one of the following
+ instructions:
+
+ "band", "bclr", "biand", "bild", "bior", "bist", "bixor",
+ "bld", "bnot", "bor", "bset", "bst", "btst", "bxor", and
+ "mov.b"
+
+ We may relax this into an 8-bit absolute address if it's in
+ the right range. */
case R_H8_DIR24A8:
{
bfd_vma value;
@@ -1066,6 +1121,7 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
if (value >= 0xffffff00u)
{
unsigned char code;
+ unsigned char temp_code;
/* Note that we've changed the relocs, section contents,
etc. */
@@ -1076,24 +1132,46 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
/* Get the opcode. */
code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
- /* Sanity check. */
+ /* All instructions with R_H8_DIR24A8 start with
+ 0x6a. */
if (code != 0x6a)
abort ();
- code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
+ temp_code = code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
+
+ /* If this is a mov.b instruction, clear the lower
+ nibble, which contains the source/destination
+ register number. */
+ if ((temp_code & 0x30) != 0x30)
+ temp_code &= 0xf0;
- switch (code & 0xf0)
+ switch (temp_code)
{
case 0x20:
+ /* This is mov.b @aa:24/32,Rd. */
bfd_put_8 (abfd, (code & 0xf) | 0x20,
contents + irel->r_offset - 2);
break;
case 0xa0:
+ /* This is mov.b Rs,@aa:24/32. */
bfd_put_8 (abfd, (code & 0xf) | 0x30,
contents + irel->r_offset - 2);
break;
+ case 0x38:
+ /* This is a bit-maniputation instruction that
+ stores one bit into memory, one of "bclr",
+ "bist", "bnot", "bset", and "bst". */
+ bfd_put_8 (abfd, 0x7f, contents + irel->r_offset - 2);
+ break;
+ case 0x30:
+ /* This is a bit-maniputation instruction that
+ loads one bit from memory, one of "band",
+ "biand", "bild", "bior", "bixor", "bld", "bor",
+ "btst", and "bxor". */
+ bfd_put_8 (abfd, 0x7e, contents + irel->r_offset - 2);
+ break;
default:
- abort ();
+ abort();
}
/* Fix the relocation's type. */
@@ -1113,10 +1191,17 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
}
}
- /* FALLTHRU */
+ /* Fall through. */
+
+ /* This is a 24-/32-bit absolute address in one of the
+ following instructions:
- /* This is a 24/32bit absolute address in a "mov" insn, which may
- become a 16-bit absolute address if it is in the right range. */
+ "band", "bclr", "biand", "bild", "bior", "bist",
+ "bixor", "bld", "bnot", "bor", "bset", "bst", "btst",
+ "bxor", and "mov.[bwl]"
+
+ We may relax this into an 16-bit absolute address if it's
+ in the right range. */
case R_H8_DIR32A16:
{
bfd_vma value;
@@ -1135,7 +1220,9 @@ elf32_h8_relax_section (bfd *abfd, asection *sec,
/* Get the opcode. */
code = bfd_get_8 (abfd, contents + irel->r_offset - 1);
- /* We just need to turn off bit 0x20. */
+ /* Fix the opcode. For all the instructions that
+ belong to this relaxation, we simply need to turn
+ off bit 0x20 in the previous byte. */
code &= ~0x20;
bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
@@ -1428,6 +1515,42 @@ elf32_h8_get_relocated_section_contents (bfd *output_bfd,
return NULL;
}
+static asection *
+elf32_h8_gc_mark_hook (asection *sec,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ Elf_Internal_Rela *rel ATTRIBUTE_UNUSED,
+ struct elf_link_hash_entry *h,
+ Elf_Internal_Sym *sym)
+{
+ if (h != NULL)
+ {
+ switch (h->root.type)
+ {
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ return h->root.u.def.section;
+
+ case bfd_link_hash_common:
+ return h->root.u.c.p->section;
+
+ default:
+ break;
+ }
+ }
+ else
+ return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
+ return NULL;
+}
+
+static bfd_boolean
+elf32_h8_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED,
+ const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
#define TARGET_BIG_SYM bfd_elf32_h8300_vec
#define TARGET_BIG_NAME "elf32-h8300"
@@ -1446,6 +1569,8 @@ elf32_h8_get_relocated_section_contents (bfd *output_bfd,
elf32_h8_object_p
#define bfd_elf32_bfd_merge_private_bfd_data \
elf32_h8_merge_private_bfd_data
+#define elf_backend_gc_mark_hook elf32_h8_gc_mark_hook
+#define elf_backend_gc_sweep_hook elf32_h8_gc_sweep_hook
/* ??? when elf_backend_relocate_section is not defined, elf32-target.h
defaults to using _bfd_generic_link_hash_table_create, but
@@ -1457,6 +1582,7 @@ elf32_h8_get_relocated_section_contents (bfd *output_bfd,
/* Use an H8 specific linker, not the ELF generic linker. */
#define elf_backend_relocate_section elf32_h8_relocate_section
#define elf_backend_rela_normal 1
+#define elf_backend_can_gc_sections 1
/* And relaxing stuff. */
#define bfd_elf32_bfd_relax_section elf32_h8_relax_section
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 876efc6..0a3d83f 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -1,5 +1,5 @@
/* Intel 80386/80486-specific support for 32-bit ELF
- Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+ Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@@ -346,29 +346,50 @@ elf_i386_is_local_label_name (bfd *abfd, const char *name)
}
/* Support for core dump NOTE sections. */
+
static bfd_boolean
elf_i386_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
{
int offset;
size_t raw_size;
- switch (note->descsz)
+ if (note->namesz == 8 && strcmp (note->namedata, "FreeBSD") == 0)
{
- default:
- return FALSE;
+ int pr_version = bfd_get_32 (abfd, note->descdata);
+
+ if (pr_version != 1)
+ return FALSE;
+
+ /* pr_cursig */
+ elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 20);
+
+ /* pr_pid */
+ elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);
+
+ /* pr_reg */
+ offset = 28;
+ raw_size = bfd_get_32 (abfd, note->descdata + 8);
+ }
+ else
+ {
+ switch (note->descsz)
+ {
+ default:
+ return FALSE;
- case 144: /* Linux/i386 */
- /* pr_cursig */
- elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
+ case 144: /* Linux/i386 */
+ /* pr_cursig */
+ elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
- /* pr_pid */
- elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);
+ /* pr_pid */
+ elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);
- /* pr_reg */
- offset = 72;
- raw_size = 68;
+ /* pr_reg */
+ offset = 72;
+ raw_size = 68;
- break;
+ break;
+ }
}
/* Make a ".reg/999" section. */
@@ -379,22 +400,36 @@ elf_i386_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
static bfd_boolean
elf_i386_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
{
- switch (note->descsz)
+ if (note->namesz == 8 && strcmp (note->namedata, "FreeBSD") == 0)
{
- default:
+ int pr_version = bfd_get_32 (abfd, note->descdata);
+
+ if (pr_version != 1)
return FALSE;
- case 124: /* Linux/i386 elf_prpsinfo */
- elf_tdata (abfd)->core_program
- = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
- elf_tdata (abfd)->core_command
- = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
+ elf_tdata (abfd)->core_program
+ = _bfd_elfcore_strndup (abfd, note->descdata + 8, 17);
+ elf_tdata (abfd)->core_command
+ = _bfd_elfcore_strndup (abfd, note->descdata + 25, 81);
+ }
+ else
+ {
+ switch (note->descsz)
+ {
+ default:
+ return FALSE;
+
+ case 124: /* Linux/i386 elf_prpsinfo. */
+ elf_tdata (abfd)->core_program
+ = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
+ elf_tdata (abfd)->core_command
+ = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
+ }
}
/* Note that for some reason, a spurious space is tacked
onto the end of the args in some (at least one anyway)
implementations, so strip it off if it exists. */
-
{
char *command = elf_tdata (abfd)->core_command;
int n = strlen (command);
diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c
index 2794ffb..3edf4a9 100644
--- a/bfd/elf32-m32r.c
+++ b/bfd/elf32-m32r.c
@@ -44,6 +44,8 @@ static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup
PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
static void m32r_info_to_howto_rel
PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
+static void m32r_info_to_howto
+ PARAMS ((bfd *, arelent *, Elf_Internal_Rela *));
bfd_boolean _bfd_m32r_elf_section_from_bfd_section
PARAMS ((bfd *, asection *, int *));
void _bfd_m32r_elf_symbol_processing
@@ -77,10 +79,34 @@ static bfd_boolean m32r_elf_check_relocs
PARAMS ((bfd *, struct bfd_link_info *, asection *,
const Elf_Internal_Rela *));
+static bfd_boolean m32r_elf_adjust_dynamic_symbol
+ PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *));
+static bfd_boolean m32r_elf_size_dynamic_sections
+ PARAMS ((bfd *, struct bfd_link_info *));
+
asection * m32r_elf_gc_mark_hook
PARAMS ((asection *, struct bfd_link_info *, Elf_Internal_Rela *,
struct elf_link_hash_entry *, Elf_Internal_Sym *));
+static bfd_boolean m32r_elf_create_dynamic_sections
+ PARAMS ((bfd *, struct bfd_link_info *));
+
+static bfd_boolean m32r_elf_finish_dynamic_sections
+ PARAMS ((bfd *, struct bfd_link_info *));
+
+static bfd_boolean m32r_elf_finish_dynamic_symbol
+ PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
+ Elf_Internal_Sym *));
+
+static bfd_boolean allocate_dynrelocs
+ PARAMS ((struct elf_link_hash_entry *, PTR));
+static bfd_boolean readonly_dynrelocs
+ PARAMS ((struct elf_link_hash_entry *, PTR));
+static enum elf_reloc_type_class m32r_elf_reloc_type_class
+ PARAMS ((const Elf_Internal_Rela *));
+static bfd_boolean m32r_elf_fake_sections
+ PARAMS ((bfd *, Elf_Internal_Shdr *, asection *));
+
#define NOP_INSN 0x7000
#define MAKE_PARALLEL(insn) ((insn) | 0x8000)
@@ -88,11 +114,55 @@ asection * m32r_elf_gc_mark_hook
This only saves space in libraries and object files, but perhaps
relocs will be put in ROM? All in all though, REL relocs are a pain
to work with. */
-#define USE_REL 1
+/* #define USE_REL 1
#ifndef USE_REL
#define USE_REL 0
-#endif
+#endif */
+/* Use RELA. But use REL to link old objects for backwords compatibility. */
+
+/* Functions for the M32R ELF linker. */
+
+/* The name of the dynamic interpreter. This is put in the .interp
+ section. */
+
+#define ELF_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1"
+
+/* The nop opcode we use. */
+
+#define M32R_NOP 0x7000f000
+
+#define PLT_EMPTY 0x10101010 /* RIE -> RIE */
+
+/* The size in bytes of an entry in the procedure linkage table. */
+
+#define PLT_ENTRY_SIZE 20
+#define PLT_HEADER_SIZE 20
+
+/* The first one entries in a procedure linkage table are reserved,
+ and the initial contents are unimportant (we zero them out).
+ Subsequent entries look like this. */
+
+#define PLT0_ENTRY_WORD0 0xd6c00000 /* seth r6, #high(.got+4) */
+#define PLT0_ENTRY_WORD1 0x86e60000 /* or3 r6, r6, #low(.got)+4) */
+#define PLT0_ENTRY_WORD2 0x24e626c6 /* ld r4, @r6+ -> ld r6, @r6 */
+#define PLT0_ENTRY_WORD3 0x1fc6f000 /* jmp r6 || pnop */
+#define PLT0_ENTRY_WORD4 PLT_EMPTY /* RIE -> RIE */
+
+#define PLT0_PIC_ENTRY_WORD0 0xa4cc0004 /* ld r4, @(4,r12) */
+#define PLT0_PIC_ENTRY_WORD1 0xa6cc0008 /* ld r6, @(8,r12) */
+#define PLT0_PIC_ENTRY_WORD2 0x1fc6f000 /* jmp r6 || nop */
+#define PLT0_PIC_ENTRY_WORD3 PLT_EMPTY /* RIE -> RIE */
+#define PLT0_PIC_ENTRY_WORD4 PLT_EMPTY /* RIE -> RIE */
+
+#define PLT_ENTRY_WORD0 0xe6000000 /* ld24 r6, .name_in_GOT */
+#define PLT_ENTRY_WORD1 0x06acf000 /* add r6, r12 || nop */
+#define PLT_ENTRY_WORD0b 0xd6c00000 /* seth r6, #high(.name_in_GOT) */
+#define PLT_ENTRY_WORD1b 0x86e60000 /* or3 r6, r6, #low(.name_in_GOT) */
+#define PLT_ENTRY_WORD2 0x26c61fc6 /* ld r6, @r6 -> jmp r6 */
+#define PLT_ENTRY_WORD3 0xe5000000 /* ld24 r5, $offset */
+#define PLT_ENTRY_WORD4 0xff000000 /* bra .plt0. */
+
static reloc_howto_type m32r_elf_howto_table[] =
{
@@ -302,6 +372,437 @@ static reloc_howto_type m32r_elf_howto_table[] =
0, /* dst_mask */
FALSE), /* pcrel_offset */
+ EMPTY_HOWTO (13),
+ EMPTY_HOWTO (14),
+ EMPTY_HOWTO (15),
+ EMPTY_HOWTO (16),
+ EMPTY_HOWTO (17),
+ EMPTY_HOWTO (18),
+ EMPTY_HOWTO (19),
+ EMPTY_HOWTO (20),
+ EMPTY_HOWTO (21),
+ EMPTY_HOWTO (22),
+ EMPTY_HOWTO (23),
+ EMPTY_HOWTO (24),
+ EMPTY_HOWTO (25),
+ EMPTY_HOWTO (26),
+ EMPTY_HOWTO (27),
+ EMPTY_HOWTO (28),
+ EMPTY_HOWTO (29),
+ EMPTY_HOWTO (30),
+ EMPTY_HOWTO (31),
+ EMPTY_HOWTO (32),
+
+ /* A 16 bit absolute relocation. */
+ HOWTO (R_M32R_16_RELA, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_16_RELA", /* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* A 32 bit absolute relocation. */
+ HOWTO (R_M32R_32_RELA, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc,/* special_function */
+ "R_M32R_32_RELA", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* A 24 bit address. */
+ HOWTO (R_M32R_24_RELA, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 24, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc,/* special_function */
+ "R_M32R_24_RELA", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_M32R_10_PCREL_RELA, /* type */
+ 2, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 10, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ m32r_elf_10_pcrel_reloc, /* special_function */
+ "R_M32R_10_PCREL_RELA",/* name */
+ FALSE, /* partial_inplace */
+ 0xff, /* src_mask */
+ 0xff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* A relative 18 bit relocation, right shifted by 2. */
+ HOWTO (R_M32R_18_PCREL_RELA, /* type */
+ 2, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_18_PCREL_RELA",/* name */
+ FALSE, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* A relative 26 bit relocation, right shifted by 2. */
+ HOWTO (R_M32R_26_PCREL_RELA, /* type */
+ 2, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 26, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_26_PCREL_RELA",/* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* High 16 bits of address when lower 16 is or'd in. */
+ HOWTO (R_M32R_HI16_ULO_RELA, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_HI16_ULO_RELA",/* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* High 16 bits of address when lower 16 is added in. */
+ HOWTO (R_M32R_HI16_SLO_RELA, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_HI16_SLO_RELA",/* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Lower 16 bits of address. */
+ HOWTO (R_M32R_LO16_RELA, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_LO16_RELA", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Small data area 16 bits offset. */
+ HOWTO (R_M32R_SDA16_RELA, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_SDA16_RELA", /* name */
+ TRUE, /* partial_inplace */ /* FIXME: correct? */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* GNU extension to record C++ vtable hierarchy */
+ HOWTO (R_M32R_RELA_GNU_VTINHERIT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ NULL, /* special_function */
+ "R_M32R_RELA_GNU_VTINHERIT", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* GNU extension to record C++ vtable member usage */
+ HOWTO (R_M32R_RELA_GNU_VTENTRY, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 0, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ _bfd_elf_rel_vtable_reloc_fn, /* special_function */
+ "R_M32R_RELA_GNU_VTENTRY", /* name */
+ FALSE, /* partial_inplace */
+ 0, /* src_mask */
+ 0, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ EMPTY_HOWTO (45),
+ EMPTY_HOWTO (46),
+ EMPTY_HOWTO (47),
+
+ /* Like R_M32R_24, but referring to the GOT table entry for
+ the symbol. */
+ HOWTO (R_M32R_GOT24, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 24, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOT24", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Like R_M32R_PCREL, but referring to the procedure linkage table
+ entry for the symbol. */
+ HOWTO (R_M32R_26_PLTREL, /* type */
+ 2, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 24, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_26_PLTREL", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* This is used only by the dynamic linker. The symbol should exist
+ both in the object being run and in some shared library. The
+ dynamic linker copies the data addressed by the symbol from the
+ shared library into the object, because the object being
+ run has to have the data at some particular address. */
+ HOWTO (R_M32R_COPY, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_COPY", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Like R_M32R_24, but used when setting global offset table
+ entries. */
+ HOWTO (R_M32R_GLOB_DAT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GLOB_DAT", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Marks a procedure linkage table entry for a symbol. */
+ HOWTO (R_M32R_JMP_SLOT, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_JMP_SLOT", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Used only by the dynamic linker. When the object is run, this
+ longword is set to the load address of the object, plus the
+ addend. */
+ HOWTO (R_M32R_RELATIVE, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_RELATIVE", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ HOWTO (R_M32R_GOTOFF, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 32, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOTOFF", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffffff, /* src_mask */
+ 0xffffffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* An PC Relative 24-bit relocation used when setting PIC offset
+ table register. */
+ HOWTO (R_M32R_GOTPC24, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 24, /* bitsize */
+ TRUE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_unsigned, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOTPC24", /* name */
+ FALSE, /* partial_inplace */
+ 0xffffff, /* src_mask */
+ 0xffffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* Like R_M32R_HI16_ULO, but referring to the GOT table entry for
+ the symbol. */
+ HOWTO (R_M32R_GOT16_HI_ULO, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOT16_HI_ULO", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Like R_M32R_HI16_SLO, but referring to the GOT table entry for
+ the symbol. */
+ HOWTO (R_M32R_GOT16_HI_SLO, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOT16_HI_SLO", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* Like R_M32R_LO16, but referring to the GOT table entry for
+ the symbol. */
+ HOWTO (R_M32R_GOT16_LO, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOT16_LO", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ FALSE), /* pcrel_offset */
+
+ /* An PC Relative relocation used when setting PIC offset table register.
+ Like R_M32R_HI16_ULO, but referring to the GOT table entry for
+ the symbol. */
+ HOWTO (R_M32R_GOTPC_HI_ULO, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOTPC_HI_ULO", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* An PC Relative relocation used when setting PIC offset table register.
+ Like R_M32R_HI16_SLO, but referring to the GOT table entry for
+ the symbol. */
+ HOWTO (R_M32R_GOTPC_HI_SLO, /* type */
+ 16, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOTPC_HI_SLO", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
+
+ /* An PC Relative relocation used when setting PIC offset table register.
+ Like R_M32R_LO16, but referring to the GOT table entry for
+ the symbol. */
+ HOWTO (R_M32R_GOTPC_LO, /* type */
+ 0, /* rightshift */
+ 2, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ FALSE, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_dont, /* complain_on_overflow */
+ bfd_elf_generic_reloc, /* special_function */
+ "R_M32R_GOTPC_LO", /* name */
+ FALSE, /* partial_inplace */
+ 0x0000ffff, /* src_mask */
+ 0x0000ffff, /* dst_mask */
+ TRUE), /* pcrel_offset */
};
/* Handle the R_M32R_10_PCREL reloc. */
@@ -715,7 +1216,7 @@ struct m32r_reloc_map
unsigned char elf_reloc_val;
};
-static const struct m32r_reloc_map m32r_reloc_map[] =
+static const struct m32r_reloc_map m32r_reloc_map_old[] =
{
{ BFD_RELOC_NONE, R_M32R_NONE },
{ BFD_RELOC_16, R_M32R_16 },
@@ -732,6 +1233,38 @@ static const struct m32r_reloc_map m32r_reloc_map[] =
{ BFD_RELOC_VTABLE_ENTRY, R_M32R_GNU_VTENTRY },
};
+static const struct m32r_reloc_map m32r_reloc_map[] =
+{
+ { BFD_RELOC_NONE, R_M32R_NONE },
+ { BFD_RELOC_16, R_M32R_16_RELA },
+ { BFD_RELOC_32, R_M32R_32_RELA },
+ { BFD_RELOC_M32R_24, R_M32R_24_RELA },
+ { BFD_RELOC_M32R_10_PCREL, R_M32R_10_PCREL_RELA },
+ { BFD_RELOC_M32R_18_PCREL, R_M32R_18_PCREL_RELA },
+ { BFD_RELOC_M32R_26_PCREL, R_M32R_26_PCREL_RELA },
+ { BFD_RELOC_M32R_HI16_ULO, R_M32R_HI16_ULO_RELA },
+ { BFD_RELOC_M32R_HI16_SLO, R_M32R_HI16_SLO_RELA },
+ { BFD_RELOC_M32R_LO16, R_M32R_LO16_RELA },
+ { BFD_RELOC_M32R_SDA16, R_M32R_SDA16_RELA },
+ { BFD_RELOC_VTABLE_INHERIT, R_M32R_RELA_GNU_VTINHERIT },
+ { BFD_RELOC_VTABLE_ENTRY, R_M32R_RELA_GNU_VTENTRY },
+
+ { BFD_RELOC_M32R_GOT24, R_M32R_GOT24 },
+ { BFD_RELOC_M32R_26_PLTREL, R_M32R_26_PLTREL },
+ { BFD_RELOC_M32R_COPY, R_M32R_COPY },
+ { BFD_RELOC_M32R_GLOB_DAT, R_M32R_GLOB_DAT },
+ { BFD_RELOC_M32R_JMP_SLOT, R_M32R_JMP_SLOT },
+ { BFD_RELOC_M32R_RELATIVE, R_M32R_RELATIVE },
+ { BFD_RELOC_M32R_GOTOFF, R_M32R_GOTOFF },
+ { BFD_RELOC_M32R_GOTPC24, R_M32R_GOTPC24 },
+ { BFD_RELOC_M32R_GOT16_HI_ULO, R_M32R_GOT16_HI_ULO },
+ { BFD_RELOC_M32R_GOT16_HI_SLO, R_M32R_GOT16_HI_SLO },
+ { BFD_RELOC_M32R_GOT16_LO, R_M32R_GOT16_LO },
+ { BFD_RELOC_M32R_GOTPC_HI_ULO, R_M32R_GOTPC_HI_ULO },
+ { BFD_RELOC_M32R_GOTPC_HI_SLO, R_M32R_GOTPC_HI_SLO },
+ { BFD_RELOC_M32R_GOTPC_LO, R_M32R_GOTPC_LO },
+};
+
static reloc_howto_type *
bfd_elf32_bfd_reloc_type_lookup (abfd, code)
bfd *abfd ATTRIBUTE_UNUSED;
@@ -739,6 +1272,16 @@ bfd_elf32_bfd_reloc_type_lookup (abfd, code)
{
unsigned int i;
+#ifdef USE_M32R_OLD_RELOC
+ for (i = 0;
+ i < sizeof (m32r_reloc_map_old) / sizeof (struct m32r_reloc_map);
+ i++)
+ {
+ if (m32r_reloc_map_old[i].bfd_reloc_val == code)
+ return &m32r_elf_howto_table[m32r_reloc_map_old[i].elf_reloc_val];
+ }
+#else /* ! USE_M32R_OLD_RELOC */
+
for (i = 0;
i < sizeof (m32r_reloc_map) / sizeof (struct m32r_reloc_map);
i++)
@@ -746,6 +1289,7 @@ bfd_elf32_bfd_reloc_type_lookup (abfd, code)
if (m32r_reloc_map[i].bfd_reloc_val == code)
return &m32r_elf_howto_table[m32r_reloc_map[i].elf_reloc_val];
}
+#endif
return NULL;
}
@@ -761,9 +1305,22 @@ m32r_info_to_howto_rel (abfd, cache_ptr, dst)
unsigned int r_type;
r_type = ELF32_R_TYPE (dst->r_info);
- BFD_ASSERT (r_type < (unsigned int) R_M32R_max);
+ BFD_ASSERT (ELF32_R_TYPE(dst->r_info) <= (unsigned int) R_M32R_GNU_VTENTRY)
cache_ptr->howto = &m32r_elf_howto_table[r_type];
}
+
+static void
+m32r_info_to_howto (abfd, cache_ptr, dst)
+ bfd *abfd ATTRIBUTE_UNUSED;
+ arelent *cache_ptr;
+ Elf_Internal_Rela *dst;
+{
+ BFD_ASSERT ((ELF32_R_TYPE(dst->r_info) == (unsigned int) R_M32R_NONE)
+ || ((ELF32_R_TYPE(dst->r_info) > (unsigned int) R_M32R_GNU_VTENTRY)
+ && (ELF32_R_TYPE(dst->r_info) < (unsigned int) R_M32R_max)));
+ cache_ptr->howto = &m32r_elf_howto_table[ELF32_R_TYPE(dst->r_info)];
+}
+
/* Given a BFD section, try to locate the corresponding ELF section
index. */
@@ -935,6 +1492,997 @@ m32r_elf_final_sda_base (output_bfd, info, error_message, psb)
return bfd_reloc_ok;
}
+/* Return size of a PLT entry. */
+#define elf_m32r_sizeof_plt(info) PLT_ENTRY_SIZE
+
+/* The m32r linker needs to keep track of the number of relocs that it
+ decides to copy in check_relocs for each symbol. This is so that
+ it can discard PC relative relocs if it doesn't need them when
+ linking with -Bsymbolic. We store the information in a field
+ extending the regular ELF linker hash table. */
+
+/* This structure keeps track of the number of PC relative relocs we
+ have copied for a given symbol. */
+
+struct elf_m32r_pcrel_relocs_copied
+{
+ /* Next section. */
+ struct elf_m32r_pcrel_relocs_copied *next;
+ /* A section in dynobj. */
+ asection *section;
+ /* Number of relocs copied in this section. */
+ bfd_size_type count;
+};
+
+/* The sh linker needs to keep track of the number of relocs that it
+ decides to copy as dynamic relocs in check_relocs for each symbol.
+ This is so that it can later discard them if they are found to be
+ unnecessary. We store the information in a field extending the
+ regular ELF linker hash table. */
+
+struct elf_m32r_dyn_relocs
+{
+ struct elf_m32r_dyn_relocs *next;
+
+ /* The input section of the reloc. */
+ asection *sec;
+
+ /* Total number of relocs copied for the input section. */
+ bfd_size_type count;
+
+ /* Number of pc-relative relocs copied for the input section. */
+ bfd_size_type pc_count;
+};
+
+
+/* m32r ELF linker hash entry. */
+
+struct elf_m32r_link_hash_entry
+{
+ struct elf_link_hash_entry root;
+
+ /* Track dynamic relocs copied for this symbol. */
+ struct elf_m32r_dyn_relocs *dyn_relocs;
+
+// bfd_signed_vma gotplt_refcount;
+
+ /* Number of PC relative relocs copied for this symbol. */
+ /* struct elf_m32r_pcrel_relocs_copied *pcrel_relocs_copied; FIXME */
+};
+
+/* m32r ELF linker hash table. */
+
+struct elf_m32r_link_hash_table
+{
+ struct elf_link_hash_table root;
+
+ /* Short-cuts to get to dynamic linker sections. */
+ asection *sgot;
+ asection *sgotplt;
+ asection *srelgot;
+ asection *splt;
+ asection *srelplt;
+ asection *sdynbss;
+ asection *srelbss;
+
+ /* Small local sym to section mapping cache. */
+ struct sym_sec_cache sym_sec;
+};
+
+/* Traverse an m32r ELF linker hash table. */
+
+#define m32r_elf_link_hash_traverse(table, func, info) \
+ (elf_link_hash_traverse \
+ (&(table)->root, \
+ (bfd_boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
+ (info)))
+
+/* Get the m32r ELF linker hash table from a link_info structure. */
+
+
+#define m32r_elf_hash_table(p) \
+ ((struct elf_m32r_link_hash_table *) ((p)->hash))
+
+/* Create an entry in an m32r ELF linker hash table. */
+static struct bfd_hash_entry *
+m32r_elf_link_hash_newfunc (struct bfd_hash_entry *, struct bfd_hash_table *,
+ const char * );
+
+static struct bfd_hash_entry *
+m32r_elf_link_hash_newfunc (entry, table, string)
+ struct bfd_hash_entry *entry;
+ struct bfd_hash_table *table;
+ const char *string;
+{
+ struct elf_m32r_link_hash_entry *ret =
+ (struct elf_m32r_link_hash_entry *) entry;
+
+ /* Allocate the structure if it has not already been allocated by a
+ subclass. */
+ if (ret == (struct elf_m32r_link_hash_entry *) NULL)
+ ret = ((struct elf_m32r_link_hash_entry *)
+ bfd_hash_allocate (table,
+ sizeof (struct elf_m32r_link_hash_entry)));
+ if (ret == (struct elf_m32r_link_hash_entry *) NULL)
+ return (struct bfd_hash_entry *) ret;
+
+ /* Call the allocation method of the superclass. */
+ ret = ((struct elf_m32r_link_hash_entry *)
+ _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+ table, string));
+ if (ret != (struct elf_m32r_link_hash_entry *) NULL)
+ {
+ struct elf_m32r_link_hash_entry *eh;
+
+ eh = (struct elf_m32r_link_hash_entry *) ret;
+ eh->dyn_relocs = NULL;
+// eh->gotplt_refcount = 0;
+ /* eh->pcrel_relocs_copied = NULL; FIXME */
+ }
+
+ return (struct bfd_hash_entry *) ret;
+}
+
+/* Create an m32r ELF linker hash table. */
+static struct bfd_link_hash_table *m32r_elf_link_hash_table_create (bfd *);
+
+static struct bfd_link_hash_table *
+m32r_elf_link_hash_table_create (abfd)
+ bfd *abfd;
+{
+ struct elf_m32r_link_hash_table *ret;
+ bfd_size_type amt = sizeof (struct elf_m32r_link_hash_table);
+
+ ret = (struct elf_m32r_link_hash_table *) bfd_malloc (amt);
+ if (ret == (struct elf_m32r_link_hash_table *) NULL)
+ return NULL;
+
+ if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
+ m32r_elf_link_hash_newfunc))
+ {
+ free (ret);
+ return NULL;
+ }
+
+ ret->sgot = NULL;
+ ret->sgotplt = NULL;
+ ret->srelgot = NULL;
+ ret->splt = NULL;
+ ret->srelplt = NULL;
+ ret->sdynbss = NULL;
+ ret->srelbss = NULL;
+ ret->sym_sec.abfd = NULL;
+
+ return &ret->root.root;
+}
+
+/* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up
+ shortcuts to them in our hash table. */
+static bfd_boolean create_got_section (bfd *, struct bfd_link_info *);
+
+static bfd_boolean
+create_got_section (dynobj, info)
+ bfd *dynobj;
+ struct bfd_link_info *info;
+{
+ struct elf_m32r_link_hash_table *htab;
+
+ if (! _bfd_elf_create_got_section (dynobj, info))
+ return FALSE;
+
+ htab = m32r_elf_hash_table (info);
+ htab->sgot = bfd_get_section_by_name (dynobj, ".got");
+ htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt");
+ if (! htab->sgot || ! htab->sgotplt)
+ abort ();
+
+ htab->srelgot = bfd_make_section (dynobj, ".rela.got");
+ if (htab->srelgot == NULL
+ || ! bfd_set_section_flags (dynobj, htab->srelgot,
+ (SEC_ALLOC
+ | SEC_LOAD
+ | SEC_HAS_CONTENTS
+ | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED
+ | SEC_READONLY))
+ || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2))
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Create dynamic sections when linking against a dynamic object. */
+
+static bfd_boolean
+m32r_elf_create_dynamic_sections (abfd, info)
+ bfd *abfd;
+ struct bfd_link_info *info;
+{
+ struct elf_m32r_link_hash_table *htab;
+ flagword flags, pltflags;
+ register asection *s;
+ const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+ int ptralign = 2; /* 32bit */
+
+ htab = m32r_elf_hash_table (info);
+
+ /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and
+ .rel[a].bss sections. */
+
+ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
+ | SEC_LINKER_CREATED);
+
+ pltflags = flags;
+ pltflags |= SEC_CODE;
+ if (bed->plt_not_loaded)
+ pltflags &= ~ (SEC_LOAD | SEC_HAS_CONTENTS);
+ if (bed->plt_readonly)
+ pltflags |= SEC_READONLY;
+
+ s = bfd_make_section (abfd, ".plt");
+ htab->splt = s;
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, pltflags)
+ || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment))
+ return FALSE;
+
+ if (bed->want_plt_sym)
+ {
+ /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the
+ .plt section. */
+ struct elf_link_hash_entry *h = NULL;
+ if (! (_bfd_generic_link_add_one_symbol
+ (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s,
+ (bfd_vma) 0, (const char *) NULL, FALSE,
+ get_elf_backend_data (abfd)->collect,
+ (struct bfd_link_hash_entry **) &h)))
+ return FALSE;
+ h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
+ h->type = STT_OBJECT;
+
+ if (info->shared
+ && ! _bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
+ s = bfd_make_section (abfd,
+ bed->default_use_rela_p ? ".rela.plt" : ".rel.plt");
+ htab->srelplt = s;
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
+ || ! bfd_set_section_alignment (abfd, s, ptralign))
+ return FALSE;
+
+ if (htab->sgot == NULL
+ && ! create_got_section (abfd, info))
+ return FALSE;
+
+ {
+ const char *secname;
+ char *relname;
+ flagword secflags;
+ asection *sec;
+
+ for (sec = abfd->sections; sec; sec = sec->next)
+ {
+ secflags = bfd_get_section_flags (abfd, sec);
+ if ((secflags & (SEC_DATA | SEC_LINKER_CREATED))
+ || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS))
+ continue;
+ secname = bfd_get_section_name (abfd, sec);
+ relname = (char *) bfd_malloc ((bfd_size_type) strlen (secname) + 6);
+ strcpy (relname, ".rela");
+ strcat (relname, secname);
+ if (bfd_get_section_by_name (abfd, secname))
+ continue;
+ s = bfd_make_section (abfd, relname);
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
+ || ! bfd_set_section_alignment (abfd, s, ptralign))
+ return FALSE;
+ }
+ }
+
+ if (bed->want_dynbss)
+ {
+ /* The .dynbss section is a place to put symbols which are defined
+ by dynamic objects, are referenced by regular objects, and are
+ not functions. We must allocate space for them in the process
+ image and use a R_*_COPY reloc to tell the dynamic linker to
+ initialize them at run time. The linker script puts the .dynbss
+ section into the .bss section of the final image. */
+ s = bfd_make_section (abfd, ".dynbss");
+ htab->sdynbss = s;
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, SEC_ALLOC))
+ return FALSE;
+ /* The .rel[a].bss section holds copy relocs. This section is not
+ normally needed. We need to create it here, though, so that the
+ linker will map it to an output section. We can't just create it
+ only if we need it, because we will not know whether we need it
+ until we have seen all the input files, and the first time the
+ main linker code calls BFD after examining all the input files
+ (size_dynamic_sections) the input sections have already been
+ mapped to the output sections. If the section turns out not to
+ be needed, we can discard it later. We will never need this
+ section when generating a shared object, since they do not use
+ copy relocs. */
+ if (! info->shared)
+ {
+ s = bfd_make_section (abfd,
+ (bed->default_use_rela_p
+ ? ".rela.bss" : ".rel.bss"));
+ htab->srelbss = s;
+ if (s == NULL
+ || ! bfd_set_section_flags (abfd, s, flags | SEC_READONLY)
+ || ! bfd_set_section_alignment (abfd, s, ptralign))
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+/* Copy the extra info we tack onto an elf_link_hash_entry. */
+static void m32r_elf_copy_indirect_symbol (const struct elf_backend_data *,
+ struct elf_link_hash_entry *,
+ struct elf_link_hash_entry *);
+
+static void
+m32r_elf_copy_indirect_symbol (const struct elf_backend_data *bed,
+ struct elf_link_hash_entry *dir,
+ struct elf_link_hash_entry *ind)
+{
+ struct elf_m32r_link_hash_entry *edir, *eind;
+
+ edir = (struct elf_m32r_link_hash_entry *) dir;
+ eind = (struct elf_m32r_link_hash_entry *) ind;
+
+ if (eind->dyn_relocs != NULL)
+ {
+ if (edir->dyn_relocs != NULL)
+ {
+ struct elf_m32r_dyn_relocs **pp;
+ struct elf_m32r_dyn_relocs *p;
+
+ if (ind->root.type == bfd_link_hash_indirect)
+ abort ();
+
+ /* Add reloc counts against the weak sym to the strong sym
+ list. Merge any entries against the same section. */
+ for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
+ {
+ struct elf_m32r_dyn_relocs *q;
+
+ for (q = edir->dyn_relocs; q != NULL; q = q->next)
+ if (q->sec == p->sec)
+ {
+ q->pc_count += p->pc_count;
+ q->count += p->count;
+ *pp = p->next;
+ break;
+ }
+ if (q == NULL)
+ pp = &p->next;
+ }
+ *pp = edir->dyn_relocs;
+ }
+
+ edir->dyn_relocs = eind->dyn_relocs;
+ eind->dyn_relocs = NULL;
+ }
+
+// if (ind->root.type == bfd_link_hash_indirect
+// && dir->got.refcount <= 0)
+// {
+// edir->tls_type = eind->tls_type;
+// eind->tls_type = GOT_UNKNOWN;
+// }
+ _bfd_elf_link_hash_copy_indirect (bed, dir, ind);
+}
+
+
+/* Adjust a symbol defined by a dynamic object and referenced by a
+ regular object. The current definition is in some section of the
+ dynamic object, but we're not including those sections. We have to
+ change the definition to something the rest of the link can
+ understand. */
+
+static bfd_boolean
+m32r_elf_adjust_dynamic_symbol (info, h)
+ struct bfd_link_info *info;
+ struct elf_link_hash_entry *h;
+{
+ struct elf_m32r_link_hash_table *htab;
+ struct elf_m32r_link_hash_entry *eh;
+ struct elf_m32r_dyn_relocs *p;
+ bfd *dynobj;
+ asection *s;
+ unsigned int power_of_two;
+
+#ifdef DEBUG_PIC
+printf("m32r_elf_adjust_dynamic_symbol()\n");
+#endif
+
+ dynobj = elf_hash_table (info)->dynobj;
+
+ /* Make sure we know what is going on here. */
+ BFD_ASSERT (dynobj != NULL
+ && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
+ || h->weakdef != NULL
+ || ((h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_REF_REGULAR) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0)));
+
+
+ /* If this is a function, put it in the procedure linkage table. We
+ will fill in the contents of the procedure linkage table later,
+ when we know the address of the .got section. */
+ if (h->type == STT_FUNC
+ || (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
+ {
+ if (! info->shared
+ && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
+ && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0
+ && h->root.type != bfd_link_hash_undefweak
+ && h->root.type != bfd_link_hash_undefined)
+ {
+ /* This case can occur if we saw a PLT reloc in an input
+ file, but the symbol was never referred to by a dynamic
+ object. In such a case, we don't actually need to build
+ a procedure linkage table, and we can just do a PCREL
+ reloc instead. */
+ h->plt.offset = (bfd_vma) -1;
+ h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
+ }
+
+ return TRUE;
+ }
+ else
+ h->plt.offset = (bfd_vma) -1;
+
+ /* If this is a weak symbol, and there is a real definition, the
+ processor independent code will have arranged for us to see the
+ real definition first, and we can just use the same value. */
+ if (h->weakdef != NULL)
+ {
+ BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
+ || h->weakdef->root.type == bfd_link_hash_defweak);
+ h->root.u.def.section = h->weakdef->root.u.def.section;
+ h->root.u.def.value = h->weakdef->root.u.def.value;
+ return TRUE;
+ }
+
+ /* This is a reference to a symbol defined by a dynamic object which
+ is not a function. */
+
+ /* If we are creating a shared library, we must presume that the
+ only references to the symbol are via the global offset table.
+ For such cases we need not do anything here; the relocations will
+ be handled correctly by relocate_section. */
+ if (info->shared)
+ return TRUE;
+
+ /* If there are no references to this symbol that do not use the
+ GOT, we don't need to generate a copy reloc. */
+ if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0)
+ return TRUE;
+
+ /* If -z nocopyreloc was given, we won't generate them either. */
+ if (info->nocopyreloc)
+ {
+ h->elf_link_hash_flags &= ~ELF_LINK_NON_GOT_REF;
+ return TRUE;
+ }
+
+ eh = (struct elf_m32r_link_hash_entry *) h;
+ for (p = eh->dyn_relocs; p != NULL; p = p->next)
+ {
+ s = p->sec->output_section;
+ if (s != NULL && (s->flags & (SEC_READONLY | SEC_HAS_CONTENTS)) != 0)
+ break;
+ }
+
+ /* If we didn't find any dynamic relocs in sections which needs the
+ copy reloc, then we'll be keeping the dynamic relocs and avoiding
+ the copy reloc. */
+ if (p == NULL)
+ {
+ h->elf_link_hash_flags &= ~ELF_LINK_NON_GOT_REF;
+ return TRUE;
+ }
+
+ /* We must allocate the symbol in our .dynbss section, which will
+ become part of the .bss section of the executable. There will be
+ an entry for this symbol in the .dynsym section. The dynamic
+ object will contain position independent code, so all references
+ from the dynamic object to this symbol will go through the global
+ offset table. The dynamic linker will use the .dynsym entry to
+ determine the address it must put in the global offset table, so
+ both the dynamic object and the regular object will refer to the
+ same memory location for the variable. */
+
+ htab = m32r_elf_hash_table (info);
+ s = htab->sdynbss;
+ BFD_ASSERT (s != NULL);
+
+ /* We must generate a R_M32R_COPY reloc to tell the dynamic linker
+ to copy the initial value out of the dynamic object and into the
+ runtime process image. We need to remember the offset into the
+ .rela.bss section we are going to use. */
+ if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
+ {
+ asection *srel;
+
+ srel = htab->srelbss;
+ BFD_ASSERT (srel != NULL);
+ srel->_raw_size += sizeof (Elf32_External_Rela);
+ h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_COPY;
+ }
+
+ /* We need to figure out the alignment required for this symbol. I
+ have no idea how ELF linkers handle this. */
+ power_of_two = bfd_log2 (h->size);
+ if (power_of_two > 3)
+ power_of_two = 3;
+
+ /* Apply the required alignment. */
+ s->_raw_size = BFD_ALIGN (s->_raw_size,
+ (bfd_size_type) (1 << power_of_two));
+ if (power_of_two > bfd_get_section_alignment (dynobj, s))
+ {
+ if (! bfd_set_section_alignment (dynobj, s, power_of_two))
+ return FALSE;
+ }
+
+ /* Define the symbol as being at this point in the section. */
+ h->root.u.def.section = s;
+ h->root.u.def.value = s->_raw_size;
+
+ /* Increment the section size to make room for the symbol. */
+ s->_raw_size += h->size;
+
+ return TRUE;
+}
+
+/* This is the condition under which finish_dynamic_symbol will be called
+ from elflink.h. If elflink.h doesn't call our finish_dynamic_symbol
+ routine, we'll need to do something about initializing any .plt and .got
+ entries in relocate_section. */
+#define WILL_CALL_FINISH_DYNAMIC_SYMBOL(DYN, INFO, H) \
+ ((DYN) \
+ && ((INFO)->shared \
+ || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0) \
+ && ((H)->dynindx != -1 \
+ || ((H)->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0))
+
+/* Allocate space in .plt, .got and associated reloc sections for
+ dynamic relocs. */
+
+static bfd_boolean
+allocate_dynrelocs (h, inf)
+ struct elf_link_hash_entry *h;
+ PTR inf;
+{
+ struct bfd_link_info *info;
+ struct elf_m32r_link_hash_table *htab;
+ struct elf_m32r_link_hash_entry *eh;
+ struct elf_m32r_dyn_relocs *p;
+
+ if (h->root.type == bfd_link_hash_indirect)
+ return TRUE;
+
+ if (h->root.type == bfd_link_hash_warning)
+ /* When warning symbols are created, they **replace** the "real"
+ entry in the hash table, thus we never get to see the real
+ symbol in a hash traversal. So look at it now. */
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ info = (struct bfd_link_info *) inf;
+ htab = m32r_elf_hash_table (info);
+
+ eh = (struct elf_m32r_link_hash_entry *) h;
+// if ((h->got.refcount > 0
+// || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
+// && eh->gotplt_refcount > 0)
+// {
+// /* The symbol has been forced local, or we have some direct got refs,
+// so treat all the gotplt refs as got refs. */
+// h->got.refcount += eh->gotplt_refcount;
+// if (h->plt.refcount >= eh->gotplt_refcount)
+// h->plt.refcount -= eh->gotplt_refcount;
+// }
+
+ if (htab->root.dynamic_sections_created
+ && h->plt.refcount > 0)
+ {
+ /* Make sure this symbol is output as a dynamic symbol.
+ Undefined weak syms won't yet be marked as dynamic. */
+ if (h->dynindx == -1
+ && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
+ {
+ if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
+ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
+ {
+ asection *s = htab->splt;
+
+ /* If this is the first .plt entry, make room for the special
+ first entry. */
+ if (s->_raw_size == 0)
+ s->_raw_size += PLT_ENTRY_SIZE;
+
+ h->plt.offset = s->_raw_size;
+
+ /* If this symbol is not defined in a regular file, and we are
+ not generating a shared library, then set the symbol to this
+ location in the .plt. This is required to make function
+ pointers compare as equal between the normal executable and
+ the shared library. */
+ if (! info->shared
+ && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+ {
+ h->root.u.def.section = s;
+ h->root.u.def.value = h->plt.offset;
+ }
+
+ /* Make room for this entry. */
+ s->_raw_size += PLT_ENTRY_SIZE;
+
+ /* We also need to make an entry in the .got.plt section, which
+ will be placed in the .got section by the linker script. */
+ htab->sgotplt->_raw_size += 4;
+
+ /* We also need to make an entry in the .rel.plt section. */
+ htab->srelplt->_raw_size += sizeof (Elf32_External_Rela);
+ }
+ else
+ {
+ h->plt.offset = (bfd_vma) -1;
+ h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
+ }
+ }
+ else
+ {
+ h->plt.offset = (bfd_vma) -1;
+ h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
+ }
+
+ if (h->got.refcount > 0)
+ {
+ asection *s;
+ bfd_boolean dyn;
+
+ /* Make sure this symbol is output as a dynamic symbol.
+ Undefined weak syms won't yet be marked as dynamic. */
+ if (h->dynindx == -1
+ && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
+ {
+ if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
+ s = htab->sgot;
+
+ h->got.offset = s->_raw_size;
+ s->_raw_size += 4;
+ dyn = htab->root.dynamic_sections_created;
+ if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h))
+ htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
+ }
+ else
+ h->got.offset = (bfd_vma) -1;
+
+ if (eh->dyn_relocs == NULL)
+ return TRUE;
+
+ /* In the shared -Bsymbolic case, discard space allocated for
+ dynamic pc-relative relocs against symbols which turn out to be
+ defined in regular objects. For the normal shared case, discard
+ space for pc-relative relocs that have become local due to symbol
+ visibility changes. */
+
+ if (info->shared)
+ {
+ if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0
+ && ((h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0
+ || info->symbolic))
+ {
+ struct elf_m32r_dyn_relocs **pp;
+ for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
+ {
+ p->count -= p->pc_count;
+ p->pc_count = 0;
+ if (p->count == 0)
+ *pp = p->next;
+ else
+ pp = &p->next;
+ }
+ }
+ }
+ else
+ {
+ /* For the non-shared case, discard space for relocs against
+ symbols which turn out to need copy relocs or are not
+ dynamic. */
+
+ if ((h->elf_link_hash_flags & ELF_LINK_NON_GOT_REF) == 0
+ && (((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+ && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+ || (htab->root.dynamic_sections_created
+ && (h->root.type == bfd_link_hash_undefweak
+ || h->root.type == bfd_link_hash_undefined))))
+ {
+ /* Make sure this symbol is output as a dynamic symbol.
+ Undefined weak syms won't yet be marked as dynamic. */
+ if (h->dynindx == -1
+ && (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) == 0)
+ {
+ if (! bfd_elf32_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
+ /* If that succeeded, we know we'll be keeping all the
+ relocs. */
+ if (h->dynindx != -1)
+ goto keep;
+ }
+
+ eh->dyn_relocs = NULL;
+
+ keep: ;
+ }
+
+ /* Finally, allocate space. */
+ for (p = eh->dyn_relocs; p != NULL; p = p->next)
+ {
+ asection *sreloc = elf_section_data (p->sec)->sreloc;
+ sreloc->_raw_size += p->count * sizeof (Elf32_External_Rela);
+ }
+
+ return TRUE;
+}
+/* Find any dynamic relocs that apply to read-only sections. */
+
+static bfd_boolean
+readonly_dynrelocs (h, inf)
+ struct elf_link_hash_entry *h;
+ PTR inf;
+{
+ struct elf_m32r_link_hash_entry *eh;
+ struct elf_m32r_dyn_relocs *p;
+
+ if (h->root.type == bfd_link_hash_warning)
+ h = (struct elf_link_hash_entry *) h->root.u.i.link;
+
+ eh = (struct elf_m32r_link_hash_entry *) h;
+ for (p = eh->dyn_relocs; p != NULL; p = p->next)
+ {
+ asection *s = p->sec->output_section;
+
+ if (s != NULL && (s->flags & SEC_READONLY) != 0)
+ {
+ struct bfd_link_info *info = (struct bfd_link_info *) inf;
+
+ info->flags |= DF_TEXTREL;
+
+ /* Not an error, just cut short the traversal. */
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+/* Set the sizes of the dynamic sections. */
+
+static bfd_boolean
+m32r_elf_size_dynamic_sections (output_bfd, info)
+ bfd *output_bfd ATTRIBUTE_UNUSED;
+ struct bfd_link_info *info;
+{
+ struct elf_m32r_link_hash_table *htab;
+ bfd *dynobj;
+ asection *s;
+ bfd_boolean relocs;
+ bfd *ibfd;
+
+#ifdef DEBUG_PIC
+printf("m32r_elf_size_dynamic_sections()\n");
+#endif
+
+ htab = m32r_elf_hash_table (info);
+ dynobj = htab->root.dynobj;
+ BFD_ASSERT (dynobj != NULL);
+
+ if (htab->root.dynamic_sections_created)
+ {
+ /* Set the contents of the .interp section to the interpreter. */
+ if (! info->shared)
+ {
+ s = bfd_get_section_by_name (dynobj, ".interp");
+ BFD_ASSERT (s != NULL);
+ s->_raw_size = sizeof ELF_DYNAMIC_INTERPRETER;
+ s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
+ }
+ }
+
+ /* Set up .got offsets for local syms, and space for local dynamic
+ relocs. */
+ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next)
+ {
+ bfd_signed_vma *local_got;
+ bfd_signed_vma *end_local_got;
+ bfd_size_type locsymcount;
+ Elf_Internal_Shdr *symtab_hdr;
+ asection *srel;
+
+ if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour)
+ continue;
+
+ for (s = ibfd->sections; s != NULL; s = s->next)
+ {
+ struct elf_m32r_dyn_relocs *p;
+
+ for (p = ((struct elf_m32r_dyn_relocs *)
+ elf_section_data (s)->local_dynrel);
+ p != NULL;
+ p = p->next)
+ {
+ if (! bfd_is_abs_section (p->sec)
+ && bfd_is_abs_section (p->sec->output_section))
+ {
+ /* Input section has been discarded, either because
+ it is a copy of a linkonce section or due to
+ linker script /DISCARD/, so we'll be discarding
+ the relocs too. */
+ }
+ else if (p->count != 0)
+ {
+ srel = elf_section_data (p->sec)->sreloc;
+ srel->_raw_size += p->count * sizeof (Elf32_External_Rela);
+ if ((p->sec->output_section->flags & SEC_READONLY) != 0)
+ info->flags |= DF_TEXTREL;
+ }
+ }
+ }
+
+ local_got = elf_local_got_refcounts (ibfd);
+ if (!local_got)
+ continue;
+
+ symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
+ locsymcount = symtab_hdr->sh_info;
+ end_local_got = local_got + locsymcount;
+ s = htab->sgot;
+ srel = htab->srelgot;
+ for (; local_got < end_local_got; ++local_got)
+ {
+ if (*local_got > 0)
+ {
+ *local_got = s->_raw_size;
+ s->_raw_size += 4;
+ if (info->shared)
+ srel->_raw_size += sizeof (Elf32_External_Rela);
+ }
+ else
+ *local_got = (bfd_vma) -1;
+ }
+ }
+
+ /* Allocate global sym .plt and .got entries, and space for global
+ sym dynamic relocs. */
+ elf_link_hash_traverse (&htab->root, allocate_dynrelocs, (PTR) info);
+
+ /* We now have determined the sizes of the various dynamic sections.
+ Allocate memory for them. */
+ relocs = FALSE;
+ for (s = dynobj->sections; s != NULL; s = s->next)
+ {
+ if ((s->flags & SEC_LINKER_CREATED) == 0)
+ continue;
+
+ if (s == htab->splt
+ || s == htab->sgot
+ || s == htab->sgotplt)
+ {
+ /* Strip this section if we don't need it; see the
+ comment below. */
+ }
+ else if (strncmp (bfd_get_section_name (dynobj, s), ".rela", 5) == 0)
+ {
+ if (s->_raw_size != 0 && s != htab->srelplt)
+ relocs = TRUE;
+
+ /* We use the reloc_count field as a counter if we need
+ to copy relocs into the output file. */
+ s->reloc_count = 0;
+ }
+ else
+ {
+ /* It's not one of our sections, so don't allocate space. */
+ continue;
+ }
+
+ if (s->_raw_size == 0)
+ {
+ /* If we don't need this section, strip it from the
+ output file. This is mostly to handle .rela.bss and
+ .rela.plt. We must create both sections in
+ create_dynamic_sections, because they must be created
+ before the linker maps input sections to output
+ sections. The linker does that before
+ adjust_dynamic_symbol is called, and it is that
+ function which decides whether anything needs to go
+ into these sections. */
+ _bfd_strip_section_from_output (info, s);
+ continue;
+ }
+
+ /* Allocate memory for the section contents. We use bfd_zalloc
+ here in case unused entries are not reclaimed before the
+ section's contents are written out. This should not happen,
+ but this way if it does, we get a R_M32R_NONE reloc instead
+ of garbage. */
+ s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->_raw_size);
+ if (s->contents == NULL)
+ return FALSE;
+ }
+
+ if (htab->root.dynamic_sections_created)
+ {
+ /* Add some entries to the .dynamic section. We fill in the
+ values later, in m32r_elf_finish_dynamic_sections, but we
+ must add the entries now so that we get the correct size for
+ the .dynamic section. The DT_DEBUG entry is filled in by the
+ dynamic linker and used by the debugger. */
+#define add_dynamic_entry(TAG, VAL) \
+ bfd_elf32_add_dynamic_entry (info, (bfd_vma) (TAG), (bfd_vma) (VAL))
+
+ if (! info->shared)
+ {
+ if (! add_dynamic_entry (DT_DEBUG, 0))
+ return FALSE;
+ }
+
+ if (htab->splt->_raw_size != 0)
+ {
+ if (! add_dynamic_entry (DT_PLTGOT, 0)
+ || ! add_dynamic_entry (DT_PLTRELSZ, 0)
+ || ! add_dynamic_entry (DT_PLTREL, DT_RELA)
+ || ! add_dynamic_entry (DT_JMPREL, 0))
+ return FALSE;
+ }
+
+ if (relocs)
+ {
+ if (! add_dynamic_entry (DT_RELA, 0)
+ || ! add_dynamic_entry (DT_RELASZ, 0)
+ || ! add_dynamic_entry (DT_RELAENT,
+ sizeof (Elf32_External_Rela)))
+ return FALSE;
+
+ /* If any dynamic relocs apply to a read-only section,
+ then we need a DT_TEXTREL entry. */
+ if ((info->flags & DF_TEXTREL) == 0)
+ elf_link_hash_traverse (&htab->root, readonly_dynrelocs,
+ (PTR) info);
+
+ if ((info->flags & DF_TEXTREL) != 0)
+ {
+ if (! add_dynamic_entry (DT_TEXTREL, 0))
+ return FALSE;
+ }
+ }
+ }
+#undef add_dynamic_entry
+
+ return TRUE;
+}
/* Relocate an M32R/D ELF section.
There is some attempt to make this function usable for many architectures,
both for RELA and REL type relocs, if only to serve as a learning tool.
@@ -986,10 +2534,17 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
/* Assume success. */
bfd_boolean ret = TRUE;
-#if !USE_REL
- if (info->relocatable)
- return TRUE;
-#endif
+ struct elf_m32r_link_hash_table *htab = m32r_elf_hash_table (info);
+ bfd *dynobj;
+ bfd_vma *local_got_offsets;
+ asection *sgot, *splt, *sreloc;
+
+ dynobj = htab->root.dynobj;
+ local_got_offsets = elf_local_got_offsets (input_bfd);
+
+ sgot = htab->sgot;
+ splt = htab->splt;
+ sreloc = NULL;
rel = relocs;
relend = relocs + input_section->reloc_count;
@@ -998,18 +2553,19 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
int r_type;
reloc_howto_type *howto;
unsigned long r_symndx;
+ struct elf_link_hash_entry *h;
/* We can't modify r_addend here as elf_link_input_bfd has an assert to
- ensure it's zero (we use REL relocs, not RELA). Therefore this
- should be assigning zero to `addend', but for clarity we use
- `r_addend'. */
+ ensure it's zero (we use REL relocs, not RELA). Therefore this
+ should be assigning zero to `addend', but for clarity we use
+ `r_addend'. */
bfd_vma addend = rel->r_addend;
bfd_vma offset = rel->r_offset;
- struct elf_link_hash_entry *h;
Elf_Internal_Sym *sym;
asection *sec;
const char *sym_name;
bfd_reloc_status_type r;
const char *errmsg = NULL;
+ bfd_boolean use_rel = FALSE;
h = NULL;
r_type = ELF32_R_TYPE (rel->r_info);
@@ -1024,14 +2580,19 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
if (r_type == R_M32R_GNU_VTENTRY
- || r_type == R_M32R_GNU_VTINHERIT)
+ || r_type == R_M32R_GNU_VTINHERIT
+ || r_type == R_M32R_NONE
+ || r_type == R_M32R_RELA_GNU_VTENTRY
+ || r_type == R_M32R_RELA_GNU_VTINHERIT)
continue;
+ if (r_type <= R_M32R_GNU_VTENTRY)
+ use_rel = TRUE;
+
howto = m32r_elf_howto_table + r_type;
r_symndx = ELF32_R_SYM (rel->r_info);
-#if USE_REL
- if (info->relocatable)
+ if (info->relocatable && (use_rel == TRUE))
{
/* This is a relocatable link. We don't have to change
anything, unless the reloc is against a section symbol,
@@ -1092,13 +2653,13 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
}
else
-#endif /* USE_REL */
{
bfd_vma relocation;
/* This is a final link. */
sym = NULL;
sec = NULL;
+ h = NULL;
if (r_symndx < symtab_hdr->sh_info)
{
@@ -1106,20 +2667,37 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
sym = local_syms + r_symndx;
sec = local_sections[r_symndx];
sym_name = "<local symbol>";
-#if !USE_REL
- relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
- addend = rel->r_addend;
-#else
- /* FIXME: This won't handle local relocations against SEC_MERGE
- symbols. See elf32-i386.c for how to do this. */
- relocation = (sec->output_section->vma
- + sec->output_offset
- + sym->st_value);
-#endif
+
+ if (use_rel == FALSE)
+ {
+ relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
+ addend = rel->r_addend;
+
+ if (info->relocatable)
+ {
+ /* This is a relocatable link. We don't have to change
+ anything, unless the reloc is against a section symbol,
+ in which case we have to adjust according to where the
+ section symbol winds up in the output section. */
+ if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ rel->r_addend += sec->output_offset + sym->st_value;
+
+ continue;
+ }
+ }
+ else
+ {
+ relocation = (sec->output_section->vma
+ + sec->output_offset
+ + sym->st_value);
+ }
}
else
{
/* External symbol. */
+ if (info->relocatable && (use_rel == FALSE))
+ continue;
+
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
while (h->root.type == bfd_link_hash_indirect
|| h->root.type == bfd_link_hash_warning)
@@ -1129,9 +2707,64 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
if (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)
{
+ bfd_boolean dyn;
sec = h->root.u.def.section;
- if (sec->output_section == NULL)
- relocation = 0;
+
+ dyn = htab->root.dynamic_sections_created;
+ sec = h->root.u.def.section;
+ if (r_type == R_M32R_GOTPC24
+ || (r_type == R_M32R_GOTPC_HI_ULO
+ || r_type == R_M32R_GOTPC_HI_SLO
+ || r_type == R_M32R_GOTPC_LO)
+ || (r_type == R_M32R_26_PLTREL
+ && h->plt.offset != (bfd_vma) -1)
+ || ((r_type == R_M32R_GOT24
+ || r_type == R_M32R_GOT16_HI_ULO
+ || r_type == R_M32R_GOT16_HI_SLO
+ || r_type == R_M32R_GOT16_LO)
+ && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h)
+ && (! info->shared
+ || (! info->symbolic && h->dynindx != -1)
+ || (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0))
+ || (info->shared
+ && ((! info->symbolic && h->dynindx != -1)
+ || (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0)
+ && (((r_type == R_M32R_16_RELA
+ || r_type == R_M32R_32_RELA
+ || r_type == R_M32R_24_RELA
+ || r_type == R_M32R_HI16_ULO_RELA
+ || r_type == R_M32R_HI16_SLO_RELA
+ || r_type == R_M32R_LO16_RELA)
+ && (h->elf_link_hash_flags
+ & ELF_LINK_FORCED_LOCAL) == 0)
+ || r_type == R_M32R_10_PCREL_RELA
+ || r_type == R_M32R_18_PCREL_RELA
+ || r_type == R_M32R_26_PCREL_RELA)
+ && ((input_section->flags & SEC_ALLOC) != 0
+ /* DWARF will emit R_M32R_16(24,32) relocations
+ in its sections against symbols defined
+ externally in shared libraries. We can't do
+ anything with them here. */
+ || ((input_section->flags & SEC_DEBUGGING) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_DYNAMIC) != 0))))
+ {
+ /* In these cases, we don't need the relocation
+ value. We check specially because in some
+ obscure cases sec->output_section will be NULL. */
+ relocation = 0;
+ }
+ else if (sec->output_section == NULL)
+ {
+ (*_bfd_error_handler)
+ (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
+ bfd_get_filename (input_bfd), h->root.root.string,
+ bfd_get_section_name (input_bfd, input_section));
+
+ relocation = 0;
+ }
else
relocation = (h->root.u.def.value
+ sec->output_section->vma
@@ -1139,11 +2772,17 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
else if (h->root.type == bfd_link_hash_undefweak)
relocation = 0;
+ else if (info->shared
+ && (!info->symbolic)
+ && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
+ relocation = 0;
else
{
if (! ((*info->callbacks->undefined_symbol)
(info, h->root.root.string, input_bfd,
- input_section, offset, TRUE)))
+ input_section, offset,
+ (!info->shared
+ || ELF_ST_VISIBILITY (h->other)))))
return FALSE;
relocation = 0;
}
@@ -1158,11 +2797,283 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
switch ((int) r_type)
{
+ case R_M32R_GOTPC24:
+ /* .got(_GLOBAL_OFFSET_TABLE_) - pc relocation
+ ld24 rx,#_GLOBAL_OFFSET_TABLE_
+ */
+ relocation = sgot->output_section->vma;
+ break;
+
+ case R_M32R_GOTPC_HI_ULO:
+ case R_M32R_GOTPC_HI_SLO:
+ case R_M32R_GOTPC_LO:
+ {
+ /* .got(_GLOBAL_OFFSET_TABLE_) - pc relocation
+ bl .+4
+ seth rx,#high(_GLOBAL_OFFSET_TABLE_)
+ or3 rx,rx,#low(_GLOBAL_OFFSET_TABLE_ +4)
+ or
+ bl .+4
+ seth rx,#shigh(_GLOBAL_OFFSET_TABLE_)
+ add3 rx,rx,#low(_GLOBAL_OFFSET_TABLE_ +4)
+ */
+ relocation = sgot->output_section->vma;
+ relocation -= (input_section->output_section->vma
+ + input_section->output_offset
+ + rel->r_offset);
+ if ((r_type == R_M32R_GOTPC_HI_SLO)
+ && ((relocation + rel->r_addend) & 0x8000))
+ rel->r_addend += 0x10000;
+
+ break;
+ }
+ case R_M32R_GOT16_HI_ULO:
+ case R_M32R_GOT16_HI_SLO:
+ case R_M32R_GOT16_LO:
+ /* Fall through. */
+ case R_M32R_GOT24:
+ /* Relocation is to the entry for this symbol in the global
+ offset table. */
+ BFD_ASSERT (sgot != NULL);
+
+ if (h != NULL)
+ {
+ bfd_boolean dyn;
+ bfd_vma off;
+
+ off = h->got.offset;
+ BFD_ASSERT (off != (bfd_vma) -1);
+
+ dyn = htab->root.dynamic_sections_created;
+ if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h)
+ || (info->shared
+ && (info->symbolic
+ || h->dynindx == -1
+ || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
+ && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+ {
+ /* This is actually a static link, or it is a
+ -Bsymbolic link and the symbol is defined
+ locally, or the symbol was forced to be local
+ because of a version file. We must initialize
+ this entry in the global offset table. Since the
+ offset must always be a multiple of 4, we use the
+ least significant bit to record whether we have
+ initialized it already.
+
+ When doing a dynamic link, we create a .rela.got
+ relocation entry to initialize the value. This
+ is done in the finish_dynamic_symbol routine. */
+ if ((off & 1) != 0)
+ off &= ~1;
+ else
+ {
+ bfd_put_32 (output_bfd, relocation,
+ sgot->contents + off);
+ h->got.offset |= 1;
+ }
+ }
+
+ relocation = sgot->output_offset + off;
+ }
+ else
+ {
+ bfd_vma off;
+ bfd_byte *loc;
+
+ BFD_ASSERT (local_got_offsets != NULL
+ && local_got_offsets[r_symndx] != (bfd_vma) -1);
+
+ off = local_got_offsets[r_symndx];
+
+ /* The offset must always be a multiple of 4. We use
+ the least significant bit to record whether we have
+ already processed this entry. */
+ if ((off & 1) != 0)
+ off &= ~1;
+ else
+ {
+ bfd_put_32 (output_bfd, relocation, sgot->contents + off);
+
+ if (info->shared)
+ {
+ asection *srelgot;
+ Elf_Internal_Rela outrel;
+
+ /* We need to generate a R_M32R_RELATIVE reloc
+ for the dynamic linker. */
+ srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
+ BFD_ASSERT (srelgot != NULL);
+
+ outrel.r_offset = (sgot->output_section->vma
+ + sgot->output_offset
+ + off);
+ outrel.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
+ outrel.r_addend = relocation;
+ loc = srelgot->contents;
+ loc += srelgot->reloc_count * sizeof(Elf32_External_Rela);
+ bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
+ ++srelgot->reloc_count;
+ }
+
+ local_got_offsets[r_symndx] |= 1;
+ }
+
+ relocation = sgot->output_offset + off;
+ }
+ if ((r_type == R_M32R_GOT16_HI_SLO)
+ && ((relocation + rel->r_addend) & 0x8000))
+ rel->r_addend += 0x10000;
+
+ break;
+
+ case R_M32R_26_PLTREL:
+ /* Relocation is to the entry for this symbol in the
+ procedure linkage table. */
+
+ /* The native assembler will generate a 26_PLTREL reloc
+ for a local symbol if you assemble a call from one
+ section to another when using -K pic. */
+ if (h == NULL)
+ break;
+
+ //if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL
+ // || ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
+ // break;
+ if (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL)
+ break;
+
+ if (h->plt.offset == (bfd_vma) -1)
+ {
+ /* We didn't make a PLT entry for this symbol. This
+ happens when statically linking PIC code, or when
+ using -Bsymbolic. */
+ break;
+ }
+
+ relocation = (splt->output_section->vma
+ + splt->output_offset
+ + h->plt.offset);
+ break;
+
+ case R_M32R_HI16_SLO_RELA:
+ {
+ if ((relocation + rel->r_addend) & 0x8000)
+ {
+ rel->r_addend += 0x10000;
+ }
+ }
+ /* Fall through. */
+ case R_M32R_16_RELA:
+ case R_M32R_24_RELA:
+ case R_M32R_32_RELA:
+ case R_M32R_18_PCREL_RELA:
+ case R_M32R_26_PCREL_RELA:
+ case R_M32R_HI16_ULO_RELA:
+ case R_M32R_LO16_RELA:
+ case R_M32R_SDA16_RELA:
+ if (info->shared
+ && r_symndx != 0
+ && (input_section->flags & SEC_ALLOC) != 0
+ && ((r_type != R_M32R_18_PCREL_RELA
+ && r_type != R_M32R_26_PCREL_RELA)
+ || (h != NULL
+ && h->dynindx != -1
+ && (! info->symbolic
+ || (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+ {
+ Elf_Internal_Rela outrel;
+ bfd_boolean skip, relocate;
+ bfd_byte *loc;
+
+ /* When generating a shared object, these relocations
+ are copied into the output file to be resolved at run
+ time. */
+
+ if (sreloc == NULL)
+ {
+ const char *name;
+
+ name = (bfd_elf_string_from_elf_section
+ (input_bfd,
+ elf_elfheader (input_bfd)->e_shstrndx,
+ elf_section_data (input_section)->rel_hdr.sh_name));
+ if (name == NULL)
+ return FALSE;
+
+ BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ && strcmp (bfd_get_section_name (input_bfd,
+ input_section),
+ name + 5) == 0);
+
+ sreloc = bfd_get_section_by_name (dynobj, name);
+ BFD_ASSERT (sreloc != NULL);
+ }
+
+ skip = FALSE;
+ relocate = FALSE;
+
+ outrel.r_offset = _bfd_elf_section_offset (output_bfd,
+ info,
+ input_section,
+ rel->r_offset);
+ if (outrel.r_offset == (bfd_vma) -1)
+ skip = TRUE;
+ else if (outrel.r_offset == (bfd_vma) -2)
+ skip = TRUE, relocate = TRUE;
+ outrel.r_offset += (input_section->output_section->vma
+ + input_section->output_offset);
+
+ if (skip)
+ memset (&outrel, 0, sizeof outrel);
+ else if (r_type == R_M32R_18_PCREL_RELA
+ || r_type == R_M32R_26_PCREL_RELA)
+ {
+ BFD_ASSERT (h != NULL && h->dynindx != -1);
+ outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+ outrel.r_addend = rel->r_addend;
+ }
+ else
+ {
+ /* h->dynindx may be -1 if this symbol was marked to
+ become local. */
+ if (h == NULL
+ || ((info->symbolic || h->dynindx == -1)
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) != 0))
+ {
+ relocate = TRUE;
+ outrel.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
+ outrel.r_addend = relocation + rel->r_addend;
+ }
+ else
+ {
+ BFD_ASSERT (h->dynindx != -1);
+ outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
+ outrel.r_addend = relocation + rel->r_addend;
+ }
+ }
+
+ loc = sreloc->contents;
+ loc += sreloc->reloc_count * sizeof(Elf32_External_Rela);
+ bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc);
+ ++sreloc->reloc_count;
+
+ /* If this reloc is against an external symbol, we do
+ not want to fiddle with the addend. Otherwise, we
+ need to include the symbol value so that it becomes
+ an addend for the dynamic reloc. */
+ if (! relocate)
+ continue;
+ }
+ break;
+
case (int) R_M32R_10_PCREL :
r = m32r_elf_do_10_pcrel_reloc (input_bfd, howto, input_section,
contents, offset,
sec, relocation, addend);
- break;
+ goto check_reloc;
case (int) R_M32R_HI16_SLO :
case (int) R_M32R_HI16_ULO :
@@ -1190,7 +3101,8 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
contents, offset,
relocation, addend);
}
- break;
+
+ goto check_reloc;
case (int) R_M32R_SDA16 :
{
@@ -1233,14 +3145,20 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
continue;
}
}
- /* fall through */
+ /* fall through */
+
+ default : /* OLD_M32R_RELOC */
- default :
r = _bfd_final_link_relocate (howto, input_bfd, input_section,
contents, offset,
relocation, addend);
- break;
+ goto check_reloc;
}
+
+ r = _bfd_final_link_relocate (howto, input_bfd, input_section,
+ contents, rel->r_offset,
+ relocation, rel->r_addend);
+
}
check_reloc:
@@ -1307,6 +3225,353 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section,
return ret;
}
+
+/* Finish up dynamic symbol handling. We set the contents of various
+ dynamic sections here. */
+static bfd_boolean
+m32r_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
+ bfd *output_bfd;
+ struct bfd_link_info *info;
+ struct elf_link_hash_entry *h;
+ Elf_Internal_Sym *sym;
+{
+ struct elf_m32r_link_hash_table *htab;
+ bfd *dynobj;
+ bfd_byte *loc;
+
+#ifdef DEBUG_PIC
+printf("m32r_elf_finish_dynamic_symbol()\n");
+#endif
+
+ htab = m32r_elf_hash_table (info);
+ dynobj = htab->root.dynobj;
+
+ if (h->plt.offset != (bfd_vma) -1)
+ {
+ asection *splt;
+ asection *sgot;
+ asection *srela;
+
+ bfd_vma plt_index;
+ bfd_vma got_offset;
+ Elf_Internal_Rela rela;
+
+ /* This symbol has an entry in the procedure linkage table. Set
+ it up. */
+
+ BFD_ASSERT (h->dynindx != -1);
+
+ splt = htab->splt;
+ sgot = htab->sgotplt;
+ srela = htab->srelplt;
+ BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL);
+
+ /* Get the index in the procedure linkage table which
+ corresponds to this symbol. This is the index of this symbol
+ in all the symbols for which we are making plt entries. The
+ first entry in the procedure linkage table is reserved. */
+ plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1;
+
+ /* Get the offset into the .got table of the entry that
+ corresponds to this function. Each .got entry is 4 bytes.
+ The first three are reserved. */
+ got_offset = (plt_index + 3) * 4;
+
+ /* Fill in the entry in the procedure linkage table. */
+ if (! info->shared)
+ {
+ bfd_put_32 (output_bfd,
+ (PLT_ENTRY_WORD0b
+ + (((sgot->output_section->vma
+ + sgot->output_offset
+ + got_offset) >> 16) & 0xffff)),
+ splt->contents + h->plt.offset);
+ bfd_put_32 (output_bfd,
+ (PLT_ENTRY_WORD1b
+ + ((sgot->output_section->vma
+ + sgot->output_offset
+ + got_offset) & 0xffff)),
+ splt->contents + h->plt.offset + 4);
+ bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
+ splt->contents + h->plt.offset + 8);
+ bfd_put_32 (output_bfd,
+ (PLT_ENTRY_WORD3
+ + plt_index * sizeof (Elf32_External_Rela)),
+ splt->contents + h->plt.offset + 12);
+ bfd_put_32 (output_bfd,
+ (PLT_ENTRY_WORD4
+ + (((unsigned int) ((- (h->plt.offset + 16)) >> 2)) & 0xffffff)),
+ splt->contents + h->plt.offset + 16);
+ }
+ else
+ {
+ bfd_put_32 (output_bfd,
+ PLT_ENTRY_WORD0 + got_offset,
+ splt->contents + h->plt.offset);
+ bfd_put_32 (output_bfd, PLT_ENTRY_WORD1,
+ splt->contents + h->plt.offset + 4);
+ bfd_put_32 (output_bfd, PLT_ENTRY_WORD2,
+ splt->contents + h->plt.offset + 8);
+ bfd_put_32 (output_bfd,
+ (PLT_ENTRY_WORD3
+ + plt_index * sizeof (Elf32_External_Rela)),
+ splt->contents + h->plt.offset + 12);
+ bfd_put_32 (output_bfd,
+ (PLT_ENTRY_WORD4
+ + (((unsigned int) ((- (h->plt.offset + 16)) >> 2)) & 0xffffff)),
+ splt->contents + h->plt.offset + 16);
+ }
+
+ /* Fill in the entry in the global offset table. */
+ bfd_put_32 (output_bfd,
+ (splt->output_section->vma
+ + splt->output_offset
+ + h->plt.offset
+ + 12), /* same offset */
+ sgot->contents + got_offset);
+
+ /* Fill in the entry in the .rela.plt section. */
+ rela.r_offset = (sgot->output_section->vma
+ + sgot->output_offset
+ + got_offset);
+ rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_JMP_SLOT);
+ rela.r_addend = 0;
+ loc = srela->contents;
+ loc += plt_index * sizeof(Elf32_External_Rela);
+ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+
+ if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
+ {
+ /* Mark the symbol as undefined, rather than as defined in
+ the .plt section. Leave the value alone. */
+ sym->st_shndx = SHN_UNDEF;
+ }
+ }
+
+ if (h->got.offset != (bfd_vma) -1)
+ {
+ asection *sgot;
+ asection *srela;
+ Elf_Internal_Rela rela;
+
+ /* This symbol has an entry in the global offset table. Set it
+ up. */
+
+ sgot = htab->sgot;
+ srela = htab->srelgot;
+ BFD_ASSERT (sgot != NULL && srela != NULL);
+
+ rela.r_offset = (sgot->output_section->vma
+ + sgot->output_offset
+ + (h->got.offset &~ 1));
+
+ /* If this is a -Bsymbolic link, and the symbol is defined
+ locally, we just want to emit a RELATIVE reloc. Likewise if
+ the symbol was forced to be local because of a version file.
+ The entry in the global offset table will already have been
+ initialized in the relocate_section function. */
+ if (info->shared
+ && (info->symbolic
+ || h->dynindx == -1
+ || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
+ && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
+ {
+ rela.r_info = ELF32_R_INFO (0, R_M32R_RELATIVE);
+ rela.r_addend = (h->root.u.def.value
+ + h->root.u.def.section->output_section->vma
+ + h->root.u.def.section->output_offset);
+ }
+ else
+ {
+ BFD_ASSERT((h->got.offset & 1) == 0);
+ bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
+ rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_GLOB_DAT);
+ rela.r_addend = 0;
+ }
+
+ loc = srela->contents;
+ loc += srela->reloc_count * sizeof(Elf32_External_Rela);
+ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+ ++srela->reloc_count;
+ }
+
+ if ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_COPY) != 0)
+ {
+ asection *s;
+ Elf_Internal_Rela rela;
+
+ /* This symbols needs a copy reloc. Set it up. */
+
+ BFD_ASSERT (h->dynindx != -1
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak));
+
+ s = bfd_get_section_by_name (h->root.u.def.section->owner,
+ ".rela.bss");
+ BFD_ASSERT (s != NULL);
+
+ rela.r_offset = (h->root.u.def.value
+ + h->root.u.def.section->output_section->vma
+ + h->root.u.def.section->output_offset);
+ rela.r_info = ELF32_R_INFO (h->dynindx, R_M32R_COPY);
+ rela.r_addend = 0;
+ loc = s->contents;
+ loc += s->reloc_count * sizeof(Elf32_External_Rela);
+ bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
+ ++s->reloc_count;
+ }
+
+ /* Mark some specially defined symbols as absolute. */
+ if (strcmp (h->root.root.string, "_DYNAMIC") == 0
+ || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
+ sym->st_shndx = SHN_ABS;
+
+ return TRUE;
+}
+
+
+/* Finish up the dynamic sections. */
+
+static bfd_boolean
+m32r_elf_finish_dynamic_sections (output_bfd, info)
+ bfd *output_bfd;
+ struct bfd_link_info *info;
+{
+ struct elf_m32r_link_hash_table *htab;
+ bfd *dynobj;
+ asection *sdyn;
+ asection *sgot;
+
+#ifdef DEBUG_PIC
+printf("m32r_elf_finish_dynamic_sections()\n");
+#endif
+
+ htab = m32r_elf_hash_table (info);
+ dynobj = htab->root.dynobj;
+
+ sgot = htab->sgotplt;
+ sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
+
+ if (htab->root.dynamic_sections_created)
+ {
+ asection *splt;
+ Elf32_External_Dyn *dyncon, *dynconend;
+
+ BFD_ASSERT (sgot != NULL && sdyn != NULL);
+
+ dyncon = (Elf32_External_Dyn *) sdyn->contents;
+ dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
+
+ for (; dyncon < dynconend; dyncon++)
+ {
+ Elf_Internal_Dyn dyn;
+ const char *name;
+ asection *s;
+
+ bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
+
+ switch (dyn.d_tag)
+ {
+ default:
+ break;
+
+ case DT_PLTGOT:
+ name = ".got";
+ s = htab->sgot->output_section;
+ goto get_vma;
+ case DT_JMPREL:
+ name = ".rela.plt";
+ s = htab->srelplt->output_section;
+ get_vma:
+ BFD_ASSERT (s != NULL);
+ dyn.d_un.d_ptr = s->vma;
+ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ break;
+
+ case DT_PLTRELSZ:
+ s = htab->srelplt->output_section;
+ BFD_ASSERT (s != NULL);
+ if (s->_cooked_size != 0)
+ dyn.d_un.d_val = s->_cooked_size;
+ else
+ dyn.d_un.d_val = s->_raw_size;
+ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ break;
+
+ case DT_RELASZ:
+ /* My reading of the SVR4 ABI indicates that the
+ procedure linkage table relocs (DT_JMPREL) should be
+ included in the overall relocs (DT_RELA). This is
+ what Solaris does. However, UnixWare can not handle
+ that case. Therefore, we override the DT_RELASZ entry
+ here to make it not include the JMPREL relocs. Since
+ the linker script arranges for .rela.plt to follow all
+ other relocation sections, we don't have to worry
+ about changing the DT_RELA entry. */
+ if (htab->srelplt != NULL)
+ {
+ s = htab->srelplt->output_section;
+ if (s->_cooked_size != 0)
+ dyn.d_un.d_val -= s->_cooked_size;
+ else
+ dyn.d_un.d_val -= s->_raw_size;
+ }
+ bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
+ break;
+ }
+ }
+
+ /* Fill in the first entry in the procedure linkage table. */
+ splt = htab->splt;
+ if (splt && splt->_raw_size > 0)
+ {
+ if (info->shared)
+ {
+ bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD0, splt->contents);
+ bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD1, splt->contents + 4);
+ bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD2, splt->contents + 8);
+ bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD3, splt->contents + 12);
+ bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD4, splt->contents + 16);
+ }
+ else
+ {
+ unsigned long addr;
+ /* addr = .got + 4 */
+ addr = sgot->output_section->vma + sgot->output_offset + 4;
+ bfd_put_32 (output_bfd,
+ PLT0_ENTRY_WORD0 | ((addr >> 16) & 0xffff),
+ splt->contents);
+ bfd_put_32 (output_bfd,
+ PLT0_ENTRY_WORD1 | (addr & 0xffff),
+ splt->contents + 4);
+ bfd_put_32 (output_bfd, PLT0_ENTRY_WORD2, splt->contents + 8);
+ bfd_put_32 (output_bfd, PLT0_ENTRY_WORD3, splt->contents + 12);
+ bfd_put_32 (output_bfd, PLT0_ENTRY_WORD4, splt->contents + 16);
+ }
+
+ elf_section_data (splt->output_section)->this_hdr.sh_entsize =
+ PLT_ENTRY_SIZE;
+ }
+ }
+
+ /* Fill in the first three entries in the global offset table. */
+ if (sgot && sgot->_raw_size > 0)
+ {
+ if (sdyn == NULL)
+ bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
+ else
+ bfd_put_32 (output_bfd,
+ sdyn->output_section->vma + sdyn->output_offset,
+ sgot->contents);
+ bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
+ bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
+
+ elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
+ }
+
+ return TRUE;
+}
+
#if 0 /* relaxing not supported yet */
@@ -2005,6 +4270,8 @@ m32r_elf_gc_mark_hook (sec, info, rel, h, sym)
{
case R_M32R_GNU_VTINHERIT:
case R_M32R_GNU_VTENTRY:
+ case R_M32R_RELA_GNU_VTINHERIT:
+ case R_M32R_RELA_GNU_VTENTRY:
break;
default:
@@ -2035,7 +4302,97 @@ m32r_elf_gc_sweep_hook (abfd, info, sec, relocs)
asection *sec ATTRIBUTE_UNUSED;
const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
{
- /* we don't use got and plt entries for m32r */
+ /* Update the got entry reference counts for the section being removed. */
+ Elf_Internal_Shdr *symtab_hdr;
+ struct elf_link_hash_entry **sym_hashes;
+ bfd_signed_vma *local_got_refcounts;
+ const Elf_Internal_Rela *rel, *relend;
+ unsigned long r_symndx;
+ struct elf_link_hash_entry *h;
+
+ elf_section_data (sec)->local_dynrel = NULL;
+
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ local_got_refcounts = elf_local_got_refcounts (abfd);
+
+ relend = relocs + sec->reloc_count;
+ for (rel = relocs; rel < relend; rel++)
+ switch (ELF32_R_TYPE (rel->r_info))
+ {
+ case R_M32R_GOT16_HI_ULO:
+ case R_M32R_GOT16_HI_SLO:
+ case R_M32R_GOT16_LO:
+ case R_M32R_GOT24:
+ case R_M32R_GOTPC_HI_ULO:
+ case R_M32R_GOTPC_HI_SLO:
+ case R_M32R_GOTPC_LO:
+ case R_M32R_GOTPC24:
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ if (r_symndx >= symtab_hdr->sh_info)
+ {
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ if (h->got.refcount > 0)
+ h->got.refcount--;
+ }
+ else
+ {
+ if (local_got_refcounts && local_got_refcounts[r_symndx] > 0)
+ local_got_refcounts[r_symndx]--;
+ }
+ break;
+
+ case R_M32R_16_RELA:
+ case R_M32R_24_RELA:
+ case R_M32R_32_RELA:
+ case R_M32R_HI16_ULO_RELA:
+ case R_M32R_HI16_SLO_RELA:
+ case R_M32R_LO16_RELA:
+ case R_M32R_SDA16_RELA:
+ case R_M32R_18_PCREL_RELA:
+ case R_M32R_26_PCREL_RELA:
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ if (r_symndx >= symtab_hdr->sh_info)
+ {
+ struct elf_m32r_link_hash_entry *eh;
+ struct elf_m32r_dyn_relocs **pp;
+ struct elf_m32r_dyn_relocs *p;
+
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+
+ if (!info->shared && h->plt.refcount > 0)
+ h->plt.refcount -= 1;
+
+ eh = (struct elf_m32r_link_hash_entry *) h;
+
+ for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
+ if (p->sec == sec)
+ {
+ if (ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
+ || ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA)
+ p->pc_count -= 1;
+ p->count -= 1;
+ if (p->count == 0)
+ *pp = p->next;
+ break;
+ }
+ }
+ break;
+
+ case R_M32R_26_PLTREL:
+ r_symndx = ELF32_R_SYM (rel->r_info);
+ if (r_symndx >= symtab_hdr->sh_info)
+ {
+ h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+ if (h->plt.refcount > 0)
+ h->plt.refcount--;
+ }
+ break;
+
+ default:
+ break;
+ }
+
return TRUE;
}
@@ -2054,32 +4411,250 @@ m32r_elf_check_relocs (abfd, info, sec, relocs)
struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
const Elf_Internal_Rela *rel;
const Elf_Internal_Rela *rel_end;
+ struct elf_m32r_link_hash_table *htab;
+ bfd *dynobj;
+ bfd_vma *local_got_offsets;
+ asection *sgot, *srelgot, *sreloc;
if (info->relocatable)
return TRUE;
+ sgot = srelgot = sreloc = NULL;
+
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (abfd);
sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym);
if (!elf_bad_symtab (abfd))
sym_hashes_end -= symtab_hdr->sh_info;
+ htab = m32r_elf_hash_table (info);
+ dynobj = htab->root.dynobj;
+ local_got_offsets = elf_local_got_offsets (abfd);
+
rel_end = relocs + sec->reloc_count;
for (rel = relocs; rel < rel_end; rel++)
{
+ int r_type;
struct elf_link_hash_entry *h;
unsigned long r_symndx;
r_symndx = ELF32_R_SYM (rel->r_info);
+ r_type = ELF32_R_TYPE (rel->r_info);
if (r_symndx < symtab_hdr->sh_info)
h = NULL;
else
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
- switch (ELF32_R_TYPE (rel->r_info))
+ /* Some relocs require a global offset table. */
+ if (htab->sgot == NULL)
+ {
+ switch (r_type)
+ {
+ case R_M32R_GOT16_HI_ULO:
+ case R_M32R_GOT16_HI_SLO:
+ case R_M32R_GOT16_LO:
+ case R_M32R_GOTPC24:
+ case R_M32R_GOTPC_HI_ULO:
+ case R_M32R_GOTPC_HI_SLO:
+ case R_M32R_GOTPC_LO:
+ case R_M32R_GOT24:
+ if (dynobj == NULL)
+ htab->root.dynobj = dynobj = abfd;
+ if (! create_got_section (dynobj, info))
+ return FALSE;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ switch (r_type)
{
+ case R_M32R_GOT16_HI_ULO:
+ case R_M32R_GOT16_HI_SLO:
+ case R_M32R_GOT16_LO:
+ case R_M32R_GOT24:
+
+ if (h != NULL)
+ h->got.refcount += 1;
+ else
+ {
+ bfd_signed_vma *local_got_refcounts;
+
+ /* This is a global offset table entry for a local
+ symbol. */
+ local_got_refcounts = elf_local_got_refcounts (abfd);
+ if (local_got_refcounts == NULL)
+ {
+ bfd_size_type size;
+
+ size = symtab_hdr->sh_info;
+ size *= sizeof (bfd_signed_vma);
+ local_got_refcounts = ((bfd_signed_vma *)
+ bfd_zalloc (abfd, size));
+ if (local_got_refcounts == NULL)
+ return FALSE;
+ elf_local_got_refcounts (abfd) = local_got_refcounts;
+ }
+ local_got_refcounts[r_symndx] += 1;
+ }
+ break;
+
+ case R_M32R_26_PLTREL:
+ /* This symbol requires a procedure linkage table entry. We
+ actually build the entry in adjust_dynamic_symbol,
+ because this might be a case of linking PIC code without
+ linking in any dynamic objects, in which case we don't
+ need to generate a procedure linkage table after all. */
+
+ /* If this is a local symbol, we resolve it directly without
+ creating a procedure linkage table entry. */
+ if (h == NULL)
+ continue;
+
+ if (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL)
+ break;
+
+ h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
+ h->plt.refcount += 1;
+ break;
+
+ case R_M32R_16_RELA:
+ case R_M32R_24_RELA:
+ case R_M32R_32_RELA:
+ case R_M32R_HI16_ULO_RELA:
+ case R_M32R_HI16_SLO_RELA:
+ case R_M32R_LO16_RELA:
+ case R_M32R_SDA16_RELA:
+ case R_M32R_18_PCREL_RELA:
+ case R_M32R_26_PCREL_RELA:
+
+ if (h != NULL && !info->shared)
+ {
+ h->elf_link_hash_flags |= ELF_LINK_NON_GOT_REF;
+ h->plt.refcount += 1;
+ }
+
+ /* If we are creating a shared library, and this is a reloc
+ against a global symbol, or a non PC relative reloc
+ against a local symbol, then we need to copy the reloc
+ into the shared library. However, if we are linking with
+ -Bsymbolic, we do not need to copy a reloc against a
+ global symbol which is defined in an object we are
+ including in the link (i.e., DEF_REGULAR is set). At
+ this point we have not seen all the input files, so it is
+ possible that DEF_REGULAR is not set now but will be set
+ later (it is never cleared). We account for that
+ possibility below by storing information in the
+ dyn_relocs field of the hash table entry. A similar
+ situation occurs when creating shared libraries and symbol
+ visibility changes render the symbol local.
+
+ If on the other hand, we are creating an executable, we
+ may need to keep relocations for symbols satisfied by a
+ dynamic library if we manage to avoid copy relocs for the
+ symbol. */
+ if ((info->shared
+ && (sec->flags & SEC_ALLOC) != 0
+ && ((r_type != R_M32R_26_PCREL_RELA
+ && r_type != R_M32R_18_PCREL_RELA)
+ || (h != NULL
+ && (! info->symbolic
+ || h->root.type == bfd_link_hash_defweak
+ || (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0))))
+ || (!info->shared
+ && (sec->flags & SEC_ALLOC) != 0
+ && h != NULL
+ && (h->root.type == bfd_link_hash_defweak
+ || (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0)))
+ {
+ struct elf_m32r_dyn_relocs *p;
+ struct elf_m32r_dyn_relocs **head;
+
+ if (dynobj == NULL)
+ htab->root.dynobj = dynobj = abfd;
+
+ /* When creating a shared object, we must copy these
+ relocs into the output file. We create a reloc
+ section in dynobj and make room for the reloc. */
+ if (sreloc == NULL)
+ {
+ const char *name;
+
+ name = (bfd_elf_string_from_elf_section
+ (abfd,
+ elf_elfheader (abfd)->e_shstrndx,
+ elf_section_data (sec)->rel_hdr.sh_name));
+ if (name == NULL)
+ return FALSE;
+
+ BFD_ASSERT (strncmp (name, ".rela", 5) == 0
+ && strcmp (bfd_get_section_name (abfd, sec),
+ name + 5) == 0);
+
+ sreloc = bfd_get_section_by_name (dynobj, name);
+ if (sreloc == NULL)
+ {
+ flagword flags;
+
+ sreloc = bfd_make_section (dynobj, name);
+ flags = (SEC_HAS_CONTENTS | SEC_READONLY
+ | SEC_IN_MEMORY | SEC_LINKER_CREATED);
+ if ((sec->flags & SEC_ALLOC) != 0)
+ flags |= SEC_ALLOC | SEC_LOAD;
+ if (sreloc == NULL
+ || ! bfd_set_section_flags (dynobj, sreloc, flags)
+ || ! bfd_set_section_alignment (dynobj, sreloc, 2))
+ return FALSE;
+ }
+ elf_section_data (sec)->sreloc = sreloc;
+ }
+
+ /* If this is a global symbol, we count the number of
+ relocations we need for this symbol. */
+ if (h != NULL)
+ head = &((struct elf_m32r_link_hash_entry *) h)->dyn_relocs;
+ else
+ {
+ asection *s;
+
+ /* Track dynamic relocs needed for local syms too. */
+ s = bfd_section_from_r_symndx (abfd, &htab->sym_sec,
+ sec, r_symndx);
+ if (s == NULL)
+ return FALSE;
+
+ head = ((struct elf_m32r_dyn_relocs **)
+ &elf_section_data (s)->local_dynrel);
+ }
+
+ p = *head;
+ if (p == NULL || p->sec != sec)
+ {
+ bfd_size_type amt = sizeof (*p);
+ p = ((struct elf_m32r_dyn_relocs *) bfd_alloc (dynobj, amt));
+ if (p == NULL)
+ return FALSE;
+ p->next = *head;
+ *head = p;
+ p->sec = sec;
+ p->count = 0;
+ p->pc_count = 0;
+ }
+
+ p->count += 1;
+ if (ELF32_R_TYPE (rel->r_info) == R_M32R_26_PCREL_RELA
+ || ELF32_R_TYPE (rel->r_info) == R_M32R_18_PCREL_RELA)
+ p->pc_count += 1;
+ }
+ break;
+
/* This relocation describes the C++ object vtable hierarchy.
Reconstruct it for later use during GC. */
+ case R_M32R_RELA_GNU_VTINHERIT:
case R_M32R_GNU_VTINHERIT:
if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
return FALSE;
@@ -2091,6 +4666,10 @@ m32r_elf_check_relocs (abfd, info, sec, relocs)
if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_offset))
return FALSE;
break;
+ case R_M32R_RELA_GNU_VTENTRY:
+ if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_addend))
+ return FALSE;
+ break;
}
}
@@ -2103,6 +4682,61 @@ static struct bfd_elf_special_section const m32r_elf_special_sections[]=
{ ".sbss", 5, -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE },
{ NULL, 0, 0, 0, 0 }
};
+
+static bfd_boolean
+m32r_elf_fake_sections (abfd, hdr, sec)
+ bfd *abfd;
+ Elf_Internal_Shdr *hdr ATTRIBUTE_UNUSED;
+ asection *sec;
+{
+ register const char *name;
+
+ name = bfd_get_section_name (abfd, sec);
+
+ /* The generic elf_fake_sections will set up REL_HDR using the
+ default kind of relocations. But, we may actually need both
+ kinds of relocations, so we set up the second header here.
+
+ This is not necessary for the O32 ABI since that only uses Elf32_Rel
+ relocations (cf. System V ABI, MIPS RISC Processor Supplement,
+ 3rd Edition, p. 4-17). It breaks the IRIX 5/6 32-bit ld, since one
+ of the resulting empty .rela.<section> sections starts with
+ sh_offset == object size, and ld doesn't allow that. While the check
+ is arguably bogus for empty or SHT_NOBITS sections, it can easily be
+ avoided by not emitting those useless sections in the first place. */
+ if ((sec->flags & SEC_RELOC) != 0)
+ {
+ struct bfd_elf_section_data *esd;
+ bfd_size_type amt = sizeof (Elf_Internal_Shdr);
+
+ esd = elf_section_data (sec);
+ BFD_ASSERT (esd->rel_hdr2 == NULL);
+ esd->rel_hdr2 = (Elf_Internal_Shdr *) bfd_zalloc (abfd, amt);
+ if (!esd->rel_hdr2)
+ return FALSE;
+ _bfd_elf_init_reloc_shdr (abfd, esd->rel_hdr2, sec,
+ !sec->use_rela_p);
+ }
+
+ return TRUE;
+}
+
+static enum elf_reloc_type_class
+m32r_elf_reloc_type_class (rela)
+ const Elf_Internal_Rela *rela;
+{
+ switch ((int) ELF32_R_TYPE (rela->r_info))
+ {
+ case R_M32R_RELATIVE:
+ return reloc_class_relative;
+ case R_M32R_JMP_SLOT:
+ return reloc_class_plt;
+ case R_M32R_COPY:
+ return reloc_class_copy;
+ default:
+ return reloc_class_normal;
+ }
+}
#define ELF_ARCH bfd_arch_m32r
#define ELF_MACHINE_CODE EM_M32R
@@ -2111,8 +4745,10 @@ static struct bfd_elf_special_section const m32r_elf_special_sections[]=
#define TARGET_BIG_SYM bfd_elf32_m32r_vec
#define TARGET_BIG_NAME "elf32-m32r"
+#define TARGET_LITTLE_SYM bfd_elf32_m32rle_vec
+#define TARGET_LITTLE_NAME "elf32-m32rle"
-#define elf_info_to_howto 0
+#define elf_info_to_howto m32r_info_to_howto
#define elf_info_to_howto_rel m32r_info_to_howto_rel
#define elf_backend_section_from_bfd_section _bfd_m32r_elf_section_from_bfd_section
#define elf_backend_symbol_processing _bfd_m32r_elf_symbol_processing
@@ -2122,10 +4758,35 @@ static struct bfd_elf_special_section const m32r_elf_special_sections[]=
#define elf_backend_gc_sweep_hook m32r_elf_gc_sweep_hook
#define elf_backend_check_relocs m32r_elf_check_relocs
+#define elf_backend_create_dynamic_sections m32r_elf_create_dynamic_sections
+#define bfd_elf32_bfd_link_hash_table_create m32r_elf_link_hash_table_create
+#define elf_backend_size_dynamic_sections m32r_elf_size_dynamic_sections
+#define elf_backend_finish_dynamic_sections m32r_elf_finish_dynamic_sections
+#define elf_backend_adjust_dynamic_symbol m32r_elf_adjust_dynamic_symbol
+#define elf_backend_finish_dynamic_symbol m32r_elf_finish_dynamic_symbol
+#define elf_backend_reloc_type_class m32r_elf_reloc_type_class
+#define elf_backend_copy_indirect_symbol m32r_elf_copy_indirect_symbol
+
#define elf_backend_can_gc_sections 1
-#if !USE_REL
+/*#if !USE_REL
#define elf_backend_rela_normal 1
+#endif*/
+#define elf_backend_can_refcount 1
+#define elf_backend_want_got_plt 1
+#define elf_backend_plt_readonly 1
+#define elf_backend_want_plt_sym 0
+#define elf_backend_got_header_size 12
+
+#define elf_backend_may_use_rel_p 1
+#ifdef USE_M32R_OLD_RELOC
+#define elf_backend_default_use_rela_p 0
+#define elf_backend_may_use_rela_p 0
+#else
+#define elf_backend_default_use_rela_p 1
+#define elf_backend_may_use_rela_p 1
+#define elf_backend_fake_sections m32r_elf_fake_sections
#endif
+
#if 0 /* not yet */
/* relax support */
#define bfd_elf32_bfd_relax_section m32r_elf_relax_section
@@ -2141,3 +4802,20 @@ static struct bfd_elf_special_section const m32r_elf_special_sections[]=
#define elf_backend_special_sections m32r_elf_special_sections
#include "elf32-target.h"
+
+#undef ELF_MAXPAGESIZE
+#define ELF_MAXPAGESIZE 0x1000
+
+#undef TARGET_BIG_SYM
+#define TARGET_BIG_SYM bfd_elf32_m32rlin_vec
+#undef TARGET_BIG_NAME
+#define TARGET_BIG_NAME "elf32-m32r-linux"
+#undef TARGET_LITTLE_SYM
+#define TARGET_LITTLE_SYM bfd_elf32_m32rlelin_vec
+#undef TARGET_LITTLE_NAME
+#define TARGET_LITTLE_NAME "elf32-m32rle-linux"
+#undef elf32_bed
+#define elf32_bed elf32_m32r_lin_bed
+
+#include "elf32-target.h"
+
diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
index 90609c5..1c7fed9 100644
--- a/bfd/elf32-m68k.c
+++ b/bfd/elf32-m68k.c
@@ -817,26 +817,27 @@ elf_m68k_gc_sweep_hook (abfd, info, sec, relocs)
struct elf_link_hash_entry **sym_hashes;
bfd_signed_vma *local_got_refcounts;
const Elf_Internal_Rela *rel, *relend;
- unsigned long r_symndx;
- struct elf_link_hash_entry *h;
bfd *dynobj;
asection *sgot;
asection *srelgot;
- symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
- sym_hashes = elf_sym_hashes (abfd);
- local_got_refcounts = elf_local_got_refcounts (abfd);
-
dynobj = elf_hash_table (info)->dynobj;
if (dynobj == NULL)
return TRUE;
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+ local_got_refcounts = elf_local_got_refcounts (abfd);
+
sgot = bfd_get_section_by_name (dynobj, ".got");
srelgot = bfd_get_section_by_name (dynobj, ".rela.got");
relend = relocs + sec->reloc_count;
for (rel = relocs; rel < relend; rel++)
{
+ unsigned long r_symndx;
+ struct elf_link_hash_entry *h;
+
switch (ELF32_R_TYPE (rel->r_info))
{
case R_68K_GOT8:
diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c
index 299c395..a0480f0 100644
--- a/bfd/elf32-mips.c
+++ b/bfd/elf32-mips.c
@@ -47,14 +47,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define ECOFF_SIGNED_32
#include "ecoffswap.h"
-static bfd_reloc_status_type mips_elf_generic_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips_elf_hi16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips_elf_lo16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips_elf_got16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type gprel32_with_gp
(bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma);
static bfd_reloc_status_type mips_elf_gprel32_reloc
@@ -120,7 +112,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_NONE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -135,7 +127,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -150,7 +142,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_32", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -165,7 +157,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL32", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -183,7 +175,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
/* This needs complex overflow
detection, because the upper four
bits must match the PC + 4. */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_26", /* name */
TRUE, /* partial_inplace */
0x03ffffff, /* src_mask */
@@ -192,13 +184,13 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
/* High 16 bits of symbol value. */
HOWTO (R_MIPS_HI16, /* type */
- 0, /* rightshift */
+ 16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_hi16_reloc, /* special_function */
+ _bfd_mips_elf_hi16_reloc, /* special_function */
"R_MIPS_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -213,7 +205,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_lo16_reloc, /* special_function */
+ _bfd_mips_elf_lo16_reloc, /* special_function */
"R_MIPS_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -258,7 +250,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_got16_reloc, /* special_function */
+ _bfd_mips_elf_got16_reloc, /* special_function */
"R_MIPS_GOT16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -273,7 +265,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_PC16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -288,7 +280,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -324,7 +316,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SHIFT5", /* name */
TRUE, /* partial_inplace */
0x000007c0, /* src_mask */
@@ -341,7 +333,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SHIFT6", /* name */
TRUE, /* partial_inplace */
0x000007c4, /* src_mask */
@@ -371,7 +363,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_DISP", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -386,7 +378,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_PAGE", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -401,7 +393,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_OFST", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -416,7 +408,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -431,7 +423,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -446,7 +438,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SUB", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
@@ -466,7 +458,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HIGHER", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -481,7 +473,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HIGHEST", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -496,7 +488,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -511,7 +503,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -526,7 +518,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SCN_DISP", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -547,7 +539,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_JALR", /* name */
FALSE, /* partial_inplace */
0x00000000, /* src_mask */
@@ -611,13 +603,13 @@ static reloc_howto_type elf_mips16_gprel_howto =
/* High 16 bits of symbol value, pc-relative. */
static reloc_howto_type elf_mips_gnu_rel_hi16 =
HOWTO (R_MIPS_GNU_REL_HI16, /* type */
- 0, /* rightshift */
+ 16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_hi16_reloc, /* special_function */
+ _bfd_mips_elf_hi16_reloc, /* special_function */
"R_MIPS_GNU_REL_HI16", /* name */
TRUE, /* partial_inplace */
0xffff, /* src_mask */
@@ -633,7 +625,7 @@ static reloc_howto_type elf_mips_gnu_rel_lo16 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_lo16_reloc, /* special_function */
+ _bfd_mips_elf_lo16_reloc, /* special_function */
"R_MIPS_GNU_REL_LO16", /* name */
TRUE, /* partial_inplace */
0xffff, /* src_mask */
@@ -649,7 +641,7 @@ static reloc_howto_type elf_mips_gnu_rel16_s2 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GNU_REL16_S2", /* name */
TRUE, /* partial_inplace */
0xffff, /* src_mask */
@@ -665,7 +657,7 @@ static reloc_howto_type elf_mips_gnu_pcrel64 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_PC64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
@@ -681,7 +673,7 @@ static reloc_howto_type elf_mips_gnu_pcrel32 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_PC32", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -720,260 +712,6 @@ static reloc_howto_type elf_mips_gnu_vtentry_howto =
0, /* dst_mask */
FALSE); /* pcrel_offset */
-/* We use this instead of bfd_elf_generic_reloc because the latter
- gets the handling of zero addends wrong. */
-static bfd_reloc_status_type
-mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
- char **error_message ATTRIBUTE_UNUSED)
-{
- /* If we're relocating, and this is an external symbol, we don't want
- to change anything. */
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (symbol->flags & BSF_LOCAL) != 0)
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
- /* Just go on, nothing to see here. */
- return bfd_reloc_continue;
-}
-
-/* Do a R_MIPS_HI16 relocation. This has to be done in combination
- with a R_MIPS_LO16 reloc, because there is a carry from the LO16 to
- the HI16. Here we just save the information we need; we do the
- actual relocation when we see the LO16.
-
- MIPS ELF requires that the LO16 immediately follow the HI16. As a
- GNU extension, for non-pc-relative relocations, we permit an
- arbitrary number of HI16 relocs to be associated with a single LO16
- reloc. This extension permits gcc to output the HI and LO relocs
- itself.
-
- This cannot be done for PC-relative relocations because both the HI16
- and LO16 parts of the relocations must be done relative to the LO16
- part, and there can be carry to or borrow from the HI16 part. */
-
-struct mips_hi16
-{
- struct mips_hi16 *next;
- bfd_byte *addr;
- bfd_vma addend;
-};
-
-/* FIXME: This should not be a static variable. */
-
-static struct mips_hi16 *mips_hi16_list;
-
-static bfd_reloc_status_type
-mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data, asection *input_section,
- bfd *output_bfd, char **error_message)
-{
- bfd_reloc_status_type ret;
- bfd_vma relocation;
- struct mips_hi16 *n;
-
- /* If we're relocating, and this is an external symbol, we don't want
- to change anything. */
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (symbol->flags & BSF_LOCAL) != 0)
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
- ret = bfd_reloc_ok;
-
- if (strcmp (bfd_asymbol_name (symbol), "_gp_disp") == 0)
- {
- bfd_boolean relocatable;
- bfd_vma gp;
-
- if (ret == bfd_reloc_undefined)
- abort ();
-
- if (output_bfd != NULL)
- relocatable = TRUE;
- else
- {
- relocatable = FALSE;
- output_bfd = symbol->section->output_section->owner;
- }
-
- ret = mips_elf_final_gp (output_bfd, symbol, relocatable,
- error_message, &gp);
- if (ret != bfd_reloc_ok)
- return ret;
-
- relocation = gp - reloc_entry->address;
- }
- else
- {
- if (bfd_is_und_section (symbol->section) && output_bfd == NULL)
- ret = bfd_reloc_undefined;
-
- if (bfd_is_com_section (symbol->section))
- relocation = 0;
- else
- relocation = symbol->value;
- }
-
- relocation += symbol->section->output_section->vma;
- relocation += symbol->section->output_offset;
- relocation += reloc_entry->addend;
-
- if (reloc_entry->address > input_section->_cooked_size)
- return bfd_reloc_outofrange;
-
- /* Save the information, and let LO16 do the actual relocation. */
- n = bfd_malloc (sizeof *n);
- if (n == NULL)
- return bfd_reloc_outofrange;
- n->addr = (bfd_byte *) data + reloc_entry->address;
- n->addend = relocation;
- n->next = mips_hi16_list;
- mips_hi16_list = n;
-
- if (output_bfd != NULL)
- reloc_entry->address += input_section->output_offset;
-
- return ret;
-}
-
-/* Do a R_MIPS_LO16 relocation. This is a straightforward 16 bit
- inplace relocation; this function exists in order to do the
- R_MIPS_HI16 relocation described above. */
-
-static bfd_reloc_status_type
-mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
- void *data, asection *input_section, bfd *output_bfd,
- char **error_message)
-{
- arelent gp_disp_relent;
-
- if (mips_hi16_list != NULL)
- {
- struct mips_hi16 *l;
-
- l = mips_hi16_list;
- while (l != NULL)
- {
- unsigned long insn;
- unsigned long val;
- unsigned long vallo;
- struct mips_hi16 *next;
-
- if (strcmp (bfd_asymbol_name (symbol), "_gp_disp") == 0)
- {
- gp_disp_relent = *reloc_entry;
- reloc_entry = &gp_disp_relent;
- reloc_entry->addend = l->addend;
- }
- else
- {
- /* Do the HI16 relocation. Note that we actually don't need
- to know anything about the LO16 itself, except where to
- find the low 16 bits of the addend needed by the LO16. */
- insn = bfd_get_32 (abfd, l->addr);
- vallo = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
- /* The low order 16 bits are always treated as a signed
- value. */
- vallo = ((vallo & 0xffff) ^ 0x8000) - 0x8000;
- val = ((insn & 0xffff) << 16) + vallo;
- val += l->addend;
-
- /* If PC-relative, we need to subtract out the address of the LO
- half of the HI/LO. (The actual relocation is relative
- to that instruction.) */
- if (reloc_entry->howto->pc_relative)
- val -= reloc_entry->address;
-
- /* At this point, "val" has the value of the combined HI/LO
- pair. If the low order 16 bits (which will be used for
- the LO16 insn) are negative, then we will need an
- adjustment for the high order 16 bits. */
- val += 0x8000;
- val = (val >> 16) & 0xffff;
-
- insn &= ~ (bfd_vma) 0xffff;
- insn |= val;
- bfd_put_32 (abfd, insn, l->addr);
- }
-
- next = l->next;
- free (l);
- l = next;
- }
-
- mips_hi16_list = NULL;
- }
- else if (strcmp (bfd_asymbol_name (symbol), "_gp_disp") == 0)
- {
- bfd_reloc_status_type ret;
- bfd_vma gp, relocation;
-
- /* FIXME: Does this case ever occur? */
-
- ret = mips_elf_final_gp (output_bfd, symbol, TRUE, error_message, &gp);
- if (ret != bfd_reloc_ok)
- return ret;
-
- relocation = gp - reloc_entry->address;
- relocation += symbol->section->output_section->vma;
- relocation += symbol->section->output_offset;
- relocation += reloc_entry->addend;
-
- if (reloc_entry->address > input_section->_cooked_size)
- return bfd_reloc_outofrange;
-
- gp_disp_relent = *reloc_entry;
- reloc_entry = &gp_disp_relent;
- reloc_entry->addend = relocation - 4;
- }
-
- /* Now do the LO16 reloc in the usual way. */
- return mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
-}
-
-/* Do a R_MIPS_GOT16 reloc. This is a reloc against the global offset
- table used for PIC code. If the symbol is an external symbol, the
- instruction is modified to contain the offset of the appropriate
- entry in the global offset table. If the symbol is a section
- symbol, the next reloc is a R_MIPS_LO16 reloc. The two 16 bit
- addends are combined to form the real addend against the section
- symbol; the GOT16 is modified to contain the offset of an entry in
- the global offset table, and the LO16 is modified to offset it
- appropriately. Thus an offset larger than 16 bits requires a
- modified value in the global offset table.
-
- This implementation suffices for the assembler, but the linker does
- not yet know how to create global offset tables. */
-
-static bfd_reloc_status_type
-mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
- void *data, asection *input_section, bfd *output_bfd,
- char **error_message)
-{
- /* If we're relocating, and this is an external symbol, we don't want
- to change anything. */
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (symbol->flags & BSF_LOCAL) != 0)
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
- return mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
-}
-
/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a
dangerous relocation. */
@@ -1078,16 +816,6 @@ _bfd_mips_elf32_gprel16_reloc (bfd *abfd, arelent *reloc_entry,
bfd_reloc_status_type ret;
bfd_vma gp;
- /* If we're relocating, and this is an external symbol, we don't want
- to change anything. */
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (symbol->flags & BSF_LOCAL) != 0)
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
if (output_bfd != NULL)
relocatable = TRUE;
else
@@ -1118,17 +846,6 @@ mips_elf_gprel32_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
bfd_reloc_status_type ret;
bfd_vma gp;
- /* If we're relocating, and this is an external symbol, we don't want
- to change anything. */
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (symbol->flags & BSF_LOCAL) != 0)
- {
- *error_message = (char *)
- _("32bits gp relative relocation occurs for an external symbol");
- return bfd_reloc_outofrange;
- }
-
if (output_bfd != NULL)
relocatable = TRUE;
else
@@ -1194,20 +911,16 @@ gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry,
sign extension. */
static bfd_reloc_status_type
-mips32_64bit_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
- void *data, asection *input_section, bfd *output_bfd,
- char **error_message)
+mips32_64bit_reloc (bfd *abfd, arelent *reloc_entry,
+ asymbol *symbol ATTRIBUTE_UNUSED,
+ void *data, asection *input_section,
+ bfd *output_bfd, char **error_message)
{
bfd_reloc_status_type r;
arelent reloc32;
unsigned long val;
bfd_size_type addr;
- r = mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
- if (r != bfd_reloc_continue)
- return r;
-
/* Do a normal 32 bit relocation on the lower 32 bits. */
reloc32 = *reloc_entry;
if (bfd_big_endian (abfd))
@@ -1800,10 +1513,6 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define ELF_ARCH bfd_arch_mips
#define ELF_MACHINE_CODE EM_MIPS
-/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
- a value of 0x1000, and we are compatible. */
-#define ELF_MAXPAGESIZE 0x1000
-
#define elf_backend_collect TRUE
#define elf_backend_type_change_ok TRUE
#define elf_backend_can_gc_sections TRUE
@@ -1881,20 +1590,29 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define TARGET_BIG_SYM bfd_elf32_bigmips_vec
#define TARGET_BIG_NAME "elf32-bigmips"
+/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
+ a value of 0x1000, and we are compatible. */
+#define ELF_MAXPAGESIZE 0x1000
+
#include "elf32-target.h"
/* Support for traditional mips targets. */
-#define INCLUDED_TARGET_FILE /* More a type of flag. */
-
#undef TARGET_LITTLE_SYM
#undef TARGET_LITTLE_NAME
#undef TARGET_BIG_SYM
#undef TARGET_BIG_NAME
+#undef ELF_MAXPAGESIZE
+
#define TARGET_LITTLE_SYM bfd_elf32_tradlittlemips_vec
#define TARGET_LITTLE_NAME "elf32-tradlittlemips"
#define TARGET_BIG_SYM bfd_elf32_tradbigmips_vec
#define TARGET_BIG_NAME "elf32-tradbigmips"
+/* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
+ page sizes of up to that limit, so we need to respect it. */
+#define ELF_MAXPAGESIZE 0x10000
+#define elf32_bed elf32_tradbed
+
/* Include the target file again for this target. */
#include "elf32-target.h"
diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c
index f77f22c..c20e403 100644
--- a/bfd/elf32-sparc.c
+++ b/bfd/elf32-sparc.c
@@ -502,6 +502,35 @@ sparc_elf_lox10_reloc (abfd,
return bfd_reloc_ok;
}
+/* Support for core dump NOTE sections. */
+
+static bfd_boolean
+elf32_sparc_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
+{
+ switch (note->descsz)
+ {
+ default:
+ return FALSE;
+
+ case 260: /* Solaris prpsinfo_t. */
+ elf_tdata (abfd)->core_program
+ = _bfd_elfcore_strndup (abfd, note->descdata + 84, 16);
+ elf_tdata (abfd)->core_command
+ = _bfd_elfcore_strndup (abfd, note->descdata + 100, 80);
+ break;
+
+ case 336: /* Solaris psinfo_t. */
+ elf_tdata (abfd)->core_program
+ = _bfd_elfcore_strndup (abfd, note->descdata + 88, 16);
+ elf_tdata (abfd)->core_command
+ = _bfd_elfcore_strndup (abfd, note->descdata + 104, 80);
+ break;
+ }
+
+ return TRUE;
+}
+
+
/* Functions for the SPARC ELF linker. */
/* The name of the dynamic interpreter. This is put in the .interp
@@ -3451,6 +3480,7 @@ elf32_sparc_reloc_type_class (rela)
elf32_sparc_final_write_processing
#define elf_backend_gc_mark_hook elf32_sparc_gc_mark_hook
#define elf_backend_gc_sweep_hook elf32_sparc_gc_sweep_hook
+#define elf_backend_grok_psinfo elf32_sparc_grok_psinfo
#define elf_backend_reloc_type_class elf32_sparc_reloc_type_class
#define elf_backend_can_gc_sections 1
diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c
index c37ca00..e085e35 100644
--- a/bfd/elf32-vax.c
+++ b/bfd/elf32-vax.c
@@ -892,20 +892,21 @@ elf_vax_gc_sweep_hook (abfd, info, sec, relocs)
Elf_Internal_Shdr *symtab_hdr;
struct elf_link_hash_entry **sym_hashes;
const Elf_Internal_Rela *rel, *relend;
- unsigned long r_symndx;
- struct elf_link_hash_entry *h;
bfd *dynobj;
- symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
- sym_hashes = elf_sym_hashes (abfd);
-
dynobj = elf_hash_table (info)->dynobj;
if (dynobj == NULL)
return TRUE;
+ symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
+ sym_hashes = elf_sym_hashes (abfd);
+
relend = relocs + sec->reloc_count;
for (rel = relocs; rel < relend; rel++)
{
+ unsigned long r_symndx;
+ struct elf_link_hash_entry *h;
+
switch (ELF32_R_TYPE (rel->r_info))
{
case R_VAX_GOT32:
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index 998c5df..fa3b494 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -104,8 +104,6 @@ static void mips_elf64_write_rel
(bfd *, asection *, Elf_Internal_Shdr *, int *, void *);
static void mips_elf64_write_rela
(bfd *, asection *, Elf_Internal_Shdr *, int *, void *);
-static bfd_reloc_status_type mips_elf64_hi16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips_elf64_gprel16_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips_elf64_literal_reloc
@@ -114,8 +112,6 @@ static bfd_reloc_status_type mips_elf64_gprel32_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips_elf64_shift6_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips_elf64_got16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips16_jump_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_reloc_status_type mips16_gprel_reloc
@@ -155,7 +151,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_NONE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -170,7 +166,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -185,7 +181,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_32", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -200,7 +196,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL32", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -218,7 +214,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
/* This needs complex overflow
detection, because the upper 36
bits must match the PC + 4. */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_26", /* name */
TRUE, /* partial_inplace */
0x03ffffff, /* src_mask */
@@ -230,13 +226,13 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
/* High 16 bits of symbol value. */
HOWTO (R_MIPS_HI16, /* type */
- 0, /* rightshift */
+ 16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf64_hi16_reloc, /* special_function */
+ _bfd_mips_elf_hi16_reloc, /* special_function */
"R_MIPS_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -251,7 +247,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_lo16_reloc, /* special_function */
"R_MIPS_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -296,7 +292,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf64_got16_reloc, /* special_function */
+ _bfd_mips_elf_got16_reloc, /* special_function */
"R_MIPS_GOT16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -311,7 +307,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_PC16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -326,7 +322,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -360,7 +356,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SHIFT5", /* name */
TRUE, /* partial_inplace */
0x000007c0, /* src_mask */
@@ -390,7 +386,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
@@ -405,7 +401,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_DISP", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -420,7 +416,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_PAGE", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -435,7 +431,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_OFST", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -450,7 +446,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -465,7 +461,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -480,7 +476,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SUB", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
@@ -496,7 +492,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_A", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -513,7 +509,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_B", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -529,7 +525,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_DELETE", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -553,7 +549,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -568,7 +564,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -583,7 +579,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SCN_DISP", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -597,7 +593,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL16", /* name */
TRUE, /* partial_inplace */
0xffff, /* src_mask */
@@ -617,7 +613,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_RELGOT", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -633,7 +629,7 @@ static reloc_howto_type mips_elf64_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_JALR", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -653,7 +649,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_NONE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -668,7 +664,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -683,7 +679,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_32", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -698,7 +694,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL32", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -716,7 +712,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
/* This needs complex overflow
detection, because the upper 36
bits must match the PC + 4. */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_26", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -731,7 +727,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -746,7 +742,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_LO16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -791,7 +787,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf64_got16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -806,7 +802,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_PC16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -821,7 +817,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -855,7 +851,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SHIFT5", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -885,7 +881,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -900,7 +896,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_DISP", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -915,7 +911,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_PAGE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -930,7 +926,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_OFST", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -945,7 +941,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -960,7 +956,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_LO16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -975,7 +971,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SUB", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -991,7 +987,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_A", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1008,7 +1004,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_B", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1024,7 +1020,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_DELETE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1039,7 +1035,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HIGHER", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1054,7 +1050,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HIGHEST", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1069,7 +1065,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1084,7 +1080,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_LO16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1099,7 +1095,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SCN_DISP", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1113,7 +1109,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1133,7 +1129,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_RELGOT", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1149,7 +1145,7 @@ static reloc_howto_type mips_elf64_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_JALR", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1233,7 +1229,7 @@ static reloc_howto_type elf_mips_gnu_rel16_s2 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GNU_REL16_S2", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -1249,7 +1245,7 @@ static reloc_howto_type elf_mips_gnu_rela16_s2 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- bfd_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GNU_REL16_S2", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1411,66 +1407,6 @@ mips_elf64_be_swap_reloca_out (bfd *abfd, const Elf_Internal_Rela *src,
(Elf64_Mips_External_Rela *) dst);
}
-/* Do a R_MIPS_HI16 relocation. */
-
-static bfd_reloc_status_type
-mips_elf64_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
- char **error_message ATTRIBUTE_UNUSED)
-{
- /* If we're relocating, and this is an external symbol, we don't
- want to change anything. */
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (symbol->flags & BSF_LOCAL) != 0)
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
- if (reloc_entry->howto->partial_inplace)
- {
- if (((reloc_entry->addend & 0xffff) + 0x8000) & ~0xffff)
- reloc_entry->addend += 0x8000;
- }
-
- return bfd_reloc_continue;
-}
-
-/* Do a R_MIPS_GOT16 reloc. This is a reloc against the global offset
- table used for PIC code. If the symbol is an external symbol, the
- instruction is modified to contain the offset of the appropriate
- entry in the global offset table. If the symbol is a section
- symbol, the next reloc is a R_MIPS_LO16 reloc. The two 16 bit
- addends are combined to form the real addend against the section
- symbol; the GOT16 is modified to contain the offset of an entry in
- the global offset table, and the LO16 is modified to offset it
- appropriately. Thus an offset larger than 16 bits requires a
- modified value in the global offset table.
-
- This implementation suffices for the assembler, but the linker does
- not yet know how to create global offset tables. */
-
-static bfd_reloc_status_type
-mips_elf64_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
- void *data, asection *input_section, bfd *output_bfd,
- char **error_message)
-{
- /* If we're relocating, and this is a local symbol, we can handle it
- just like an R_MIPS_HI16. */
- if (output_bfd != NULL
- && ((symbol->flags & BSF_SECTION_SYM) != 0
- || (symbol->flags & BSF_LOCAL) == 0))
- return mips_elf64_hi16_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
-
-
- /* Otherwise we try to handle it as R_MIPS_GOT_DISP. */
- return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
-}
-
/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a
dangerous relocation. */
@@ -1716,28 +1652,19 @@ mips_elf64_gprel32_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
the rest is at bits 6-10. The bitpos already got right by the howto. */
static bfd_reloc_status_type
-mips_elf64_shift6_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
- char **error_message ATTRIBUTE_UNUSED)
+mips_elf64_shift6_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+ void *data, asection *input_section, bfd *output_bfd,
+ char **error_message)
{
- /* If we're relocating, and this is an external symbol, we don't
- want to change anything. */
- if (output_bfd != NULL
- && (symbol->flags & BSF_SECTION_SYM) == 0
- && (symbol->flags & BSF_LOCAL) != 0)
- {
- reloc_entry->address += input_section->output_offset;
- return bfd_reloc_ok;
- }
-
if (reloc_entry->howto->partial_inplace)
{
reloc_entry->addend = ((reloc_entry->addend & 0x00007c0)
| (reloc_entry->addend & 0x00000800) >> 9);
}
- return bfd_reloc_continue;
+ return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd,
+ error_message);
}
/* Handle a mips16 jump. */
@@ -2088,7 +2015,7 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
arelent *relent;
bfd_vma i;
int entsize;
- reloc_howto_type *howto_table;
+ bfd_boolean rela_p;
allocated = bfd_malloc (rel_hdr->sh_size);
if (allocated == NULL)
@@ -2106,9 +2033,9 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
|| entsize == sizeof (Elf64_Mips_External_Rela));
if (entsize == sizeof (Elf64_Mips_External_Rel))
- howto_table = mips_elf64_howto_table_rel;
+ rela_p = FALSE;
else
- howto_table = mips_elf64_howto_table_rela;
+ rela_p = TRUE;
for (i = 0, relent = relents;
i < reloc_count;
@@ -2221,7 +2148,7 @@ mips_elf64_slurp_one_reloc_table (bfd *abfd, asection *asect,
relent->addend = rela.r_addend;
- relent->howto = &howto_table[(int) type];
+ relent->howto = mips_elf64_rtype_to_howto (type, rela_p);
++relent;
}
@@ -2749,11 +2676,6 @@ const struct elf_size_info mips_elf64_size_info =
#define ELF_ARCH bfd_arch_mips
#define ELF_MACHINE_CODE EM_MIPS
-/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
- a value of 0x1000, and we are compatible.
- FIXME: How does this affect NewABI? */
-#define ELF_MAXPAGESIZE 0x1000
-
#define elf_backend_collect TRUE
#define elf_backend_type_change_ok TRUE
#define elf_backend_can_gc_sections TRUE
@@ -2864,9 +2786,12 @@ extern bfd_boolean bfd_elf64_archive_write_armap
#define TARGET_BIG_SYM bfd_elf64_bigmips_vec
#define TARGET_BIG_NAME "elf64-bigmips"
-#include "elf64-target.h"
+/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
+ a value of 0x1000, and we are compatible.
+ FIXME: How does this affect NewABI? */
+#define ELF_MAXPAGESIZE 0x1000
-#define INCLUDED_TARGET_FILE /* More a type of flag. */
+#include "elf64-target.h"
/* The SYSV-style 'traditional' (n)64 NewABI. */
#undef TARGET_LITTLE_SYM
@@ -2874,10 +2799,17 @@ extern bfd_boolean bfd_elf64_archive_write_armap
#undef TARGET_BIG_SYM
#undef TARGET_BIG_NAME
+#undef ELF_MAXPAGESIZE
+
#define TARGET_LITTLE_SYM bfd_elf64_tradlittlemips_vec
#define TARGET_LITTLE_NAME "elf64-tradlittlemips"
#define TARGET_BIG_SYM bfd_elf64_tradbigmips_vec
#define TARGET_BIG_NAME "elf64-tradbigmips"
+/* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
+ page sizes of up to that limit, so we need to respect it. */
+#define ELF_MAXPAGESIZE 0x10000
+#define elf64_bed elf64_tradbed
+
/* Include the target file again for this target. */
#include "elf64-target.h"
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 3ed9042..304a635 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -3590,6 +3590,15 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (info->relocatable)
return TRUE;
+ /* Don't do anything special with non-loaded, non-alloced sections.
+ In particular, any relocs in such sections should not affect GOT
+ and PLT reference counting (ie. we don't allow them to create GOT
+ or PLT entries), there's no possibility or desire to optimize TLS
+ relocs, and there's not much point in propagating relocs to shared
+ libs that the dynamic linker won't relocate. */
+ if ((sec->flags & SEC_ALLOC) == 0)
+ return TRUE;
+
htab = ppc_hash_table (info);
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@ -3947,10 +3956,6 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (NO_OPD_RELOCS && opd_sym_map != NULL)
break;
- /* Don't propagate relocs that the dynamic linker won't relocate. */
- if ((sec->flags & SEC_ALLOC) == 0)
- break;
-
/* If we are creating a shared library, and this is a reloc
against a global symbol, or a non PC relative reloc
against a local symbol, then we need to copy the reloc
@@ -4166,6 +4171,9 @@ ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
struct got_entry **local_got_ents;
const Elf_Internal_Rela *rel, *relend;
+ if ((sec->flags & SEC_ALLOC) == 0)
+ return TRUE;
+
elf_section_data (sec)->local_dynrel = NULL;
htab = ppc_hash_table (info);
@@ -6001,7 +6009,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
}
/* .plt is in the bss section. We don't initialise it. */
- if ((s->flags & SEC_LOAD) == 0)
+ if (s == htab->plt)
continue;
/* Allocate memory for the section contents. We use bfd_zalloc
diff --git a/bfd/elflink.h b/bfd/elflink.h
index f558e1c..c37d739 100644
--- a/bfd/elflink.h
+++ b/bfd/elflink.h
@@ -5801,7 +5801,10 @@ elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
|| info->emitrelocations
|| !is_elf_hash_table (info->hash)
|| elf_hash_table (info)->dynamic_sections_created)
- return TRUE;
+ {
+ (*_bfd_error_handler)(_("Warning: gc-sections option ignored"));
+ return TRUE;
+ }
/* Apply transitive closure to the vtable entry usage info. */
elf_link_hash_traverse (elf_hash_table (info),
diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c
index 49cf898..973edd5 100644
--- a/bfd/elfn32-mips.c
+++ b/bfd/elfn32-mips.c
@@ -47,14 +47,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define ECOFF_SIGNED_32
#include "ecoffswap.h"
-static bfd_reloc_status_type mips_elf_generic_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips_elf_hi16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips_elf_lo16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type mips_elf_got16_reloc
- (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
static bfd_boolean mips_elf_assign_gp
(bfd *, bfd_vma *);
static bfd_reloc_status_type mips_elf_final_gp
@@ -95,10 +87,6 @@ static irix_compat_t elf_n32_mips_irix_compat
extern const bfd_target bfd_elf32_nbigmips_vec;
extern const bfd_target bfd_elf32_nlittlemips_vec;
-static asection *prev_reloc_section = NULL;
-static bfd_vma prev_reloc_address = -1;
-static bfd_vma prev_reloc_addend = 0;
-
/* Nonzero if ABFD is using the N32 ABI. */
#define ABI_N32_P(abfd) \
((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
@@ -126,7 +114,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_NONE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -141,7 +129,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -156,7 +144,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_32", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -171,7 +159,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL32", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -189,7 +177,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
/* This needs complex overflow
detection, because the upper four
bits must match the PC + 4. */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_26", /* name */
TRUE, /* partial_inplace */
0x03ffffff, /* src_mask */
@@ -201,13 +189,13 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
/* High 16 bits of symbol value. */
HOWTO (R_MIPS_HI16, /* type */
- 0, /* rightshift */
+ 16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_hi16_reloc, /* special_function */
+ _bfd_mips_elf_hi16_reloc, /* special_function */
"R_MIPS_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -222,7 +210,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_lo16_reloc, /* special_function */
+ _bfd_mips_elf_lo16_reloc, /* special_function */
"R_MIPS_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -267,7 +255,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_got16_reloc, /* special_function */
+ _bfd_mips_elf_got16_reloc, /* special_function */
"R_MIPS_GOT16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -282,7 +270,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_PC16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -297,7 +285,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -333,7 +321,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SHIFT5", /* name */
TRUE, /* partial_inplace */
0x000007c0, /* src_mask */
@@ -363,7 +351,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_64", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
@@ -378,7 +366,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_DISP", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -393,7 +381,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_PAGE", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -408,7 +396,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_OFST", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -423,7 +411,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -438,7 +426,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -453,7 +441,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SUB", /* name */
TRUE, /* partial_inplace */
MINUS_ONE, /* src_mask */
@@ -469,7 +457,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_A", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -486,7 +474,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_B", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -502,7 +490,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_DELETE", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -526,7 +514,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_HI16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -541,7 +529,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_LO16", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -556,7 +544,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SCN_DISP", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -570,7 +558,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL16", /* name */
TRUE, /* partial_inplace */
0xffff, /* src_mask */
@@ -590,7 +578,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_RELGOT", /* name */
TRUE, /* partial_inplace */
0xffffffff, /* src_mask */
@@ -606,7 +594,7 @@ static reloc_howto_type elf_mips_howto_table_rel[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_JALR", /* name */
FALSE, /* partial_inplace */
0x00000000, /* src_mask */
@@ -626,7 +614,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_NONE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -641,7 +629,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -656,7 +644,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_32", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -671,7 +659,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL32", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -689,7 +677,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
/* This needs complex overflow
detection, because the upper 36
bits must match the PC + 4. */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_26", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -704,7 +692,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -719,7 +707,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_LO16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -764,7 +752,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_got16_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -779,7 +767,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_PC16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -794,7 +782,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -828,7 +816,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
6, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SHIFT5", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -858,7 +846,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -873,7 +861,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_DISP", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -888,7 +876,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_PAGE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -903,7 +891,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_OFST", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -918,7 +906,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -933,7 +921,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GOT_LO16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -948,7 +936,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SUB", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -964,7 +952,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_A", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -981,7 +969,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_INSERT_B", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -997,7 +985,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_DELETE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1012,7 +1000,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HIGHER", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1027,7 +1015,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_HIGHEST", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1042,7 +1030,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1057,7 +1045,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_CALL_LO16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1072,7 +1060,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_SCN_DISP", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1087,7 +1075,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_REL16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1107,7 +1095,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_RELGOT", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1123,7 +1111,7 @@ static reloc_howto_type elf_mips_howto_table_rela[] =
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_JALR", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
@@ -1207,7 +1195,7 @@ static reloc_howto_type elf_mips_gnu_rel16_s2 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GNU_REL16_S2", /* name */
TRUE, /* partial_inplace */
0x0000ffff, /* src_mask */
@@ -1223,224 +1211,13 @@ static reloc_howto_type elf_mips_gnu_rela16_s2 =
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
- mips_elf_generic_reloc, /* special_function */
+ _bfd_mips_elf_generic_reloc, /* special_function */
"R_MIPS_GNU_REL16_S2", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x0000ffff, /* dst_mask */
TRUE); /* pcrel_offset */
-/* This is derived from bfd_elf_generic_reloc. NewABI allows us to have
- several relocations against the same address. The addend is derived
- from the addends of preceding relocations. If we don't need to
- do something special, we simply keep track of the addend. */
-
-#define GET_RELOC_ADDEND(obfd, sym, entry, sec) \
-{ \
- /* If we're relocating, and this is an external symbol, we don't \
- want to change anything. */ \
- if ((obfd) != NULL \
- && ((sym)->flags & BSF_SECTION_SYM) == 0 \
- && (! (entry)->howto->partial_inplace \
- || (entry)->addend == 0)) \
- { \
- (entry)->address += (sec)->output_offset; \
- return bfd_reloc_ok; \
- } \
- \
- /* The addend of combined relocs is remembered and left for \
- subsequent relocs. */ \
- if (prev_reloc_address != (entry)->address \
- || prev_reloc_section != (sec)) \
- { \
- prev_reloc_section = (sec); \
- prev_reloc_address = (entry)->address; \
- prev_reloc_addend = (entry)->addend; \
- } \
- else \
- (entry)->addend = prev_reloc_addend; \
-}
-
-#define SET_RELOC_ADDEND(entry) \
-{ \
- prev_reloc_addend = (entry)->addend; \
-}
-
-static bfd_reloc_status_type
-mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
- char **error_message ATTRIBUTE_UNUSED)
-{
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
- return bfd_reloc_continue;
-}
-
-/* Do a R_MIPS_HI16 relocation. This has to be done in combination
- with a R_MIPS_LO16 reloc, because there is a carry from the LO16 to
- the HI16. Here we just save the information we need; we do the
- actual relocation when we see the LO16.
-
- MIPS ELF requires that the LO16 immediately follow the HI16. As a
- GNU extension, for non-pc-relative relocations, we permit an
- arbitrary number of HI16 relocs to be associated with a single LO16
- reloc. This extension permits gcc to output the HI and LO relocs
- itself.
-
- This cannot be done for PC-relative relocations because both the HI16
- and LO16 parts of the relocations must be done relative to the LO16
- part, and there can be carry to or borrow from the HI16 part. */
-
-struct mips_hi16
-{
- struct mips_hi16 *next;
- bfd_byte *addr;
- bfd_vma addend;
-};
-
-/* FIXME: This should not be a static variable. */
-
-static struct mips_hi16 *mips_hi16_list;
-
-static bfd_reloc_status_type
-mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data, asection *input_section,
- bfd *output_bfd, char **error_message ATTRIBUTE_UNUSED)
-{
- bfd_reloc_status_type ret;
- bfd_vma relocation;
- struct mips_hi16 *n;
-
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
- ret = bfd_reloc_ok;
-
- if (bfd_is_und_section (symbol->section) && output_bfd == NULL)
- ret = bfd_reloc_undefined;
-
- if (bfd_is_com_section (symbol->section))
- relocation = 0;
- else
- relocation = symbol->value;
-
- relocation += symbol->section->output_section->vma;
- relocation += symbol->section->output_offset;
- relocation += reloc_entry->addend;
-
- if (reloc_entry->address > input_section->_cooked_size)
- return bfd_reloc_outofrange;
-
- /* Save the information, and let LO16 do the actual relocation. */
- n = bfd_malloc (sizeof *n);
- if (n == NULL)
- return bfd_reloc_outofrange;
- n->addr = (bfd_byte *) data + reloc_entry->address;
- n->addend = relocation;
- n->next = mips_hi16_list;
- mips_hi16_list = n;
-
- if (output_bfd != NULL)
- reloc_entry->address += input_section->output_offset;
-
- return ret;
-}
-
-/* Do a R_MIPS_LO16 relocation. This is a straightforward 16 bit
- inplace relocation; this function exists in order to do the
- R_MIPS_HI16 relocation described above. */
-
-static bfd_reloc_status_type
-mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
- void *data, asection *input_section, bfd *output_bfd,
- char **error_message)
-{
- if (mips_hi16_list != NULL)
- {
- struct mips_hi16 *l;
-
- l = mips_hi16_list;
- while (l != NULL)
- {
- unsigned long insn;
- unsigned long val;
- unsigned long vallo;
- struct mips_hi16 *next;
-
- /* Do the HI16 relocation. Note that we actually don't need
- to know anything about the LO16 itself, except where to
- find the low 16 bits of the addend needed by the LO16. */
- insn = bfd_get_32 (abfd, l->addr);
- vallo = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
-
- /* The low order 16 bits are always treated as a signed
- value. */
- vallo = ((vallo & 0xffff) ^ 0x8000) - 0x8000;
- val = ((insn & 0xffff) << 16) + vallo;
- val += l->addend;
-
- /* If PC-relative, we need to subtract out the address of the LO
- half of the HI/LO. (The actual relocation is relative
- to that instruction.) */
- if (reloc_entry->howto->pc_relative)
- val -= reloc_entry->address;
-
- /* At this point, "val" has the value of the combined HI/LO
- pair. If the low order 16 bits (which will be used for
- the LO16 insn) are negative, then we will need an
- adjustment for the high order 16 bits. */
- val += 0x8000;
- val = (val >> 16) & 0xffff;
-
- insn &= ~ (bfd_vma) 0xffff;
- insn |= val;
- bfd_put_32 (abfd, insn, l->addr);
-
- next = l->next;
- free (l);
- l = next;
- }
-
- mips_hi16_list = NULL;
- }
-
- /* Now do the LO16 reloc in the usual way. */
- return mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
-}
-
-/* Do a R_MIPS_GOT16 reloc. This is a reloc against the global offset
- table used for PIC code. If the symbol is an external symbol, the
- instruction is modified to contain the offset of the appropriate
- entry in the global offset table. If the symbol is a section
- symbol, the next reloc is a R_MIPS_LO16 reloc. The two 16 bit
- addends are combined to form the real addend against the section
- symbol; the GOT16 is modified to contain the offset of an entry in
- the global offset table, and the LO16 is modified to offset it
- appropriately. Thus an offset larger than 16 bits requires a
- modified value in the global offset table.
-
- This implementation suffices for the assembler, but the linker does
- not yet know how to create global offset tables. */
-
-static bfd_reloc_status_type
-mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
- void *data, asection *input_section, bfd *output_bfd,
- char **error_message)
-{
- /* If we're relocating, and this is a local symbol, we can handle it
- just like an R_MIPS_HI16. */
- if (output_bfd != NULL
- && ((symbol->flags & BSF_SECTION_SYM) != 0
- || (symbol->flags & BSF_LOCAL) == 0))
- return mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
-
- /* Otherwise we try to handle it as R_MIPS_GOT_DISP. */
- return mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
- input_section, output_bfd, error_message);
-}
-
/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a
dangerous relocation. */
@@ -1542,8 +1319,6 @@ mips_elf_gprel16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
bfd_reloc_status_type ret;
bfd_vma gp;
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
if (output_bfd != NULL)
relocatable = TRUE;
else
@@ -1573,8 +1348,6 @@ mips_elf_literal_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
bfd_reloc_status_type ret;
bfd_vma gp;
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
/* FIXME: The entries in the .lit8 and .lit4 sections should be merged. */
if (output_bfd != NULL)
relocatable = TRUE;
@@ -1606,8 +1379,6 @@ mips_elf_gprel32_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
bfd_reloc_status_type ret;
bfd_vma gp;
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
/* R_MIPS_GPREL32 relocations are defined for local symbols only. */
if (output_bfd != NULL
&& (symbol->flags & BSF_SECTION_SYM) == 0
@@ -1684,36 +1455,33 @@ gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry,
the rest is at bits 6-10. The bitpos already got right by the howto. */
static bfd_reloc_status_type
-mips_elf_shift6_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
- char **error_message ATTRIBUTE_UNUSED)
+mips_elf_shift6_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+ void *data, asection *input_section, bfd *output_bfd,
+ char **error_message)
{
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
if (reloc_entry->howto->partial_inplace)
{
reloc_entry->addend = ((reloc_entry->addend & 0x00007c0)
| (reloc_entry->addend & 0x00000800) >> 9);
}
- SET_RELOC_ADDEND (reloc_entry)
-
- return bfd_reloc_continue;
+ return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd,
+ error_message);
}
/* Handle a mips16 jump. */
static bfd_reloc_status_type
-mips16_jump_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
- asymbol *symbol, void *data ATTRIBUTE_UNUSED,
- asection *input_section, bfd *output_bfd,
+mips16_jump_reloc (bfd *abfd ATTRIBUTE_UNUSED,
+ arelent *reloc_entry ATTRIBUTE_UNUSED,
+ asymbol *symbol ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED,
+ asection *input_section, bfd *output_bfd ATTRIBUTE_UNUSED,
char **error_message ATTRIBUTE_UNUSED)
{
static bfd_boolean warned = FALSE;
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
/* FIXME. */
if (! warned)
(*_bfd_error_handler)
@@ -1739,8 +1507,6 @@ mips16_gprel_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
bfd_signed_vma val;
bfd_vma relocation;
- GET_RELOC_ADDEND (output_bfd, symbol, reloc_entry, input_section)
-
if (output_bfd != NULL)
relocatable = TRUE;
else
@@ -1804,9 +1570,6 @@ mips16_gprel_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
return bfd_reloc_ok;
}
-
-#undef GET_RELOC_ADDEND
-#undef SET_RELOC_ADDEND
/* A mapping from BFD reloc types to MIPS ELF reloc types. */
@@ -2110,11 +1873,6 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define ELF_ARCH bfd_arch_mips
#define ELF_MACHINE_CODE EM_MIPS
-/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
- a value of 0x1000, and we are compatible.
- FIXME: How does this affect NewABI? */
-#define ELF_MAXPAGESIZE 0x1000
-
#define elf_backend_collect TRUE
#define elf_backend_type_change_ok TRUE
#define elf_backend_can_gc_sections TRUE
@@ -2196,20 +1954,30 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define TARGET_BIG_SYM bfd_elf32_nbigmips_vec
#define TARGET_BIG_NAME "elf32-nbigmips"
+/* The SVR4 MIPS ABI says that this should be 0x10000, but Irix 5 uses
+ a value of 0x1000, and we are compatible.
+ FIXME: How does this affect NewABI? */
+#define ELF_MAXPAGESIZE 0x1000
+
#include "elf32-target.h"
/* Support for traditional mips targets using n32 ABI. */
-#define INCLUDED_TARGET_FILE /* More a type of flag. */
-
#undef TARGET_LITTLE_SYM
#undef TARGET_LITTLE_NAME
#undef TARGET_BIG_SYM
#undef TARGET_BIG_NAME
+#undef ELF_MAXPAGESIZE
+
#define TARGET_LITTLE_SYM bfd_elf32_ntradlittlemips_vec
#define TARGET_LITTLE_NAME "elf32-ntradlittlemips"
#define TARGET_BIG_SYM bfd_elf32_ntradbigmips_vec
#define TARGET_BIG_NAME "elf32-ntradbigmips"
+/* The SVR4 MIPS ABI says that this should be 0x10000, and Linux uses
+ page sizes of up to that limit, so we need to respect it. */
+#define ELF_MAXPAGESIZE 0x10000
+#define elf32_bed elf32_tradbed
+
/* Include the target file again for this target. */
#include "elf32-target.h"
diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c
index aba571a..c699922 100644
--- a/bfd/elfxx-ia64.c
+++ b/bfd/elfxx-ia64.c
@@ -876,6 +876,8 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
if (is_branch)
{
+ bfd_signed_vma offset;
+
reladdr = (sec->output_section->vma
+ sec->output_offset
+ roff) & (bfd_vma) -4;
@@ -911,6 +913,13 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
/* Resize the current section to make room for the new branch. */
trampoff = (sec->_cooked_size + 15) & (bfd_vma) -16;
+
+ /* If trampoline is out of range, there is nothing we
+ can do. */
+ offset = trampoff - (roff & (bfd_vma) -4);
+ if (offset < -0x1000000 || offset > 0x0FFFFF0)
+ continue;
+
amt = trampoff + size;
contents = (bfd_byte *) bfd_realloc (contents, amt);
if (contents == NULL)
@@ -957,14 +966,18 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again)
}
else
{
+ /* If trampoline is out of range, there is nothing we
+ can do. */
+ offset = f->trampoff - (roff & (bfd_vma) -4);
+ if (offset < -0x1000000 || offset > 0x0FFFFF0)
+ continue;
+
/* Nop out the reloc, since we're finalizing things here. */
irel->r_info = ELFNN_R_INFO (0, R_IA64_NONE);
}
- /* Fix up the existing branch to hit the trampoline. Hope like
- hell this doesn't overflow too. */
- if (elfNN_ia64_install_value (abfd, contents + roff,
- f->trampoff - (roff & (bfd_vma) -4),
+ /* Fix up the existing branch to hit the trampoline. */
+ if (elfNN_ia64_install_value (abfd, contents + roff, offset,
r_type) != bfd_reloc_ok)
goto error_return;
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index 1af0f98..7bcdb11 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -1082,8 +1082,8 @@ _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
bfd_boolean relocatable, void *data, bfd_vma gp)
{
bfd_vma relocation;
- unsigned long insn = 0;
bfd_signed_vma val;
+ bfd_reloc_status_type status;
if (bfd_is_com_section (symbol->section))
relocation = 0;
@@ -1099,13 +1099,7 @@ _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
/* Set val to the offset into the section or symbol. */
val = reloc_entry->addend;
- if (reloc_entry->howto->partial_inplace)
- {
- insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
- val += insn & 0xffff;
- }
-
- _bfd_mips_elf_sign_extend(val, 16);
+ _bfd_mips_elf_sign_extend (val, 16);
/* Adjust val for the final section location and GP value. If we
are producing relocatable output, we don't want to do this for
@@ -1116,16 +1110,215 @@ _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
if (reloc_entry->howto->partial_inplace)
{
- insn = (insn & ~0xffff) | (val & 0xffff);
- bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
+ status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
+ (bfd_byte *) data
+ + reloc_entry->address);
+ if (status != bfd_reloc_ok)
+ return status;
}
else
reloc_entry->addend = val;
if (relocatable)
reloc_entry->address += input_section->output_offset;
- else if (((val & ~0xffff) != ~0xffff) && ((val & ~0xffff) != 0))
- return bfd_reloc_overflow;
+
+ return bfd_reloc_ok;
+}
+
+/* Used to store a REL high-part relocation such as R_MIPS_HI16 or
+ R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section
+ that contains the relocation field and DATA points to the start of
+ INPUT_SECTION. */
+
+struct mips_hi16
+{
+ struct mips_hi16 *next;
+ bfd_byte *data;
+ asection *input_section;
+ arelent rel;
+};
+
+/* FIXME: This should not be a static variable. */
+
+static struct mips_hi16 *mips_hi16_list;
+
+/* A howto special_function for REL *HI16 relocations. We can only
+ calculate the correct value once we've seen the partnering
+ *LO16 relocation, so just save the information for later.
+
+ The ABI requires that the *LO16 immediately follow the *HI16.
+ However, as a GNU extension, we permit an arbitrary number of
+ *HI16s to be associated with a single *LO16. This significantly
+ simplies the relocation handling in gcc. */
+
+bfd_reloc_status_type
+_bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
+ asymbol *symbol ATTRIBUTE_UNUSED, void *data,
+ asection *input_section, bfd *output_bfd,
+ char **error_message ATTRIBUTE_UNUSED)
+{
+ struct mips_hi16 *n;
+
+ if (reloc_entry->address > input_section->_cooked_size)
+ return bfd_reloc_outofrange;
+
+ n = bfd_malloc (sizeof *n);
+ if (n == NULL)
+ return bfd_reloc_outofrange;
+
+ n->next = mips_hi16_list;
+ n->data = data;
+ n->input_section = input_section;
+ n->rel = *reloc_entry;
+ mips_hi16_list = n;
+
+ if (output_bfd != NULL)
+ reloc_entry->address += input_section->output_offset;
+
+ return bfd_reloc_ok;
+}
+
+/* A howto special_function for REL R_MIPS_GOT16 relocations. This is just
+ like any other 16-bit relocation when applied to global symbols, but is
+ treated in the same as R_MIPS_HI16 when applied to local symbols. */
+
+bfd_reloc_status_type
+_bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+ void *data, asection *input_section,
+ bfd *output_bfd, char **error_message)
+{
+ if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
+ || bfd_is_und_section (bfd_get_section (symbol))
+ || bfd_is_com_section (bfd_get_section (symbol)))
+ /* The relocation is against a global symbol. */
+ return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd,
+ error_message);
+
+ return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd, error_message);
+}
+
+/* A howto special_function for REL *LO16 relocations. The *LO16 itself
+ is a straightforward 16 bit inplace relocation, but we must deal with
+ any partnering high-part relocations as well. */
+
+bfd_reloc_status_type
+_bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
+ void *data, asection *input_section,
+ bfd *output_bfd, char **error_message)
+{
+ bfd_vma vallo;
+
+ if (reloc_entry->address > input_section->_cooked_size)
+ return bfd_reloc_outofrange;
+
+ vallo = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
+ while (mips_hi16_list != NULL)
+ {
+ bfd_reloc_status_type ret;
+ struct mips_hi16 *hi;
+
+ hi = mips_hi16_list;
+
+ /* R_MIPS_GOT16 relocations are something of a special case. We
+ want to install the addend in the same way as for a R_MIPS_HI16
+ relocation (with a rightshift of 16). However, since GOT16
+ relocations can also be used with global symbols, their howto
+ has a rightshift of 0. */
+ if (hi->rel.howto->type == R_MIPS_GOT16)
+ hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
+
+ /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any
+ carry or borrow will induce a change of +1 or -1 in the high part. */
+ hi->rel.addend += (vallo + 0x8000) & 0xffff;
+
+ /* R_MIPS_GNU_REL_HI16 relocations are relative to the address of the
+ lo16 relocation, not their own address. If we're calculating the
+ final value, and hence subtracting the "PC", subtract the offset
+ of the lo16 relocation from here. */
+ if (output_bfd == NULL && hi->rel.howto->type == R_MIPS_GNU_REL_HI16)
+ hi->rel.addend -= reloc_entry->address - hi->rel.address;
+
+ ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
+ hi->input_section, output_bfd,
+ error_message);
+ if (ret != bfd_reloc_ok)
+ return ret;
+
+ mips_hi16_list = hi->next;
+ free (hi);
+ }
+
+ return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
+ input_section, output_bfd,
+ error_message);
+}
+
+/* A generic howto special_function. This calculates and installs the
+ relocation itself, thus avoiding the oft-discussed problems in
+ bfd_perform_relocation and bfd_install_relocation. */
+
+bfd_reloc_status_type
+_bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
+ asymbol *symbol, void *data ATTRIBUTE_UNUSED,
+ asection *input_section, bfd *output_bfd,
+ char **error_message ATTRIBUTE_UNUSED)
+{
+ bfd_signed_vma val;
+ bfd_reloc_status_type status;
+ bfd_boolean relocatable;
+
+ relocatable = (output_bfd != NULL);
+
+ if (reloc_entry->address > input_section->_cooked_size)
+ return bfd_reloc_outofrange;
+
+ /* Build up the field adjustment in VAL. */
+ val = 0;
+ if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
+ {
+ /* Either we're calculating the final field value or we have a
+ relocation against a section symbol. Add in the section's
+ offset or address. */
+ val += symbol->section->output_section->vma;
+ val += symbol->section->output_offset;
+ }
+
+ if (!relocatable)
+ {
+ /* We're calculating the final field value. Add in the symbol's value
+ and, if pc-relative, subtract the address of the field itself. */
+ val += symbol->value;
+ if (reloc_entry->howto->pc_relative)
+ {
+ val -= input_section->output_section->vma;
+ val -= input_section->output_offset;
+ val -= reloc_entry->address;
+ }
+ }
+
+ /* VAL is now the final adjustment. If we're keeping this relocation
+ in the output file, and if the relocation uses a separate addend,
+ we just need to add VAL to that addend. Otherwise we need to add
+ VAL to the relocation field itself. */
+ if (relocatable && !reloc_entry->howto->partial_inplace)
+ reloc_entry->addend += val;
+ else
+ {
+ /* Add in the separate addend, if any. */
+ val += reloc_entry->addend;
+
+ /* Add VAL to the relocation field. */
+ status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
+ (bfd_byte *) data
+ + reloc_entry->address);
+ if (status != bfd_reloc_ok)
+ return status;
+ }
+
+ if (relocatable)
+ reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok;
}
@@ -3203,7 +3396,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
break;
case R_MIPS_GNU_REL16_S2:
- value = symbol + _bfd_mips_elf_sign_extend (addend << 2, 18) - p;
+ value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
overflowed_p = mips_elf_overflow_p (value, 18);
value = (value >> 2) & howto->dst_mask;
break;
@@ -3226,9 +3419,9 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
R_MIPS_26 case here. */
case R_MIPS_26:
if (local_p)
- value = (((addend << 2) | ((p + 4) & 0xf0000000)) + symbol) >> 2;
+ value = ((addend | ((p + 4) & 0xf0000000)) + symbol) >> 2;
else
- value = (_bfd_mips_elf_sign_extend (addend << 2, 28) + symbol) >> 2;
+ value = (_bfd_mips_elf_sign_extend (addend, 28) + symbol) >> 2;
value &= howto->dst_mask;
break;
@@ -6067,7 +6260,6 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
addend = mips_elf_obtain_contents (howto, rel, input_bfd,
contents);
addend &= howto->src_mask;
- addend <<= howto->rightshift;
/* For some kinds of relocations, the ADDEND is a
combination of the addend stored in two different
@@ -6131,6 +6323,8 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
| ((addend & 0x7e00000) >> 16)
| (addend & 0x1f));
}
+ else
+ addend <<= howto->rightshift;
}
else
addend = rel->r_addend;
@@ -6170,33 +6364,25 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
/* Adjust the addend appropriately. */
addend += local_sections[r_symndx]->output_offset;
- if (howto->partial_inplace)
+ if (rela_relocation_p)
+ /* If this is a RELA relocation, just update the addend. */
+ rel->r_addend = addend;
+ else
{
- /* If the relocation is for a R_MIPS_HI16 or R_MIPS_GOT16,
- then we only want to write out the high-order 16 bits.
- The subsequent R_MIPS_LO16 will handle the low-order bits.
- */
- if (r_type == R_MIPS_HI16 || r_type == R_MIPS_GOT16
+ if (r_type == R_MIPS_HI16
+ || r_type == R_MIPS_GOT16
|| r_type == R_MIPS_GNU_REL_HI16)
addend = mips_elf_high (addend);
else if (r_type == R_MIPS_HIGHER)
addend = mips_elf_higher (addend);
else if (r_type == R_MIPS_HIGHEST)
addend = mips_elf_highest (addend);
- }
+ else
+ addend >>= howto->rightshift;
- if (rela_relocation_p)
- /* If this is a RELA relocation, just update the addend.
- We have to cast away constness for REL. */
- rel->r_addend = addend;
- else
- {
- /* Otherwise, we have to write the value back out. Note
- that we use the source mask, rather than the
- destination mask because the place to which we are
- writing will be source of the addend in the final
- link. */
- addend >>= howto->rightshift;
+ /* We use the source mask, rather than the destination
+ mask because the place to which we are writing will be
+ source of the addend in the final link. */
addend &= howto->src_mask;
if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
@@ -6260,8 +6446,6 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
else
use_saved_addend_p = FALSE;
- addend >>= howto->rightshift;
-
/* Figure out what value we are supposed to relocate. */
switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
input_section, info, rel,
diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h
index aef4e7b..d3787e9 100644
--- a/bfd/elfxx-mips.h
+++ b/bfd/elfxx-mips.h
@@ -103,6 +103,14 @@ extern bfd_reloc_status_type _bfd_mips_elf_gprel16_with_gp
(bfd *, asymbol *, arelent *, asection *, bfd_boolean, void *, bfd_vma);
extern bfd_reloc_status_type _bfd_mips_elf32_gprel16_reloc
(bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+extern bfd_reloc_status_type _bfd_mips_elf_hi16_reloc
+ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+extern bfd_reloc_status_type _bfd_mips_elf_got16_reloc
+ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+extern bfd_reloc_status_type _bfd_mips_elf_lo16_reloc
+ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
+extern bfd_reloc_status_type _bfd_mips_elf_generic_reloc
+ (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
extern unsigned long _bfd_elf_mips_mach
(flagword);
extern bfd_boolean _bfd_mips_relax_section
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index b40a249..40e1b78 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -864,6 +864,20 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_FRV_GPREL32",
"BFD_RELOC_FRV_GPRELHI",
"BFD_RELOC_FRV_GPRELLO",
+ "BFD_RELOC_FRV_GOT12",
+ "BFD_RELOC_FRV_GOTHI",
+ "BFD_RELOC_FRV_GOTLO",
+ "BFD_RELOC_FRV_FUNCDESC",
+ "BFD_RELOC_FRV_FUNCDESC_GOT12",
+ "BFD_RELOC_FRV_FUNCDESC_GOTHI",
+ "BFD_RELOC_FRV_FUNCDESC_GOTLO",
+ "BFD_RELOC_FRV_FUNCDESC_VALUE",
+ "BFD_RELOC_FRV_FUNCDESC_GOTOFF12",
+ "BFD_RELOC_FRV_FUNCDESC_GOTOFFHI",
+ "BFD_RELOC_FRV_FUNCDESC_GOTOFFLO",
+ "BFD_RELOC_FRV_GOTOFF12",
+ "BFD_RELOC_FRV_GOTOFFHI",
+ "BFD_RELOC_FRV_GOTOFFLO",
"BFD_RELOC_MN10300_GOTOFF24",
"BFD_RELOC_MN10300_GOT32",
@@ -1168,6 +1182,20 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_M32R_HI16_SLO",
"BFD_RELOC_M32R_LO16",
"BFD_RELOC_M32R_SDA16",
+ "BFD_RELOC_M32R_GOT24",
+ "BFD_RELOC_M32R_26_PLTREL",
+ "BFD_RELOC_M32R_COPY",
+ "BFD_RELOC_M32R_GLOB_DAT",
+ "BFD_RELOC_M32R_JMP_SLOT",
+ "BFD_RELOC_M32R_RELATIVE",
+ "BFD_RELOC_M32R_GOTOFF",
+ "BFD_RELOC_M32R_GOTPC24",
+ "BFD_RELOC_M32R_GOT16_HI_ULO",
+ "BFD_RELOC_M32R_GOT16_HI_SLO",
+ "BFD_RELOC_M32R_GOT16_LO",
+ "BFD_RELOC_M32R_GOTPC_HI_ULO",
+ "BFD_RELOC_M32R_GOTPC_HI_SLO",
+ "BFD_RELOC_M32R_GOTPC_LO",
"BFD_RELOC_V850_9_PCREL",
"BFD_RELOC_V850_22_PCREL",
"BFD_RELOC_V850_SDA_16_16_OFFSET",
@@ -1402,6 +1430,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
"BFD_RELOC_M68HC11_LO16",
"BFD_RELOC_M68HC11_PAGE",
"BFD_RELOC_M68HC11_24",
+ "BFD_RELOC_M68HC12_5B",
"BFD_RELOC_CRIS_BDISP8",
"BFD_RELOC_CRIS_UNSIGNED_5",
"BFD_RELOC_CRIS_SIGNED_6",
diff --git a/bfd/opncls.c b/bfd/opncls.c
index 96f1e14..6abd405 100644
--- a/bfd/opncls.c
+++ b/bfd/opncls.c
@@ -70,8 +70,7 @@ _bfd_new_bfd (void)
nbfd->direction = no_direction;
nbfd->iostream = NULL;
nbfd->where = 0;
- if (!bfd_hash_table_init_n (&nbfd->section_htab,
- bfd_section_hash_newfunc,
+ if (!bfd_hash_table_init_n (& nbfd->section_htab, bfd_section_hash_newfunc,
251))
{
free (nbfd);
@@ -923,7 +922,7 @@ find_separate_debug_file (bfd *abfd, const char *debug_file_directory)
for (i = strlen (dir) - 1; i >= 0; i--)
if (IS_DIR_SEPARATOR (dir[i]))
break;
-
+
dir[i + 1] = '\0';
BFD_ASSERT (dir[i] == '/' || dir[0] == '\0')
@@ -996,23 +995,26 @@ SYNOPSIS
DESCRIPTION
Takes a BFD and searches it for a .gnu_debuglink section. If this
- section is found, examines the section for the name and checksum of
- a '.debug' file containing auxiliary debugging
- information. Searches filesystem for .debug file in some standard
+ section is found, it examines the section for the name and checksum
+ of a '.debug' file containing auxiliary debugging information. It
+ then searches the filesystem for this .debug file in some standard
locations, including the directory tree rooted at @var{dir}, and if
- found returns the full filename. If @var{dir} is NULL, will search
- default path configured into libbfd at build time.
+ found returns the full filename.
+
+ If @var{dir} is NULL, it will search a default path configured into
+ libbfd at build time. [XXX this feature is not currently
+ implemented].
RETURNS
<<NULL>> on any errors or failure to locate the .debug file,
otherwise a pointer to a heap-allocated string containing the
- filename. The caller is responsible for freeing this string.
+ filename. The caller is responsible for freeing this string.
*/
char *
bfd_follow_gnu_debuglink (bfd *abfd, const char *dir)
{
-#if 0 /* Disabled until DEBUGDIR can be defined by configure.in */
+#if 0 /* Disabled until DEBUGDIR can be defined by configure.in. */
if (dir == NULL)
dir = DEBUGDIR;
#endif
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index 2fe294f..559f2a2 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -1,5 +1,5 @@
/* Support for the generic parts of PE/PEI; the common executable parts.
- Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+ Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
Written by Cygnus Solutions.
@@ -985,13 +985,21 @@ _bfd_XXi_swap_scnhdr_out (abfd, in, out)
pe_required_section_flags * p;
int flags = scnhdr_int->s_flags;
+ /* We have defaulted to adding the IMAGE_SCN_MEM_WRITE flag, but now
+ we know exactly what this specific section wants so we remove it
+ and then allow the must_have field to add it back in if necessary.
+ However, we don't remove IMAGE_SCN_MEM_WRITE flag from .text if the
+ default WP_TEXT file flag has been cleared. WP_TEXT may be cleared
+ by ld --enable-auto-import (if auto-import is actually needed),
+ by ld --omagic, or by obcopy --writable-text. */
+
+ if (strcmp (scnhdr_int->s_name, ".text")
+ || (bfd_get_file_flags (abfd) & WP_TEXT))
+ flags &= ~IMAGE_SCN_MEM_WRITE;
+
for (p = known_sections; p->section_name; p++)
if (strcmp (scnhdr_int->s_name, p->section_name) == 0)
{
- /* We have defaulted to adding the IMAGE_SCN_MEM_WRITE flag, but now
- we know exactly what this specific section wants so we remove it
- and then allow the must_have field to add it back in if necessary. */
- flags &= ~IMAGE_SCN_MEM_WRITE;
flags |= p->must_have;
break;
}
diff --git a/bfd/peicode.h b/bfd/peicode.h
index 41fcbbc..41445e5 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -902,10 +902,40 @@ pe_ILF_build_a_bfd (bfd * abfd,
symbol = symbol_name;
if (import_name_type != IMPORT_NAME)
- /* Skip any prefix in symbol_name. */
- while (*symbol == '@' || * symbol == '?' || * symbol == '_')
- ++ symbol;
-
+ {
+ bfd_boolean skipped_leading_underscore = FALSE;
+ bfd_boolean skipped_leading_at = FALSE;
+ bfd_boolean skipped_leading_question_mark = FALSE;
+ bfd_boolean check_again;
+
+ /* Skip any prefix in symbol_name. */
+ -- symbol;
+ do
+ {
+ check_again = FALSE;
+ ++ symbol;
+
+ switch (*symbol)
+ {
+ case '@':
+ if (! skipped_leading_at)
+ check_again = skipped_leading_at = TRUE;
+ break;
+ case '?':
+ if (! skipped_leading_question_mark)
+ check_again = skipped_leading_question_mark = TRUE;
+ break;
+ case '_':
+ if (! skipped_leading_underscore)
+ check_again = skipped_leading_underscore = TRUE;
+ break;
+ default:
+ break;
+ }
+ }
+ while (check_again);
+ }
+
if (import_name_type == IMPORT_NAME_UNDECORATE)
{
/* Truncate at the first '@' */
diff --git a/bfd/reloc.c b/bfd/reloc.c
index ad4963f..9bffaa3 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -1,6 +1,6 @@
/* BFD support for handling relocation entries.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003
+ 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
Written by Cygnus Support.
@@ -2139,6 +2139,34 @@ ENUMX
BFD_RELOC_FRV_GPRELHI
ENUMX
BFD_RELOC_FRV_GPRELLO
+ENUMX
+ BFD_RELOC_FRV_GOT12
+ENUMX
+ BFD_RELOC_FRV_GOTHI
+ENUMX
+ BFD_RELOC_FRV_GOTLO
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC_GOT12
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC_GOTHI
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC_GOTLO
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC_VALUE
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC_GOTOFF12
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC_GOTOFFHI
+ENUMX
+ BFD_RELOC_FRV_FUNCDESC_GOTOFFLO
+ENUMX
+ BFD_RELOC_FRV_GOTOFF12
+ENUMX
+ BFD_RELOC_FRV_GOTOFFHI
+ENUMX
+ BFD_RELOC_FRV_GOTOFFLO
ENUMDOC
Fujitsu Frv Relocations.
COMMENT
@@ -2911,6 +2939,37 @@ ENUM
ENUMDOC
This is a 16-bit reloc containing the small data area offset for use in
add3, load, and store instructions.
+ENUM
+ BFD_RELOC_M32R_GOT24
+ENUMX
+ BFD_RELOC_M32R_26_PLTREL
+ENUMX
+ BFD_RELOC_M32R_COPY
+ENUMX
+ BFD_RELOC_M32R_GLOB_DAT
+ENUMX
+ BFD_RELOC_M32R_JMP_SLOT
+ENUMX
+ BFD_RELOC_M32R_RELATIVE
+ENUMX
+ BFD_RELOC_M32R_GOTOFF
+ENUMX
+ BFD_RELOC_M32R_GOTPC24
+ENUMX
+ BFD_RELOC_M32R_GOT16_HI_ULO
+ENUMX
+ BFD_RELOC_M32R_GOT16_HI_SLO
+ENUMX
+ BFD_RELOC_M32R_GOT16_LO
+ENUMX
+ BFD_RELOC_M32R_GOTPC_HI_ULO
+ENUMX
+ BFD_RELOC_M32R_GOTPC_HI_SLO
+ENUMX
+ BFD_RELOC_M32R_GOTPC_LO
+ENUMDOC
+ For PIC.
+
ENUM
BFD_RELOC_V850_9_PCREL
@@ -3705,6 +3764,11 @@ ENUMDOC
This is a 24-bit reloc that represents the address with a 16-bit
value and a 8-bit page number. The symbol address is transformed
to follow the 16K memory bank of 68HC12 (seen as mapped in the window).
+ENUM
+ BFD_RELOC_M68HC12_5B
+ENUMDOC
+ Motorola 68HC12 reloc.
+ This is the 5 bits of a value.
ENUM
BFD_RELOC_CRIS_BDISP8
diff --git a/bfd/targets.c b/bfd/targets.c
index 488e8e4..de4284e 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -542,6 +542,9 @@ extern const bfd_target bfd_elf32_littlearm_oabi_vec;
extern const bfd_target bfd_elf32_littlearm_vec;
extern const bfd_target bfd_elf32_littlemips_vec;
extern const bfd_target bfd_elf32_m32r_vec;
+extern const bfd_target bfd_elf32_m32rle_vec;
+extern const bfd_target bfd_elf32_m32rlin_vec;
+extern const bfd_target bfd_elf32_m32rlelin_vec;
extern const bfd_target bfd_elf32_m68hc11_vec;
extern const bfd_target bfd_elf32_m68hc12_vec;
extern const bfd_target bfd_elf32_m68k_vec;
@@ -831,6 +834,9 @@ static const bfd_target * const _bfd_target_vector[] = {
&bfd_elf32_littlearm_vec,
&bfd_elf32_littlemips_vec,
&bfd_elf32_m32r_vec,
+ &bfd_elf32_m32rle_vec,
+ &bfd_elf32_m32rlin_vec,
+ &bfd_elf32_m32rlelin_vec,
&bfd_elf32_m68hc11_vec,
&bfd_elf32_m68hc12_vec,
&bfd_elf32_m68k_vec,
diff --git a/bfd/version.h b/bfd/version.h
index 33474d8..714d236 100644
--- a/bfd/version.h
+++ b/bfd/version.h
@@ -1,3 +1,3 @@
-#define BFD_VERSION_DATE 20031215
+#define BFD_VERSION_DATE 20040126
#define BFD_VERSION @bfd_version@
#define BFD_VERSION_STRING @bfd_version_string@