From 19ab8db9073ae8f060e9344a86b7a886f505588a Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 29 Jun 1995 01:44:57 +0000 Subject: [PATCH] [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. --- src/unexmips.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/unexmips.c b/src/unexmips.c index 598791098ea..25563cf9555 100644 --- a/src/unexmips.c +++ b/src/unexmips.c @@ -31,11 +31,52 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include #include + +#ifdef MACH + +#include + +/* 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 #include #include #include +#endif /* not MACH */ + #if defined (IRIS_4D) || defined (sony) #include "getpagesize.h" #include @@ -244,10 +285,14 @@ unexec (new_name, a_name, data_start, bss_start, entry_address) 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 @@ unexec (new_name, a_name, data_start, bss_start, entry_address) symhdr->cbFdOffset += symrel; symhdr->cbRfdOffset += symrel; symhdr->cbExtOffset += symrel; +#endif #undef symhdr do { -- 2.39.2