* 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.
(CFILES): Added elflink.c.
(Makefile): Depend upon config.status, not configure.in.
(config.status): New target; depend upon configure configure.host
and config.bfd.
Moved some mostly size-independent stuff from elfcode.h to elf.c, adding a data
structure to elfcode.h with some misc data and callback functions. Added a
pointer to that structure to the target back end data. More work can be done
here.
Renamed generic elf routines (not cpu-specific stuff) to start with bfd_elf or
_bfd_elf. Updated most call sites, sometimes defined some macros.
Moved some dynamic linking support code from m68k, sparc, i386 to common files,
using target back end flags to control behavior. More work can probably be
done here too.
Moved core- and linker-support code out of elfcode.h to elf.c, elfcore.h,
elflink.h, or elflink.c. Now elfcode.h contains only .o and executable
support, plus #includes of elfcore.h and elflink.h. Much of the contents of
these other header files can probably still be moved from the .h files to the
.c files, to get compiled only once.
Cleaned up some "gcc -Wall" warnings regarding unused or uninitialized
variables, in generic and cpu-specific code.
BFD_TRADITIONAL_FORMAT is set, limit the length of all file names
to ar_max_namelen.
(bfd_dont_truncate_arname): If BFD_TRADITIONAL_FORMAT is set, call
bfd_bsd_truncate_arname.
PR 6888.
saw_needed field.
* elfcode.h (elf_link_add_object_symbols): If elf_dt_needed_name
is an empty string, don't make a DT_NEEDED entry in the output
file. Record all DT_NEEDED entries found in input dynamic
objects.
(elf_link_output_extsym): Don't check saw_needed when issuing
warnings.
* elf.c (_bfd_elf_link_hash_table_init): Initialize needed, not
saw_needed.
(bfd_elf_get_needed_list): New function.
* bfd-in.h (struct bfd_elf_link_needed_list): Define.
(bfd_elf_get_needed_list): Define.
* bfd-in2.h: Rebuild.
PR 7083.
nonzero when we're generating relocations for an expression
using the difference of two symbols. All callers changed.
Handle difference of symbols for both R_HPPA and R_COMPLEX
cases.
(som_write_fixups): Handle R_COMP1, R_COMP2 and R_CODE_EXPR
fixups.
(bfd_errmsgs): Add string for bfd_error_no_armap.
* bfd-in2.h: Rebuild.
* ecoff.c (ecoff_link_add_archive_symbols): If an archive has no
armap, set bfd_error_no_armap rather than bfd_error_no_symbols.
* elfcode.h (elf_link_add_archive_symbols): Likewise.
* linker.c (_bfd_generic_link_add_archive_symbols): Likewise.
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.
* bfd.c (bfd_get_relocated_section_contents): Now a function, tries calling
routine from input bfd target vector for bfd_indirect_link_order. Put a
declaration into the header file.
* bfd-in2.h: Regenerated.
* elf32-mips.c (gprel16_with_gp): New function, split out from
mips_elf_gprel16_reloc.
(mips_elf_gprel16_reloc): Call it. If output bfd target vector isn't elf
flavoured, abort, since it's assumed to be elf in some of this code, including
the code that looks up the gp value.
(elf32_mips_get_relocated_section_contents): New function, modified from
bfd_generic_get_relocated_section_contents to deal with passing gp to
gprel16_with_gp.
(bfd_elf32_bfd_get_relocated_section_contents): New macro.
* elf32-target.h (bfd_elf32_bfd_get_relocated_section_contents): Don't define
if already defined.
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.
(mips_elf_find_nearest_line): New static function.
(bfd_elf32_find_nearest_line): Define.
* libelf.h (struct elf_obj_tdata): Add find_line_info field.
* ecoff.c (_bfd_ecoff_swap_tir_in): Move to ecofflink.c.
(_bfd_ecoff_swap_tir_out): Likewise.
(_bfd_ecoff_swap_rndx_in): Likewise.
(_bfd_ecoff_swap_rndx_out): Likewise.
(cmp_fdrtab_entry): Likewise.
(mk_fdrtab): Likewise.
(lookup): Likewise.
(_bfd_ecoff_find_nearest_line): Just call _bfd_ecoff_locate_line
to do most of the work. Allocate find_line_info if necessary.
* ecofflink.c: Include "aout/stab_gnu.h".
(_bfd_ecoff_swap_tir_in): Move in from ecoff.c.
(_bfd_ecoff_swap_tir_out): Likewise.
(_bfd_ecoff_swap_rndx_in): Likewise.
(_bfd_ecoff_swap_rndx_out): Likewise.
(cmp_fdrtab_entry): Likewise. Use PTR instead of void *.
(mk_fdrtab): Move in from ecoff.c. Add debug_info, debug_swap,
and line_info arguments, and use them instead of ecoff_data.
(fdrtab_lookup): Move in from lookup in ecoff.c. Remove abfd
argument, add line_info argument. Use it instead of ecoff_data.
(_bfd_ecoff_locate_line): New function, mostly from the old
_bfd_ecoff_find_nearest_line in ecoff.c.
* libecoff.h (ecoff_data_type): Remove find_buffer, fdrtab_len and
fdrtab fields, replacing them find_line_info field.
(_bfd_ecoff_swap_tir_in): Declare.
(_bfd_ecoff_swap_tir_out): Declare.
(_bfd_ecoff_swap_rndx_in): Declare.
(_bfd_ecoff_swap_rndx_out): Declare.
* libbfd-in.h (_bfd_ecoff_locate_line): Declare.
* libbfd.h: Rebuild.
* configure.in: Don't use ecoff.o for bfd_elf32_bigmips_vec or
bfd_elf32_littlemips_vec.
* Makefile.in: Rebuild dependencies.
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.*.
* elf32-i386.c (elf_i386_plt0_entry, elf_i386_plt_entry): Ditto.
* archures.c (archures_init_table): Now const.
(bfd_arch_init): Adjusted type of local var `ptable'.
* 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.