-#else /* if not COFF */
-
- /* Get symbol table info from header of a.out file if given one. */
- if (a_out >= 0)
- {
-#ifdef COFF_ENCAPSULATE
- if (read (a_out, &coffheader, sizeof coffheader) != sizeof coffheader)
- {
- PERROR(a_name);
- }
- if (coffheader.f_magic != COFF_MAGIC)
- {
- ERROR1("%s doesn't have legal coff magic number\n", a_name);
- }
-#endif
- if (read (a_out, &ohdr, sizeof hdr) != sizeof hdr)
- {
- PERROR (a_name);
- }
-
- if (N_BADMAG (ohdr))
- {
- ERROR1 ("invalid magic number in %s", a_name);
- }
- hdr = ohdr;
- }
- else
- {
-#ifdef COFF_ENCAPSULATE
- /* We probably could without too much trouble. The code is in gld
- * but I don't have that much time or incentive.
- */
- ERROR0 ("can't build a COFF file from scratch yet");
-#else
-#ifdef MSDOS /* Demacs 1.1.1 91/10/16 HIRANO Satoshi */
- bzero ((void *)&hdr, sizeof hdr);
-#else
- bzero (&hdr, sizeof hdr);
-#endif
-#endif
- }
-
- unexec_text_start = (long) start_of_text ();
- unexec_data_start = data_start;
-
- /* Machine-dependent fixup for header, or maybe for unexec_text_start */
-#ifdef ADJUST_EXEC_HEADER
- ADJUST_EXEC_HEADER;
-#endif /* ADJUST_EXEC_HEADER */
-
- hdr.a_trsize = 0;
- hdr.a_drsize = 0;
- if (entry_address != 0)
- hdr.a_entry = entry_address;
-
- hdr.a_bss = bss_end - bss_start;
- hdr.a_data = bss_start - data_start;
-#ifdef NO_REMAP
- hdr.a_text = ohdr.a_text;
-#else /* not NO_REMAP */
- hdr.a_text = data_start - unexec_text_start;
-
-#ifdef A_TEXT_OFFSET
- hdr.a_text += A_TEXT_OFFSET (ohdr);
-#endif
-
-#endif /* not NO_REMAP */
-
-#ifdef COFF_ENCAPSULATE
- /* We are encapsulating BSD format within COFF format. */
- {
- struct coffscn *tp, *dp, *bp;
- tp = &coffheader.scns[0];
- dp = &coffheader.scns[1];
- bp = &coffheader.scns[2];
- tp->s_size = hdr.a_text + sizeof(struct exec);
- dp->s_paddr = data_start;
- dp->s_vaddr = data_start;
- dp->s_size = hdr.a_data;
- bp->s_paddr = dp->s_vaddr + dp->s_size;
- bp->s_vaddr = bp->s_paddr;
- bp->s_size = hdr.a_bss;
- coffheader.tsize = tp->s_size;
- coffheader.dsize = dp->s_size;
- coffheader.bsize = bp->s_size;
- coffheader.text_start = tp->s_vaddr;
- coffheader.data_start = dp->s_vaddr;
- }
- if (write (new, &coffheader, sizeof coffheader) != sizeof coffheader)
- {
- PERROR(new_name);
- }
-#endif /* COFF_ENCAPSULATE */
-
- if (write (new, &hdr, sizeof hdr) != sizeof hdr)
- {
- PERROR (new_name);
- }
-
-#if 0 /* This #ifndef caused a bug on GNU/Linux when using QMAGIC. */
- /* This adjustment was done above only #ifndef NO_REMAP,
- so only undo it now #ifndef NO_REMAP. */
- /* #ifndef NO_REMAP */
-#endif
-#ifdef A_TEXT_OFFSET
- hdr.a_text -= A_TEXT_OFFSET (ohdr);
-#endif
-
- return 0;
-
-#endif /* not COFF */