BFD_ASSERT to handle __start_SECNAME symbols automatically defined
by the linker.
* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
(BFD32_BACKENDS): Add versados.o.
(CFILES): Add pe-i386.c, pei-i386.c, and versados.c.
start-sanitize-arc
(elf32-arc.o): New target. This should be removed when
elf32-arc.c can be added to CFILES.
end-sanitize-arc
* Makefile.in: versados.o is now conditionally built.
* coffcode.h (add_data_entry): New function.
(coff_write_object_contents): Clean up. Calculate
data entries.
* cofflink.c (_bfd_coff_generic_relocate_section):
.reloc and .edata sections are IMAGE_BASED too.
If there's a base_file then write out base information.
* configure.host (i386-*-pe): New.
* syms.c (coff_section_type): Only scan prefixes.
* targets.c (bfd_target_vector): Versados is now conditionally
built.
* config/m68k-coff.mt: Build versados.o
* hosts/i386pe.h: New file.
to bfd_tttrue, bfd_fffalse so as not to conflict with functions.
* coffswap.h (coff_swap_scnhdr_out): Remove version that was
hacked for MPW C.
* mpw-config.in: Set shell vars instead of pasting to makefile
for each configuration, edit coffswap.h to make MPW C not choke.
(i386-unknown-coff, sh-hitachi-hms): Recognize.
* mpw-make.in (BFD_LIBS): Add versados.c.o.
* versados.c (versados_scan): Properly cast results from bfd_alloc.
to the target vector.
* libbfd-in.h (_bfd_generic_bfd_copy_private_symbol_data): Define.
(_bfd_nolink_bfd_link_split_section): Likewise.
(bfd_generic_link_split_section): Declare.
* syms.c (bfd_copy_private_symbol_data): Define.
* linker.c (bf_link_split_section): Likewise.
* som.c (som_bfd_copy_private_symbol_data): New function
(som_bfd_link_split_section): Likewise.
* All other targets updated with default versions of new routines.
* Take out my braindamaged bfd_true/bfd_false changes from earlier
today. Replace with just:
* bfd-in.h: (TRUE_FALSE_ALREADY_DEFINED): Define this if
compiling with g++-2.6 or later.
* bfd-in2.h: Rebuilt.
compiling with g++-2.6 or later.
(bfd_set_section_vma): Use bfd_true and bfd_false rather than
true and false.
(bfd_set_section_alignment): Likewise.
(bfd_set_section_userdata): Likewise.
(bfd_set_cacheable): Likewise.
* bfd-in2.h: Rebuilt.
<schwab@issan.informatik.uni-dortmund.de>:
* elfcode.h (elf_link_add_object_symbols): Check for NULL when looping through
the symbol hashes.
(elf_bfd_final_link): When looking for _init and _fini don't use the symbol if
it is imported from another object.
* elf32-m68k.c: Relocation type changed from REL to RELA. Regular and dynamic
linking support functions added, similar to other elf targets.
pr ld/6997
* elf32-i386.c (elf_i386_relocate_section): Give error
message when linking to a shared reloc which isn't there.
Wed May 24 10:40:00 1995 Steve Chamberlain <sac@slash.cygnus.com>
Support for ARM-PE.
* Makefile.in, coffcode.h, config.bfd, configure.in, pe-arm.c,
pei-arm.c, reloc.c, targets.c, config/arm-pe.mt:
Support for ARM COFF/PE.
tekhex.c (first_phase): Understand type 0 symbols.
(tekhex_write_object_contents): Fix typo in final record.
Thu May 11 16:43:14 1995 Steve Chamberlain <sac@slash.cygnus.com>
pr ld/6840
* coff-i960.c (optcall_callback): don't try and optimize
undefined refs.
(coff_write_relocs): Search for broken relocs on the way
out and fix them up.
(coff_renumber_symbols): Calculate and return index of
first undefined symbol.
(coff_write_object_contents): Call coff_renumber_symbols
and coff_write_relocs with the new args.
* libcoff.h: (coff_renumber_symbols, coff_renumber_symbols):
Modified prototypes.
Thu May 11 16:43:14 1995 Steve Chamberlain <sac@slash.cygnus.com>
Tom Griest <griest@cs.yale.edu>
Initial support for PE format.
* Makefile.in, targets.c, configure.in, config.bfd:
Add support for i386-*-winnt and i386-*-pe.
* archive.c (do_slurp_coff_armap): Understand NTPE format
archives.
(_bfd_slurp_extended_name_table): Turn \ in a filename
into /.
* bfd-in.h (bfd_link_subsystem, _bfd_link_stack_heap): New.
* coff-i386.c (howto_table): Conditionalize PCRELOFFSET.
* coffcode.h (IMAGE_BASE): New.
(coff_compute_section_file_positions): Throw away .junk
sections for PE, align symbols.
(coff_write_object_contents): Throw away .junk sections
for PE. Remember info on .idata and .rsrc sections.
Fill in the PE header.
(coff_slurp_symbol_table): PE uses C_SECTION class.
* cofflink.c (_bfd_coff_final_link): Keep PE info up to date.
(_bfd_coff_generic_relocate_section): Cope with PE relocs.
* coffswap.h (coff_swap_{aout/file/scn/sym}hdr_{in/out}):
New code for PE headers.
* config.bfd: Change linux to default to elf. Using
i[345]86-*-linuxaout will build a library which defaults to a.out.
* config/i386-laout.mt: Rename from old config/i386-linux.mt.
* config/i386-linux.mt: Rename from old config/i386-lelf.mt.
Comment out EXTRALIBS.
* config/i386-lelf.mt: Remove.
symbols which the main linker code did not do anything with.
(_bfd_generic_link_output_symbols): Use udata.p if it is set,
rather than looking the symbol up in the hash table. Just pass
through constructor symbols for which udata.p is not set. If the
linker defined the symbol, clear the constructor flag.
Fix -r for b.out file format when constructor symbols are defined.
pointer to a boolean variable set to true if something fails.
Cast to PTR rather than void *.
(sym_is_global): Rewrite for clarity.
(map_program_segments): If the program header size is too small,
call _bfd_error_handler and return failure rather than aborting.
(NAME(bfd_elf,write_object_contents)): Pass boolean variable when
calling write_relocs.
(elf_symbol_from_bfd_symbol): Use BFD_ASSERT rather than abort.
(struct elf_info_failed): Define.
(NAME(bfd_elf,size_dynamic_sections)): Declare variables in inner
blocks. Pass elf_info_failed structure when calling
elf_export_symbol and elf_adjust_dynamic_symbol.
(elf_export_symbol): Treat data argument as elf_info_failed rather
than bfd_link_info. Set failed field on error.
(elf_adjust_dynamic_symbol): Likewise.
(struct elf_finfo_failed): Define.
(elf_bfd_final_link): Pass elf_finfo_failed structure when calling
elf_link_output_extsym. Use BFD_ASSERT rather than abort.
(elf_link_output_extsym): Treat data argument as elf_finfo_failed
rather than elf_final_link_info. Set failed field on error.
(elf_link_input_bfd): Use BFD_ASSERT rather than abort.
(elf_reloc_link_order): Likewise.
the reloc count does not fit, print an error and return 0.
* coffcode.h (coff_write_object_contents): Check return value of
coff_swap_scnhdr_out.
* ecoff.c (_bfd_ecoff_write_object_contents): Check return value
of bfd_coff_swap_scnhdr_out.
ANSI_PROTOTYPES.
(bfd_error_handler_type): New global type.
(_bfd_error_program_name): New static variable.
(_bfd_default_error_handler): New static function.
(_bfd_error_handler): New BFD private global variable.
(bfd_set_error_handler): New globally visible function.
(bfd_set_error_program_name): New globally visible function.
* libbfd-in.h (_bfd_error_handler): Declare.
* bfd-in2.h, libbfd.h: Rebuild.
and use it instead of bfd_get_symcount. Check r_index after
setting r_extern based on whether this is a base relative reloc.
(NAME(aout,swap_std_reloc_IN)): Add symcount parameter, and use it
instead of bfd_get_symcount.
(NAME(aout,slurp_reloc_table)): Pass bfd_get_symcount to reloc
swap routines.
* libaout.h (NAME(aout,swap_ext_reloc_in)): Add symcount parameter
to declaration.
(NAME(aout,swap_std_reloc_in)): Likewise.
* sunos.c (sunos_canonicalize_dynamic_reloc): Pass
info->dynsym_count to reloc swap routines.
* aout-ns32k.c (MY_swap_std_reloc_in): Add symcount parameter.
* hp300hpux.c (MY(swap_std_reloc_in)): Likewise.
(MY(slurp_reloc_table)): Pass bfd_get_symcount to reloc swap
routine.
* i386lynx.c (NAME(lynx,swap_ext_reloc_in)): Add symcount
parameter.
(NAME(lynx,swap_std_reloc_in)): Likewise.
(NAME(lynx,slurp_reloc_table)): Pass bfd_get_symcount to reloc
swap routines.
_bfd_coff_adjust_symndx.
(bfd_coff_adjust_symndx): Define.
(coff_adjust_symndx): Define as NULL if not already defined.
(bfd_coff_std_swap_table): Initialize new field to
coff_adjust_symndx.
* cofflink.c (coff_link_input_bfd): Call coff_adjust_symndx if it
is defined.
* coff-a29k.c (coff_a29k_adjust_symndx): New static function.
(coff_adjust_symndx): Define before including coffcode.h.
* libcoff.h: Rebuild.
machine types.
(bfd_hppa_arch): Link in both PA1.0 and PA1.1 architecture info
structures.
* libhppa.h (enum pa_arch): New enumeration to describe the
different variants of the PA architecture.
* som.c (som_object_setup): Use new enumeration to set machine
type.
(som_finish_writing): If the machine type is PA1.1, then use the
PA1.1 machine identifier in the output file.
* binary.c: Add support for reading binary files. Loads the raw
contents of the file into a data section and wraps some symbols
around it. The symbols `_binary_<filename>_start' and
`_binary_<filename>_end' indicate the start and end of the data,
while `_binary_<filename>_size' is an absolute symbol whose value
is the size of the data. <filename> is the name of the binary
input file, with all non-alphanumeric characters converted to
underscores.
* archures.c (bfd_arch_get_compatible): Assume users knows what
they're doing if one of the architectures is bfd_arch_unknown.
accept M_SPARC if bfd_arch_sparc is not in the list of supported
architectures, and don't accept a 680x0 machine type if
bfd_arch_m68k is not in the list of supported architectures.
* aout0.c (MACHTYPE_OK): Define.
(bfd_mach_arc_host, bfd_mach_arc_graphics, bfd_mach_arc_audio): Ditto.
* cpu-arc.c (arch_info_struct): Define entries for each cpu variant.
(bfd_arc_arch): Link each one in.
(arc_get_mach): New function.
* elf32-arc.c (arc_info_to_howto_rel): Renamed from arc_info_to_howto.
(elf_info_to_howto_rel): Update.
(arc_elf_object_p, arc_elf_final_write_processing): New functions.
(elf_backend_object_p): Define.
(elf_backend_final_write_processing): Define.
(USE_REL): Define.
symbol information structure. Don't bother to check for common
symbol size overflow.
(_bfd_generic_link_add_one_symbol): Likewise.
* aoutx.h (aout_link_check_ar_symbols): Likewise.
* linker.c (generic_link_check_archive_element): Adjust references
to common symbol information for new structure.
(_bfd_generic_link_add_one_symbol): Likewise.
* aoutx.h (aout_link_check_ar_symbols): Likewise.
(aout_link_add_symbols): Likewise.
* ecoff.c (ecoff_link_add_externals): Likewise.
* elfcode.h (elf_link_add_object_symbols): Likewise.
(elf_link_output_extsym): Likewise.
* sunos.c (sunos_add_one_symbol): Likewise.
* elfcode.h (elf_link_add_object_symbols): Set saw_needed if
DT_NEEDED seen in .dynamic section.
(elf_link_output_extsym): Warn if an undefined symbol is
only referenced from a dynamic object, and not making a shared
object, and saw_needed is false.
* elf.c (_bfd_elf_link_hash_table_init): Initialize saw_needed.
braindamaged HP OSF1 linker.
(setup_sections): Don't forget to free subspace_sections if we get
an error.
(som_slurp_string_table): Allocate strings on this bfd's obstack
rather than directly out of the heap.
(som_slurp_symbol_table): Likewise for the saved copy of the
canonical symbols.
(som_slurp_reloc_table): Likewise for the saved copy of the
canonical relocations. Free the native relocations when we're
done with them.
* elfcode.h (get_program_header_size): New parameters sorted_hdrs,
count, and maxpagesize. All callers updated.
If sorted_hdrs is non-NULL, use it to compute the number of segments.
Save result in case called again.
(assign_file_positions_except_relocs): Sort headers before calling
get_program_header_size.
their location in the object file.
(setup_sections): When computing the index for each subspace,
handle case where setup_sections reads the subspaces in a
different order that they appear in the object file.
(som_is_space): Also examine the output section for the containing
section.
(som_is_subspace, som_is_container): Likewise.
(som_begin_writing): Don't prepare or write fixups here. When
writing the symbol strings, use the unsorted symbol table.
(som_write_object_contents): Don't write the symbol table here.
(som_finish_writing): Prepare and write the fixups here. Likewise
for the symbol table.
(som_bfd_derive_misc_symbol_info): Undefined symbols always have
type SS_UNSAT regardless of BSF_EXPORT.
(som_set_reloc_info): Unpack and attach argument location
information for R_PCREL_CALL and R_ABS_CALL relocations.
* reloc.c (bfd_byte, reloc_howto_type): here.
* Changed all occurrences of ``const struct reloc_howto_struct''
to be ``reloc_howto_type'' instead.
* bfd-in2.h, libbfd.h, libcoff.h: Rebuilt.
Avoids problems with the native Irix 5 compiler.
(elf_mips_howto_table): Add entries for new relocs.
(mips_elf_section_from_shdr): Handle SHT_MIPS_MSYM,
SHT_MIPS_DWARF, and SHT_MIPS_EVENTS.
(mips_elf_fake_sections): Handle sections named .msym, .debug_*
and .MIPS.events.*.
* mipsbsd.c (mips_howto_table_ext): Change sizes of memory relocs
apply to from two bytes to four bytes.
* MY(reloc_howto_type_lookup): Handle BFD_RELOC_CTOR.
do_globals arguments, always read symbol extension information for
globals and locals. All callers changed.
(elf32_hppa_size_stubs): Rework to only read symbol extension
information once for each input bfd. Another 10% improvement in
linker performance.
value is the start of the section, checking output_offset when
using output_section. When creating a new symbol, set the value
to 0, since BFD symbol values are section relative.
data, reg and stack sections. They're never used. Delete
accessor macros.
(make_bfd_asection): Use bfd_make_section_anyway since debugging
cores from dynamic executables may have several sections with the
same logical name.
(hpux_core_core_file_p): Don't save handles to data, reg and
stack sections. Handle CORE_TEXT, CORE_MMF and CORE_SHM.
callers. Handle relocs against section symbols correctly. If not
shrinking, don't subtract out dstidx; the subtraction is already
in the object file.
PR 5883.
Change VMS version to use bfd_alloc rather than malloc, so that we
don't lose the memory forever.
(_bfd_construct_extended_name_table): Check the name of an archive
entry which is not being extended, and correct it if it is wrong.
This is necessary in case the archive was constructed by another
program which put an entry in the extended name table which we
don't plan to put in ourselves. From jjc@jclark.com (James
Clark).
(bfd_dont_truncate_arname): Check return value of normalize.
(ELF32_PARISC_SX_GET, ELF32_PARISC_SX_PUT): Define.
(symextn_entry): Don't define.
(symext_chain_size): Change type to bfd_size_type.
(symextn_contents): Change type to bfd_byte *.
(elf32_hppa_backend_begin_write_processing): Use
ELF32_PARISC_SX_SIZE instead of sizeof (symext_entryS).
(elf32_hppa_size_symext): Likewise. Also, change type of sizep to
bfd_size_type *.
(elf_hppa_tc_make_sections): Cast symextn_contents assignment to
bfd_byte *. Use ELF32_PARISC_SX_PUT instead of direct assignment.
(elf32_hppa_backend_symbol_table_processing): Use
ELF32_PARISC_SX_SIZE instead of sizeof (symext_entryS). Use
ELF32_PARISC_SX_GET insetad of direct assignment.
(elf32_hppa_read_symext_info): Change type of contents, and its
assignment cast, to bfd_byte *. Use ELF32_PARISC_SX_SIZE instead
of sizeof (symextn_entry). Use symext_entryS instead of
symextn_entry. Use ELF32_PARISC_SX_GET instead of direct
assignment.
and DT_FINI dynamic entries based on the existence of _init and
_fini symbols, not on the .init and .fini sections. This is
compatible with some SVR4 linkers.
(elf_bfd_final_link): Corresponding change.
error if an empty archive has no symbol table.
* ecoff.c (ecoff_link_add_archive_symbols): Likewise.
* elfcode.h (elf_link_add_archive_symbols): Likewise.
* elfcode.h (NAME(bfd_elf,size_dynamic_sections)): Don't finalize
the .dynsym, .dynstr or .hash sections until after the backend
size_dynamic_sections routine, so that it can add dynamic symbols
if it wants to.
* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Don't define the
symbol to be in the .plt section when generating a shared library
if it is a defined symbol.
* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
(elf32_sparc_size_dynamic_sections): When generating a shared
library, allocate space for a dynamic symbol for each output
section, storing the index in the dynindx field of the ELF section
data. Adjust the other dynindx fields to account for this.
(elf32_sparc_adjust_dynindx): New static function.
(elf32_sparc_relocate_section): When copying a reloc into a shared
library, use the original addend as appropriate. Convert an
R_SPARC_32 reloc into an R_SPARC_RELATIVE reloc. Use the dynamic
symbol index of the output section, not the normal symbol index.
(elf32_sparc_finish_dynamic_sections): Don't die if a section does
not exist when setting the value of the dynamic tags. Write out
a dynamic symbol for each output section.
(link_action): Change COMMON_ROW\indr from MDEF to CREF. Change
INDR_ROW\common from MDEF to CIND.
(_bfd_generic_link_add_one_symbol): In CREF case, handle an
existing symbol which is indirect rather than defined. Add new
CIND case.