From 615cdb5e5937839b21bdad40fe51a3bfb93d0282 Mon Sep 17 00:00:00 2001 From: "Guillermo J. Rozas" Date: Tue, 16 Nov 1993 03:56:41 +0000 Subject: [PATCH] Change compiler_initialize and compiler_reset to produce (and restore) an ordinary compiled code block that includes a manifest vector header. It costs an extra word, but makes it possible for psbtobin and bintopsb to relocate the compiled code utilities correctly for the C back end. --- v7/src/microcode/cmpint.c | 39 +++++++++++++++++++++++++++++---------- v8/src/microcode/cmpint.c | 39 +++++++++++++++++++++++++++++---------- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/v7/src/microcode/cmpint.c b/v7/src/microcode/cmpint.c index 1ab8c7eb7..ef689a809 100644 --- a/v7/src/microcode/cmpint.c +++ b/v7/src/microcode/cmpint.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Id: cmpint.c,v 1.79 1993/11/11 20:19:55 cph Exp $ +$Id: cmpint.c,v 1.80 1993/11/16 03:56:41 gjr Exp $ Copyright (c) 1989-1993 Massachusetts Institute of Technology @@ -3421,7 +3421,9 @@ DEFUN_VOID (compiler_reset_internal) return; } -#define COMPILER_UTILITIES_LENGTH ((2 * (TRAMPOLINE_ENTRY_SIZE + 1)) + 1) +#define COMPILER_UTILITIES_N_ENTRIES 2 +#define COMPILER_UTILITIES_LENGTH \ + ((COMPILER_UTILITIES_N_ENTRIES * (TRAMPOLINE_ENTRY_SIZE + 1)) + 2) C_UTILITY void DEFUN (compiler_initialize, (fasl_p), long fasl_p) @@ -3448,9 +3450,12 @@ DEFUN (compiler_initialize, (fasl_p), long fasl_p) block = Free; Free += len; - block[0] = (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, (len - 1))); + block[0] = (MAKE_OBJECT (TC_MANIFEST_VECTOR, (len - 1))); + block[1] = (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, + (COMPILER_UTILITIES_N_ENTRIES + * TRAMPOLINE_ENTRY_SIZE))); - tramp1 = ((instruction *) (TRAMPOLINE_ENTRY_POINT (block - 1))); + tramp1 = ((instruction *) (TRAMPOLINE_ENTRY_POINT (block))); fill_trampoline (block, tramp1, ((format_word) FORMAT_WORD_RETURN), TRAMPOLINE_K_RETURN); @@ -3493,19 +3498,33 @@ DEFUN (compiler_reset, { /* Called after a disk restore */ - if (((OBJECT_TYPE (new_block)) != TC_COMPILED_CODE_BLOCK) - || ((OBJECT_TYPE (MEMORY_REF (new_block, 0))) != TC_MANIFEST_NM_VECTOR) - || ((VECTOR_LENGTH (new_block)) != (COMPILER_UTILITIES_LENGTH - 1))) + if ((OBJECT_TYPE (new_block)) != TC_COMPILED_CODE_BLOCK) { extern void EXFUN (compiler_reset_error, (void)); +lose: compiler_reset_error (); + return; } - else + else if ((MEMORY_REF (new_block, 0)) + != (MAKE_OBJECT (TC_MANIFEST_VECTOR, + (COMPILER_UTILITIES_LENGTH - 1)))) { - compiler_utilities = new_block; - compiler_reset_internal (); + /* Backwards compatibility */ + if ((MEMORY_REF (new_block, 0)) + != (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, + (COMPILER_UTILITIES_N_ENTRIES + * (TRAMPOLINE_ENTRY_SIZE + 1))))) + goto lose; } + else if ((MEMORY_REF (new_block, 1)) + != (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, + (COMPILER_UTILITIES_N_ENTRIES + * TRAMPOLINE_ENTRY_SIZE)))) + goto lose; + + compiler_utilities = new_block; + compiler_reset_internal (); return; } diff --git a/v8/src/microcode/cmpint.c b/v8/src/microcode/cmpint.c index 1ab8c7eb7..ef689a809 100644 --- a/v8/src/microcode/cmpint.c +++ b/v8/src/microcode/cmpint.c @@ -1,6 +1,6 @@ /* -*-C-*- -$Id: cmpint.c,v 1.79 1993/11/11 20:19:55 cph Exp $ +$Id: cmpint.c,v 1.80 1993/11/16 03:56:41 gjr Exp $ Copyright (c) 1989-1993 Massachusetts Institute of Technology @@ -3421,7 +3421,9 @@ DEFUN_VOID (compiler_reset_internal) return; } -#define COMPILER_UTILITIES_LENGTH ((2 * (TRAMPOLINE_ENTRY_SIZE + 1)) + 1) +#define COMPILER_UTILITIES_N_ENTRIES 2 +#define COMPILER_UTILITIES_LENGTH \ + ((COMPILER_UTILITIES_N_ENTRIES * (TRAMPOLINE_ENTRY_SIZE + 1)) + 2) C_UTILITY void DEFUN (compiler_initialize, (fasl_p), long fasl_p) @@ -3448,9 +3450,12 @@ DEFUN (compiler_initialize, (fasl_p), long fasl_p) block = Free; Free += len; - block[0] = (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, (len - 1))); + block[0] = (MAKE_OBJECT (TC_MANIFEST_VECTOR, (len - 1))); + block[1] = (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, + (COMPILER_UTILITIES_N_ENTRIES + * TRAMPOLINE_ENTRY_SIZE))); - tramp1 = ((instruction *) (TRAMPOLINE_ENTRY_POINT (block - 1))); + tramp1 = ((instruction *) (TRAMPOLINE_ENTRY_POINT (block))); fill_trampoline (block, tramp1, ((format_word) FORMAT_WORD_RETURN), TRAMPOLINE_K_RETURN); @@ -3493,19 +3498,33 @@ DEFUN (compiler_reset, { /* Called after a disk restore */ - if (((OBJECT_TYPE (new_block)) != TC_COMPILED_CODE_BLOCK) - || ((OBJECT_TYPE (MEMORY_REF (new_block, 0))) != TC_MANIFEST_NM_VECTOR) - || ((VECTOR_LENGTH (new_block)) != (COMPILER_UTILITIES_LENGTH - 1))) + if ((OBJECT_TYPE (new_block)) != TC_COMPILED_CODE_BLOCK) { extern void EXFUN (compiler_reset_error, (void)); +lose: compiler_reset_error (); + return; } - else + else if ((MEMORY_REF (new_block, 0)) + != (MAKE_OBJECT (TC_MANIFEST_VECTOR, + (COMPILER_UTILITIES_LENGTH - 1)))) { - compiler_utilities = new_block; - compiler_reset_internal (); + /* Backwards compatibility */ + if ((MEMORY_REF (new_block, 0)) + != (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, + (COMPILER_UTILITIES_N_ENTRIES + * (TRAMPOLINE_ENTRY_SIZE + 1))))) + goto lose; } + else if ((MEMORY_REF (new_block, 1)) + != (MAKE_OBJECT (TC_MANIFEST_NM_VECTOR, + (COMPILER_UTILITIES_N_ENTRIES + * TRAMPOLINE_ENTRY_SIZE)))) + goto lose; + + compiler_utilities = new_block; + compiler_reset_internal (); return; } -- 2.25.1