diff options
author | Ian Lance Taylor <ian@airs.com> | 1994-09-06 19:28:55 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1994-09-06 19:28:55 +0000 |
commit | 69645d10fb4647f6855c76ae54a1acf60f28fc94 (patch) | |
tree | 61e36c9f73fda03557d67fda9f185ea6a7828b5f /bfd/coff-mips.c | |
parent | de733a0edf37f2e2f4a7733da66b55a07ef1f804 (diff) | |
download | gdb-69645d10fb4647f6855c76ae54a1acf60f28fc94.zip gdb-69645d10fb4647f6855c76ae54a1acf60f28fc94.tar.gz gdb-69645d10fb4647f6855c76ae54a1acf60f28fc94.tar.bz2 |
Add new style linker support to COFF backend. a29k only for now.
* 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.
Diffstat (limited to 'bfd/coff-mips.c')
-rw-r--r-- | bfd/coff-mips.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index 97b7294..4b7fb32 100644 --- a/bfd/coff-mips.c +++ b/bfd/coff-mips.c @@ -542,7 +542,7 @@ mips_adjust_reloc_in (abfd, intern, rptr) /* If the type is MIPS_R_IGNORE, make sure this is a reference to the absolute section so that the reloc is ignored. */ if (intern->r_type == MIPS_R_IGNORE) - rptr->sym_ptr_ptr = bfd_abs_section.symbol_ptr_ptr; + rptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr; /* If this is a MIPS_R_SWITCH reloc, or an internal MIPS_R_RELHI or MIPS_R_RELLO reloc, we want the addend field of the BFD relocto @@ -657,7 +657,7 @@ mips_refhi_reloc (abfd, } ret = bfd_reloc_ok; - if (symbol->section == &bfd_und_section + if (bfd_is_und_section (symbol->section) && output_bfd == (bfd *) NULL) ret = bfd_reloc_undefined; @@ -784,7 +784,7 @@ mips_gprel_reloc (abfd, output_bfd = symbol->section->output_section->owner; } - if (symbol->section == &bfd_und_section + if (bfd_is_und_section (symbol->section) && relocateable == false) return bfd_reloc_undefined; @@ -925,7 +925,7 @@ mips_relhi_reloc (abfd, } ret = bfd_reloc_ok; - if (symbol->section == &bfd_und_section + if (bfd_is_und_section (symbol->section) && output_bfd == (bfd *) NULL) ret = bfd_reloc_undefined; @@ -990,7 +990,7 @@ mips_rello_reloc (abfd, symbol is not defined we don't want to do this, because we don't want the value in the object file to incorporate the address of the reloc. */ - if (bfd_get_section (symbol) != &bfd_und_section + if (! bfd_is_und_section (bfd_get_section (symbol)) && ! bfd_is_com_section (bfd_get_section (symbol))) val -= (input_section->output_section->vma + input_section->output_offset @@ -2275,13 +2275,14 @@ static const struct ecoff_backend_data mips_ecoff_backend_data = (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */ mips_ecoff_swap_filehdr_out, mips_ecoff_swap_aouthdr_out, mips_ecoff_swap_scnhdr_out, - FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, true, + FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, true, mips_ecoff_swap_filehdr_in, mips_ecoff_swap_aouthdr_in, - mips_ecoff_swap_scnhdr_in, mips_ecoff_bad_format_hook, - _bfd_ecoff_set_arch_mach_hook, _bfd_ecoff_mkobject_hook, - _bfd_ecoff_styp_to_sec_flags, _bfd_ecoff_make_section_hook, - _bfd_ecoff_set_alignment_hook, _bfd_ecoff_slurp_symbol_table, - NULL, NULL + mips_ecoff_swap_scnhdr_in, NULL, + mips_ecoff_bad_format_hook, _bfd_ecoff_set_arch_mach_hook, + _bfd_ecoff_mkobject_hook, _bfd_ecoff_styp_to_sec_flags, + _bfd_ecoff_make_section_hook, _bfd_ecoff_set_alignment_hook, + _bfd_ecoff_slurp_symbol_table, + NULL, NULL, NULL, NULL, NULL, NULL }, /* Supported architecture. */ bfd_arch_mips, |