From: Douglas K. <sn...@us...> - 2017-06-20 23:48:42
|
The branch "master" has been updated in SBCL: via 13fc7bd65a168ed78b5b28b45065f39a90fbbda7 (commit) from 2a309b4023c1ff91e838e64e8ddae1d143b7992a (commit) - Log ----------------------------------------------------------------- commit 13fc7bd65a168ed78b5b28b45065f39a90fbbda7 Author: Douglas Katzman <do...@go...> Date: Tue Jun 20 19:17:36 2017 -0400 Change some lists to vectors --- src/code/foreign.lisp | 4 ++-- src/code/globals.lisp | 7 ++++++- src/code/target-load.lisp | 2 +- src/compiler/generic/genesis.lisp | 38 ++++++++++++++++++-------------------- src/runtime/os-common.c | 10 +++++----- 5 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/code/foreign.lisp b/src/code/foreign.lisp index e63df13..925e818 100644 --- a/src/code/foreign.lisp +++ b/src/code/foreign.lisp @@ -162,12 +162,12 @@ if the symbol isn't found." #-sb-xc-host (defun !foreign-cold-init () #!-sb-dynamic-core - (dolist (symbol *!initial-foreign-symbols*) + (dovector (symbol *!initial-foreign-symbols*) (setf (gethash (car symbol) *static-foreign-symbols*) (cdr symbol))) #!+sb-dynamic-core (loop for table-address from sb!vm::linkage-table-space-start by sb!vm::linkage-table-entry-size - and reference in sb!vm::*required-runtime-c-symbols* + and reference across sb!vm::*required-runtime-c-symbols* do (setf (gethash reference *linkage-info*) table-address)) #!+os-provides-dlopen (setf *runtime-dlhandle* (dlopen-or-lose)) diff --git a/src/code/globals.lisp b/src/code/globals.lisp index 92de901..a2e7a69 100644 --- a/src/code/globals.lisp +++ b/src/code/globals.lisp @@ -18,5 +18,10 @@ *restart-clusters* *gc-inhibit* *gc-pending* #!+sb-thread *stop-for-gc-pending* - #!+sb-dynamic-core sb!vm::*required-runtime-c-symbols* *posix-argv*)) +;;; This constant is assigned by Genesis and never read by Lisp code. +;;; (To prove that it isn't used, it's not a toplevel form) +#!+(and sb-dynamic-core (host-feature sb-xc)) +(let () + (defconstant sb!vm::*required-runtime-c-symbols* + (symbol-value 'sb!vm::*required-runtime-c-symbols*))) diff --git a/src/code/target-load.lisp b/src/code/target-load.lisp index 5fcbb7f..168fbed 100644 --- a/src/code/target-load.lisp +++ b/src/code/target-load.lisp @@ -264,5 +264,5 @@ (defun !loader-cold-init () (/show0 "/!loader-cold-init") - (dolist (routine *!initial-assembler-routines*) + (dovector (routine *!initial-assembler-routines*) (setf (gethash (car routine) *assembler-routines*) (cdr routine)))) diff --git a/src/compiler/generic/genesis.lisp b/src/compiler/generic/genesis.lisp index 90318e0..4bee919 100644 --- a/src/compiler/generic/genesis.lisp +++ b/src/compiler/generic/genesis.lisp @@ -2221,28 +2221,26 @@ core and return a descriptor to it." ;;; create *STATIC-FOREIGN-SYMBOLS*, which the code in ;;; target-load.lisp refers to. (defun foreign-symbols-to-core () - (let ((result *nil-descriptor*)) + (flet ((to-core (list transducer target-symbol) + (cold-set target-symbol (vector-in-core (mapcar transducer list))))) #!-sb-dynamic-core - (dolist (symbol (sort (%hash-table-alist *cold-foreign-symbol-table*) - #'string< :key #'car)) - (cold-push (cold-cons (set-readonly (base-string-to-core (car symbol))) - (number-to-core (cdr symbol))) - result)) - (cold-set '*!initial-foreign-symbols* result) + (to-core (sort (%hash-table-alist *cold-foreign-symbol-table*) #'string< :key #'car) + (lambda (symbol) + (cold-cons (set-readonly (base-string-to-core (car symbol))) + (number-to-core (cdr symbol)))) + '*!initial-foreign-symbols*) #!+sb-dynamic-core - (let ((runtime-linking-list *nil-descriptor*)) - (dolist (symbol *dyncore-linkage-keys*) - (cold-push (cold-cons (set-readonly (base-string-to-core (car symbol))) - (cdr symbol)) - runtime-linking-list)) - (cold-set 'sb!vm::*required-runtime-c-symbols* - runtime-linking-list))) - (let ((result *nil-descriptor*)) - (dolist (rtn (sort (copy-list *cold-assembler-routines*) #'string< :key #'car)) - (cold-push (cold-cons (cold-intern (car rtn)) - (number-to-core (cdr rtn))) - result)) - (cold-set '*!initial-assembler-routines* result))) + ;; Linkage table is recomputed by Lisp, so foreign symbols have to be listed + ;; in the proper order, which is the reverse of the currently stored order. + (to-core (nreverse *dyncore-linkage-keys*) + (lambda (symbol) + (cold-cons (set-readonly (base-string-to-core (car symbol))) + (cdr symbol))) + 'sb!vm::*required-runtime-c-symbols*) + (to-core (sort (copy-list *cold-assembler-routines*) #'string< :key #'car) + (lambda (rtn) + (cold-cons (cold-intern (car rtn)) (number-to-core (cdr rtn)))) + '*!initial-assembler-routines*))) ;;;; general machinery for cold-loading FASL files diff --git a/src/runtime/os-common.c b/src/runtime/os-common.c index 9adcfe5..09e8122 100644 --- a/src/runtime/os-common.c +++ b/src/runtime/os-common.c @@ -159,7 +159,6 @@ os_dlsym_default(char *name) void os_link_runtime() { - lispobj head; void *link_target = (void*)(intptr_t)LINKAGE_TABLE_SPACE_START; void *validated_end = link_target; lispobj symbol_name; @@ -168,12 +167,13 @@ void os_link_runtime() void* result; int strict /* If in a cold core, fail early and often. */ = (SymbolValue(GC_INHIBIT, 0) & WIDETAG_MASK) == UNBOUND_MARKER_WIDETAG; - int n = 0, m = 0; + int n = 0, m = 0, j; - for (head = SymbolValue(REQUIRED_RUNTIME_C_SYMBOLS,0); - head!=NIL; head = CONS(head)->cdr, n++) + struct vector* symbols = VECTOR(SymbolValue(REQUIRED_RUNTIME_C_SYMBOLS,0)); + n = fixnum_value(symbols->length); + for (j = 0 ; j < n ; ++j) { - lispobj item = CONS(head)->car; + lispobj item = symbols->data[j]; symbol_name = CONS(item)->car; datap = CONS(item)->cdr != NIL; namechars = (void*)(intptr_t) ----------------------------------------------------------------------- hooks/post-receive -- SBCL |