X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fobjdef.lisp;h=ccad11bfe1a0eb1c5d5c482db70047e5a296e1ac;hb=e55399309ccb6c40b7ec4841c610d31c3fd487b6;hp=d768bca63299f68e4ae771adc5905e1e2584e6b7;hpb=a157ed0be79751f85b8243c06102eea95af06aa3;p=sbcl.git diff --git a/src/compiler/generic/objdef.lisp b/src/compiler/generic/objdef.lisp index d768bca..ccad11b 100644 --- a/src/compiler/generic/objdef.lisp +++ b/src/compiler/generic/objdef.lisp @@ -410,10 +410,24 @@ ;; 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) + ;; For various reasons related to pseudo-atomic and interrupt + ;; handling, we need to know if the machine context is in Lisp code + ;; or not. On non-threaded targets, this is a global variable in + ;; 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