diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 11595 | ||||
-rw-r--r-- | bfd/acinclude.m4 | 10 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 34 | ||||
-rw-r--r-- | bfd/coff-arm.c | 25 | ||||
-rw-r--r-- | bfd/coff-h8300.c | 152 | ||||
-rw-r--r-- | bfd/coffcode.h | 6 | ||||
-rw-r--r-- | bfd/config.bfd | 19 | ||||
-rwxr-xr-x | bfd/configure | 31 | ||||
-rw-r--r-- | bfd/configure.in | 3 | ||||
-rw-r--r-- | bfd/doc/ChangeLog | 593 | ||||
-rw-r--r-- | bfd/dwarf2.c | 331 | ||||
-rw-r--r-- | bfd/elf32-arm.h | 185 | ||||
-rw-r--r-- | bfd/elf32-cris.c | 13 | ||||
-rw-r--r-- | bfd/elf32-frv.c | 2999 | ||||
-rw-r--r-- | bfd/elf32-h8300.c | 210 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 77 | ||||
-rw-r--r-- | bfd/elf32-m32r.c | 2754 | ||||
-rw-r--r-- | bfd/elf32-m68k.c | 13 | ||||
-rw-r--r-- | bfd/elf32-mips.c | 374 | ||||
-rw-r--r-- | bfd/elf32-sparc.c | 30 | ||||
-rw-r--r-- | bfd/elf32-vax.c | 11 | ||||
-rw-r--r-- | bfd/elf64-mips.c | 230 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 18 | ||||
-rw-r--r-- | bfd/elflink.h | 5 | ||||
-rw-r--r-- | bfd/elfn32-mips.c | 396 | ||||
-rw-r--r-- | bfd/elfxx-ia64.c | 21 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 258 | ||||
-rw-r--r-- | bfd/elfxx-mips.h | 8 | ||||
-rw-r--r-- | bfd/libbfd.h | 29 | ||||
-rw-r--r-- | bfd/opncls.c | 22 | ||||
-rw-r--r-- | bfd/peXXigen.c | 18 | ||||
-rw-r--r-- | bfd/peicode.h | 38 | ||||
-rw-r--r-- | bfd/reloc.c | 66 | ||||
-rw-r--r-- | bfd/targets.c | 6 | ||||
-rw-r--r-- | bfd/version.h | 2 |
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@ |