#include <stdio.h>
#include <sys/param.h>
#include <sys/file.h>
+#include "sbcl.h"
#include "./signal.h"
#include "os.h"
#include "arch.h"
#include "interrupt.h"
#include "interr.h"
#include "lispregs.h"
-#include "sbcl.h"
#include <sys/socket.h>
#include <sys/utsname.h>
#include "validate.h"
size_t os_vm_page_size;
+#ifdef LISP_FEATURE_SB_THREAD
+#error "Define threading support functions"
+#else
+int arch_os_thread_init(struct thread *thread) {
+ return 1; /* success */
+}
+int arch_os_thread_cleanup(struct thread *thread) {
+ return 1; /* success */
+}
+#endif
+
os_context_register_t *
os_context_register_addr(os_context_t *context, int offset)
void
os_restore_fp_control(os_context_t *context)
{
- /* FIXME (in two parts):
- Firstly, what happens in alpha linux inside the signal handler?
- Does the floating point control state get cleared as in other
- Linuxes?
-
- Secondly, how do we put it back if so? It will probably involve
- something to do with
-
- context->uc_mcontext.sc_fpcr
-
- (maybe a simple assembly statement will be enough)
- */
+ /* FIXME: 0x7E0000 is defined as something useful in constants.h,
+ but without the UL, which would probably lead to 32/64-bit
+ errors if we simply used it here. Ugh. CSR, 2003-09-15 */
+ arch_set_fp_control(os_context_fp_control(context) & ~(0x7e0000UL) &
+ /* KLUDGE: for some reason that I don't
+ understand, by the time we get here the
+ "enable denormalized traps" bit in the fp
+ control word is set. Since we really don't
+ want to tra every time someone types
+ LEAST-POSITIVE-SINGLE-FLOAT into the repl,
+ mask that bit out. -- CSR, 2003-09-15 */
+ ~(0x1UL<<6));
}
void os_flush_icache(os_vm_address_t address, os_vm_size_t length)