Mercurial > emacs
changeset 8952:0675fa3d65fa
(SUNOS4 or __FreeBSD__): Define UNDO_RELOCATION.
(unexec): Test UNDO_RELOCATION. Distinguish the relocation formats
of __FreeBSD__ and SUNOS4.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 20 Sep 1994 06:12:27 +0000 |
parents | b628561b185b |
children | 231a4d114799 |
files | src/unexsunos4.c |
diffstat | 1 files changed, 22 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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 <config.h> #endif -#ifdef SUNOS4 +#if defined (SUNOS4) || defined (__FreeBSD__) +#define UNDO_RELOCATION +#endif + +#ifdef UNDO_RELOCATION #include <link.h> #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 <unistd.h> #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); }