X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fobjdef.lisp;h=e942b54a55f3f28c46e3605ffbe038f4c2526b62;hb=d25e3478acccec70402ff32554669a982be8e281;hp=2f455da8c3170a04d7f3764ea692ae764b83a198;hpb=158f220d2e6b44e48806480d6498466b9fc7eb62;p=sbcl.git diff --git a/src/compiler/generic/objdef.lisp b/src/compiler/generic/objdef.lisp index 2f455da..e942b54 100644 --- a/src/compiler/generic/objdef.lisp +++ b/src/compiler/generic/objdef.lisp @@ -126,11 +126,16 @@ :ref-known (flushable foldable) :set-trans (setf %array-displacement) :set-known (unsafe)) - (displaced-p :type (member t nil) + (displaced-p :type t :ref-trans %array-displaced-p :ref-known (flushable foldable) :set-trans (setf %array-displaced-p) :set-known (unsafe)) + (displaced-from :type list + :ref-trans %array-displaced-from + :ref-known (flushable) + :set-trans (setf %array-displaced-from) + :set-known (unsafe)) (dimensions :rest-p t)) (define-primitive-object (vector :type vector @@ -295,8 +300,7 @@ #!+win32 next-seh-frame #!+win32 seh-frame-handler tag - (previous-catch :c-type #!-alpha "struct catch_block *" #!+alpha "u32") - size) + (previous-catch :c-type #!-alpha "struct catch_block *" #!+alpha "u32")) ;;; (For an explanation of this, see the comments at the definition of ;;; KLUDGE-NONDETERMINISTIC-CATCH-BLOCK-SIZE.) @@ -318,7 +322,9 @@ ;; first data slot, and if you subtract 7 you get a symbol header. ;; also the CAR of NIL-as-end-of-list - (value :init :unbound :ref-known (flushable) :ref-trans symbol-global-value) + (value :init :unbound + :set-trans %set-symbol-global-value + :set-known (unsafe)) ;; also the CDR of NIL-as-end-of-list. Its reffer needs special ;; care for this reason, as hash values must be fixnums. (hash :set-trans %set-symbol-hash) @@ -375,14 +381,18 @@ ;; tls[0] = NO_TLS_VALUE_MARKER_WIDETAG because a the tls index slot ;; of a symbol is initialized to zero (no-tls-value-marker) - (os-thread :c-type "volatile os_thread_t") + (os-thread :c-type "os_thread_t") ;; This is the original address at which the memory was allocated, ;; which may have different alignment then what we prefer to use. - ;; Kept here so that when the thread dies we can releast the whole + ;; Kept here so that when the thread dies we can release the whole ;; memory we reserved. (os-address :c-type "void *" :length #!+alpha 2 #!-alpha 1) #!+sb-thread (os-attr :c-type "pthread_attr_t *" :length #!+alpha 2 #!-alpha 1) + #!+sb-thread + (state-lock :c-type "pthread_mutex_t *" :length #!+alpha 2 #!-alpha 1) + #!+sb-thread + (state-cond :c-type "pthread_cond_t *" :length #!+alpha 2 #!-alpha 1) (binding-stack-start :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1) (binding-stack-pointer :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1) (control-stack-start :c-type "lispobj *" :length #!+alpha 2 #!-alpha 1) @@ -394,10 +404,16 @@ (prev :c-type "struct thread *" :length #!+alpha 2 #!-alpha 1) (next :c-type "struct thread *" :length #!+alpha 2 #!-alpha 1) ;; starting, running, suspended, dead - (state :c-type "volatile lispobj") + (state :c-type "lispobj") (tls-cookie) ; on x86, the LDT index #!+(or x86 x86-64) (pseudo-atomic-bits) (interrupt-data :c-type "struct interrupt_data *" :length #!+alpha 2 #!-alpha 1) (stepping) + ;; KLUDGE: On alpha, until STEPPING we have been lucky and the 32 + ;; bit slots came in pairs. However the C compiler will align + ;; interrupt_contexts on a double word boundary. This logic should + ;; be handled by DEFINE-PRIMITIVE-OBJECT. + #!+alpha + (padding) (interrupt-contexts :c-type "os_context_t *" :rest-p t))