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