* 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.
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.
file.
* srec.c (srec_data_list_struct): Move field next from last place
to first. Change type of data to bfd_byte *.
(struct srec_symbol): Define.
(tdata_type): Remove done_symbol_read, count, strings, symbol_idx,
string_size, string_idx. Change type of symbols to struct
srec_symbol *. Add symtail and csymbols.
(low, high): Remove.
(size_symbols, fillup_symbols, size_srec, fillup): Remove.
(white, skipwhite, pass_over, object_p): Remove.
(srec_mkobject): Call srec_init. Adjust tdata initialization for
field changes.
(srec_get_byte, srec_bad_byte): New static functions.
(srec_new_symbol, srec_scan): New static functions.
(srec_object_p): Change type of b to bfd_byte. Explicitly set
wrong_format error. Call srec_mkobject and srec_scan instead of
object_p.
(symbolsrec_object_p): Likewise. Also, change b to be only two
bytes.
(srec_read_section): New static function.
(srec_get_section_contents): Call srec_read_section rather than
pass_over. Handle zero length section correctly.
(set_set_arch_mach): Change from function to macro.
(srec_set_section_contents): Change data to bfd_byte *.
(srec_write_record): Change data, end and src to bfd_byte *.
(srec_write_header): Change buffer and dst to bfd_byte *.
(srec_write_section): Change location to bfd_byte *.
(srec_write_terminator): Change buffer to bfd_byte *.
(srec_get_symtab_upper_bound): Don't call
srec_get_section_contents.
(srec_get_symtab): Rewrite.
* i386netbsd.c, ns32knetbsd.c, sparcnetbsd.c: removed RCS Id's.
changed how PAGE_SIZE and SEGMENT_SIZE are defined so they are
consistant with each other.
* netbsd.h (N_HEADER_IN_TEXT, TEXT_START_ADDR): NetBSD fits its
header into the start of its text segment.
_construct_extended_name_table.
(bfd_target): Add _bfd_construct_extended_name_table.
* archive.c (_bfd_archive_bsd_construct_extended_name_table): New
function.
(_bfd_archive_coff_construct_extended_name_table): New function.
(_bfd_construct_extended_name_table): Renamed by adding a leading
underscore, and made externally visible. Added trailing_slash
argument, and used it instead of elf_style. Changed type of
tablen to bfd_size_type *.
(_bfd_write_archive_contents): Use BFD_SEND to call
construct_extended_name_table. Use the returned name.
* libbfd-in.h (_bfd_construct_extended_name_table): Declare.
(_bfd_noarchive_construct_extended_name_table): Define.
(_bfd_archive_bsd_construct_extended_name_table): Declare.
(_bfd_archive_coff_construct_extended_name_table): Declare.
* bfd-in2.h: Rebuild.
* libbfd.h: Rebuild.
* som.c (som_construct_extended_name_table): New static function.
* aout-target.h (MY_construct_extended_name_table): Define.
* coff-rs6000.c (rs6000coff_construct_extended_name_table):
Define.
* ieee.c (ieee_construct_extended_name_table): Define.
* libecoff.h (_bfd_ecoff_construct_extended_name_table): Define.
* oasys.c (oasys_construct_extended_name_table): Define.
objects were seen, even when linking PIC code.
* libelf.h (ELF_LINK_HASH_NEEDS_PLT): Define.
(struct elf_link_hash_table): Add field dynamic_sections_created.
* elfcode.h (elf_link_record_dynamic_symbol): Create dynstr if it
doesn't already exist.
(elf_link_add_object_symbols): Create dynamic sections based on
dynamic_sections_created field, not dynobj field. Don't bother to
set dynobj.
(elf_link_create_dynamic_sections): If dynamic sections were
already created, don't do anything. If dynobj is already set, use
it; otherwise, set it to the bfd argument. Don't initialize
dynsymcount. Only create dynstr if it does not exist. Set
dynamic_sections_created to true.
(NAME(bfd_elf,size_dynamic_sections)): Skip most of this function
if no dynamic objects were seen.
(elf_adjust_dynamic_symbol): If a symbol has the
ELF_LINK_HASH_NEEDS_PLT flag set, let the backend adjust it.
(elf_bfd_final_link): Change most decisions based on dynobj to
check dynamic_sections_created instead.
(elf_link_output_extsym): Only handle dynamic symbols if a dynamic
object was seen.
* elf.c (_bfd_elf_link_hash_table_init): Initialize new field
dynamic_sections_created. Set dynsymcount to 1, not 0.
* elf32-i386.c (elf_i386_create_dynamic_sections): Call
elf_i386_create_got_section rather than creating the .got and
.got.plt sections.
(elf_i386_create_got_section): New static function.
(elf_i386_check_relocs): Just call elf_i386_create_got_section if
a GOT table is needed, not bfd_elf32_link_create_dynamic_sections.
Only create the .rel.got section, and only make space for a reloc,
for a global symbol or when generating a shared object. For a
R_386_PLT32 reloc, just set the ELF_LINK_HASH_NEEDS_PLT flag.
(elf_i386_adjust_dynamic_symbol): Rework initial assertion to
permit ELF_LINK_HASH_NEEDS_PLT non dynamic symbols. Create a
procedure linkage table entry for such symbols. But, if no
dynamic objects were seen, never create a PLT entry.
(elf_i386_size_dynamic_sections): If no dynamic objects were seen,
skip most of this function, and force the size of the .rel.got
section to zero.
(elf_i386_relocate_section): For a R_386_GOT32 reloc against a global
symbol when no dynamic object was seen, initialize the contents of
the .got section. For a R_386_GOT32 against a local symbol, only
create a R_386_RELATIVE reloc when generating a shared object.
Treat a R_386_PLT32 reloc against a symbol for which we did not
create a PLT entry as a R_386_PC32 reloc.
(elf_i386_finish_dynamic_sections): Only fiddle with the dynamic
entries and the PLT if we saw a dynamic object.
* elf32-sparc.c (elf_sparc_howto_table): Fix R_SPARC_PC22 by
setting rightshift to 10. Fix R_SPARC_WPLT20 by setting
rightshift to 2, size to 2, bitsize to 30, and dst_mask to
0x3fffffff.
(elf32_sparc_create_dynamic_sections): Don't set the size of the
.plt section. Call elf32_sparc_create_got_section rather than
creating the .got section.
(elf32_sparc_check_relocs): Call elf32_sparc_create_got_section if
a GOT table is needed, not bfd_elf32_link_create_dynamic_sections.
Only create the .rela.got section, and only make space for a
reloc, for a global symbol or when generating a shared object.
Set the alignment of the .rela.got section to 2. For a
R_SPARC_WPLT30 reloc, just set the ELF_LINK_HASH_NEEDS_PLT flag.
(elf32_sparc_adjust_dynamic_symbol): Rework initial assertion to
permit ELF_LINK_HASH_NEDS_PLT non dynamic symbols. Create a
procedure linkage table for such symbols. But, if no dynamic
objects were seen, never create a PLT entry. Initialize the size
of the .plt section.
(elf32_sparc_size_dynamic_sections): If no dynamic objects were
seen, skip most of this function, and force the size of the
.rela.got section to zero. Strip empty reloc sections, and strip
an empty .plt section.
(elf32_sparc_relocate_section): For a GOT reloc against a global
symbol when no dynamic object was seen, initialize the contents of
the .got section. For a GOT reloc against a local symbol, only
create a R_SPARC_RELATIVE reloc when generating a shared object.
Treat a R_SPARC_WPLT30 reloc against a symbol for which we did not
create a PLT entry as a R_SPARC_WDISP30 reloc.
(elf32_sparc_finish_dynamic_sections): Only fiddle with the
dynamic entries and the PLT if we saw a dynamic object.
in a section not owned by any BFD.
(elf_section_from_bfd_section): Separate out loop which calls
backend routine. Check bfd_section and call the backend routine
even for a section not owned by any BFD.
* elf32-mips.c (mips_elf_section_from_bfd_section): Handle
.acommon section.
storage class slightly more verbose. It's not clear how many
characters I can justify using up, but before this change they
both were abbreviated "sc" which is (IMHO) clearly unacceptable.
rather than messing with Elf_Sym_Extra. Store the symbol index in
the udata.i field.
(swap_out_syms): Use outbound_syms as a pointer rather than as an
array. Don't worry about elf_sym_num.
(elf_symbol_from_bfd_symbol): Use udata.i rather than just udata.
* libelf.h (struct elf_sym_extra): Don't define.
(Elf_Sym_Extra): Don't define.
(struct elf_obj_tdata): Remove sym_extra field.
(elf_sym_extra): Don't define.
* elf32-hppa.c (elf32_hppa_backend_final_write_processing): Use
udata.i rather than elf_sym_extra array.
(elf32_hppa_backend_symbol_table_processing): Don't set
symextn_hdr->size; just use sh_size.
* elfcode.h (elf_stringtab_init): New static function.
(bfd_new_strtab, bfd_add_to_strtab, bfd_add_2_to_strtab): Remove.
Change all callers to use elf_stringtab_init or
_bfd_stringtab_add, and get stringtab lengths using
_bfd_stringtab_size.
(elf_fake_sections): Change ignored argument to pointer to
boolean, and set the boolean to true if an error occurs. If an
error has already occurred, don't do anything.
(assign_section_numbers): Just set sh_size, not contents.
(elf_compute_section_file_positions): Pass the address of a
boolean to elf_fake_sections. Pass the address of a
bfd_strtab_hash to swap_out_syms. Write out the .strtab section.
(prep_headers): Change shstrtab to bfd_strtab_hash.
(swap_out_syms): Take a pointer to a bfd_strtab_hash as an
argument. Set it to the symbol names.
(NAME(bfd_elf,write_object_contents)): Write out the section
header names using _bfd_stringtab_emit.
(elf_debug_section): Remove first argument; get the section name
via the bfd_section pointer. Change caller.
(elf_bfd_final_link): Write out the symbol names using
_bfd_stringtab_emit. Likewise for the .dynstr section contents.
Free the symbol names at the end of the function.
(elf_link_input_bfd): Remove the last argument, output_names,
from relocate_section. Save the old symbol contents before
calling elf_link_output_sym, and restore them afterward.
* libelf.h (struct elf_link_hash_table): Change dynstr field to
struct bfd_strtab_hash.
(struct elf_backend_data): Remove last argument, output_names,
from elf_backend_relocate_section field.
(struct strtab): Don't define.
(struct elf_obj_tdata): Change strtab_ptr field to struct
bfd_strtab_hash.
* elf32-hppa.c (elf32_hppa_relocate_section): Remove last
argument, output_names.
* elf32-i386.c (elf_i386_relocate_section): Likewise.
* elf32-mips.c (mips_elf_relocate_section): Likewise.
* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
Clear contents field.
(bfd_section_from_shdr): In SHT_STRTAB case, check bfd_section,
not rawdata. Don't set rawdata if e_shstrndx. Use bfd_section
rather than rawdata in commented out code. In SHT_REL[A] case,
don't bother to check elf_section_data of section returned by
section_from_elf_index.
(elf_fake_sections): Set bfd_section, not rawdata. Don't set
size.
(elf_map_symbols): Don't set elf_num_section_syms. Don't create
section symbols that already exist.
(assign_file_position_for_section): Use bfd_section, not rawdata.
(section_from_elf_index): Just check bfd_section field.
(elf_section_from_bfd_section): Likewise.
(elf_debug_section): Don't print rawdata, contents, or size.
(elf_link_add_object_symbols): Don't error out if
section_from_elf_index returns NULL.
(elf_bfd_final_link): Check return value from
section_from_elf_index against NULL, not bfd_is_abs_section.
(elf_link_input_bfd): Don't check section_from_elf_index return
value.
* libelf.h (struct elf_obj_tdata): Remove num_section_syms field.
(elf_num_section_syms): Don't define.
* elf.c (elf_get_str_section): Store section contents in contents
field rather than rawdata field.
(elf_string_from_elf_section): Likewise.
(_bfd_elf_make_section_from_shdr): Store BFD section pointer in
bfd_section field rather than rawdata field.
* elf32-hppa.c (elf32_hppa_read_symext_info): Use bfd_section
rather than rawdata.
(elf32_hppa_size_stubs): Likewise.
* elf32-mips.c (mips_elf_final_write_processing): Use bfd_section
rathern than rawdata.
(mips_elf_section_from_shdr): Likewise.
(mips_elf_section_processing): Likewise.
(mips_elf_section_from_bfd_section): Remove rawdata check.
* elf32-i386.c (elf_i386_check_relocs): Make sure that a symbol
with a global offset table entry or a procedure linkage table
entry is added to the dynamic symbol table.
* elf32-sparc.c (elf32_sparc_check_relocs): Likewise.
* elf32-i386.c (elf_i386_adjust_dynamic_symbol): If a symbol has
already gotten a procedure linkage table entry, change the
definition to the PLT entry.
* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
type.
(coff_read_string_table): Cast argument to bfd_h_get_32 to correct type.
* elfcode.h (elf_link_output_extsym): Cast argument to bfd_elf_hash to correct
type.
use COFF_DEFAULT_SECTION_ALIGNMENT_POWER instead. Force the .stab
and .stabstr sections to be aligned to no more than 2. Remove
COFF_SPARC special cases.
* coff-a29k.c: Define COFF_DEFAULT_SECTION_ALIGNMENT_POWER.
* coff-apollo.c, coff-go32.c, coff-h8300.c: Likewise.
* coff-h8500.c, coff-i386.c, coff-i960.c, coff-m68k.c: Likewise.
* coff-m88k.c, coff-rs6000.c, coff-sh.c, coff-sparc.c: Likewise.
* coff-we32k.c, coff-z8k.c: Likewise.
PR 5706.
always write it out even if it would normally be stripped.
(aout_link_input_section_std): If we find a reloc against a
stripped global symbol, force it to be written out rather than
merely calling unattached_reloc.
(aout_link_input_section_ext): Likewise.
(aout_link_reloc_link_order): Likewise.
(obj_som_sorted_syms): Accessor macro.
* som.c (som_object_setup): Initialize sorted_syms to NULL.
(som_prep_for_fixups): Sort a copy of the BFD's symbol table;
store the sorted symbol table in sorted_syms.
(som_write_fixups): Initalize tmp_reloc to NULL to make GCC happy.
(som_begin_writing): Similarly for exec_header. Pass the sorted
symbol table to som_write_symbol_strings.
(som_build_and_write_symbol_table): Use the sorted symbols rather
than the canonical symbol table.
* som.c (som_write_symbol_strings): Use "stringtab_offset"
rather than destroying the "name" field in the BFD symbol.
(som_build_and_write_symbol_table): Likewise.
'T' and 'U' to grab all the unwind information.
(som_set_reloc_info): Make 'U' unwind bits persist across
multiple SOM relocations. Set the addend field of an R_ENTRY
relocation to the value in 'T'; set the addend field on an
R_EXIT relocation to the value in 'U'.
* som.c (som_write_fixups): For R_ENTRY fixups, get 32bits of
unwind information from the addend field of the R_ENTRY, get the
other 32bits from the addend field of the R_EXIT.
(bfd_som_attach_unwind_info): Delete function and all references.
switched in executables created by the OSF1 linker.
(som_write_fixups): Handle R_EXIT just like the R_{F,L,R}SEL
fixups. Support R_ALT_ENTRY (handle just like R_EXIT).
* cofflink.c (coff_link_input_bfd): syment_base is unsigned
so can't compare -ve numbers with it.
Mon Sep 12 20:31:17 1994 Steve Chamberlain (sac@jonny.cygnus.com)
* configure.in (shcoff_vec): Use cofflink.o now.
* coff-sh.c: Rewritten to use new fast coff backend.
(ns32k-*-netbsd): use ns32knbsd.
* hosts/{nbsd,i386nbsd,ns32knbsd,sparcnbsd}.h: New files, NetBSD
host support.
* sparcnetbsd.c: New file, adds support for NetBSD/sparc.
* config/sparc-nbsd.mt: Likewise.
* netbsd.h: New file, definitions common to all netbsd ports.
* i386netbsd.c: Use it.
* ns32knetbsd.c: Use it.
* Makefile.in, configure.in, targets.c, config/i386-nbsd.mt,
config/ns32k-nbsd.mt: canonicalize netbsd targets to conform to
file/variable naming conventions.
* i386netbsd.c: New file, renamed from netbsd386.c.
* ns32knetbsd.c: New file, renamed from netbsd532.c.
R_NO_RELOCATION fixups.
(bfd_section_from_som_symbol): Return the absolute section if the
symbol isn't contained in any section in the output file.
(som_slurp_symbol_table): ST_PRI_PROG and ST_SEC_PROG symbols are
not function symbols (they are magic code labels which *can* be the
targets of cross space branches). $START$ is not a section symbol.
change it.
(_bfd_coff_generic_relocate_section): If r_symndx is -1, it is an
absolute reloc. Don't dump core using r_symndx as an array index.
* cf-m68klynx.c (coff_bfd_link_add_symbols): Define.
(lynx_link_add_symbols): New static function (copy of function in
coff-i386.c).
(coff_m68k_lynxrtype_to_howto): sym argument may be NULL.
* coff-i386.c (coff_i386_rtype_to_howto): Likewise.
* coff-a29k.c (coff_a29k_relocate_section): Handle an r_symndx
value of -1, meaning an absolute reloc.
error of some sort (for example, undefined symbols), then do not
apply any relocs, just notify the user of the errors.
(elf32_hppa_backend_begin_write_processing): Do not build a symbol
extension section for an executable (it's useless).
(elf32_hppa_link_output_symbol_hook): Do nothing if there was a
link error of some sort (for example, undefined symbols).
(elf32_hppa_read_symext_info): Kludge. Turn off SEC_HAS_CONTENTS
for all the input symbol extension sections to keep the generic
BFD code happy. Temporarily turn it on to read the contents of
the symbol extension section.
* cf-i386lynx.c: Remove #if 0 code.
(i386_lynxos_coff_object_p): Remove unused function.
(coff_bfd_link_add_symbols): Define.
(lynx_link_add_symbols): New static function.
* coffcode.h (coff_bfd_link_hash_table_create): If
coff_relocate_section is defined, only define this if not already
defined.
(coff_bfd_link_add_symbols, coff_bfd_final_link): Likewise.
* linker.c (_bfd_generic_final_link): Handle
bfd_indirect_link_order explicitly, rather than via
_bfd_default_link_order.
(set_symbol_from_hash): New static function, broken out of
_bfd_generic_link_write_global_symbol.
(_bfd_generic_link_write_global_symbol): Symbol setting code moved
to set_symbol_from_hash; call it.
(default_indirect_link_order): Add generic_linker argument.
Change all callers. If false, set the generic symbols based on
the hash table entries.
elf_backend_final_write_processing hook to boolean.
(struct elf_obj_tdata): Add linker field.
* elfcode.h (NAME(bfd_elf,write_object_contents)): Pass value of
tdata linker field to final_write_processing, rather than NULL.
(elf_bfd_final_link): Don't call final_write_processing hook. Set
tdata linker field to true.
* elf32-mips.c (mips_elf_final_write_processing): Change type of
second argument to boolean.
* elf32-hppa.c (elf32_hppa_backend_final_write_processing):
Likewise.
* coff-i960.c (RTYPE2HOWTO): Likewise.
* coff-m88k.c (RTYPE2HOWTO): Likewise.
* coff-we32k.c (RTYPE2HOWTO): Likewise.
Make i386 COFF use new COFF backend linker.
* coff-i386.c (RTYPE2HOWTO): Fully parenthesize arguments.
(coff_relocate_section): Define.
(coff_i386_rtype_to_howto): New function.
* configure.in (i386coff_vec): Use cofflink.o.
(i386lynx_coff_vec): Likewise.
* coffcode.h (bfd_coff_backend_data): Add new field
_bfd_coff_rtype_to_howto.
(bfd_coff_rtype_to_howto): Define.
(coff_rtype_to_howto): Define to use RTYPE2HOWTO, if not already
defined.
(bfd_coff_std_swap_table): Initialize new field.
* cofflink.c (_bfd_coff_final_link): Allocate section_count + 1
section_info structures, since the target_index is 1 based.
(coff_link_input_bfd): Set *secpp to bfd_com_section_ptr for a
common symbol. Adjust rel_hash by the output reloc count.
(_bfd_coff_generic_relocate_section): New function.
* libcoff-in.h (_bfd_coff_generic_relocate_section): Declare.
* libcoff.h: Rebuild.
* coff-alpha.c (alpha_ecoff_backend_data): Initialize new field.
* coff-mips.c (mips_ecoff_backend_data): Likewise.
symbols and undefined symbols which no type in the same manner
if the associated BFD symbol has BSF_FUNCTION set. For a defined
symbol which no type, select a SOM type based on the flags of the
section containing the symbol.
(som_slurp_symbol_type): Set BSF_FUNCTION for undefined ST_STUB
or ST_CODE symbols (importing a non-function code symbol is
meaningless in SOM).
(som_set_reloc_info): Don't set "offset" to the section's vma; it
should always start at zero.
* cofflink.c: New file.
* libcoff-in.h: Include bfdlink.h.
(obj_coff_external_syms, obj_coff_strings): Define accessor macro.
(obj_coff_sym_hashes): Define accessor macro.
(struct coff_tdata): Add fields external_syms, strings, and
sym_hashes.
(struct coff_link_hash_entry): Define.
(struct coff_link_hash_table): Define.
(coff_link_hash_lookup, coff_link_hash_traverse): Define.
(coff_hash_table): Define.
(_bfd_coff_link_hash_table_create): Declare.
(_bfd_coff_link_add_symbols, _bfd_coff_final_link): Declare.
* coffcode.h (bfd_coff_backend_data): Add fields _bfd_relsz,
_bfd_coff_swap_reloc_in, _bfd_coff_sym_is_global,
_bfd_coff_compute_section_file_positions,
_bfd_coff_relocate_section.
(bfd_coff_relsz, bfd_coff_swap_reloc_in): Define.
(bfd_coff_sym_is_global): Define.
(bfd_coff_compute_section_file_positions): Define.
(bfd_coff_relocate_section): Define.
(coff_mkobject_hook): Initialize obj_raw_syment_count and
obj_conv_table_size.
(coff_compute_section_file_positions): Set target_index of all
sections. Set output_has_begun field.
(coff_write_object_contents): Don't set target_index; now done by
coff_compute_section_file_positions. Remove obsolete handling of
scn_base and data_base. Don't bother to check that target_index
is positive, since it always is. Remove use of pad, which is
always zero. Check obj_raw_syment_count, not bfd_get_symcount,
for the number of symbols, but only write them out if
bfd_get_symcount is non-zero.
(coff_slurp_symbol_table): Use obj_raw_syment_count, not
bfd_get_symcount for the number of symbols. Don't set
obj_conv_table_size.
(coff_sym_is_global): New static function or macro.
(coff_slurp_reloc_table): Call coff_swap_reloc_in, not
bfd_swap_reloc_in.
(coff_bfd_link_hash_table_create): If coff_relocate_section is
defined, define as _bfd_coff_link_hash_table_create.
(coff_bfd_link_add_symbols): Similar change.
(coff_bfd_final_link): Similar change.
(coff_relocate_section): Define as NULL if not defined.
(bfd_coff_std_swap_table): Initialize new fields.
* coffgen.c (coff_real_object_p): Don't set obj_raw_syment_count
and obj_conv_table_size here.
(coff_count_linenumbers): Reindent. If bfd_get_symcount is zero,
add up the line numbers from the sections.
(coff_write_symbols): Don't set bfd_get_symcount.
(coff_pointerize_aux): Don't pointerize a nonpositive x_endndx
field.
(coff_get_normalized_symtab): Use obj_raw_syment_count, not
bfd_get_symcount.
(coff_print_symbol): If auxp->fix_end, print x_endndx value.
* coffswap.h (coff_swap_reloc_in): Rename from bfd_swap_reloc_in.
Reindent. Change argument type to PTR.
* coff-a29k.c (coff_a29k_relocate_section): New static function.
(coff_relocate_section): Define.
* configure.in (a29kcoff_big_vec): Compile cofflink.o.
* coff-alpha.c (alpha_ecoff_backend_data): Initialize new fields.
* coff-mips.c (mips_ecoff_backend_data): Likewise.
* libcoff.h: Rebuilt.
* Makefile.in: Rebuilt dependencies.
(BFD32_BACKENDS): Add cofflink.o.
(CFILES): Add cofflink.c.
commands for simultaneous definition of enumerator and enumerator name table.
(bfd_get_reloc_code_name): New function, for retrieving a symbolic name
associated with an enumerator.
* libbfd.h, bfd-in2.h: Regenerated.
argument, and use it to set DT_SONAME dynamic entry.
* bfd-in.h (bfd_elf32_size_dynamic_sections): Update prototype.
(bfd_elf64_size_dynamic_sections): Update prototype.
* bfd-in2.h: Rebuilt.
and use %ld to print it.
* osf-core.c (osf_core_core_file_p): Remove unused variable
dseccnt.
* ecoffswap.h (ecoff_swap_ext_out): If ECOFF_64, clear remaining
bytes in bits2.
(and output_offset) if there is one.
* aoutx.h (aout_link_check_archive_element): Discard the symbols
if the archive element was not needed.
* aoutx.h (aout_get_external_symbols): Ensure that a zero string
index yields an empty string.
(aout_link_write_symbols): If info->keep_memory is false, use name
from original hash table entry, not from entry in *sym_hash.
* aoutx.h (struct aout_final_link_info): Add fields contents,
relocs, symbol_map and output_syms.
(NAME(aout,final_link)): Work out the largest section size, reloc
size, and number of symbols. Use them to preallocate buffers that
are large enough for all cases.
(aout_link_input_bfd): Use preallocated symbol_map.
(aout_link_write_symbols): Remove symbol_map argument; use
preallocated symbol_map instead. Change all callers. Use
preallocated output_syms.
(aout_link_input_section): Remove symbol_map argument. Change all
callers. Use preallocated contents and relocs.
(aout_link_input_section_std): Remove symbol_map argument; use
preallocated symbol_map instead. Change all callers.
(aout_link_input_section_ext): Likewise.
* aoutx.h: String hash functions moved to hash.c. Retain
simplified versions of add_to_stringtab and emit_stringtab.
Change all callers to use new function and structure names.
* libbfd-in.h (_bfd_stringtab_init, _bfd_stringtab_free): Declare.
(_bfd_stringtab_size, _bfd_stringtab_add): Declare.
(_bfd_stringtab_emit): Declare.
* libbfd.h: Rebuilt.
* i386linux.c (linux_add_one_symbol): Create a fixup for any
defined absolute symbol, not just GOT or PLT symbols.
(linux_tally_symbols): Correct handling of references to defined
symbols.
* aoutx.h (adjust_o_magic): If the .bss VMA was set outside of
BFD, pad the .data section up to the VMA of the .bss section.
(aout_link_add_symbols): If a set symbol does not get modified,
treat it as a local symbol.
(aout_link_write_symbols): Set the value of set symbols
correctly. Don't discard set symbols even if discarding local
symbols.
(aout_link_write_other_symbol): Don't abort on bfd_link_hash_new,
since it can now happen for set symbols.
".rel", not ".rela." and ".rel."; make this work by checking
use_rela_p.
* elf32-i386.c (elf_i386_check_relocs): Just check for ".rel", not
".rel."
(elf_i386_size_dynamic_sections): Likewise.
(elf_i386_relocate_section): Likewise.
* elf32-sparc.c (elf32_sparc_check_relocs): Just check for
".rela", not ".rela."
(elf32_sparc_size_dynamic_sections): Likewise.
(elf32_sparc_relocate_section): Likewise.
no aux entries, use the symbol name as the file name.
(coff_find_nearest_line): Look for the right C_FILE symbol, rather
than always using the first one. If there is a debugging symbol
after a function symbol, skip it. Add the section VMA to the line
offset, since it was subtracted out in coff_slurp_line_table.
PR 5010.
allocate and attach an exec header to the BFD private data.
(som_begin_writing): Don't fill fields of the exec header based
on BFD private data here (like the exec flags). Do not write
the exec header here.
(som_write_headers): Instead do it here.
* som.h (struct somdata): New field "exec_hdr" for the executable
file header.
(obj_som_exec_hdr): New accessor macro.
named .linux-dynamic, not .dynamic.
(linux_add_one_symbol): Use .linux-dynamic, not .dynamic.
(bfd_linux_size_dynamic_sections): Likewise.
(linux_finish_dynamic_link): Likewise.
are recognized, chose section flags based on the name.
(bfd_coff_backend_data): _bfd_styp_to_sec_flags_hook field: Add
name argument.
(bfd_coff_styp_to_sec_flags_hook): Add name argument.
(coff_compute_section_file_positions): Don't adjust the section
position by COFF_PAGE_SIZE unless SEC_ALLOC is set.
* libcoff.h: Rebuilt.
* coffgen.c (make_a_section_from_file): Pass section name to
bfd_coff_styp_to_sec_flags_hook.
* ecoff.c (_bfd_ecoff_styp_to_sec_flags): Add unused name
argument.
* libecoff.h (_bfd_ecoff_styp_to_sec_flags): Add name argument to
prototype.
The linker depends upon configuring for solaris2.
* hosts/solaris2.h: New file; include hosts/sysv4.h.
* config/solaris2.mh: New file; copy of config/sysv4.mh.
* aout-ns32k.c: Add declarations that were in aout-ns32k.h, change
declarations to traditional form.
(MY_reloc_howto, MY_put_reloc): Change from macro to function.
(ns32k_relocate_contents): New function.
* aout-ns32k.h: Remove.
* cpu-ns32k.c: Add declarations that were in aout-ns32k.h, change
declarations to traditional form.
(ns32k_final_link_relocate): Call ns32k_relocate_contents.
* netbsd532.c: Reformat to standards, add copyright notice.
(ARCH): Don't define.
(aout-ns32k.h): Don't include.
* pc532-mach.c: Ditto.
* i386linux.c (linux_add_one_symbol): Only handle
SHARABLE_CONFLICTS specially if BSF_CONSTRUCTOR is set. Set hashp
for a GOT or PLT symbol. Set jump field of fixup for a PLT symbol.
(linux_tally_symbols): Check section of real symbol. When looking
for a builtin fixup, check builtin and jump flags. Create no more
than one fixup, and always create one if the real symbol is in the
absolute section. Only strip absolute symbols.
bfd_tell, bfd_flush, and bfd_stat from here...
* bfd-in.h: ...to here, to make them visible to programs which
know more about the object file format than BFD does.
* libbfd.h, bfd-in2.h: Rebuilt.
* elfcode.h (elf_link_create_dynamic_sections): Set type of
_DYNAMIC to STT_OBJECT.
(NAME(bfd_elf,record_link_assignment)): Always create hash table
entry. Set type to STT_OBJECT.
(elf_link_output_extsym): Don't set type of weak defined symbol to
STB_WEAK if symbol was referenced.
* elf32-i386.c (elf_i386_create_dynamic_sections): Set type of
_GLOBAL_OFFSET_TABLE to STT_OBJECT.
(elf_i386_check_relocs): Ignore local PLT32 relocs.
(elf_i386_relocate_section): Treat local PLT32 relocs as PC32.
ELF. Based on patches by Eric Youngdale <ericy@cais.cais.com>.
* libelf.h (struct elf_link_hash_entry): Remove copy_offset field.
Add got_offset and plt_offset fields.
(ELF_LINK_HASH_REF_DYNAMIC_MULTIPLE): Don't define.
(ELF_LINK_HASH_DEF_DYNAMIC_MULTIPLE): Don't define.
(ELF_LINK_HASH_NEEDS_COPY): Define.
(struct elf_backend_data): Add check_relocs field.
(struct bfd_elf_section_data): Change relocs from PTR to
Elf_Internal_Rela *.
(struct elf_obj_tdata): Add local_got_offsets field.
(elf_local_got_offsets): Define accessor macro.
(bfd_elf32_link_create_dynamic_sections): Declare.
(bfd_elf32_link_record_dynamic_symbol): Declare.
(bfd_elf64_link_create_dynamic_sections): Declare.
(bfd_elf64_link_record_dynamic_symbol): Declare.
* elfcode.h (elf_slurp_reloc_table): Don't use the section data
relocs field.
(elf_link_record_dynamic_symbol): Make globally visible. Use
macro to rename to NAME(bfd_elf,link_record_dynamic_symbol).
(elf_link_add_object_symbols): If creating a shared library, put
make all local symbols dynamic. Don't bother with the
DYNAMIC_MULTIPLE flags. Call the check_relocs backend function if
it is defined.
(elf_link_create_dynamic_sections): Make globally visible. Use
macro to rename to NAME(bfd_elf,link_create_dynamic_sections). If
creating a shared library, make sure that _DYNAMIC is added as a
dynamic symbol.
(elf_link_read_relocs): New function.
(NAME(bfd_elf,record_link_assignment)): If creating a shared
library, always create symbols, and always make them dynamic.
(elf_bfd_final_link): Permit creation of shared libraries.
(elf_link_input_bfd): Use elf_link_read_relocs to get the relocs.
* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize
copy_offset. Initialize got_offset and plt_offset.
* elf32-target.h (elf_backend_check_relocs): Define as 0 if not
defined.
(elf32_bed): Initialize check_relocs field.
* elf64-target.h (elf_backend_check_relocs): Define as 0 if not
defined.
(elf64_bed): Initialize check_relocs field.
* elf32-i386.c (elf_howto_table): Change R_386_PLT32 and
R_386_GOTPC to be pc_relative and pcrel_offset.
(elf_i386_pic_plt0_entry): Define.
(elf_i386_pic_plt_entry): Define.
(elf_i386_create_dynamic_sections): Create a .got.plt section, and
define _GLOBAL_OFFSET_TABLE_ at the start of it. If creating a
shared library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
dynamic symbol. Don't create .rel.bss if creating a shared
library.
(elf_i386_check_relocs): New function.
(elf_i386_adjust_dynamic_symbol): Don't make a PLT entry if the
symbol already has one. When making a PLT entry, set plt_offset.
Don't create a copy reloc when creating a shared library. Don't
set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
(elf_i386_allocate_dynamic_section): Remove.
(elf_i386_size_dynamic_sections): Look through all the sections
rather than assuming we know their names. Remove any empty reloc
or plt sections. Only add a DT_DEBUG entry if not creating a
shared library. Only add a DT_PLTGOT entry if there is a PLT.
Add a DT_TEXTREL entry if required.
(elf_i386_relocate_section): Permit undefined symbols when
creating a shared library. Handle the special relocation types
specially.
(elf_i386_finish_dynamic_symbol): Create a PLT entry if plt_offset
is set. If creating a shared library, produce a PIC PLT entry.
Only mark a PLT symbol as undefined if it was not defined by a
regular object file. Create a GOT entry if got_offset is set.
Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
(elf_i386_finish_dynamic_sections): Change the handling of
DT_RELSZ to simply subtract out the size of .rel.plt. If creating
a shared library, produce PIC PLT code.
(elf_backend_check_relocs): Define.
* elf32-sparc.c (elf_sparc_howto_table): Change R_SPARC_GOT10,
R_SPARC_GOT22, and R_SPARC_PC10 to not warn about reloc overflow.
(elf32_sparc_create_dynamic_sections): If creating a shared
library, make sure that _GLOBAL_OFFSET_TABLE_ is added as a
dynamic symbol, and set the type to STT_OBJECT. Likewise for
_PROCEDURE_LINKAGE_TABLE_. Don't create .rel.bss if creating a
shared library.
(elf32_sparc_check_relocs): New function.
(elf32_sparc_adjust_dynamic_symbol): Don't make a PLT entry if the
symbol already has one. When making a PLT entry, set plt_offset.
Don't create a copy reloc when creating a shared library. Don't
set copy_offset, just set ELF_LINK_HASH_NEEDS_COPY.
(elf32_sparc_allocate_dynamic_section): Remove.
(elf32_sparc_size_dynamic_sections): Look through all the sections
rather than assuming we know their names. Only add a DT_DEBUG
entry if not creating a shared library. Add a DT_TEXTREL entry if
required.
(elf32_sparc_relocate_section): Permit undefined symbols when
creating a shared library. Handle the special relocation types
specially.
(elf32_sparc_finish_dynamic_symbol): Create a PLT entry if plt_offset
is set. Only mark a PLT symbol as undefined if it was not defined
by a regular object file. Create a GOT entry if got_offset is
set. Create a copy reloc if ELF_LINK_HASH_NEEDS_COPY is set.
(elf32_sparc_finish_dynamic_sections): Store dynobj in a local
variable.
(elf_backend_check_relocs): Define.
common, set the alignment.
(aout_link_add_symbols): Restrict the alignment of a common symbol
to the alignment power given by the architecture.
* elf.c (_bfd_elf_link_hash_newfunc): Don't initialize align. Do
initialize copy_offset.
* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Use copy_offset
field rather than align field. Get alignment using bfd_log2
rather than switch.
* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
* elf32-i386.c (elf_i386_finish_dynamic_symbol): Use copy_offset,
not align.
* elf32-sparc.c (elf32_sparc_finish_dynamic_symbol): Likewise.
It's the wrong way to do things.
(HOWTO): Change accordingly.
(HOWTO2): Remove.
(_bfd_final_link_relocate): Remove references to
special_function1.
* bfd-in2.h: Rebuilt.
* aoutx.h (aout_link_input_section_std): Remove references to
special_function1.
(aout_link_reloc_link_order): Likewise.