Mercurial > emacs
changeset 12420:0c728a1b2bed
[MACH]: Include a.out.h.
[MACH] (STYP_INIT, _RDATA, STYP_RDATA, _SDATA, STYP_SDATA): Defined.
[MACH] (_SBSS, STYP_SBSS, HDRR, pHDRR): New definitions.
(unexec): Add MACH conditionals.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 29 Jun 1995 01:44:57 +0000 |
parents | 818d7bcf63b0 |
children | 1e09e8fd3384 |
files | src/unexmips.c |
diffstat | 1 files changed, 47 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/unexmips.c Thu Jun 29 01:40:18 1995 +0000 +++ b/src/unexmips.c Thu Jun 29 01:44:57 1995 +0000 @@ -31,11 +31,52 @@ #include <sys/stat.h> #include <stdio.h> #include <varargs.h> + +#ifdef MACH + +#include <a.out.h> + +/* I don't know why this isn't defined. */ +#ifndef STYP_INIT +#define STYP_INIT 0x80000000 +#endif + +/* I don't know why this isn't defined. */ +#ifndef _RDATA +#define _RDATA ".rdata" +#define STYP_RDATA 0x00000100 +#endif + +/* Small ("near") data section. */ +#ifndef _SDATA +#define _SDATA ".sdata" +#define STYP_SDATA 0x00000200 +#endif + +/* Small ("near") bss section. */ +#ifndef _SBSS +#define _SBSS ".sbss" +#define STYP_SBSS 0x00000400 +#endif + +/* We don't seem to have a sym.h or syms.h anywhere, so we'll do it the + hard way. This stinks. */ +typedef struct { + short magic; + short vstamp; + long ilineMax; + struct { long foo, offset; } offsets[11]; +} HDRR, *pHDRR; + +#else /* not MACH */ + #include <filehdr.h> #include <aouthdr.h> #include <scnhdr.h> #include <sym.h> +#endif /* not MACH */ + #if defined (IRIS_4D) || defined (sony) #include "getpagesize.h" #include <fcntl.h> @@ -244,10 +285,14 @@ errno = EEOF; nread = read (old, buffer, BUFSIZE); if (nread < sizeof (HDRR)) fatal_unexec ("reading symbols from %s", a_name); -#define symhdr ((pHDRR)buffer) newsyms = hdr.aout.tsize + hdr.aout.dsize; symrel = newsyms - hdr.fhdr.f_symptr; hdr.fhdr.f_symptr = newsyms; +#define symhdr ((pHDRR)buffer) +#ifdef MACH + for (i = 0; i < 11; i++) + symhdr->offsets[i].offset += symrel; +#else symhdr->cbLineOffset += symrel; symhdr->cbDnOffset += symrel; symhdr->cbPdOffset += symrel; @@ -259,6 +304,7 @@ symhdr->cbFdOffset += symrel; symhdr->cbRfdOffset += symrel; symhdr->cbExtOffset += symrel; +#endif #undef symhdr do {