From f5e3627ac7a1af884e01b860540ee1f09d71f7af Mon Sep 17 00:00:00 2001 From: wlott <wlott> Date: Fri, 21 Sep 1990 06:04:43 +0000 Subject: [PATCH] Added noise do deal with fixing the raw function address in symbols. --- ldb/purify.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/ldb/purify.c b/ldb/purify.c index cee29ac2a..b0e008939 100644 --- a/ldb/purify.c +++ b/ldb/purify.c @@ -1,6 +1,6 @@ /* Purify. */ -/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/purify.c,v 1.3 1990/07/18 10:57:55 wlott Exp $ */ +/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/ldb/Attic/purify.c,v 1.4 1990/09/21 06:04:43 wlott Exp $ */ #include <mach.h> @@ -354,6 +354,20 @@ static lispobj ptrans_otherptr(thing, header) } } +static int pscav_symbol(symbol) + struct symbol *symbol; +{ +#define RAW_ADDR_OFFSET (sizeof(struct function_header)-1-type_FunctionHeader) + + if ((char *)(symbol->function + RAW_ADDR_OFFSET) == symbol->raw_function_addr) { + pscav(&symbol->value, sizeof(struct symbol)/sizeof(lispobj) - 1); + symbol->raw_function_addr = (char *)(symbol->function + RAW_ADDR_OFFSET); + return sizeof(struct symbol) / sizeof(lispobj); + } + else + return 1; +} + static int pscav_code(addr) lispobj *addr; { @@ -425,6 +439,11 @@ static lispobj *pscav(addr, nwords) count = HeaderValue(thing)+1; break; + case type_SymbolHeader: + /* Symbols must have the raw function addr fixed up. */ + count = pscav_symbol((struct symbol *)addr); + break; + case type_SimpleVector: if (HeaderValue(thing) == subtype_VectorValidHashing) *addr = (subtype_VectorMustRehash<<type_Bits) | -- GitLab