(real :c-type "double" :length #!-x86-64 2 #!+x86-64 1)
(imag :c-type "double" :length #!-x86-64 2 #!+x86-64 1))
-#!+(and sb-lutex sb-thread)
-(define-primitive-object (lutex
- :lowtag other-pointer-lowtag
- :widetag lutex-widetag
- :alloc-trans %make-lutex)
- (gen :c-type "long" :length 1)
- (live :c-type "long" :length 1)
- (next :c-type "struct lutex *" :length 1)
- (prev :c-type "struct lutex *" :length 1)
- (mutex :c-type "pthread_mutex_t *"
- :length 1)
- (mutexattr :c-type "pthread_mutexattr_t *"
- :length 1)
- (condition-variable :c-type "pthread_cond_t *"
- :length 1))
-
;;; this isn't actually a lisp object at all, it's a c structure that lives
;;; in c-land. However, we need sight of so many parts of it from Lisp that
;;; it makes sense to define it here anyway, so that the GENESIS machinery
;;; can take care of maintaining Lisp and C versions.
-;;; Hence the even-fixnum lowtag just so we don't get odd(sic) numbers
-;;; added to the slot offsets
-(define-primitive-object (thread :lowtag even-fixnum-lowtag)
+(define-primitive-object (thread)
;; no_tls_value_marker is borrowed very briefly at thread startup to
;; pass the address of initial-function into new_thread_trampoline.
;; tls[0] = NO_TLS_VALUE_MARKER_WIDETAG because a the tls index slot
;; starting, running, suspended, dead
(state :c-type "lispobj")
(tls-cookie) ; on x86, the LDT index
- #!+(or x86 x86-64) (pseudo-atomic-bits)
+ #!+(or x86 x86-64 sb-thread) (pseudo-atomic-bits)
(interrupt-data :c-type "struct interrupt_data *"
:length #!+alpha 2 #!-alpha 1)
(stepping)
;; the runtime, but it's clearly a per-thread value.
#!+sb-thread
(foreign-function-call-active :c-type "boolean")
+ ;; Same as above for the location of the current control stack frame.
+ #!+(and sb-thread (not (or x86 x86-64)))
+ (control-frame-pointer :c-type "lispobj *")
+ ;; Same as above for the location of the current control stack
+ ;; pointer. This is also used on threaded x86oids to allow LDB to
+ ;; print an approximation of the CSP as needed.
+ #!+(and sb-thread)
+ (control-stack-pointer :c-type "lispobj *")
;; 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