Update of /cvsroot/sbcl/sbcl/src/runtime
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3162/src/runtime
Modified Files:
Tag: lutex-branch
x86-bsd-os.h x86-bsd-os.c x86-arch.c interrupt.c bsd-os.c
Log Message:
0.9.10.46.lutex-branch.22
* WARNING! This compiles and begins to work, but has caused a kernel
panic on my 5.3 freebsd box. caveat user.
* change some freebsd printfs to FSHOW_SIGNALs
* on freebsd also, resotre the fp_control (cw) from the context
* Add shared library build options fro freebsd in threads test
Index: x86-bsd-os.h
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-bsd-os.h,v
retrieving revision 1.5.2.1
retrieving revision 1.5.2.2
diff -u -d -r1.5.2.1 -r1.5.2.2
--- x86-bsd-os.h 29 Mar 2006 09:46:40 -0000 1.5.2.1
+++ x86-bsd-os.h 29 Mar 2006 17:06:20 -0000 1.5.2.2
@@ -20,6 +20,13 @@
#endif
#if defined(LISP_FEATURE_SB_THREAD)
+
+
+#if defined __FreeBSD__
+#define RESTORE_FP_CONTROL_FROM_CONTEXT
+void os_restore_fp_control(os_context_t *context);
+#endif
+
static inline void os_restore_tls_segment_register(os_context_t *context) {
__asm__ __volatile__ ("movw %w0, %%fs" : : "q"
(*CONTEXT_ADDR_FROM_STEM(fs)));
Index: x86-bsd-os.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-bsd-os.c,v
retrieving revision 1.8.2.1
retrieving revision 1.8.2.2
diff -u -d -r1.8.2.1 -r1.8.2.2
--- x86-bsd-os.c 29 Mar 2006 07:19:31 -0000 1.8.2.1
+++ x86-bsd-os.c 29 Mar 2006 17:06:20 -0000 1.8.2.2
@@ -15,6 +15,10 @@
#endif /* LISP_FEATURE_DARWIN */
#endif
+#if defined(LISP_FEATURE_FREEBSD)
+#include "machine/npx.h"
+#endif
+
/* KLUDGE: There is strong family resemblance in the signal context
* stuff in FreeBSD and OpenBSD, but in detail they're different in
* almost every line of code. It would be nice to find some way to
@@ -185,3 +189,10 @@
}
#endif /* !LISP_FEATURE_DARWIN */
+
+void
+os_restore_fp_control(os_context_t *context)
+{
+ struct envxmm *ex = (struct envxmm*)(&context->uc_mcontext.mc_fpstate);
+ asm ("fldcw %0" : : "m" (ex->en_cw));
+}
Index: x86-arch.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/x86-arch.c,v
retrieving revision 1.38.2.5
retrieving revision 1.38.2.6
diff -u -d -r1.38.2.5 -r1.38.2.6
--- x86-arch.c 27 Mar 2006 19:45:18 -0000 1.38.2.5
+++ x86-arch.c 29 Mar 2006 17:06:20 -0000 1.38.2.6
@@ -256,7 +256,7 @@
single-stepping (as far as I can tell) this is somewhat moot,
but it might be worth either moving this code up or deleting
the single-stepping code entirely. -- CSR, 2002-07-15 */
-#ifdef LISP_FEATURE_LINUX
+#if defined(LISP_FEATURE_LINUX) || defined(RESTORE_FP_CONTROL_FROM_CONTEXT)
os_restore_fp_control(context);
#endif
Index: interrupt.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/interrupt.c,v
retrieving revision 1.110.2.6
retrieving revision 1.110.2.7
diff -u -d -r1.110.2.6 -r1.110.2.7
--- interrupt.c 29 Mar 2006 08:30:39 -0000 1.110.2.6
+++ interrupt.c 29 Mar 2006 17:06:20 -0000 1.110.2.7
@@ -482,7 +482,7 @@
check_interrupts_enabled_or_lose(context);
#endif
-#ifdef LISP_FEATURE_LINUX
+#if defined(LISP_FEATURE_LINUX) || defined(RESTORE_FP_CONTROL_FROM_CONTEXT)
/* Under Linux on some architectures, we appear to have to restore
the FPU control word from the context, as after the signal is
delivered we appear to have a null FPU control word. */
@@ -698,7 +698,7 @@
thread=arch_os_get_current_thread();
data=thread->interrupt_data;
-#ifdef LISP_FEATURE_LINUX
+#if defined(LISP_FEATURE_LINUX) || defined(RESTORE_FP_CONTROL_FROM_CONTEXT)
os_restore_fp_control(context);
#endif
@@ -716,7 +716,7 @@
{
os_context_t *context = (os_context_t*)void_context;
-#ifdef LISP_FEATURE_LINUX
+#if defined(LISP_FEATURE_LINUX) || defined(RESTORE_FP_CONTROL_FROM_CONTEXT)
os_restore_fp_control(context);
#endif
@@ -751,7 +751,7 @@
thread=arch_os_get_current_thread();
data=thread->interrupt_data;
-#ifdef LISP_FEATURE_LINUX
+#if defined(LISP_FEATURE_LINUX) || defined(RESTORE_FP_CONTROL_FROM_CONTEXT)
os_restore_fp_control(context);
#endif
Index: bsd-os.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/bsd-os.c,v
retrieving revision 1.38.2.8
retrieving revision 1.38.2.9
diff -u -d -r1.38.2.8 -r1.38.2.9
--- bsd-os.c 29 Mar 2006 07:43:22 -0000 1.38.2.8
+++ bsd-os.c 29 Mar 2006 17:06:20 -0000 1.38.2.9
@@ -465,33 +465,36 @@
int futex_init(os_sem_t *semaphore)
{
int ret;
- printf("Initializing semaphore @ %p\n", semaphore);
+ FSHOW_SIGNAL((stderr, "/initializing semaphore @ %p\n", semaphore));
ret = sem_init(semaphore, 0, 0);
- printf("sem_init said %d, errno: %d\n", ret, errno);
+ FSHOW_SIGNAL((stderr, "/sem_init said %d\n", ret));
return ret;
}
int futex_wait(os_sem_t *semaphore)
{
int ret;
- printf("Waiting on semaphore %p\n", semaphore);
+ FSHOW_SIGNAL((stderr, "/waiting on semaphore @ %p\n", semaphore));
ret = sem_wait(semaphore);
- printf("sem_wait said %d, errno: %d\n", ret, errno);
+ FSHOW_SIGNAL((stderr, "/sem_wait said %d\n", ret));
return ret;
}
int futex_wake(os_sem_t *semaphore)
{
int ret;
- printf("Waking on semaphore %p\n", semaphore);
+ FSHOW_SIGNAL((stderr, "/waking semaphore @ %p\n", semaphore));
ret = sem_post(semaphore);
- printf("sem_post said %d, errno: %d\n", ret, errno);
+ FSHOW_SIGNAL((stderr, "/sem_post said %d\n", ret));
return ret;
}
int futex_destroy(os_sem_t *semaphore)
{
- return sem_destroy(semaphore);
+ int ret;
+ FSHOW_SIGNAL((stderr, "/waking semaphore @ %p\n", semaphore));
+ ret = sem_destroy(semaphore);
+ FSHOW_SIGNAL((stderr, "/sem_destroy said %d\n", ret));
}
#endif
|