X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Fmach-o.c;h=6991612f07cffee1edb7fad041b201daca526418;hb=f29ba312286c54e1b013a5adf42c58fd4642bf56;hp=b2401c4359c839cda271e4d8293c7b3243efc2d9;hpb=80fccad2d4ce82a2ed9a5d8d081eb2daefa09f9d;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/mach-o.c b/bfd/mach-o.c index b2401c4359..6991612f07 100644 --- a/bfd/mach-o.c +++ b/bfd/mach-o.c @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright 1999, 2000, 2001, 2002, 2003, 2004 + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "mach-o.h" #include "bfd.h" @@ -29,114 +29,53 @@ #define BFD_IO_FUNCS 0 #endif -#define bfd_mach_o_mkarchive _bfd_noarchive_mkarchive -#define bfd_mach_o_read_ar_hdr _bfd_noarchive_read_ar_hdr -#define bfd_mach_o_slurp_armap _bfd_noarchive_slurp_armap -#define bfd_mach_o_slurp_extended_name_table _bfd_noarchive_slurp_extended_name_table -#define bfd_mach_o_construct_extended_name_table _bfd_noarchive_construct_extended_name_table -#define bfd_mach_o_truncate_arname _bfd_noarchive_truncate_arname -#define bfd_mach_o_write_armap _bfd_noarchive_write_armap -#define bfd_mach_o_get_elt_at_index _bfd_noarchive_get_elt_at_index -#define bfd_mach_o_generic_stat_arch_elt _bfd_noarchive_generic_stat_arch_elt -#define bfd_mach_o_update_armap_timestamp _bfd_noarchive_update_armap_timestamp -#define bfd_mach_o_close_and_cleanup _bfd_generic_close_and_cleanup -#define bfd_mach_o_bfd_free_cached_info _bfd_generic_bfd_free_cached_info -#define bfd_mach_o_new_section_hook _bfd_generic_new_section_hook -#define bfd_mach_o_get_section_contents_in_window _bfd_generic_get_section_contents_in_window -#define bfd_mach_o_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name -#define bfd_mach_o_get_lineno _bfd_nosymbols_get_lineno -#define bfd_mach_o_find_nearest_line _bfd_nosymbols_find_nearest_line -#define bfd_mach_o_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol -#define bfd_mach_o_read_minisymbols _bfd_generic_read_minisymbols -#define bfd_mach_o_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol -#define bfd_mach_o_get_reloc_upper_bound _bfd_norelocs_get_reloc_upper_bound -#define bfd_mach_o_canonicalize_reloc _bfd_norelocs_canonicalize_reloc -#define bfd_mach_o_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup +#define bfd_mach_o_mkarchive _bfd_noarchive_mkarchive +#define bfd_mach_o_read_ar_hdr _bfd_noarchive_read_ar_hdr +#define bfd_mach_o_slurp_armap _bfd_noarchive_slurp_armap +#define bfd_mach_o_slurp_extended_name_table _bfd_noarchive_slurp_extended_name_table +#define bfd_mach_o_construct_extended_name_table _bfd_noarchive_construct_extended_name_table +#define bfd_mach_o_truncate_arname _bfd_noarchive_truncate_arname +#define bfd_mach_o_write_armap _bfd_noarchive_write_armap +#define bfd_mach_o_get_elt_at_index _bfd_noarchive_get_elt_at_index +#define bfd_mach_o_generic_stat_arch_elt _bfd_noarchive_generic_stat_arch_elt +#define bfd_mach_o_update_armap_timestamp _bfd_noarchive_update_armap_timestamp +#define bfd_mach_o_close_and_cleanup _bfd_generic_close_and_cleanup +#define bfd_mach_o_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +#define bfd_mach_o_new_section_hook _bfd_generic_new_section_hook +#define bfd_mach_o_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define bfd_mach_o_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name +#define bfd_mach_o_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) +#define bfd_mach_o_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name +#define bfd_mach_o_get_lineno _bfd_nosymbols_get_lineno +#define bfd_mach_o_find_nearest_line _bfd_nosymbols_find_nearest_line +#define bfd_mach_o_find_inliner_info _bfd_nosymbols_find_inliner_info +#define bfd_mach_o_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol +#define bfd_mach_o_read_minisymbols _bfd_generic_read_minisymbols +#define bfd_mach_o_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol +#define bfd_mach_o_get_reloc_upper_bound _bfd_norelocs_get_reloc_upper_bound +#define bfd_mach_o_canonicalize_reloc _bfd_norelocs_canonicalize_reloc +#define bfd_mach_o_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup #define bfd_mach_o_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents -#define bfd_mach_o_bfd_relax_section bfd_generic_relax_section -#define bfd_mach_o_bfd_link_hash_table_create _bfd_generic_link_hash_table_create -#define bfd_mach_o_bfd_link_hash_table_free _bfd_generic_link_hash_table_free -#define bfd_mach_o_bfd_link_add_symbols _bfd_generic_link_add_symbols -#define bfd_mach_o_bfd_link_just_syms _bfd_generic_link_just_syms -#define bfd_mach_o_bfd_final_link _bfd_generic_final_link -#define bfd_mach_o_bfd_link_split_section _bfd_generic_link_split_section -#define bfd_mach_o_set_arch_mach bfd_default_set_arch_mach -#define bfd_mach_o_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data -#define bfd_mach_o_bfd_set_private_flags _bfd_generic_bfd_set_private_flags -#define bfd_mach_o_bfd_print_private_bfd_data _bfd_generic_bfd_print_private_bfd_data -#define bfd_mach_o_get_section_contents _bfd_generic_get_section_contents -#define bfd_mach_o_set_section_contents _bfd_generic_set_section_contents -#define bfd_mach_o_bfd_gc_sections bfd_generic_gc_sections -#define bfd_mach_o_bfd_merge_sections bfd_generic_merge_sections -#define bfd_mach_o_bfd_is_group_section bfd_generic_is_group_section -#define bfd_mach_o_bfd_discard_group bfd_generic_discard_group -#define bfd_mach_o_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data - -static bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data - PARAMS ((bfd *, asymbol *, bfd *, asymbol *)); -static bfd_boolean bfd_mach_o_bfd_copy_private_section_data - PARAMS ((bfd *, asection *, bfd *, asection *)); -static bfd_boolean bfd_mach_o_bfd_copy_private_bfd_data - PARAMS ((bfd *, bfd *)); -static long bfd_mach_o_count_symbols - PARAMS ((bfd *)); -static long bfd_mach_o_get_symtab_upper_bound - PARAMS ((bfd *)); -static long bfd_mach_o_canonicalize_symtab - PARAMS ((bfd *, asymbol **)); -static void bfd_mach_o_get_symbol_info - PARAMS ((bfd *, asymbol *, symbol_info *)); -static void bfd_mach_o_print_symbol - PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type)); -static void bfd_mach_o_convert_architecture - PARAMS ((bfd_mach_o_cpu_type, bfd_mach_o_cpu_subtype, - enum bfd_architecture *, unsigned long *)); -static bfd_boolean bfd_mach_o_write_contents - PARAMS ((bfd *)); -static int bfd_mach_o_sizeof_headers - PARAMS ((bfd *, bfd_boolean)); -static asymbol * bfd_mach_o_make_empty_symbol - PARAMS ((bfd *)); -static int bfd_mach_o_write_header - PARAMS ((bfd *, bfd_mach_o_header *)); -static int bfd_mach_o_read_header - PARAMS ((bfd *, bfd_mach_o_header *)); -static asection * bfd_mach_o_make_bfd_section - PARAMS ((bfd *, bfd_mach_o_section *)); -static int bfd_mach_o_scan_read_section - PARAMS ((bfd *, bfd_mach_o_section *, bfd_vma)); -static int bfd_mach_o_scan_write_section - PARAMS ((bfd *, bfd_mach_o_section *, bfd_vma)); -static int bfd_mach_o_scan_write_symtab_symbols - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_write_thread - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_dylinker - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_dylib - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_prebound_dylib - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_thread - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_write_symtab - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_dysymtab - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_symtab - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_segment - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_write_segment - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static int bfd_mach_o_scan_read_command - PARAMS ((bfd *, bfd_mach_o_load_command *)); -static void bfd_mach_o_flatten_sections - PARAMS ((bfd *)); -static const char * bfd_mach_o_i386_flavour_string - PARAMS ((unsigned int)); -static const char * bfd_mach_o_ppc_flavour_string - PARAMS ((unsigned int)); +#define bfd_mach_o_bfd_relax_section bfd_generic_relax_section +#define bfd_mach_o_bfd_link_hash_table_create _bfd_generic_link_hash_table_create +#define bfd_mach_o_bfd_link_hash_table_free _bfd_generic_link_hash_table_free +#define bfd_mach_o_bfd_link_add_symbols _bfd_generic_link_add_symbols +#define bfd_mach_o_bfd_link_just_syms _bfd_generic_link_just_syms +#define bfd_mach_o_bfd_final_link _bfd_generic_final_link +#define bfd_mach_o_bfd_link_split_section _bfd_generic_link_split_section +#define bfd_mach_o_set_arch_mach bfd_default_set_arch_mach +#define bfd_mach_o_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data +#define bfd_mach_o_bfd_set_private_flags _bfd_generic_bfd_set_private_flags +#define bfd_mach_o_bfd_print_private_bfd_data _bfd_generic_bfd_print_private_bfd_data +#define bfd_mach_o_get_section_contents _bfd_generic_get_section_contents +#define bfd_mach_o_set_section_contents _bfd_generic_set_section_contents +#define bfd_mach_o_bfd_gc_sections bfd_generic_gc_sections +#define bfd_mach_o_bfd_merge_sections bfd_generic_merge_sections +#define bfd_mach_o_bfd_is_group_section bfd_generic_is_group_section +#define bfd_mach_o_bfd_discard_group bfd_generic_discard_group +#define bfd_mach_o_section_already_linked _bfd_generic_section_already_linked +#define bfd_mach_o_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data + /* The flags field of a section structure is separated into two parts a section type and section attributes. The section types are mutually exclusive (it @@ -165,8 +104,7 @@ static const char * bfd_mach_o_ppc_flavour_string #define N_INDR 0xa bfd_boolean -bfd_mach_o_valid (abfd) - bfd *abfd; +bfd_mach_o_valid (bfd *abfd) { if (abfd == NULL || abfd->xvec == NULL) return 0; @@ -185,11 +123,10 @@ bfd_mach_o_valid (abfd) to the output symbol. */ static bfd_boolean -bfd_mach_o_bfd_copy_private_symbol_data (ibfd, isymbol, obfd, osymbol) - bfd *ibfd ATTRIBUTE_UNUSED; - asymbol *isymbol ATTRIBUTE_UNUSED; - bfd *obfd ATTRIBUTE_UNUSED; - asymbol *osymbol ATTRIBUTE_UNUSED; +bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED, + asymbol *isymbol ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + asymbol *osymbol ATTRIBUTE_UNUSED) { return TRUE; } @@ -198,11 +135,10 @@ bfd_mach_o_bfd_copy_private_symbol_data (ibfd, isymbol, obfd, osymbol) to the output section. */ static bfd_boolean -bfd_mach_o_bfd_copy_private_section_data (ibfd, isection, obfd, osection) - bfd *ibfd ATTRIBUTE_UNUSED; - asection *isection ATTRIBUTE_UNUSED; - bfd *obfd ATTRIBUTE_UNUSED; - asection *osection ATTRIBUTE_UNUSED; +bfd_mach_o_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED, + asection *isection ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + asection *osection ATTRIBUTE_UNUSED) { return TRUE; } @@ -211,9 +147,7 @@ bfd_mach_o_bfd_copy_private_section_data (ibfd, isection, obfd, osection) to the output bfd. */ static bfd_boolean -bfd_mach_o_bfd_copy_private_bfd_data (ibfd, obfd) - bfd *ibfd; - bfd *obfd; +bfd_mach_o_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd) { BFD_ASSERT (bfd_mach_o_valid (ibfd)); BFD_ASSERT (bfd_mach_o_valid (obfd)); @@ -224,8 +158,7 @@ bfd_mach_o_bfd_copy_private_bfd_data (ibfd, obfd) } static long -bfd_mach_o_count_symbols (abfd) - bfd *abfd; +bfd_mach_o_count_symbols (bfd *abfd) { bfd_mach_o_data_struct *mdata = NULL; long nsyms = 0; @@ -245,8 +178,7 @@ bfd_mach_o_count_symbols (abfd) } static long -bfd_mach_o_get_symtab_upper_bound (abfd) - bfd *abfd; +bfd_mach_o_get_symtab_upper_bound (bfd *abfd) { long nsyms = bfd_mach_o_count_symbols (abfd); @@ -257,9 +189,7 @@ bfd_mach_o_get_symtab_upper_bound (abfd) } static long -bfd_mach_o_canonicalize_symtab (abfd, alocation) - bfd *abfd; - asymbol **alocation; +bfd_mach_o_canonicalize_symtab (bfd *abfd, asymbol **alocation) { bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; long nsyms = bfd_mach_o_count_symbols (abfd); @@ -297,20 +227,18 @@ bfd_mach_o_canonicalize_symtab (abfd, alocation) } static void -bfd_mach_o_get_symbol_info (abfd, symbol, ret) - bfd *abfd ATTRIBUTE_UNUSED; - asymbol *symbol; - symbol_info *ret; +bfd_mach_o_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, + asymbol *symbol, + symbol_info *ret) { bfd_symbol_info (symbol, ret); } static void -bfd_mach_o_print_symbol (abfd, afile, symbol, how) - bfd *abfd; - PTR afile; - asymbol *symbol; - bfd_print_symbol_type how; +bfd_mach_o_print_symbol (bfd *abfd, + PTR afile, + asymbol *symbol, + bfd_print_symbol_type how) { FILE *file = (FILE *) afile; @@ -326,11 +254,10 @@ bfd_mach_o_print_symbol (abfd, afile, symbol, how) } static void -bfd_mach_o_convert_architecture (mtype, msubtype, type, subtype) - bfd_mach_o_cpu_type mtype; - bfd_mach_o_cpu_subtype msubtype ATTRIBUTE_UNUSED; - enum bfd_architecture *type; - unsigned long *subtype; +bfd_mach_o_convert_architecture (bfd_mach_o_cpu_type mtype, + bfd_mach_o_cpu_subtype msubtype ATTRIBUTE_UNUSED, + enum bfd_architecture *type, + unsigned long *subtype) { *subtype = bfd_arch_unknown; @@ -360,55 +287,221 @@ bfd_mach_o_convert_architecture (mtype, msubtype, type, subtype) } } -static bfd_boolean -bfd_mach_o_write_contents (abfd) - bfd *abfd; +static int +bfd_mach_o_write_header (bfd *abfd, bfd_mach_o_header *header) { - unsigned int i; - asection *s; + unsigned char buf[28]; - bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; + bfd_h_put_32 (abfd, header->magic, buf + 0); + bfd_h_put_32 (abfd, header->cputype, buf + 4); + bfd_h_put_32 (abfd, header->cpusubtype, buf + 8); + bfd_h_put_32 (abfd, header->filetype, buf + 12); + bfd_h_put_32 (abfd, header->ncmds, buf + 16); + bfd_h_put_32 (abfd, header->sizeofcmds, buf + 20); + bfd_h_put_32 (abfd, header->flags, buf + 24); - /* Write data sections first in case they overlap header data to be - written later. */ + bfd_seek (abfd, 0, SEEK_SET); + if (bfd_bwrite ((PTR) buf, 28, abfd) != 28) + return -1; - for (s = abfd->sections; s != (asection *) NULL; s = s->next) - ; + return 0; +} -#if 0 - for (i = 0; i < mdata->header.ncmds; i++) +static int +bfd_mach_o_scan_write_thread (bfd *abfd, + bfd_mach_o_load_command *command) +{ + bfd_mach_o_thread_command *cmd = &command->command.thread; + unsigned int i; + unsigned char buf[8]; + bfd_vma offset; + unsigned int nflavours; + + BFD_ASSERT ((command->type == BFD_MACH_O_LC_THREAD) + || (command->type == BFD_MACH_O_LC_UNIXTHREAD)); + + offset = 8; + nflavours = 0; + for (i = 0; i < cmd->nflavours; i++) { - bfd_mach_o_load_command *cur = &mdata->commands[i]; - if (cur->type != BFD_MACH_O_LC_SEGMENT) - break; + BFD_ASSERT ((cmd->flavours[i].size % 4) == 0); + BFD_ASSERT (cmd->flavours[i].offset == (command->offset + offset + 8)); - { - bfd_mach_o_segment_command *seg = &cur->command.segment; - char buf[1024]; - bfd_vma nbytes = seg->filesize; - bfd_vma curoff = seg->fileoff; + bfd_h_put_32 (abfd, cmd->flavours[i].flavour, buf); + bfd_h_put_32 (abfd, (cmd->flavours[i].size / 4), buf + 4); + + bfd_seek (abfd, command->offset + offset, SEEK_SET); + if (bfd_bwrite ((PTR) buf, 8, abfd) != 8) + return -1; + + offset += cmd->flavours[i].size + 8; + } + + return 0; +} + +static int +bfd_mach_o_scan_write_section (bfd *abfd, + bfd_mach_o_section *section, + bfd_vma offset) +{ + unsigned char buf[68]; + + memcpy (buf, section->sectname, 16); + memcpy (buf + 16, section->segname, 16); + bfd_h_put_32 (abfd, section->addr, buf + 32); + bfd_h_put_32 (abfd, section->size, buf + 36); + bfd_h_put_32 (abfd, section->offset, buf + 40); + bfd_h_put_32 (abfd, section->align, buf + 44); + bfd_h_put_32 (abfd, section->reloff, buf + 48); + bfd_h_put_32 (abfd, section->nreloc, buf + 52); + bfd_h_put_32 (abfd, section->flags, buf + 56); + /* bfd_h_put_32 (abfd, section->reserved1, buf + 60); */ + /* bfd_h_put_32 (abfd, section->reserved2, buf + 64); */ + + bfd_seek (abfd, offset, SEEK_SET); + if (bfd_bwrite ((PTR) buf, 68, abfd) != 68) + return -1; + + return 0; +} + +static int +bfd_mach_o_scan_write_segment (bfd *abfd, bfd_mach_o_load_command *command) +{ + unsigned char buf[48]; + bfd_mach_o_segment_command *seg = &command->command.segment; + unsigned long i; + + BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT); + + memcpy (buf, seg->segname, 16); + bfd_h_put_32 (abfd, seg->vmaddr, buf + 16); + bfd_h_put_32 (abfd, seg->vmsize, buf + 20); + bfd_h_put_32 (abfd, seg->fileoff, buf + 24); + bfd_h_put_32 (abfd, seg->filesize, buf + 28); + bfd_h_put_32 (abfd, 0 /* seg->maxprot */, buf + 32); + bfd_h_put_32 (abfd, 0 /* seg->initprot */, buf + 36); + bfd_h_put_32 (abfd, seg->nsects, buf + 40); + bfd_h_put_32 (abfd, seg->flags, buf + 44); + + bfd_seek (abfd, command->offset + 8, SEEK_SET); + if (bfd_bwrite ((PTR) buf, 48, abfd) != 48) + return -1; + + { + char buf[1024]; + bfd_vma nbytes = seg->filesize; + bfd_vma curoff = seg->fileoff; - while (nbytes > 0) - { - bfd_vma thisread = nbytes; + while (nbytes > 0) + { + bfd_vma thisread = nbytes; - if (thisread > 1024) - thisread = 1024; + if (thisread > 1024) + thisread = 1024; - bfd_seek (abfd, curoff, SEEK_SET); - if (bfd_bread ((PTR) buf, thisread, abfd) != thisread) - return FALSE; + bfd_seek (abfd, curoff, SEEK_SET); + if (bfd_bread ((PTR) buf, thisread, abfd) != thisread) + return -1; - bfd_seek (abfd, curoff, SEEK_SET); - if (bfd_bwrite ((PTR) buf, thisread, abfd) != thisread) - return FALSE; + bfd_seek (abfd, curoff, SEEK_SET); + if (bfd_bwrite ((PTR) buf, thisread, abfd) != thisread) + return -1; - nbytes -= thisread; - curoff += thisread; - } + nbytes -= thisread; + curoff += thisread; } } -#endif + + for (i = 0; i < seg->nsects; i++) + { + bfd_vma segoff = command->offset + 48 + 8 + (i * 68); + + if (bfd_mach_o_scan_write_section (abfd, &seg->sections[i], segoff) != 0) + return -1; + } + + return 0; +} + +static int +bfd_mach_o_scan_write_symtab_symbols (bfd *abfd, + bfd_mach_o_load_command *command) +{ + bfd_mach_o_symtab_command *sym = &command->command.symtab; + asymbol *s = NULL; + unsigned long i; + + for (i = 0; i < sym->nsyms; i++) + { + unsigned char buf[12]; + bfd_vma symoff = sym->symoff + (i * 12); + unsigned char ntype = 0; + unsigned char nsect = 0; + short ndesc = 0; + + s = &sym->symbols[i]; + + /* Instead just set from the stored values. */ + ntype = (s->udata.i >> 24) & 0xff; + nsect = (s->udata.i >> 16) & 0xff; + ndesc = s->udata.i & 0xffff; + + bfd_h_put_32 (abfd, s->name - sym->strtab, buf); + bfd_h_put_8 (abfd, ntype, buf + 4); + bfd_h_put_8 (abfd, nsect, buf + 5); + bfd_h_put_16 (abfd, ndesc, buf + 6); + bfd_h_put_32 (abfd, s->section->vma + s->value, buf + 8); + + bfd_seek (abfd, symoff, SEEK_SET); + if (bfd_bwrite ((PTR) buf, 12, abfd) != 12) + { + fprintf (stderr, "bfd_mach_o_scan_write_symtab_symbols: unable to write %d bytes at %lu\n", + 12, (unsigned long) symoff); + return -1; + } + } + + return 0; +} + +static int +bfd_mach_o_scan_write_symtab (bfd *abfd, bfd_mach_o_load_command *command) +{ + bfd_mach_o_symtab_command *seg = &command->command.symtab; + unsigned char buf[16]; + + BFD_ASSERT (command->type == BFD_MACH_O_LC_SYMTAB); + + bfd_h_put_32 (abfd, seg->symoff, buf); + bfd_h_put_32 (abfd, seg->nsyms, buf + 4); + bfd_h_put_32 (abfd, seg->stroff, buf + 8); + bfd_h_put_32 (abfd, seg->strsize, buf + 12); + + bfd_seek (abfd, command->offset + 8, SEEK_SET); + if (bfd_bwrite ((PTR) buf, 16, abfd) != 16) + return -1; + + if (bfd_mach_o_scan_write_symtab_symbols (abfd, command) != 0) + return -1; + + return 0; +} + +static bfd_boolean +bfd_mach_o_write_contents (bfd *abfd) +{ + unsigned int i; + asection *s; + + bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; + + /* Write data sections first in case they overlap header data to be + written later. */ + + for (s = abfd->sections; s != (asection *) NULL; s = s->next) + ; /* Now write header information. */ if (bfd_mach_o_write_header (abfd, &mdata->header) != 0) @@ -473,9 +566,8 @@ bfd_mach_o_write_contents (abfd) } static int -bfd_mach_o_sizeof_headers (a, b) - bfd *a ATTRIBUTE_UNUSED; - bfd_boolean b ATTRIBUTE_UNUSED; +bfd_mach_o_sizeof_headers (bfd *a ATTRIBUTE_UNUSED, + bfd_boolean b ATTRIBUTE_UNUSED) { return 0; } @@ -484,12 +576,11 @@ bfd_mach_o_sizeof_headers (a, b) bfd_make_section_anyway wants to create a symbol for the section. */ static asymbol * -bfd_mach_o_make_empty_symbol (abfd) - bfd *abfd; +bfd_mach_o_make_empty_symbol (bfd *abfd) { asymbol *new; - new = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol)); + new = bfd_zalloc (abfd, sizeof (* new)); if (new == NULL) return new; new->the_bfd = abfd; @@ -497,31 +588,7 @@ bfd_mach_o_make_empty_symbol (abfd) } static int -bfd_mach_o_write_header (abfd, header) - bfd *abfd; - bfd_mach_o_header *header; -{ - unsigned char buf[28]; - - bfd_h_put_32 (abfd, header->magic, buf + 0); - bfd_h_put_32 (abfd, header->cputype, buf + 4); - bfd_h_put_32 (abfd, header->cpusubtype, buf + 8); - bfd_h_put_32 (abfd, header->filetype, buf + 12); - bfd_h_put_32 (abfd, header->ncmds, buf + 16); - bfd_h_put_32 (abfd, header->sizeofcmds, buf + 20); - bfd_h_put_32 (abfd, header->flags, buf + 24); - - bfd_seek (abfd, 0, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 28, abfd) != 28) - return -1; - - return 0; -} - -static int -bfd_mach_o_read_header (abfd, header) - bfd *abfd; - bfd_mach_o_header *header; +bfd_mach_o_read_header (bfd *abfd, bfd_mach_o_header *header) { unsigned char buf[28]; bfd_vma (*get32) (const void *) = NULL; @@ -560,9 +627,7 @@ bfd_mach_o_read_header (abfd, header) } static asection * -bfd_mach_o_make_bfd_section (abfd, section) - bfd *abfd; - bfd_mach_o_section *section; +bfd_mach_o_make_bfd_section (bfd *abfd, bfd_mach_o_section *section) { asection *bfdsec; char *sname; @@ -573,7 +638,7 @@ bfd_mach_o_make_bfd_section (abfd, section) + strlen (section->segname) + 1 + strlen (section->sectname) + 1; - sname = (char *) bfd_alloc (abfd, snamelen); + sname = bfd_alloc (abfd, snamelen); if (sname == NULL) return NULL; sprintf (sname, "%s.%s.%s", prefix, section->segname, section->sectname); @@ -584,7 +649,7 @@ bfd_mach_o_make_bfd_section (abfd, section) bfdsec->vma = section->addr; bfdsec->lma = section->addr; - bfdsec->_raw_size = section->size; + bfdsec->size = section->size; bfdsec->filepos = section->offset; bfdsec->alignment_power = section->align; @@ -597,10 +662,9 @@ bfd_mach_o_make_bfd_section (abfd, section) } static int -bfd_mach_o_scan_read_section (abfd, section, offset) - bfd *abfd; - bfd_mach_o_section *section; - bfd_vma offset; +bfd_mach_o_scan_read_section (bfd *abfd, + bfd_mach_o_section *section, + bfd_vma offset) { unsigned char buf[68]; @@ -629,96 +693,11 @@ bfd_mach_o_scan_read_section (abfd, section, offset) return 0; } -static int -bfd_mach_o_scan_write_section (abfd, section, offset) - bfd *abfd; - bfd_mach_o_section *section; - bfd_vma offset; -{ - unsigned char buf[68]; - - memcpy (buf, section->sectname, 16); - memcpy (buf + 16, section->segname, 16); - bfd_h_put_32 (abfd, section->addr, buf + 32); - bfd_h_put_32 (abfd, section->size, buf + 36); - bfd_h_put_32 (abfd, section->offset, buf + 40); - bfd_h_put_32 (abfd, section->align, buf + 44); - bfd_h_put_32 (abfd, section->reloff, buf + 48); - bfd_h_put_32 (abfd, section->nreloc, buf + 52); - bfd_h_put_32 (abfd, section->flags, buf + 56); - /* bfd_h_put_32 (abfd, section->reserved1, buf + 60); */ - /* bfd_h_put_32 (abfd, section->reserved2, buf + 64); */ - - bfd_seek (abfd, offset, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 68, abfd) != 68) - return -1; - - return 0; -} - -static int -bfd_mach_o_scan_write_symtab_symbols (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; -{ - bfd_mach_o_symtab_command *sym = &command->command.symtab; - asymbol *s = NULL; - unsigned long i; - - for (i = 0; i < sym->nsyms; i++) - { - unsigned char buf[12]; - bfd_vma symoff = sym->symoff + (i * 12); - unsigned char ntype = 0; - unsigned char nsect = 0; - short ndesc = 0; - - s = &sym->symbols[i]; - - /* Don't set this from the symbol information; use stored values. */ -#if 0 - if (s->flags & BSF_GLOBAL) - ntype |= N_EXT; - if (s->flags & BSF_DEBUGGING) - ntype |= N_STAB; - - if (s->section == bfd_und_section_ptr) - ntype |= N_UNDF; - else if (s->section == bfd_abs_section_ptr) - ntype |= N_ABS; - else - ntype |= N_SECT; -#endif - - /* Instead just set from the stored values. */ - ntype = (s->udata.i >> 24) & 0xff; - nsect = (s->udata.i >> 16) & 0xff; - ndesc = s->udata.i & 0xffff; - - bfd_h_put_32 (abfd, s->name - sym->strtab, buf); - bfd_h_put_8 (abfd, ntype, buf + 4); - bfd_h_put_8 (abfd, nsect, buf + 5); - bfd_h_put_16 (abfd, ndesc, buf + 6); - bfd_h_put_32 (abfd, s->section->vma + s->value, buf + 8); - - bfd_seek (abfd, symoff, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 12, abfd) != 12) - { - fprintf (stderr, "bfd_mach_o_scan_write_symtab_symbols: unable to write %d bytes at %lu\n", - 12, (unsigned long) symoff); - return -1; - } - } - - return 0; -} - int -bfd_mach_o_scan_read_symtab_symbol (abfd, sym, s, i) - bfd *abfd; - bfd_mach_o_symtab_command *sym; - asymbol *s; - unsigned long i; +bfd_mach_o_scan_read_symtab_symbol (bfd *abfd, + bfd_mach_o_symtab_command *sym, + asymbol *s, + unsigned long i) { bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; bfd_vma symoff = sym->symoff + (i * 12); @@ -827,9 +806,8 @@ bfd_mach_o_scan_read_symtab_symbol (abfd, sym, s, i) } int -bfd_mach_o_scan_read_symtab_strtab (abfd, sym) - bfd *abfd; - bfd_mach_o_symtab_command *sym; +bfd_mach_o_scan_read_symtab_strtab (bfd *abfd, + bfd_mach_o_symtab_command *sym) { BFD_ASSERT (sym->strtab == NULL); @@ -844,7 +822,7 @@ bfd_mach_o_scan_read_symtab_strtab (abfd, sym) bfd_set_error (bfd_error_file_truncated); return -1; } - sym->strtab = b->buffer + sym->stroff; + sym->strtab = (char *) b->buffer + sym->stroff; return 0; } @@ -864,9 +842,8 @@ bfd_mach_o_scan_read_symtab_strtab (abfd, sym) } int -bfd_mach_o_scan_read_symtab_symbols (abfd, sym) - bfd *abfd; - bfd_mach_o_symtab_command *sym; +bfd_mach_o_scan_read_symtab_symbols (bfd *abfd, + bfd_mach_o_symtab_command *sym) { unsigned long i; int ret; @@ -895,12 +872,11 @@ bfd_mach_o_scan_read_symtab_symbols (abfd, sym) } int -bfd_mach_o_scan_read_dysymtab_symbol (abfd, dysym, sym, s, i) - bfd *abfd; - bfd_mach_o_dysymtab_command *dysym; - bfd_mach_o_symtab_command *sym; - asymbol *s; - unsigned long i; +bfd_mach_o_scan_read_dysymtab_symbol (bfd *abfd, + bfd_mach_o_dysymtab_command *dysym, + bfd_mach_o_symtab_command *sym, + asymbol *s, + unsigned long i) { unsigned long isymoff = dysym->indirectsymoff + (i * 4); unsigned long symindex; @@ -921,8 +897,7 @@ bfd_mach_o_scan_read_dysymtab_symbol (abfd, dysym, sym, s, i) } static const char * -bfd_mach_o_i386_flavour_string (flavour) - unsigned int flavour; +bfd_mach_o_i386_flavour_string (unsigned int flavour) { switch ((int) flavour) { @@ -943,8 +918,7 @@ bfd_mach_o_i386_flavour_string (flavour) } static const char * -bfd_mach_o_ppc_flavour_string (flavour) - unsigned int flavour; +bfd_mach_o_ppc_flavour_string (unsigned int flavour) { switch ((int) flavour) { @@ -957,43 +931,8 @@ bfd_mach_o_ppc_flavour_string (flavour) } static int -bfd_mach_o_scan_write_thread (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; -{ - bfd_mach_o_thread_command *cmd = &command->command.thread; - unsigned int i; - unsigned char buf[8]; - bfd_vma offset; - unsigned int nflavours; - - BFD_ASSERT ((command->type == BFD_MACH_O_LC_THREAD) - || (command->type == BFD_MACH_O_LC_UNIXTHREAD)); - - offset = 8; - nflavours = 0; - for (i = 0; i < cmd->nflavours; i++) - { - BFD_ASSERT ((cmd->flavours[i].size % 4) == 0); - BFD_ASSERT (cmd->flavours[i].offset == (command->offset + offset + 8)); - - bfd_h_put_32 (abfd, cmd->flavours[i].flavour, buf); - bfd_h_put_32 (abfd, (cmd->flavours[i].size / 4), buf + 4); - - bfd_seek (abfd, command->offset + offset, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 8, abfd) != 8) - return -1; - - offset += cmd->flavours[i].size + 8; - } - - return 0; -} - -static int -bfd_mach_o_scan_read_dylinker (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; +bfd_mach_o_scan_read_dylinker (bfd *abfd, + bfd_mach_o_load_command *command) { bfd_mach_o_dylinker_command *cmd = &command->command.dylinker; unsigned char buf[4]; @@ -1021,7 +960,7 @@ bfd_mach_o_scan_read_dylinker (abfd, command) else abort (); - sname = (char *) bfd_alloc (abfd, strlen (prefix) + 1); + sname = bfd_alloc (abfd, strlen (prefix) + 1); if (sname == NULL) return -1; strcpy (sname, prefix); @@ -1032,7 +971,7 @@ bfd_mach_o_scan_read_dylinker (abfd, command) bfdsec->vma = 0; bfdsec->lma = 0; - bfdsec->_raw_size = command->len - 8; + bfdsec->size = command->len - 8; bfdsec->filepos = command->offset + 8; bfdsec->alignment_power = 0; bfdsec->flags = SEC_HAS_CONTENTS; @@ -1043,9 +982,7 @@ bfd_mach_o_scan_read_dylinker (abfd, command) } static int -bfd_mach_o_scan_read_dylib (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; +bfd_mach_o_scan_read_dylib (bfd *abfd, bfd_mach_o_load_command *command) { bfd_mach_o_dylib_command *cmd = &command->command.dylib; unsigned char buf[16]; @@ -1079,7 +1016,7 @@ bfd_mach_o_scan_read_dylib (abfd, command) else abort (); - sname = (char *) bfd_alloc (abfd, strlen (prefix) + 1); + sname = bfd_alloc (abfd, strlen (prefix) + 1); if (sname == NULL) return -1; strcpy (sname, prefix); @@ -1090,7 +1027,7 @@ bfd_mach_o_scan_read_dylib (abfd, command) bfdsec->vma = 0; bfdsec->lma = 0; - bfdsec->_raw_size = command->len - 8; + bfdsec->size = command->len - 8; bfdsec->filepos = command->offset + 8; bfdsec->alignment_power = 0; bfdsec->flags = SEC_HAS_CONTENTS; @@ -1101,9 +1038,8 @@ bfd_mach_o_scan_read_dylib (abfd, command) } static int -bfd_mach_o_scan_read_prebound_dylib (abfd, command) - bfd *abfd ATTRIBUTE_UNUSED; - bfd_mach_o_load_command *command ATTRIBUTE_UNUSED; +bfd_mach_o_scan_read_prebound_dylib (bfd *abfd ATTRIBUTE_UNUSED, + bfd_mach_o_load_command *command ATTRIBUTE_UNUSED) { /* bfd_mach_o_prebound_dylib_command *cmd = &command->command.prebound_dylib; */ @@ -1112,9 +1048,7 @@ bfd_mach_o_scan_read_prebound_dylib (abfd, command) } static int -bfd_mach_o_scan_read_thread (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; +bfd_mach_o_scan_read_thread (bfd *abfd, bfd_mach_o_load_command *command) { bfd_mach_o_data_struct *mdata = NULL; bfd_mach_o_thread_command *cmd = &command->command.thread; @@ -1145,9 +1079,7 @@ bfd_mach_o_scan_read_thread (abfd, command) nflavours++; } - cmd->flavours = - ((bfd_mach_o_thread_flavour *) - bfd_alloc (abfd, nflavours * sizeof (bfd_mach_o_thread_flavour))); + cmd->flavours = bfd_alloc (abfd, nflavours * sizeof (bfd_mach_o_thread_flavour)); if (cmd->flavours == NULL) return -1; cmd->nflavours = nflavours; @@ -1197,7 +1129,7 @@ bfd_mach_o_scan_read_thread (abfd, command) } snamelen = strlen (prefix) + 1 + 20 + 1 + strlen (flavourstr) + 1; - sname = (char *) bfd_alloc (abfd, snamelen); + sname = bfd_alloc (abfd, snamelen); if (sname == NULL) return -1; @@ -1213,7 +1145,7 @@ bfd_mach_o_scan_read_thread (abfd, command) bfdsec->vma = 0; bfdsec->lma = 0; - bfdsec->_raw_size = cmd->flavours[i].size; + bfdsec->size = cmd->flavours[i].size; bfdsec->filepos = cmd->flavours[i].offset; bfdsec->alignment_power = 0x0; bfdsec->flags = SEC_HAS_CONTENTS; @@ -1225,34 +1157,7 @@ bfd_mach_o_scan_read_thread (abfd, command) } static int -bfd_mach_o_scan_write_symtab (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; -{ - bfd_mach_o_symtab_command *seg = &command->command.symtab; - unsigned char buf[16]; - - BFD_ASSERT (command->type == BFD_MACH_O_LC_SYMTAB); - - bfd_h_put_32 (abfd, seg->symoff, buf); - bfd_h_put_32 (abfd, seg->nsyms, buf + 4); - bfd_h_put_32 (abfd, seg->stroff, buf + 8); - bfd_h_put_32 (abfd, seg->strsize, buf + 12); - - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 16, abfd) != 16) - return -1; - - if (bfd_mach_o_scan_write_symtab_symbols (abfd, command) != 0) - return -1; - - return 0; -} - -static int -bfd_mach_o_scan_read_dysymtab (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; +bfd_mach_o_scan_read_dysymtab (bfd *abfd, bfd_mach_o_load_command *command) { bfd_mach_o_dysymtab_command *seg = &command->command.dysymtab; unsigned char buf[72]; @@ -1286,9 +1191,7 @@ bfd_mach_o_scan_read_dysymtab (abfd, command) } static int -bfd_mach_o_scan_read_symtab (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; +bfd_mach_o_scan_read_symtab (bfd *abfd, bfd_mach_o_load_command *command) { bfd_mach_o_symtab_command *seg = &command->command.symtab; unsigned char buf[16]; @@ -1309,7 +1212,7 @@ bfd_mach_o_scan_read_symtab (abfd, command) seg->symbols = NULL; seg->strtab = NULL; - sname = (char *) bfd_alloc (abfd, strlen (prefix) + 1); + sname = bfd_alloc (abfd, strlen (prefix) + 1); if (sname == NULL) return -1; strcpy (sname, prefix); @@ -1320,7 +1223,7 @@ bfd_mach_o_scan_read_symtab (abfd, command) bfdsec->vma = 0; bfdsec->lma = 0; - bfdsec->_raw_size = seg->nsyms * 12; + bfdsec->size = seg->nsyms * 12; bfdsec->filepos = seg->symoff; bfdsec->alignment_power = 0; bfdsec->flags = SEC_HAS_CONTENTS; @@ -1328,7 +1231,7 @@ bfd_mach_o_scan_read_symtab (abfd, command) seg->stabs_segment = bfdsec; prefix = "LC_SYMTAB.stabstr"; - sname = (char *) bfd_alloc (abfd, strlen (prefix) + 1); + sname = bfd_alloc (abfd, strlen (prefix) + 1); if (sname == NULL) return -1; strcpy (sname, prefix); @@ -1339,7 +1242,7 @@ bfd_mach_o_scan_read_symtab (abfd, command) bfdsec->vma = 0; bfdsec->lma = 0; - bfdsec->_raw_size = seg->strsize; + bfdsec->size = seg->strsize; bfdsec->filepos = seg->stroff; bfdsec->alignment_power = 0; bfdsec->flags = SEC_HAS_CONTENTS; @@ -1350,9 +1253,7 @@ bfd_mach_o_scan_read_symtab (abfd, command) } static int -bfd_mach_o_scan_read_segment (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; +bfd_mach_o_scan_read_segment (bfd *abfd, bfd_mach_o_load_command *command) { unsigned char buf[48]; bfd_mach_o_segment_command *seg = &command->command.segment; @@ -1379,7 +1280,7 @@ bfd_mach_o_scan_read_segment (abfd, command) seg->flags = bfd_h_get_32 (abfd, buf + 44); snamelen = strlen (prefix) + 1 + strlen (seg->segname) + 1; - sname = (char *) bfd_alloc (abfd, snamelen); + sname = bfd_alloc (abfd, snamelen); if (sname == NULL) return -1; sprintf (sname, "%s.%s", prefix, seg->segname); @@ -1390,7 +1291,7 @@ bfd_mach_o_scan_read_segment (abfd, command) bfdsec->vma = seg->vmaddr; bfdsec->lma = seg->vmaddr; - bfdsec->_raw_size = seg->filesize; + bfdsec->size = seg->filesize; bfdsec->filepos = seg->fileoff; bfdsec->alignment_power = 0x0; bfdsec->flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_CODE; @@ -1399,9 +1300,7 @@ bfd_mach_o_scan_read_segment (abfd, command) if (seg->nsects != 0) { - seg->sections = - ((bfd_mach_o_section *) - bfd_alloc (abfd, seg->nsects * sizeof (bfd_mach_o_section))); + seg->sections = bfd_alloc (abfd, seg->nsects * sizeof (bfd_mach_o_section)); if (seg->sections == NULL) return -1; @@ -1419,70 +1318,7 @@ bfd_mach_o_scan_read_segment (abfd, command) } static int -bfd_mach_o_scan_write_segment (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; -{ - unsigned char buf[48]; - bfd_mach_o_segment_command *seg = &command->command.segment; - unsigned long i; - - BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT); - - memcpy (buf, seg->segname, 16); - bfd_h_put_32 (abfd, seg->vmaddr, buf + 16); - bfd_h_put_32 (abfd, seg->vmsize, buf + 20); - bfd_h_put_32 (abfd, seg->fileoff, buf + 24); - bfd_h_put_32 (abfd, seg->filesize, buf + 28); - bfd_h_put_32 (abfd, 0 /* seg->maxprot */, buf + 32); - bfd_h_put_32 (abfd, 0 /* seg->initprot */, buf + 36); - bfd_h_put_32 (abfd, seg->nsects, buf + 40); - bfd_h_put_32 (abfd, seg->flags, buf + 44); - - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 48, abfd) != 48) - return -1; - - { - char buf[1024]; - bfd_vma nbytes = seg->filesize; - bfd_vma curoff = seg->fileoff; - - while (nbytes > 0) - { - bfd_vma thisread = nbytes; - - if (thisread > 1024) - thisread = 1024; - - bfd_seek (abfd, curoff, SEEK_SET); - if (bfd_bread ((PTR) buf, thisread, abfd) != thisread) - return -1; - - bfd_seek (abfd, curoff, SEEK_SET); - if (bfd_bwrite ((PTR) buf, thisread, abfd) != thisread) - return -1; - - nbytes -= thisread; - curoff += thisread; - } - } - - for (i = 0; i < seg->nsects; i++) - { - bfd_vma segoff = command->offset + 48 + 8 + (i * 68); - - if (bfd_mach_o_scan_write_section (abfd, &seg->sections[i], segoff) != 0) - return -1; - } - - return 0; -} - -static int -bfd_mach_o_scan_read_command (abfd, command) - bfd *abfd; - bfd_mach_o_load_command *command; +bfd_mach_o_scan_read_command (bfd *abfd, bfd_mach_o_load_command *command) { unsigned char buf[8]; @@ -1555,8 +1391,7 @@ bfd_mach_o_scan_read_command (abfd, command) } static void -bfd_mach_o_flatten_sections (abfd) - bfd *abfd; +bfd_mach_o_flatten_sections (bfd *abfd) { bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; long csect = 0; @@ -1595,8 +1430,7 @@ bfd_mach_o_flatten_sections (abfd) } int -bfd_mach_o_scan_start_address (abfd) - bfd *abfd; +bfd_mach_o_scan_start_address (bfd *abfd) { bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; bfd_mach_o_thread_command *cmd = NULL; @@ -1650,10 +1484,9 @@ bfd_mach_o_scan_start_address (abfd) } int -bfd_mach_o_scan (abfd, header, mdata) - bfd *abfd; - bfd_mach_o_header *header; - bfd_mach_o_data_struct *mdata; +bfd_mach_o_scan (bfd *abfd, + bfd_mach_o_header *header, + bfd_mach_o_data_struct *mdata) { unsigned int i; enum bfd_architecture cputype; @@ -1679,9 +1512,7 @@ bfd_mach_o_scan (abfd, header, mdata) if (header->ncmds != 0) { - mdata->commands = - ((bfd_mach_o_load_command *) - bfd_alloc (abfd, header->ncmds * sizeof (bfd_mach_o_load_command))); + mdata->commands = bfd_alloc (abfd, header->ncmds * sizeof (bfd_mach_o_load_command)); if (mdata->commands == NULL) return -1; @@ -1703,28 +1534,18 @@ bfd_mach_o_scan (abfd, header, mdata) } if (bfd_mach_o_scan_start_address (abfd) < 0) - { -#if 0 - fprintf (stderr, "bfd_mach_o_scan: unable to scan start address: %s\n", - bfd_errmsg (bfd_get_error ())); - abfd->tdata.mach_o_data = NULL; - return -1; -#endif - } + return -1; bfd_mach_o_flatten_sections (abfd); - return 0; } bfd_boolean -bfd_mach_o_mkobject (abfd) - bfd *abfd; +bfd_mach_o_mkobject (bfd *abfd) { bfd_mach_o_data_struct *mdata = NULL; - mdata = ((bfd_mach_o_data_struct *) - bfd_alloc (abfd, sizeof (bfd_mach_o_data_struct))); + mdata = bfd_alloc (abfd, sizeof (bfd_mach_o_data_struct)); if (mdata == NULL) return FALSE; abfd->tdata.mach_o_data = mdata; @@ -1748,8 +1569,7 @@ bfd_mach_o_mkobject (abfd) } const bfd_target * -bfd_mach_o_object_p (abfd) - bfd *abfd; +bfd_mach_o_object_p (bfd *abfd) { struct bfd_preserve preserve; bfd_mach_o_header header; @@ -1796,8 +1616,7 @@ bfd_mach_o_object_p (abfd) } const bfd_target * -bfd_mach_o_core_p (abfd) - bfd *abfd; +bfd_mach_o_core_p (bfd *abfd) { struct bfd_preserve preserve; bfd_mach_o_header header; @@ -1864,8 +1683,7 @@ typedef struct mach_o_fat_data_struct } mach_o_fat_data_struct; const bfd_target * -bfd_mach_o_archive_p (abfd) - bfd *abfd; +bfd_mach_o_archive_p (bfd *abfd) { mach_o_fat_data_struct *adata = NULL; unsigned char buf[20]; @@ -1875,8 +1693,7 @@ bfd_mach_o_archive_p (abfd) if (bfd_bread ((PTR) buf, 8, abfd) != 8) goto error; - adata = (mach_o_fat_data_struct *) - bfd_alloc (abfd, sizeof (mach_o_fat_data_struct)); + adata = bfd_alloc (abfd, sizeof (mach_o_fat_data_struct)); if (adata == NULL) goto error; @@ -1885,7 +1702,7 @@ bfd_mach_o_archive_p (abfd) if (adata->magic != 0xcafebabe) goto error; - adata->archentries = (mach_o_fat_archentry *) + adata->archentries = bfd_alloc (abfd, adata->nfat_arch * sizeof (mach_o_fat_archentry)); if (adata->archentries == NULL) goto error; @@ -1915,9 +1732,7 @@ bfd_mach_o_archive_p (abfd) } bfd * -bfd_mach_o_openr_next_archived_file (archive, prev) - bfd *archive; - bfd *prev; +bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev) { mach_o_fat_data_struct *adata; mach_o_fat_archentry *entry = NULL; @@ -1975,11 +1790,10 @@ bfd_mach_o_openr_next_archived_file (archive, prev) } int -bfd_mach_o_lookup_section (abfd, section, mcommand, msection) - bfd *abfd; - asection *section; - bfd_mach_o_load_command **mcommand; - bfd_mach_o_section **msection; +bfd_mach_o_lookup_section (bfd *abfd, + asection *section, + bfd_mach_o_load_command **mcommand, + bfd_mach_o_section **msection) { struct mach_o_data_struct *md = abfd->tdata.mach_o_data; unsigned int i, j, num; @@ -2026,10 +1840,9 @@ bfd_mach_o_lookup_section (abfd, section, mcommand, msection) } int -bfd_mach_o_lookup_command (abfd, type, mcommand) - bfd *abfd; - bfd_mach_o_load_command_type type; - bfd_mach_o_load_command **mcommand; +bfd_mach_o_lookup_command (bfd *abfd, + bfd_mach_o_load_command_type type, + bfd_mach_o_load_command **mcommand) { struct mach_o_data_struct *md = NULL; bfd_mach_o_load_command *ncmd = NULL; @@ -2058,8 +1871,7 @@ bfd_mach_o_lookup_command (abfd, type, mcommand) } unsigned long -bfd_mach_o_stack_addr (type) - enum bfd_mach_o_cpu_type type; +bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type type) { switch (type) { @@ -2083,10 +1895,9 @@ bfd_mach_o_stack_addr (type) } int -bfd_mach_o_core_fetch_environment (abfd, rbuf, rlen) - bfd *abfd; - unsigned char **rbuf; - unsigned int *rlen; +bfd_mach_o_core_fetch_environment (bfd *abfd, + unsigned char **rbuf, + unsigned int *rlen) { bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; unsigned long stackaddr = bfd_mach_o_stack_addr (mdata->header.cputype); @@ -2163,8 +1974,7 @@ bfd_mach_o_core_fetch_environment (abfd, rbuf, rlen) } char * -bfd_mach_o_core_file_failing_command (abfd) - bfd *abfd; +bfd_mach_o_core_file_failing_command (bfd *abfd) { unsigned char *buf = NULL; unsigned int len = 0; @@ -2174,28 +1984,26 @@ bfd_mach_o_core_file_failing_command (abfd) if (ret < 0) return NULL; - return buf; + return (char *) buf; } int -bfd_mach_o_core_file_failing_signal (abfd) - bfd *abfd ATTRIBUTE_UNUSED; +bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED) { return 0; } bfd_boolean -bfd_mach_o_core_file_matches_executable_p (core_bfd, exec_bfd) - bfd *core_bfd ATTRIBUTE_UNUSED; - bfd *exec_bfd ATTRIBUTE_UNUSED; +bfd_mach_o_core_file_matches_executable_p (bfd *core_bfd ATTRIBUTE_UNUSED, + bfd *exec_bfd ATTRIBUTE_UNUSED) { return TRUE; } -#define TARGET_NAME mach_o_be_vec -#define TARGET_STRING "mach-o-be" -#define TARGET_BIG_ENDIAN 1 -#define TARGET_ARCHIVE 0 +#define TARGET_NAME mach_o_be_vec +#define TARGET_STRING "mach-o-be" +#define TARGET_BIG_ENDIAN 1 +#define TARGET_ARCHIVE 0 #include "mach-o-target.c" @@ -2204,10 +2012,10 @@ bfd_mach_o_core_file_matches_executable_p (core_bfd, exec_bfd) #undef TARGET_BIG_ENDIAN #undef TARGET_ARCHIVE -#define TARGET_NAME mach_o_le_vec -#define TARGET_STRING "mach-o-le" -#define TARGET_BIG_ENDIAN 0 -#define TARGET_ARCHIVE 0 +#define TARGET_NAME mach_o_le_vec +#define TARGET_STRING "mach-o-le" +#define TARGET_BIG_ENDIAN 0 +#define TARGET_ARCHIVE 0 #include "mach-o-target.c" @@ -2216,10 +2024,10 @@ bfd_mach_o_core_file_matches_executable_p (core_bfd, exec_bfd) #undef TARGET_BIG_ENDIAN #undef TARGET_ARCHIVE -#define TARGET_NAME mach_o_fat_vec -#define TARGET_STRING "mach-o-fat" -#define TARGET_BIG_ENDIAN 1 -#define TARGET_ARCHIVE 1 +#define TARGET_NAME mach_o_fat_vec +#define TARGET_STRING "mach-o-fat" +#define TARGET_BIG_ENDIAN 1 +#define TARGET_ARCHIVE 1 #include "mach-o-target.c"