* bfd-in.h (bfd_link_subsystem): Turn enum into #defines.
(bfd_link_pe_info_dval): New
(bfd_link_stack_heap): Renamed and massaged into bfd_link_pe_info.
* bfd-in2.h: rebuilt.
* bfd.c (NT_subsystem, NT_stack_heap): Deleted.
* coffcode.h (pe_value): New function.
(fill_pe_header_info): New function.
(coff_write_object_contents): Use new function.
* cofflink.c (coff_final_link_info): Remove pe randomness.
(dores_com): Update info in bfd_link_pe_info_dval.
(process_embedded_commands): Use the bfd_link_pe_info_dval.
(_bfd_coff_final_link): Remove PE stuff, initialize
coff_data->link_info.
* coffswap.h (coff_swap_[aout|filehdr]_out): Use indirect PE pointer.
(coff_swap_scnhdr_out): Use real imagebase.
* libcoff (coff_data_type.link_info): New field.
undefined weak reference, change the type to undefined.
* elflink.h (elf_link_add_archive_symbols): Don't record an
undefined weak reference as defined, in case it turns into a real
undefined reference later in the same archive.
* sunos.c (SPARC_PLT_PIC_WORD0): Define.
(SPARC_PLT_PIC_WORD1, SPARC_PLT_PIC_WORD2): Define.
(struct sunos_link_hash_entry): Add got_offset and plt_offset
fields.
(struct sunos_link_hash_table): Add dynamic_sections_created and
dynamic_sections_needed fields.
(sunos_link_hash_newfunc): Initialize new fields.
(sunos_link_hash_table_create): Initialize new fields.
(sunos_create_dynamic_sections): New static function, broken out
of sunos_add_dynamic_symbols.
(sunos_add_dynamic_symbols): Call sunos_create_dynamic_sections.
(sunos_add_one_symbol): Call sunos_create_dynamic_sections.
(bfd_sunos_size_dynamic_sections): Call sunos_scan_relocs before
checking whether we need to set up the dynamic link information.
Define __GLOBAL_OFFSET_TABLE if anything referred to it.
(sunos_scan_std_relocs): Call sunos_create_dynamic_sections. Use
plt_offset field; only put symbol in .plt if it is not defined by
a regular object.
(sunos_scan_ext_relocs): Likewise. Handle base relative relocs.
(sunos_scan_dynamic_symbol): Store dynobj in local variable.
(sunos_write_dynamic_symbol): Check plt_offset rather than
checking whether symbol is in .plt section. If symbol is defined
in a regular object file, use SPARC_PLT_PIC_WORD[012], and don't
add a JMP_TBL reloc.
(sunos_check_dynamic_reloc): Add contents and relocationp fields.
If plt_offset is set, redirect relocation to PLT. If this is a
base relative reloc, redirect relocation to GOT. Check
dynamic_sections_needed field rather than whether dynobj is set.
(sunos_finish_dynamic_link): Check dynamic_sections_needed field
rather than whether dynobj is set. Don't die if .need and .rules
sections were not created.
* aoutx.h (howto_table_ext): Mark PC10, PC22, and JMP_TBL entries
PC relative. Mark PC10 complain_overflow_dont. Mark PC22 and
JMP_TBL complain_overflow_signed.
(NAME(aout,final_link)): If info->shared is set, set DYNAMIC.
(aout_link_input_section_std): Call check_dynamic_reloc for all
relocs. Pass contents and &relocation. Don't warn about an
undefined symbol until check_dynamic_reloc has been called. Don't
warn about an undefined symbol for a base relative reloc.
(aout_link_input_section_ext): Likewise. For a base relative
reloc, always treat r_index as an index into the symbol table.
* libaout.h (struct aout_backend_data): Add contents and
relocation argument to check_dynamic_reloc entry point.
(struct aoutdata): Add local_got_offsets field.
definition, add it to the dynamic symbol table if any dynamic
object mentions it. If we do add it, make sure we add the
corresponding real symbol.
(elf_adjust_dynamic_symbol): Adjust a weak defined symbol which we
put in the dynamic symbol table, even if no regular object refers
to it.
* elf32-i386.c (elf_i386_check_relocs): When creating a shared
library, don't allocate space for a PC relative reloc against a
local symbol.
* elf32-m68k.c (elf_m68k_check_relocs): Likewise.
* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Change assertion
to accept symbol with weakdef set.
* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
* elf32-m68k.c (elf_m68k_relocate_section): When creating a shared
libary, don't copy over a PC relative reloc against a local
symbol.
* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
PR 7711.
* cofflink.c (_bfd_coff_generic_relocate_section): Remove most
of special case stuff for PE. Now handled by relocs.
* coff-i386.c (coff_i386_reloc): Special case of PE type 7s.
(howto_table): Type 7 is dir32-rva.
* rs6000-core.c (CORE_DATA_SIZE_FIELD): New macro to get a the size
of a core dump's data section. Provide alternate definition for aix4.
(SAVE_FIELD): Similarly for save state field (register info).
(STACK_END_ADDR): Provide definition suitable for aix4.
* config/{aix4.mh,aix4.mt}: New configuration files.
* hosts/aix4.h: Likewise.
Mike's aix4 changes, slightly modified.
_bfd_coff_get_external_symbols, not coff_link_get_symbols. Call
_bfd_coff_free_symbols, not coff_link_free_symbols. Call
_bfd_coff_read_string_table, not coff_read_string_table.
(coff_link_check_archive_element): Likewise.
(coff_link_input_bfd): Likewise.
(coff_link_get_symbols): Move to coffgen.c.
(coff_read_string_table): Likewise.
(coff_link_free_symbols): Likewise.
(_bfd_coff_internal_syment_name): New static function.
(coff_link_check_ar_symbols): Use _bfd_coff_internal_syment_name.
(coff_link_add_symbols): Likewise.
(coff_link_input_bfd): Likewise.
(_bfd_coff_generic_relocate_section): Likewise.
(_bfd_coff_read_internal_relocs): New function.
(coff_link_input_bfd): Use cached section contents if available.
Use _bfd_coff_read_internal_relocs.
* coffcode.h (coff_slurp_symbol_table): Don't call bfd_seek.
(coff_bfd_get_relocated_section_contents): Only define if not
already defined.
(coff_bfd_relax_section): Likewise.
* coffgen.c (build_string_table): Remove.
(_bfd_coff_get_external_symbols): New function, moved in from old
coff_link_get_symbols in cofflink.c.
(_bfd_coff_read_string_table): New function, moved in from old
coff_read_string_table in cofflink.c.
(_bfd_coff_free_symbols): New function, moved in frmo old
coff_link_free_symbols in cofflink.c.
(coff_get_normalized_symtab): Use _bfd_coff_get_external_symbols
rather than reading the symbols directly. To free them, call
_bfd_coff_free_symbols. Use _bfd_coff_read_string_table rather
than build_string_table.
* libcoff-in.h (obj_coff_keep_syms): Define.
(obj_coff_keep_strings): Define.
(coff_data_type): Add fields keep_syms and keep_strings.
(coff_section_tdata): Define new structure.
(coff_section_data): Define.
(_bfd_coff_get_external_symbols): Declare.
(_bfd_coff_read_string_table): Declare.
(_bfd_coff_free_symbols): Declare.
(_bfd_coff_read_internal_relocs): Declare.
* libcoff.h: Rebuild.
(KEEPITTYPE): Remove.
(NAME(aout,reloc_type_lookup)): Add cases to the
extended reloc type switch: SPARC_GOT10, SPARC_GOT13, SPARC_GOT22,
SPARC_PC10, SPARC_PC22, SPARC_WPLT30.
(NAME(aout,swap_std_reloc_out)): Don't bother to use stoi when
retrieving KEEPIT value.
(NAME(aout,swap_ext_reloc_out)): Likewise. Also, only add in
output section VMA for section symbols, and check BSF_SECTION_SYM
to control whether to set r_extern to 1.
* elflink.h (NAME(bfd_elf,size_dynamic_sections)): If -Bsymbolic,
output a DT_SYMBOLIC dynamic entry.
(elf_adjust_dynamic_symbol): If -Bsymbolic, don't require a PLT
entry for a locally defined symbol.
* elf32-i386.c (elf_i386_relocate_section): If -Bsymbolic, do warn
about undefined symbols, and fill in the GOT entry for a symbol
defined in a regular object file.
(elf_i386_finish_dynamic_symbol): If -Bsymbolic, output a RELATIVE
reloc rather than a GLOB_DAT reloc for a symbol defined in a
regular object file.
* elf32-m68k.c (elf_m68k_relocate_section): If -Bsymbolic, do warn
about undefined symbols, and fill in the GOT entry for a symbol
defined in a regular object file.
(elf_m68k_finish_dynamic_symbol): If -Bsymbolic, output a RELATIVE
reloc rather than a GLOB_DAT reloc for a symbol defined in a
regular object file.
* elf32-sparc.c (elf32_sparc_relocate_section): If -Bsymbolic, do
warn about undefined symbols, and fill in the GOT entry for a
symbol defined in a regular object file.
(elf32_sparc_finish_dynamic_symbol): If -Bsymbolic, output a
RELATIVE reloc rather than a GLOB_DAT reloc for a symbol defined
in a regular object file.
neither BSF_FUNCTION not BSF_NOT_AT_END just before undefined
symbols.
* coffcode.h (coff_slurp_symbol_table): Set BSF_FUNCTION as well
as BSF_NOT_AT_END.
PR 5491.