0.8.4.3
authorDaniel Barlow <dan@telent.net>
Fri, 3 Oct 2003 03:23:11 +0000 (03:23 +0000)
committerDaniel Barlow <dan@telent.net>
Fri, 3 Oct 2003 03:23:11 +0000 (03:23 +0000)
Inline arch_os_get_current_thread.  This means putting it in
thread.h, which may be considered a little silly.  When >1
arch/os combination supports threading, maybe we need a
late-target-arch-os.h file or similar.  In the meantime I'm
not going to turn the build upside down right now.

src/runtime/thread.h
src/runtime/x86-linux-os.c
version.lisp-expr

index b99b48a..9fb3ab3 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <sys/types.h>
 #include <unistd.h>
+#include <stddef.h>
 #include "runtime.h"
 #include "sbcl.h"
 #include "os.h"
@@ -94,6 +95,23 @@ static inline os_context_t *get_interrupt_context_for_thread(struct thread *th)
        [fixnum_value(SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,th)-1)];
 }
 
+/* This is clearly per-arch and possibly even per-OS code, but we can't 
+ * put it somewhere sensible like x86-linux-os.c because it needs too
+ * much stuff like struct thread and all_threads to be defined, which
+ * usually aren't by that time.  So, it's here instead.  Sorry */
+
+inline static struct thread *arch_os_get_current_thread() {
+#if defined(LISP_FEATURE_SB_THREAD) && defined (LISP_FEATURE_X86)
+    register struct thread *me=0;
+    if(all_threads)
+       __asm__ __volatile__ ("movl %%fs:%c1,%0" : "=r" (me)
+                : "i" (offsetof (struct thread,this)));
+    return me;
+#else
+    return all_threads;
+#endif
+}
+
 
 int arch_os_thread_init(struct thread *thread);
 extern struct thread *arch_os_get_current_thread();
index 20d834e..7d42968 100644 (file)
@@ -112,21 +112,6 @@ int arch_os_thread_init(struct thread *thread) {
     return 1;
 }
 
-/* if you can't do something like this (maybe because you're using a 
- * register for thread base that is only available in Lisp code)
- * you'll just have to find_thread_by_pid(getpid())
- */
-struct thread *arch_os_get_current_thread() {
-#ifdef LISP_FEATURE_SB_THREAD
-    register struct thread *me=0;
-    if(all_threads)
-       __asm__ __volatile__ ("movl %%fs:%c1,%0" : "=r" (me)
-                : "i" (offsetof (struct thread,this)));
-    return me;
-#else
-    return all_threads;
-#endif
-}
 struct thread *debug_get_fs() {
     register u32 fs;
     __asm__ __volatile__ ("movl %%fs,%0" : "=r" (fs)  : );
index 779b4ad..6c8ea3c 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.4.2"
+"0.8.4.3"