# HG changeset patch # User Richard M. Stallman # Date 780041547 0 # Node ID 0675fa3d65fa0c96230df3c65f4f68723e96b08f # Parent b628561b185b54f34470bc2b557be2701e463ab6 (SUNOS4 or __FreeBSD__): Define UNDO_RELOCATION. (unexec): Test UNDO_RELOCATION. Distinguish the relocation formats of __FreeBSD__ and SUNOS4. diff -r b628561b185b -r 0675fa3d65fa src/unexsunos4.c --- a/src/unexsunos4.c Tue Sep 20 05:51:50 1994 +0000 +++ b/src/unexsunos4.c Tue Sep 20 06:12:27 1994 +0000 @@ -56,10 +56,22 @@ #include #endif -#ifdef SUNOS4 +#if defined (SUNOS4) || defined (__FreeBSD__) +#define UNDO_RELOCATION +#endif + +#ifdef UNDO_RELOCATION #include #endif +#ifdef __FreeBSD__ +#define link_dynamic _dynamic +#define ld_un d_un +#define ld_2 d_sdt +#define ld_rel sdt_rel +#define ld_hash sdt_hash +#endif /* __FreeBSD__ */ + #ifdef HAVE_UNISTD_H #include #endif @@ -208,7 +220,7 @@ /* Some other BSD systems use this file. We don't know whether this change is right for them. */ -#ifdef SUNOS4 +#ifdef UNDO_RELOCATION /* Undo the relocations done at startup by ld.so. It will do these relocations again when we start the dumped Emacs. Doing them twice gives incorrect results. */ @@ -219,6 +231,7 @@ unsigned long rel, erel; unsigned rel_size; +#ifdef SUNOS4 if (_DYNAMIC.ld_version < 2) { rel = _DYNAMIC.ld_un.ld_1->ld_rel; @@ -243,6 +256,12 @@ default: fatal ("unknown machine type in unexec!\n"); } +#endif /* SUNOS4 */ +#ifdef __FreeBSD__ + rel = _DYNAMIC.ld_un.ld_2->ld_rel; + erel = _DYNAMIC.ld_un.ld_2->ld_hash; + rel_size = 8; /* sizeof(struct relocation_info) */ +#endif for (; rel < erel; rel += rel_size) { @@ -259,7 +278,7 @@ write (new, old + N_TXTOFF (ohdr) + rpos, sizeof (unsigned long)); } } -#endif /* SUNOS4 */ +#endif /* UNDO_RELOCATION */ fchmod (new, 0755); }