* libpei.h (_bfd_pei_final_link_postscript): Declare.
(coff_final_link_postscript): Define.
* peigen.c (_bfd_pei_swap_aouthdr_out): Don't set value for data
directory entries here.
(_bfd_pei_final_link_postscript): New function.
* peicode.h (coff_swap_scnhdr_in): If COFF_IMAGE_WITH_PE, the
get the overflow of the s_nlnno field from the s_nreloc field.
* peigen.c (_bfd_pei_swap_scnhdr_out): If doing a final link, swap
the s_nlnno overflow of the .text section into the s_nreloc
field.
* config.bfd (i[3456]86-*-interix*): Set targ_cflags to
-DSTRICT_PE_FORMAT.
* coffcode.h (styp_to_sec_flags): Check STRICT_PE_FORMAT rather
than __INTERIX.
(coff_classify_symbol): Re-revert 1999-08-08 patch if
STRICT_PE_FORMAT.
* libpei.h: New file, broken out of peicode.h.
* peigen.c: New file, broken out of peicode.h.
* peicode.h: A bunch of code moved out to libpei.h and peigen.c.
* configure.in: Add peigen.lo to list of files required for each
PE target.
* Makefile.am: Rebuild dependencies.
(BFD32_BACKENDS): Add peigen.lo.
(BFD32_BACKENDS_CFILES): Add peigen.c.
(SOURCE_HFILES): Add libpei.h.
* configure, Makefile.in: Rebuild.
* peicode.h (coff_swap_scnhdr_in): Don't check for a special
section name of _BSS; check IMAGE_SCN_CNT_UNINITIALIZED_DATA
instead. Don't clear the s_paddr field for an uninitialized data
section.
* coffcode.h (coff_mkobject_hook): If COFF_WITH_PE, set HAS_DEBUG
to the reverse of IMAGE_FILE_DEBUG_STRIPPED.
(coff_write_object_contents): Set IMAGE_FILE_DEBUG_STRIPPED if
there is no SEC_DEBUGGING section.
* peicode.h (pe_mkobject_hook): Set HAS_DEBUG to the reverse of
IMAGE_FILE_DEBUG_STRIPPED.
* cofflink.c (_bfd_coff_link_input_bfd): When writing out a
symbol, switch on the class when determining whether to modify the
value. For PE, don't modify the value of a C_FCN symbol not named
.bf.
value for the stub address in a call through a stub.
Install the value for a local symbol directly into the DLT
instead of generating a reloc. Correctly handle FPTR64 relocs.
* elf-hppa.h (elf_hppa_final_link): Set the value of __gp to the
address of the .PARISC.global section.
(elf_hppa_relocate_section): Lookup and pass the PA64 hash
table entry elf_hppa_final_link_relocate. Do not give a warning
for a reloc against an external symbol if it has a PA64 hash
table entry.
(elf_hppa_final_link_relocate): Significantly rework. Handle
DLTIND relocations. Compute the final value of the relocation
before passing the value of elf_hppa_relocate_insn.
(elf_hppa_relocate_insn): Revamp to handle just bit tiwiddling
relocation support. Handle DLTIND relocation requests just like
DLTREL relocation requests. Simplify branch handling.
1999-09-08 Ulrich Drepper <drepper@cygnus.com>
* elf-hppa.h (elf_hppa_relocate_section): Catch problems with
non-allocated section as done in i386 version.
(elf_hppa_final_link_relocate): Uncomment R_PARISC_14F in switch
statement since this is no know relocation.
DLTREL21L relocs. Pass the output bfd to elf_hppa_relocate_insn.
Pass the relocate type rather than the insn format to
elf_hppa_relocate_insn.
(elf_hppa_relocate_insn): Make switch dependent on relocation type
rather than the opcode. Handle DLTREL21L and DLTREL14R relocs.
* coffcode.h (sort_by_secaddr): New static function if
COFF_IMAGE_WITH_PE.
(coff_compute_section_file_positions): If COFF_IMAGE_WITH_PE, sort
sections by VMA when assigning target_index values. Always set
virt_size.
* coffcode.h (coff_set_custom_section_alignment): Add const to
declaration to match definition.
(coff_write_object_contents): Don't set F_AR32W(R)? if
COFF_WITH_PE.
* coffcode.h (sec_to_styp_flags): Write separate COFF_WITH_PE
version. Move COFF_WITH_PE specific code to new version.
(stype_to_sec_flags): Likewise. Add section parameter.
* coffgen.c (make_a_section_from_file): Set target_index before
calling styp_to_sec_flags. Pass section to styp_to_sec_flags.
* libcoff.h: Rebuild.
* syms.c (stt): Add some PE/PEI section names.
(bfd_decode_symclass): Return 'w', not 'U', for a weak undefined
symbol.
(bfd_symbol_info): Check for 'w'.
* elflink.h (elf_adjust_dynamic_symbol): Copy REF_REGULAR_NONWEAK
and NON_GOT_REF from weak defined symbol to real symbol.
* elf32-i386.c (elf_i386_check_relocs): Set NON_GOT_REF.
(elf_i386_adjust_dynamic_symbol): If NON_GOT_REF is not set, don't
create a COPY reloc.
* elf32-sparc.c (elf32_sparc_check_relocs): Set NON_GOT_REF.
(elf32_sparc_adjust_dynamic_symbol): If NON_GOT_REF is not set,
don't create a COPY reloc.
* coff-i386.c (coff_i386_reloc): Handle R_IMAGEBASE.
(RTYPE2HOWTO): Return NULL if reloc type is out of range.
(coff_i386_rtype_to_howto): Likewise.
* coffcode.h (coff_slurp_symbol_table): Change a -2 to N_DEBUG.
Completely ignore symbols which are all zero.
(dummy_reloc16_estimate): Add return 0.
* cofflink.c (_bfd_coff_link_input_bfd): Rename inner scope
variable copy to name_copy to avoid shadowing outer scope
variable.
* libcoff-in.h (coff_data_type): Change raw_syment_count field
from unsigned int to unsigned long. Add timestamp field.
* libcoff.h: Rebuild.
Also comment changes.
for special section symbols.
* elflink.h (elf_merge_symbol): If we have no old BFD, check
BSF_DYNAMIC on the section symbol to see whether the old BFD is
dynamic.
elf-section data to allocate just the right amount of relocation
space. Don't allocate the hash space twice.
(elf_bfd_final_link): Calculate the amount of space to allocate in
each relocation section.
64bit mode, generate a section relative relocation for a 32bit
wide relocation.
(elf_hppa_is_local_label_name): New function.
* elf32-hppa.c (elf_hppa_is_local_label_name): Deleted. To be
shared between 32bit and 64bit port.
* elf64-sparc.c (sparc64_elf_relocate_section): Back out part of
the Sep. 4th, 1998 change. glibc 2.0.x dynamic linker had bug,
not binutils.
* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
* coffgen.c (coff_find_nearest_line): When looking for file, use
last best match rather than first. If address is beyond last line
number record, don't return the last line as the correct value.
the size of a GOT entry here.
(mips_elf_calculate_relocation): Don't create a local GOT entry
for the symbol in a GOT16 relocation; just for it's high-order bit
(_bfd_mips_elf_relocate_section): Fix thinko.
(mips_elf_next_lo16_relocation): Don't compute the addend here.
Just return the relocation found.
(mips_elf_relocate_section): Pull the LO16 addend out of the
section itself when using REL relocations.
value of a symbol in a SEC_DEBUGGING section. Warn when doing a
relocation against a symbol in an input section with no output
section. From Daniel Jacobowitz <drow@false.org>.
and R_MIPS16_26 relocations correctly when relocating.
(_bfd_mips_elf_check_relocs): Don't assume that R_MIPS_CALL_HI16
and R_MIPS_CALL_LO16 are for global symbols.
* elflink.h (elf_bfd_final_link): Copy the whole isym, not just
some fields.
* elf64-sparc.c (sparc64_elf_output_arch_syms): Declare used
variables and initialize them.
there are no global symbols requiring GOT entries.
(_bfd_mips_elf_size_dynamic_sections): Likewise.
(_bfd_mips_elf_finish_dynamic_symbol): Likewise.
(_bfd_mips_elf_finish_dynamic_sections): Likewise.
symbols are considered to have the value zero.
(_bfd_mips_elf_relocate_section): Don't try to perform a
relocation for an undefined symbol.
(_bfd_mips_elf_check_relocs): Allocate locate GOT space for local
GOT16 relocations.
* elf64-sparc.c (sparc64_elf_build_plt): Cosmetic change - ABI
wants ba,a,pt %xcc instead of %icc.
Emit correct .PLT0-(.PLTN+4) initial value into the pointer slots
of large PLT entries.
(sparc64_elf_plt_ptr_offset): Fix calculation.
(sparc64_elf_finish_dynamic_symbol): Negative value of R_SPARC_JMP_SLOT
addend should be relative to load address, not .plt section start.
(sparc64_elf_size_info): Sparc64 uses 32bit .hash entries.
* elf-bfd.h (struct elf_backend_data): Add
print_symbol_all and output_arch_syms backend methods.
* elfxx-target.h: Likewise.
* elf64-sparc.c (sparc64_elf_bfd_link_hash_table_create,
sparc64_elf_add_symbol_hook, sparc64_elf_output_arch_syms,
sparc64_elf_get_symbol_type, sparc64_elf_symbol_processing): New
functions.
(sparc64_elf_size_dynamic_sections): Leave space for STT_REGISTER
symbols in .dynsym, add their names into .dynstr. Put those symbols
into dynlocal.
(sparc64_elf_finish_dynamic_sections): Fix up DT_SPARC_REGISTER
pointers to STT_REGISTER symbols in dynsym section.
(sparc64_elf_print_symbol_all): New function.
* elf.c (bfd_elf_print_symbol): Allow special backend symbol
printing using the print_symbol_all hook.
* coffcode.h (styp_to_sec_flags): If COFF_LONG_SECTION_NAMES and
COFF_SUPPORT_GNU_LINKONCE, mark sections whose names begin with
.gnu.linkonce with SEC_LINKONCE and SEC_LINK_DUPLICATES_DISCARD.
* coff-go32.c: (COFF_LONG_SECTION_NAMES): Define.
(COFF_SUPPORT_GNU_LINKONCE): Define.
* coff-stgo32.c: (COFF_LONG_SECTION_NAMES): Define.
(COFF_SUPPORT_GNU_LINKONCE): Define.
(elf_bfd_final_link): Use it.
(elf_link_input_bfd): Deal with the fact that there can be
two relocation sections for a single section.
(elf_reloc_link_order): Likewise.
* elf32-mips.c (_bfd_mips_elf_final_link): Don't set GP for
a relocateable object.
(_bfd_mips_elf_relocate_section): Handle relocateable links.
* elf64-sparc.c (sparc64_elf_info_to_howto): Use ELF64_R_TYPE_ID.
(sparc64_elf_get_reloc_upper_bound,
sparc64_elf_get_dynamic_reloc_upper_bound,
sparc64_elf_slurp_one_reloc_table, sparc64_elf_slurp_reloc_table,
sparc64_elf_canonicalize_dynamic_reloc, sparc64_elf_write_relocs):
New functions.
(sparc64_elf_check_relocs, sparc64_elf_relocate_section): Use
ELF64_R_TYPE_ID/DATA where appropriate.
function.
(mips_elf_next_lo16_addend): Call bfd_set_error on failure.
(mips_elf_calculate_relocation): Use mips_elf_local_relocation_p.
Always set *require_jalxp.
(mips_elf_stub_section_p): Mark abfd parameter as unused.
(_bfd_mips_elf_relocate_section): Only look for LO16 following
GOT16 if the GOT16 is against a local symbol. Don't return false
for an undefined symbol. If there is an overflow, assert that we
have a name.
a PT_PHDR program headers.
(_bfd_mips_elf_final_link): Don't assume there are going to be
section symbols when we're not building a shared object.
(_bfd_mips_elf_check_relocs): Make sure we have a GOT when
we need one.
(mips_elf_calculate_relocation): Handle MIPS16 stub functions.
(mips_elf_relocate_section): Adjust calling sequence for
mips_elf_calculate_relocation and mips_elf_perform_relocation.
(mips_elf_perform_relocation): Turn `jal' into `jalx' where
required.
* elf-hppa.h (_bfd_elf_hppa_gen_reloc_type, case R_HPPA): Handle
64bit format.
(_bfd_elf_hppa_gen_reloc_type, case R_GOTOFF): Use base reloc type
to derive final type instead of hardwiring a selection.
(_bfd_mips_elf_size_dynamic_sections): Set it.
(_bfd_mips_elf_final_link): Re-sort; verify the got did not grow.
(mips_elf_sort_hash_table): Set max_non_got_dynindex based off
new argument max_local.
dst_mask to match reality.
(_bfd_mips_elf_calculate_relocation): Handle R_MIPS16_GPREL.
(mips_elf_obtain_contents): Use bfd_get.
(mips_elf_perform_relocation): Handle R_MIPS16_GPREL.
(mips_elf_relocate_section): Likewise.
(mips_elf_relocate_section): Adjust calling sequence for
mips_elf_perform_relocation.
(mips_elf_perform_relocation): Take additional argument. Handle
R_MIPS16_26. Use bfd_put for convenience.
* elflink.c (_bfd_elf_create_dynamic_sections): Only create
.dynbss and .rel[a].bss if want_dynbss.
* elfxx-target.h (elf_backend_want_dynbss): Provide default.
as appropriate. Use EMPTY_HOWTO as appropriate. Fill in
structure initializations. Add casts.
* reloc.c (EMPTY_HOWTO): Define.
* bfd-in2.h: Rebuild.
* coff-h8300.c (h8300_reloc16_extra_cases): Remove useless
comparisons against 0.
* elf32-sparc.c (elf32_sparc_merge_private_bfd_data): Change
previous_ibfd_e_flags to unsigned long.
* vms.h (struct vms_private_data_struct): Change section_count to
unsigned.
* vms-gsd.c (_bfd_vms_slurp_gsd): Change psect_idx to unsigned.
(_bfd_vms_write_gsd): Change symnum to unsigned.
* vms-hdr.c (_bfd_vms_write_hdr): Change symnum to unsigned.
* vms-tir.c (etir_sta): Change psect to unsigned.
(alloc_section): Change idx to unsigned.
(tir_sta, tir_ctl): Change psect to unsigned.
(_bfd_vms_write_tir): Change len and before to bfd_size_type.
* vms.c (priv_section_count): Change to unsigned.
variables. Add default case to enum switches.
* coff-arm.c (bfd_arm_allocate_interworking_sections): Only
compile if not COFF_IMAGE_WITH_PE.
(record_arm_to_thumb_glue, record_thumb_to_arm_glue): Likewise.
(bfd_arm_get_bfd_for_interworking): Likewise.
(bfd_arm_process_before_allocation): Likewise.
* epoc-pei-arm.c: Don't rename bfd_arm functions.
* pei-arm.c: Likewise.
* elf32-mips.c (mips_elf_link_hash_table_create): Don't declare.
(MIPS_ELF_ADD_DYNAMIC_ENTRY): Correct last change.
(mips_elf_got16_entry): Put parens around & in body of ==.
(mips_elf_calculate_relocation): Correct test for empty string.
* vms-gsd.c: Use _bfd_error_handler rather than fprintf to
stderr.
* vms-misc.c (_bfd_vms_length_hash_symbol): Correct sprintf
format.
as appropriate. Fill in structure initializations. Add variable
initializations. Add casts.
* dwarf1.c (parse_line_table): Change eachLine to unsigned long.
(dwarf1_unit_find_nearest_line): Change i to unsigned long.
field equals the new rel_count field.
(elf_link_input_bfd): When doing a relocateable link, use the new
rel_count field rather than the reloc_count field.
(elf_reloc_link_order): Likewise.
(elf_finish_pointer_linker_section): Likewise.
Based on patch from H.J. Lu <hjl@gnu.org>:
* elflink.h (elf_merge_symbol): Permit a non-weak definition in a
shared library to override a weak definition in a regular object.