Define this if your system uses COFF for executables.
-* COFF_ENCAPSULATE
-
-Define this if you are using the GNU coff encapsulated a.out format.
-This is closer to a.out than COFF. You should *not* define COFF if
-you define COFF_ENCAPSULATE
-
-Otherwise we assume you use Berkeley format.
-
* NO_REMAP
Define this if you do not want to try to save Emacs's pure data areas
If defined, this macro specifies the number of bytes to seek into the
a.out file before starting to write the text segment.
-* EXEC_MAGIC
-
-For machines using COFF, this macro, if defined, is a value stored
-into the magic number field of the output file.
-
* ADJUST_EXEC_HEADER
This macro can be used to generate statements to adjust or
#ifndef emacs
#define PERROR(arg) perror (arg); return -1
#else
-#define IN_UNEXEC
#include <config.h>
#define PERROR(file) report_error (file, new)
#endif
};
#endif /* not MSDOS */
#else /* not COFF */
-#ifdef COFF_ENCAPSULATE
-int need_coff_header = 1;
-#include <coff-encap/a.out.encap.h> /* The location might be a poor assumption */
-#else /* not COFF_ENCAPSULATE */
#include <a.out.h>
-#endif /* not COFF_ENCAPSULATE */
#endif /* not COFF */
/* Define getpagesize if the system does not.
#define SYMS_START ((long) N_SYMOFF (ohdr))
-/* Some machines override the structure name for an a.out header. */
-#ifndef EXEC_HDR_TYPE
-#define EXEC_HDR_TYPE struct exec
-#endif
-
#ifdef HPUX
#ifdef HP9000S200_ID
#define MY_ID HP9000S200_ID
static MAGIC NEWMAGIC = {MY_ID, DEMAND_MAGIC};
#define N_TXTOFF(x) TEXT_OFFSET(x)
#define N_SYMOFF(x) LESYM_OFFSET(x)
-static EXEC_HDR_TYPE hdr, ohdr;
+static struct exec hdr, ohdr;
#else /* not HPUX */
-#if defined (USG) && !defined (IBMAIX) && !defined (IRIS) && !defined (COFF_ENCAPSULATE) && !defined (GNU_LINUX)
+#if defined (USG) && !defined (IRIS) && !defined (GNU_LINUX)
static struct bhdr hdr, ohdr;
#define a_magic fmagic
#define a_text tsize
(((x).fmagic)!=OMAGIC && ((x).fmagic)!=NMAGIC &&\
((x).fmagic)!=FMAGIC && ((x).fmagic)!=IMAGIC)
#define NEWMAGIC FMAGIC
-#else /* IRIS or IBMAIX or not USG */
-static EXEC_HDR_TYPE hdr, ohdr;
+#else /* IRIS or not USG */
+static struct exec hdr, ohdr;
#define NEWMAGIC ZMAGIC
-#endif /* IRIS or IBMAIX not USG */
+#endif /* IRIS or not USG */
#endif /* not HPUX */
static int unexec_text_start;
static int unexec_data_start;
-#ifdef COFF_ENCAPSULATE
-/* coffheader is defined in the GNU a.out.encap.h file. */
-struct coffheader coffheader;
-#endif
-
#endif /* not COFF */
static int pagemask;
#endif
f_hdr.f_flags |= (F_RELFLG | F_EXEC);
-#ifdef TPIX
- f_hdr.f_nscns = 3;
-#endif
-#ifdef EXEC_MAGIC
- f_ohdr.magic = EXEC_MAGIC;
-#endif
#ifndef NO_REMAP
f_ohdr.text_start = (long) start_of_text ();
f_ohdr.tsize = data_start - f_ohdr.text_start;
#endif /* NO_REMAP */
f_ohdr.dsize = bss_start - f_ohdr.data_start;
f_ohdr.bsize = bss_end - bss_start;
-#ifndef KEEP_OLD_TEXT_SCNPTR
/* On some machines, the old values are right.
??? Maybe on all machines with NO_REMAP. */
f_thdr.s_size = f_ohdr.tsize;
f_thdr.s_scnptr = sizeof (f_hdr) + sizeof (f_ohdr);
f_thdr.s_scnptr += (f_hdr.f_nscns) * (sizeof (f_thdr));
-#endif /* KEEP_OLD_TEXT_SCNPTR */
#ifdef ADJUST_TEXT_SCNHDR_SIZE
/* On some machines, `text size' includes all headers. */
f_thdr.s_size -= f_thdr.s_scnptr;
f_thdr.s_scnptr
= (f_thdr.s_scnptr + SECTION_ALIGNMENT) & ~SECTION_ALIGNMENT;
#endif /* SECTION_ALIGNMENT */
-#ifdef TPIX
- f_thdr.s_scnptr = 0xd0;
-#endif
text_scnptr = f_thdr.s_scnptr;
-#ifdef ADJUST_TEXTBASE
- text_scnptr = sizeof (f_hdr) + sizeof (f_ohdr) + (f_hdr.f_nscns) * (sizeof (f_thdr));
-#endif
-#ifndef KEEP_OLD_PADDR
f_dhdr.s_paddr = f_ohdr.data_start;
-#endif /* KEEP_OLD_PADDR */
f_dhdr.s_vaddr = f_ohdr.data_start;
f_dhdr.s_size = f_ohdr.dsize;
f_dhdr.s_scnptr = f_thdr.s_scnptr + f_thdr.s_size;
= (f_dhdr.s_scnptr + DATA_SECTION_ALIGNMENT) & ~DATA_SECTION_ALIGNMENT;
#endif /* DATA_SECTION_ALIGNMENT */
data_scnptr = f_dhdr.s_scnptr;
-#ifndef KEEP_OLD_PADDR
f_bhdr.s_paddr = f_ohdr.data_start + f_ohdr.dsize;
-#endif /* KEEP_OLD_PADDR */
f_bhdr.s_vaddr = f_ohdr.data_start + f_ohdr.dsize;
f_bhdr.s_size = f_ohdr.bsize;
f_bhdr.s_scnptr = 0L;
/* 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);
}
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
}
#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);
lseek (new, (long) text_scnptr, 0);
ptr = (char *) f_ohdr.text_start;
-#ifdef HEADER_INCL_IN_TEXT
- /* For Gould UTX/32, text starts after headers */
- ptr = (char *) (ptr + text_scnptr);
-#endif /* HEADER_INCL_IN_TEXT */
end = ptr + f_ohdr.tsize;
write_segment (new, ptr, end);