X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Faout-tic30.c;h=7cc6ba5f6cd2d06458b5f761498061dc3623890d;hb=32769083d1b6b1cb325409b3c9b99c06026f70d7;hp=444ca4bea09be3b6a06222fb2f588f045218ee89;hpb=caa4096e844a000ff63c4fa9180d70ca2093fd2a;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/aout-tic30.c b/bfd/aout-tic30.c index 444ca4bea0..7cc6ba5f6c 100644 --- a/bfd/aout-tic30.c +++ b/bfd/aout-tic30.c @@ -1,5 +1,5 @@ /* BFD back-end for TMS320C30 a.out binaries. - Copyright (C) 1998-2014 Free Software Foundation, Inc. + Copyright (C) 1998-2019 Free Software Foundation, Inc. Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) This file is part of BFD, the Binary File Descriptor library. @@ -21,10 +21,10 @@ #define TARGET_IS_BIG_ENDIAN_P #define N_HEADER_IN_TEXT(x) 1 -#define TEXT_START_ADDR 1024 -#define TARGET_PAGE_SIZE 128 -#define SEGMENT_SIZE TARGET_PAGE_SIZE -#define DEFAULT_ARCH bfd_arch_tic30 +#define TEXT_START_ADDR 1024 +#define TARGET_PAGE_SIZE 128 +#define SEGMENT_SIZE TARGET_PAGE_SIZE +#define DEFAULT_ARCH bfd_arch_tic30 #define ARCH_SIZE 32 /* Do not "beautify" the CONCAT* macro args. Traditional C will not @@ -43,11 +43,11 @@ #define MY_reloc_howto(BFD, REL, IN, EX, PC) tic30_aout_reloc_howto (BFD, REL, & IN, & EX, & PC) -#define MY_final_link_relocate tic30_aout_final_link_relocate -#define MY_object_p tic30_aout_object_p -#define MY_mkobject NAME (aout,mkobject) +#define MY_final_link_relocate tic30_aout_final_link_relocate +#define MY_object_p tic30_aout_object_p +#define MY_mkobject NAME (aout,mkobject) #define MY_write_object_contents tic30_aout_write_object_contents -#define MY_set_sizes tic30_aout_set_sizes +#define MY_set_sizes tic30_aout_set_sizes #ifndef MY_exec_hdr_flags #define MY_exec_hdr_flags 1 @@ -324,9 +324,9 @@ tic30_aout_reloc_howto (bfd *abfd, (bfd_get_8 (BFD, ADDR + 2) ) #define bfd_putb_24(BFD,DATA,ADDR) \ - bfd_put_8 (BFD, (bfd_byte) ((DATA >> 16) & 0xFF), ADDR ); \ + bfd_put_8 (BFD, (bfd_byte) ((DATA >> 16) & 0xFF), ADDR ); \ bfd_put_8 (BFD, (bfd_byte) ((DATA >> 8) & 0xFF), ADDR + 1); \ - bfd_put_8 (BFD, (bfd_byte) ( DATA & 0xFF), ADDR + 2) + bfd_put_8 (BFD, (bfd_byte) ( DATA & 0xFF), ADDR + 2) /* Set parameters about this a.out file that are machine-dependent. This routine is called from some_aout_object_p just before it returns. */ @@ -339,32 +339,32 @@ tic30_aout_callback (bfd *abfd) unsigned long arch_align; /* Calculate the file positions of the parts of a newly read aout header. */ - obj_textsec (abfd)->size = N_TXTSIZE (*execp); + obj_textsec (abfd)->size = N_TXTSIZE (execp); /* The virtual memory addresses of the sections. */ - obj_textsec (abfd)->vma = N_TXTADDR (*execp); - obj_datasec (abfd)->vma = N_DATADDR (*execp); - obj_bsssec (abfd)->vma = N_BSSADDR (*execp); + obj_textsec (abfd)->vma = N_TXTADDR (execp); + obj_datasec (abfd)->vma = N_DATADDR (execp); + obj_bsssec (abfd)->vma = N_BSSADDR (execp); obj_textsec (abfd)->lma = obj_textsec (abfd)->vma; obj_datasec (abfd)->lma = obj_datasec (abfd)->vma; obj_bsssec (abfd)->lma = obj_bsssec (abfd)->vma; /* The file offsets of the sections. */ - obj_textsec (abfd)->filepos = N_TXTOFF (*execp); - obj_datasec (abfd)->filepos = N_DATOFF (*execp); + obj_textsec (abfd)->filepos = N_TXTOFF (execp); + obj_datasec (abfd)->filepos = N_DATOFF (execp); /* The file offsets of the relocation info. */ - obj_textsec (abfd)->rel_filepos = N_TRELOFF (*execp); - obj_datasec (abfd)->rel_filepos = N_DRELOFF (*execp); + obj_textsec (abfd)->rel_filepos = N_TRELOFF (execp); + obj_datasec (abfd)->rel_filepos = N_DRELOFF (execp); /* The file offsets of the string table and symbol table. */ - obj_sym_filepos (abfd) = N_SYMOFF (*execp); - obj_str_filepos (abfd) = N_STROFF (*execp); + obj_sym_filepos (abfd) = N_SYMOFF (execp); + obj_str_filepos (abfd) = N_STROFF (execp); /* Determine the architecture and machine type of the object file. */ #ifdef SET_ARCH_MACH - SET_ARCH_MACH (abfd, *execp); + SET_ARCH_MACH (abfd, execp); #else bfd_default_set_arch_mach (abfd, DEFAULT_ARCH, 0L); #endif @@ -568,10 +568,10 @@ tic30_aout_object_p (bfd *abfd) exec.a_info = H_GET_32 (abfd, exec_bytes.e_info); #endif /* SWAP_MAGIC */ - if (N_BADMAG (exec)) + if (N_BADMAG (&exec)) return 0; #ifdef MACHTYPE_OK - if (!(MACHTYPE_OK (N_MACHTYPE (exec)))) + if (!(MACHTYPE_OK (N_MACHTYPE (&exec)))) return 0; #endif @@ -636,11 +636,8 @@ tic30_aout_write_object_contents (bfd *abfd) obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; { - bfd_size_type text_size; /* Dummy vars. */ - file_ptr text_end; - if (adata (abfd).magic == undecided_magic) - NAME (aout, adjust_sizes_and_vmas) (abfd, &text_size, &text_end); + NAME (aout, adjust_sizes_and_vmas) (abfd); execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE; execp->a_entry = bfd_get_start_address (abfd); @@ -664,19 +661,19 @@ tic30_aout_write_object_contents (bfd *abfd) if (bfd_get_outsymbols (abfd) != (asymbol **) NULL && bfd_get_symcount (abfd) != 0) { - if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (*execp)), SEEK_SET) != 0) + if (bfd_seek (abfd, (file_ptr) (N_SYMOFF (execp)), SEEK_SET) != 0) return FALSE; if (!NAME (aout, write_syms) (abfd)) return FALSE; } - if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (*execp)), SEEK_SET) != 0) + if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (execp)), SEEK_SET) != 0) return FALSE; if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd))) return FALSE; - if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (*execp)), SEEK_SET) != 0) + if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (execp)), SEEK_SET) != 0) return FALSE; if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd))) return FALSE; @@ -713,53 +710,87 @@ static bfd_boolean MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info) { struct internal_exec *execp = exec_hdr (abfd); + asection *objsym_section; file_ptr pos; bfd_vma vma = 0; - int pad; /* Set the executable header size to 0, as we don't want one for an - output. */ + output. FIXME: Really? tic30_aout_object_p doesn't accept such + an executable! */ adata (abfd).exec_bytes_size = 0; + pos = adata (abfd).exec_bytes_size; + /* ??? Why are we looking at create_object_symbols_section? */ + objsym_section = info->create_object_symbols_section; + if (objsym_section != NULL) + vma = objsym_section->vma; + /* Text. */ - vma = info->create_object_symbols_section->vma; - pos += vma; - obj_textsec (abfd)->filepos = pos; - obj_textsec (abfd)->vma = vma; - obj_textsec (abfd)->user_set_vma = 1; - pos += obj_textsec (abfd)->size; - vma += obj_textsec (abfd)->size; + if (obj_textsec (abfd) != NULL) + { + pos += vma; + obj_textsec (abfd)->filepos = pos; + obj_textsec (abfd)->vma = vma; + obj_textsec (abfd)->user_set_vma = 1; + execp->a_text = obj_textsec (abfd)->size; + pos += obj_textsec (abfd)->size; + vma += obj_textsec (abfd)->size; + } /* Data. */ - if (abfd->flags & D_PAGED) + if (obj_datasec (abfd) != NULL) { - if (info->create_object_symbols_section->next->vma > 0) - obj_datasec (abfd)->vma = info->create_object_symbols_section->next->vma; + if (abfd->flags & D_PAGED) + { + if (objsym_section != NULL + && objsym_section->next != NULL + && objsym_section->next->vma != 0) + obj_datasec (abfd)->vma = objsym_section->next->vma; + else + obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size); + } else - obj_datasec (abfd)->vma = BFD_ALIGN (vma, adata (abfd).segment_size); - } - else - obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4); + obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4); - if (obj_datasec (abfd)->vma < vma) - obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4); + if (obj_datasec (abfd)->vma < vma) + obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4); - obj_datasec (abfd)->user_set_vma = 1; - vma = obj_datasec (abfd)->vma; - obj_datasec (abfd)->filepos = vma + adata (abfd).exec_bytes_size; - execp->a_text = vma - obj_textsec (abfd)->vma; - obj_textsec (abfd)->size = execp->a_text; + pos += obj_datasec (abfd)->vma - vma; + obj_datasec (abfd)->filepos = pos; + obj_datasec (abfd)->user_set_vma = 1; + + vma = obj_datasec (abfd)->vma; + if (obj_textsec (abfd) != NULL) + { + execp->a_text = vma - obj_textsec (abfd)->vma; + obj_textsec (abfd)->size = execp->a_text; + } + execp->a_data = obj_datasec (abfd)->size; + vma += obj_datasec (abfd)->size; + } /* Since BSS follows data immediately, see if it needs alignment. */ - vma += obj_datasec (abfd)->size; - pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma; - obj_datasec (abfd)->size += pad; - pos += obj_datasec (abfd)->size; - execp->a_data = obj_datasec (abfd)->size; + if (obj_bsssec (abfd) != NULL) + { + int pad; - /* BSS. */ - obj_bsssec (abfd)->vma = vma; - obj_bsssec (abfd)->user_set_vma = 1; + pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma; + if (obj_datasec (abfd) != NULL) + { + obj_datasec (abfd)->size += pad; + execp->a_data += pad; + } + else if (obj_textsec (abfd) != NULL) + { + obj_textsec (abfd)->size += pad; + execp->a_text += pad; + } + + /* BSS. */ + vma += pad; + obj_bsssec (abfd)->vma = vma; + obj_bsssec (abfd)->user_set_vma = 1; + } /* We are fully resized, so don't readjust in final_link. */ adata (abfd).magic = z_magic; @@ -831,7 +862,7 @@ tic30_aout_set_arch_mach (bfd *abfd, _bfd_archive_bsd_construct_extended_name_table #endif #ifndef MY_write_armap -#define MY_write_armap bsd_write_armap +#define MY_write_armap _bfd_bsd_write_armap #endif #ifndef MY_read_ar_hdr #define MY_read_ar_hdr _bfd_generic_read_ar_hdr @@ -843,12 +874,12 @@ tic30_aout_set_arch_mach (bfd *abfd, #define MY_truncate_arname bfd_bsd_truncate_arname #endif #ifndef MY_update_armap_timestamp -#define MY_update_armap_timestamp _bfd_archive_bsd_update_armap_timestamp +#define MY_update_armap_timestamp _bfd_archive_bsd_update_armap_timestamp #endif /* No core file defined here -- configure in trad-core.c separately. */ #ifndef MY_core_file_failing_command -#define MY_core_file_failing_command _bfd_nocore_core_file_failing_command +#define MY_core_file_failing_command _bfd_nocore_core_file_failing_command #endif #ifndef MY_core_file_failing_signal #define MY_core_file_failing_signal _bfd_nocore_core_file_failing_signal @@ -858,21 +889,20 @@ tic30_aout_set_arch_mach (bfd *abfd, _bfd_nocore_core_file_matches_executable_p #endif #ifndef MY_core_file_pid -#define MY_core_file_pid _bfd_nocore_core_file_pid +#define MY_core_file_pid _bfd_nocore_core_file_pid #endif #ifndef MY_core_file_p #define MY_core_file_p _bfd_dummy_target #endif #ifndef MY_bfd_debug_info_start -#define MY_bfd_debug_info_start bfd_void +#define MY_bfd_debug_info_start _bfd_void_bfd #endif #ifndef MY_bfd_debug_info_end -#define MY_bfd_debug_info_end bfd_void +#define MY_bfd_debug_info_end _bfd_void_bfd #endif #ifndef MY_bfd_debug_info_accumulate -#define MY_bfd_debug_info_accumulate \ - (void (*) (bfd*, struct bfd_section *)) bfd_void +#define MY_bfd_debug_info_accumulate _bfd_void_bfd_asection #endif #ifndef MY_core_file_failing_command @@ -908,6 +938,9 @@ tic30_aout_set_arch_mach (bfd *abfd, #ifndef MY_canonicalize_reloc #define MY_canonicalize_reloc NAME (aout, canonicalize_reloc) #endif +#ifndef MY_set_reloc +#define MY_set_reloc _bfd_generic_set_reloc +#endif #ifndef MY_make_empty_symbol #define MY_make_empty_symbol NAME (aout, make_empty_symbol) #endif @@ -917,6 +950,10 @@ tic30_aout_set_arch_mach (bfd *abfd, #ifndef MY_get_symbol_info #define MY_get_symbol_info NAME (aout, get_symbol_info) #endif +#ifndef MY_get_symbol_version_string +#define MY_get_symbol_version_string \ + _bfd_nosymbols_get_symbol_version_string +#endif #ifndef MY_get_lineno #define MY_get_lineno NAME (aout, get_lineno) #endif @@ -926,6 +963,9 @@ tic30_aout_set_arch_mach (bfd *abfd, #ifndef MY_find_nearest_line #define MY_find_nearest_line NAME (aout, find_nearest_line) #endif +#ifndef MY_find_line +#define MY_find_line _bfd_nosymbols_find_line +#endif #ifndef MY_find_inliner_info #define MY_find_inliner_info _bfd_nosymbols_find_inliner_info #endif @@ -951,6 +991,9 @@ tic30_aout_set_arch_mach (bfd *abfd, #ifndef MY_bfd_is_group_section #define MY_bfd_is_group_section bfd_generic_is_group_section #endif +#ifndef MY_bfd_group_name +#define MY_bfd_group_name bfd_generic_group_name +#endif #ifndef MY_bfd_discard_group #define MY_bfd_discard_group bfd_generic_discard_group #endif @@ -961,6 +1004,12 @@ tic30_aout_set_arch_mach (bfd *abfd, #ifndef MY_bfd_define_common_symbol #define MY_bfd_define_common_symbol bfd_generic_define_common_symbol #endif +#ifndef MY_bfd_link_hide_symbol +#define MY_bfd_link_hide_symbol _bfd_generic_link_hide_symbol +#endif +#ifndef MY_bfd_define_start_stop +#define MY_bfd_define_start_stop bfd_generic_define_start_stop +#endif #ifndef MY_bfd_reloc_type_lookup #define MY_bfd_reloc_type_lookup tic30_aout_reloc_type_lookup #endif @@ -993,6 +1042,10 @@ tic30_aout_set_arch_mach (bfd *abfd, #define MY_bfd_link_split_section _bfd_generic_link_split_section #endif +#ifndef MY_bfd_link_check_relocs +#define MY_bfd_link_check_relocs _bfd_generic_link_check_relocs +#endif + #ifndef MY_bfd_copy_private_bfd_data #define MY_bfd_copy_private_bfd_data _bfd_generic_bfd_copy_private_bfd_data #endif @@ -1022,8 +1075,7 @@ tic30_aout_set_arch_mach (bfd *abfd, #endif #ifndef MY_bfd_is_target_special_symbol -#define MY_bfd_is_target_special_symbol \ - ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) +#define MY_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false #endif #ifndef MY_bfd_free_cached_info @@ -1085,12 +1137,24 @@ const bfd_target tic30_aout_vec = bfd_getb64, bfd_getb_signed_64, bfd_putb64, bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Headers. */ - {_bfd_dummy_target, MY_object_p, /* bfd_check_format. */ - bfd_generic_archive_p, MY_core_file_p}, - {bfd_false, MY_mkobject, /* bfd_set_format. */ - _bfd_generic_mkarchive, bfd_false}, - {bfd_false, MY_write_object_contents, /* bfd_write_contents. */ - _bfd_write_archive_contents, bfd_false}, + { /* bfd_check_format. */ + _bfd_dummy_target, + MY_object_p, + bfd_generic_archive_p, + MY_core_file_p + }, + { /* bfd_set_format. */ + _bfd_bool_bfd_false_error, + MY_mkobject, + _bfd_generic_mkarchive, + _bfd_bool_bfd_false_error + }, + { /* bfd_write_contents. */ + _bfd_bool_bfd_false_error, + MY_write_object_contents, + _bfd_write_archive_contents, + _bfd_bool_bfd_false_error + }, BFD_JUMP_TABLE_GENERIC (MY), BFD_JUMP_TABLE_COPY (MY),