if sym.n_numaux is not zero.
(_bfd_coff_link_input_bfd): Permit the symbol and the hash table
entry to disagree about the number of aux entries if the symbol
has zero.
section if it might be needed, not just if info->shared.
(mips_elf_adjust_dynamic_symbol): Make room for a null element at
the start of .rel.dyn if we are going to use it.
(mips_elf_finish_dynamic_sections): Only clear the first element
of .rel.dyn if the size is greater than zero.
Fix this case from c-torture:
extern int abort();
typedef int (*frob)();
frob f[] = {abort};
main()
{
exit(0);
}
undefined_symbol callback for a symbol, then don't issue any more
warnings about loader relocs.
(_bfd_ppc_xcoff_relocate_section): Don't do any further processing
after calling the undefined_symbol callback.
Change NO_FLAGS to BFD_NO_FLAGS to avoid conflict with an HPUX
include file.
* libbfd.c: Create dummy getpagesize() macro if HAVE_GETPAGESIZE
isn't defined.
* configure.in: Call BFD_NEEDED_DECLARATION on strstr and
realloc.
* acconfig.h (NEED_DECLARATION_STRSTR): New macro.
(NEED_DECLARATION_REALLOC): New macro.
* configure, config.in: Rebuild.
* sysdep.h (strstr): Declare if NEED_DECLARATION_STRSTR.
(realloc): Declare if NEED_DECLARATION_REALLOC.
* elf32-i386.c (enum reloc_type): Add FIRST_INVALID_RELOC,
LAST_INVALID_RELOC, R_386_16, R_386_PC16, R_386_8, R_386_PC8.
(elf_howto_table): Add entries for new relocs.
(elf_i386_reloc_type_lookup): Handle new relocs.
(elf_i386_info_to_howto): Just call abort.
(elf_i386_info_to_howto_rel): Check that the reloc type is valid.
(elf_i386_relocate_section): Likewise.
new segment to make them more comprehensible. If the relationship
between the LMA and the VMA changed, start a new segment. Don't
check dynsec when deciding whether to start a new segment for a
writeable section; -N will now handle this.
* som.c: Corresponding changes.
(som_bfd_derive_misc_symbol_info): Use ST_DATA for symbols
which don't have a SOM symbol type associated with them.
Reverses a 1994 change.
More PA EH tweakage (to get exception handling tables properly relocated
in shared libraries).
* elf.c (map_sections_to_segments): If D_PAGED is not set, set
phdr_in_section to false, and always use a single load segment.
(elf_sort_sections): Sort sections by LMA after VMA.
(assign_file_positions_for_segments): If D_PAGED is not set, don't
align to maxpagesize.
(assign_file_positions_except_relocs): Likewise.
* elfcode.h (elf_object_p): If a section is loaded but not page
aligned, clear D_PAGED.
(e_esel): Similarly.
* som.c (hppa_som_gen_reloc_type): If we encounter an e_esel,
then generate R_COMP2 (PUSH_SYM), R_DATA_EXPR fixup stream.
(som_write_fixups): Handle R_DATA_EXPR just like R_CODE_EXPR.
Making another stab at EH support on the PA.
Tue Jul 23 10:43:31 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
* elf32-d10v.c (elf_d10v_howto_table): Changed all relocs to "long"
and fixed mask on R_D10V_10_PCREL_L.
end-sanitize-d10v
(mips_elf64_slurp_armap): New static function.
(mips_elf64_write_armap): New static function.
(bfd_elf64_archive_*): Define.
* elfxx-target.h (bfd_elfNN_archive_p): Define if not defined.
Use instead of bfd_generic_archive_p.
(bfd_elfNN_write_archive_contents): Define if not defined. Use
instead of _bfd_write_archive_contents.
(bfd_elfNN_mkdarchive): Define if not defined. Use instead of
_bfd_generic_mkarchive.
(TARGET_BIG_SYM): If bfd_elfNN_archive_functions is defined, use
bfd_elfNN_archive in BFD_JUMP_TABLE_ARCHIVE rather than
_bfd_archive_coff.
(TARGET_LITTLE_SYM): Likewise.
* archive.c (bfd_slurp_armap): Check for and reject an archive map
name of /SYM64/.
* Makefile.in: Rebuild dependencies.
* ecoff.c (ecoff_compute_section_file_positions): Copy
rdata_in_text from backend info to tdata. Clear it if any data
section comes before .rdata.
(_bfd_ecoff_write_object_contents): Use rdata_in_text field in
tdata rather than backend info.
symbol for a magic name.
(xcoff_link_input_bfd): Don't change the reloc symbol for an
XMC_TD symbol.
(_bfd_ppc_xcoff_relocate_section): Don't get the TOC offset for an
XMC_TD symbol.
value for R_RELBYTE.
Something -Wall caught.
* reloc16.c (bfd_coff_reloc16_relax_section): Only "shrinks"
array if one was allocated.
Something I ran into today.
* elf32-mips.c (struct mips_elf_link_hash_table): Add new fields
use_rld_obj_head and rld_value.
(mips_elf_link_hash_table_create): Initialize new fields.
(mips_elf_add_symbol_hook): Mark __rld_obj_head symbol as
dynamic.
(mips_elf_create_dynamic_sections): Create .rld_map section. If
__rld_obj_head symbol not seen, create an __rld_map symbol.
(mips_elf_size_dynamic_sections): Make space in .rld_map section.
Create a DT_MIPS_RLD_MAP entry rather than a DT_DEBUG entry.
(mips_elf_finish_dynamic_symbol): Save value of __rld_map or
__rld_obj_head symbol.
(mips_elf_finish_dynamic_sections): Handle DT_MIPS_RLD_MAP.
(mips_refhi_list): New static variable.
(mips_refhi_addr, mips_refhi_addend): Remove.
(mips_refhi_reloc): Maintain a list of unmatched REFHI relocs.
(mips_reflo_reloc): Process mips_refhi_list.
(mips_relhi_list): New static variable.
(mips_relhi_addr, mips_relhi_addend): Remove.
(mips_relhi_reloc): Maintain a list of unmatched RELHI relocs.
(mips_rello_reloc): Process mips_relhi_list.
(mips_relocate_section): Permit an arbitrary number of REFHI or
RELHI relocs before the associated REFLO or RELLO reloc.
PR 10050.
* libbfd.h: Rebuild.
* i386lynx.c (KEEPIT): Define as udata.i.
(NAME(lynx,swap_std_reloc_out)): Don't use stoi.
(NAME(lynx,swap_ext_reloc_out)): Likewise.
* riscix.c (riscix_swap_std_reloc_out): Use udata.i rather than
flags. Don't use stoi.
with XCOFF_DEF_DYNAMIC set is really defined.
(xcoff_link_check_dynamic_ar_symbols): Likewise.
The above is for PR 9997.
(xcoff_link_add_symbols): Only create special sections if using an
XCOFF hash table.
* elf64-alpha.c (struct alpha_elf_link_hash_entry): Add flags
field.
(ALPHA_ELF_LINK_HASH_LU_ADDR): Define.
(ALPHA_ELF_LINK_HASH_LU_MEM): Define.
(ALPHA_ELF_LINK_HASH_LU_FUNC): Define.
(elf64_alpha_link_hash_newfunc): Initialize flags field.
(elf64_alpha_check_relocs): Record types of LITUSE entries that
are found for LITERAL relocs.
(elf64_alpha_adjust_dynamic_symbol): If a symbol has its address
taken, we cannot generate a .plt entry for the symbol.
(coff_swap_filehdr_out): Use FILHSZ, not sizeof.
(coff_swap_sym_out): Use SYMESZ, not sizeof.
(coff_swap_aux_out): Use AUXESZ, not sizeof.
(coff_swap_lineno_out): Use LINESZ, not sizeof.
(coff_swap_aouthdr_out): Use AOUTSZ, not sizeof.
(coff_swap_scnhdr_out): Use SCNHSZ, not sizeof.
* peicode.h: Corresponding changes.
* elf64-alpha.c (elf64_alpha_adjust_dynamic_symbol): Don't
increment the .rela.plt size until after we're done creating the
.plt entry.
(elf64_alpha_finish_dynamic_symbol): Change .plt entry to load the
.rela.plt offset directly rather than calculating it.
for R_MIPS_REL32 and R_MIPS_32 relocs if no dynamic sections were
created.
(mips_elf_check_relocs): Only create .rel.dyn for R_MIPS_REL32 and
R_MIPS_32 relocs if creating a shared library.
* coffcode.h (coff_write_object_contents): If there are long
section names, always set the f_symptr field, even if there are no
symbols.
* peicode.h (coff_swap_filehdr_in): Don't clear the f_symptr field
if there are no symbols.
_bfd_coff_read_string_table.
(coff_real_object_p): Check return value of
make_a_section_from_file.
(_bfd_coff_read_string_table): Check that there are some symbols
before trying to read the string table size.
to replace a symbol in a dynamic object with a symbol from another
dynamic object, do the replacement if the existing symbol is
global linkage code.
PR 9860.
Also fix a couple of comment typos and indentation problems.
* ecoff.c (_bfd_ecoff_new_section_hook): Remove the _PDATA
alignment hack--we can get the lnnoptr info another way without
suddenly increasing the alignment requirements. Set the flags for
the _PDATA section.
(ecoff_compute_section_file_positions): Do so.
SHT_MIPS_OPTIONS section.
* elf32-mips.c (_bfd_mips_elf_hi16_reloc): Rename from
mips_elf_hi16_reloc and make globally visible.
(_bfd_mips_elf_lo16_reloc): Rename from mips_elf_lo16_reloc and
make globally visible.
(_bfd_mips_elf_got16_reloc): Rename from mips_elf_got16_reloc and
make globally visible.
(_bfd_mips_elf_gprel16_reloc): Rename from mips_elf_gprel16_reloc
and make globally visible.
(gprel16_with_gp): Check howto->src_mask before using value in
insn.
(_bfd_mips_elf_gprel32_reloc): Rename from mips_elf_gprel32_reloc
and make globally visible.
(gprel32_with_gp): Check howto->src_mask before fetching value.
(bfd_mips_elf_swap_options_in): New function.
(bfd_mips_elf_swap_options_out): New function.
(_bfd_mips_elf_set_private_flags): Rename from
mips_elf_set_private_flags and make globally visible.
(_bfd_mips_elf_copy_private_bfd_data): Rename from
mips_elf_copy_private_bfd_data and make globally visible.
(_bfd_mips_elf_merge_private_bfd_data): Rename from
mips_elf_merge_private_bfd_data and make globally visible.
(_bfd_mips_elf_section_from_shdr): Accept .MIPS.options as a name
for a SHT_MIPS_OPTIONS section.
(mips_elf32_section_from_shdr): Handle SHT_MIPS_OPTIONS section.
(_bfd_mips_elf_fake_sections): Consider .MIPS.options to be the
name of a SHT_MIPS_OPTIONS section.
(_bfd_mips_elf_set_section_contents): New function.
(mips_elf32_section_processing): Set the GP value in a
SHT_MIPS_OPTIONS section.
(_bfd_mips_elf_find_nearest_line): Rename from
mips_elf_find_nearest_line and make globally visible.
(bfd_elf32_set_section_contents): Define.
* elf-bfd.h (_bfd_mips_elf_hi16_reloc): Declare.
(_bfd_mips_elf_lo16_reloc): Declare.
(_bfd_mips_elf_gprel16_reloc): Declare.
(_bfd_mips_elf_got16_reloc): Declare.
(_bfd_mips_elf_gprel32_reloc): Declare.
(_bfd_mips_elf_set_private_flags): Declare.
(_bfd_mips_elf_copy_private_bfd_data): Declare.
(_bfd_mips_elf_merge_private_bfd_data): Declare.
(_bfd_mips_elf_find_nearest_line): Declare.
(_bfd_mips_elf_set_section_contents): Declare.
writing files and for gas.
* elf32-mips.c (_bfd_mips_elf_object_p): New function, broken out
of mips_elf_object_p.
(mips_elf32_object_p): Rename from mips_elf_object_p; call
_bfd_mips_elf_object_p.
(_bfd_mips_elf_final_write_processing): Rename from
mips_elf_final_write_processing and make globally visible.
(_bfd_mips_elf_fake_sections): Rename from
mips_elf_fake_sections and make globally visible.
(_bfd_mips_elf_section_from_bfd_section): Rename from
mips_elf_section_from_bfd_section and make globally visible.
(_bfd_mips_elf_section_processing): New function, broken out of
mips_elf_section_processing.
(mips_elf32_section_processing): Rename from
mips_elf_section_processing; call
_bfd_mips_elf_section_processing.
(_bfd_mips_elf_symbol_processing): Rename from
mips_elf_symbol_processing and make globally visible.
(_bfd_mips_elf_read_ecoff_info): Rename from
mips_elf_read_ecoff_info and make globally visible.
(mips_elf32_ecoff_debug_swap): Rename from
mips_elf_ecoff_debug_swap.
* elf.c (_bfd_elf_symbol_from_bfd_symbol): Use asymbol rather than
struct symbol_cache_entry.
(_bfd_elf_validate_reloc): New function, moved in from
elfcode.h:validate_reloc.
* elfcode.h (validate_reloc): Remove; moved into elf.c and renamed
to _bfd_elf_validate_reloc. Change all callers.
* elf-bfd.h (bfd_section_from_shdr): Declare.
(_bfd_elf_symbol_from_bfd_symbol): Declare.
(_bfd_elf_validate_reloc): Declare.
(_bfd_mips_elf_object_p): Declare.
(_bfd_mips_elf_fake_sections): Declare.
(_bfd_mips_elf_section_from_bfd_section): Declare.
(_bfd_mips_elf_section_processing): Declare.
(_bfd_mips_elf_symbol_processing): Declare.
(_bfd_mips_elf_read_ecoff_info): Declare.
(_bfd_mips_elf_final_write_processing): Declare.
* elfxx-target.h (bfd_elfNN_get_reloc_upper_bound): Don't define
if already defined.
* elf64-mips.c: New file.
* Makefile.in: Rebuild dependencies.
(BFD64_BACKENDS): Add elf64-mips.o.
(BFD64_BACKENDS_CFILES): Add elf64-mips.c.
* config.bfd (mips*el-*-elf*) Add bfd_elf64_bigmips_vec and
bfd_elf64_littlemips_vec to targ_selvecs.
(mips*-*-elf*): Likewise.
* confingure.in: Add bfd_elf64_bigmips_vec and
bfd_elf64_littlemips_vec to vector switch.
* configure: Rebuild.
* elf32-mips.c (_bfd_mips_elf_section_from_shdr): New function,
broken out of mips_elf_section_from_shdr.
(mips_elf32_section_from_shdr): Rename from
mips_elf_section_from_shdr. Call new function.
(elf_backend_section_from_shdr): Update name of renamed function.
* elf-bfd.h (struct elf_size_info): Change second parameter of
write_out_phdrs to be const. Likewise for second parameter of
swap_symbol_out.
(struct bfd_elf_section_data): Add rel_hdr2 field.
(bfd_elf32_swap_symbol_in): Change second parameter to be const.
(bfd_elf32_swap_symbol_out): Likewise.
(bfd_elf32_swap_reloc_in): Likewise.
(bfd_elf32_swap_reloc_out): Likewise.
(bfd_elf32_swap_reloca_in): Likewise.
(bfd_elf32_swap_reloca_out): Likewise.
(bfd_elf32_swap_phdr_in): Likewise.
(bfd_elf32_swap_phdr_out): Likewise.
(bfd_elf32_swap_dyn_in): Likewise.
(bfd_elf32_swap_dyn_out): Likewise.
(bfd_elf32_slurp_symbol_table): Declare.
(bfd_elf32_write_shdrs_and_ehdr): Declare.
(bfd_elf32_write_out_phdrs): Declare.
(bfd_elf64_swap_symbol_in): Change second parameter to be const.
(bfd_elf64_swap_symbol_out): Likewise.
(bfd_elf64_swap_reloc_in): Likewise.
(bfd_elf64_swap_reloc_out): Likewise.
(bfd_elf64_swap_reloca_in): Likewise.
(bfd_elf64_swap_reloca_out): Likewise.
(bfd_elf64_swap_phdr_in): Likewise.
(bfd_elf64_swap_phdr_out): Likewise.
(bfd_elf64_swap_dyn_in): Likewise.
(bfd_elf64_swap_dyn_out): Likewise.
(bfd_elf64_slurp_symbol_table): Declare.
(bfd_elf64_write_shdrs_and_ehdr): Declare.
(bfd_elf64_write_out_phdrs): Declare.
(_bfd_mips_elf_section_from_shdr): Declare.
* elf.c (bfd_section_from_shdr): Remove assertion requiring
SHT_REL/SHT_RELA to match use_rela_p. If there is already a reloc
section for the section, add the new one to rel_hdr2. Increment
reloc_count rather than setting it.
* elfcode.h (elf_slurp_symbol_table): Define name as macro.
Remove static declaration.
(elf_write_shdrs_and_ehdr): Define name as macro.
(elf_write_out_phdrs): Likewise.
(elf_swap_ehdr_in, elf_swap_ehdr_out): Declare.
(elf_swap_shdr_in, elf_swap_shdr_out): Declare.
(elf_swap_symbol_in): Change second parameter to be const.
(elf_swap_symbol_out): Likewise.
(elf_swap_ehdr_in, elf_swap_ehdr_out): Likewise.
(elf_swap_shdr_in, elf_swap_shdr_out): Likewise.
(elf_swap_phdr_in, elf_swap_phdr_out): Likewise.
(elf_swap_reloc_in, elf_swap_reloc_out): Likewise.
(elf_swap_reloca_in, elf_swap_reloca_out): Likewise.
(elf_write_out_phdrs): Rename from write_out_phdrs. Change second
parameter to be const. Make non-static.
(elf_write_shdrs_and_ehdr): Rename from write_shdrs_and_ehdr.
Make non-static.
(elf_slurp_symbol_table): Make non-static.
(NAME(_bfd_elf,size_info)): Update names of renamed functions.
* elfxx-target.h (elf_info_to_howto): Define if not defined.
(elf_backend_size_info): Likewise.
(elfNN_bed): Use elf_backend_size_info.
* targets.c (bfd_elf64_bigmips_vec): Declare.
(bfd_elf64_littlemips_vec): Declare.
(bfd_target_vector): Add bfd_elf64_bigmips_vec and
bfd_elf64_littlemips_vec if BFD64 is defined.