static bfd_boolean MY(write_object_contents) (bfd *abfd) { struct external_exec exec_bytes; struct internal_exec *execp = exec_hdr (abfd); obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; BFD_ASSERT (bfd_get_arch (abfd) == bfd_arch_ns32k); switch (bfd_get_mach (abfd)) { case 32032: N_SET_MACHTYPE (execp, M_NS32032); break; case 32532: default: N_SET_MACHTYPE (execp, M_NS32532); break; } N_SET_FLAGS (execp, aout_backend_info (abfd)->exec_hdr_flags); WRITE_HEADERS (abfd, execp); return TRUE; }
/* Write an object file in LynxOS format. * Section contents have already been written. We write the * file header, symbols, and relocation. */ static bfd_boolean NAME(aout,sparclynx_write_object_contents)(bfd *abfd) { struct external_exec exec_bytes; struct internal_exec *execp = exec_hdr(abfd); /* Magic number, maestro, please! */ switch (bfd_get_arch(abfd)) { case bfd_arch_m68k: switch (bfd_get_mach(abfd)) { case bfd_mach_m68010: N_SET_MACHTYPE (*execp, M_68010); break; default: case bfd_mach_m68020: N_SET_MACHTYPE (*execp, M_68020); break; } break; case bfd_arch_sparc: N_SET_MACHTYPE (*execp, M_SPARC); break; case bfd_arch_i386: N_SET_MACHTYPE (*execp, M_386); break; case bfd_arch_a29k: N_SET_MACHTYPE (*execp, M_29K); break; default: N_SET_MACHTYPE (*execp, M_UNKNOWN); } choose_reloc_size (abfd); N_SET_FLAGS (*execp, aout_backend_info (abfd)->exec_hdr_flags); WRITE_HEADERS (abfd, execp); return TRUE; }
static bfd_boolean MY (write_object_contents) (bfd * abfd) { struct external_exec exec_bytes; struct internal_exec *execp = exec_hdr (abfd); bfd_size_type text_size; /* dummy vars */ file_ptr text_end; memset (&exec_bytes, 0, sizeof (exec_bytes)); obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; if (adata (abfd).magic == undecided_magic) NAME (aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end); execp->a_syms = 0; execp->a_entry = bfd_get_start_address (abfd); execp->a_trsize = ((obj_textsec (abfd)->reloc_count) * obj_reloc_entry_size (abfd)); execp->a_drsize = ((obj_datasec (abfd)->reloc_count) * obj_reloc_entry_size (abfd)); N_SET_MACHTYPE (*execp, 0xc); N_SET_FLAGS (*execp, aout_backend_info (abfd)->exec_hdr_flags); NAME (aout,swap_exec_header_out) (abfd, execp, &exec_bytes); /* update fields not covered by default swap_exec_header_out */ /* this is really the sym table size but we store it in drelocs */ H_PUT_32 (abfd, (bfd_get_symcount (abfd) * 12), exec_bytes.e_drelocs); if (bfd_seek (abfd, (file_ptr) 0, FALSE) != 0 || (bfd_bwrite (&exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, abfd) != EXEC_BYTES_SIZE)) return FALSE; /* Write out the symbols, and then the relocs. We must write out the symbols first so that we know the symbol indices. */ if (bfd_get_symcount (abfd) != 0) { /* Skip the relocs to where we want to put the symbols. */ if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (*execp) + execp->a_drsize), SEEK_SET) != 0) return FALSE; } if (!MY (write_syms) (abfd)) return FALSE; if (bfd_get_symcount (abfd) != 0) { if (bfd_seek (abfd, (file_ptr) N_TRELOFF (*execp), SEEK_CUR) != 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_CUR) != 0) return FALSE; if (!NAME (aout,squirt_out_relocs) (abfd, obj_datasec (abfd))) return FALSE; } return TRUE; }