X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fbsd-os.c;h=3b883796e07076d2e5652f5ace295b4b02e612c0;hb=a18894dbea4495b885e1747babf4e2593dfb705e;hp=884849255ca120f5e10ef8c4ecb2678171e49753;hpb=d63d80e637e9058ff5db7a10c267796ff7970ba1;p=sbcl.git diff --git a/src/runtime/bsd-os.c b/src/runtime/bsd-os.c index 8848492..3b88379 100644 --- a/src/runtime/bsd-os.c +++ b/src/runtime/bsd-os.c @@ -70,7 +70,11 @@ static void freebsd_init(); #include #include #include +#include #include +#ifdef LISP_FEATURE_X86 +#include +#endif static void openbsd_init(); #endif @@ -194,19 +198,9 @@ is_valid_lisp_addr(os_vm_address_t addr) */ void -memory_fault_handler(int signal, siginfo_t *siginfo, os_context_t *context -#if defined(LISP_FEATURE_FREEBSD) && defined(LISP_FEATURE_X86_64) -/* FreeBSD/amd64 stores fault address only in undocumented 4th arg. */ - ,void *fault_addr -#endif - ) +memory_fault_handler(int signal, siginfo_t *siginfo, os_context_t *context) { -#if defined(LISP_FEATURE_FREEBSD) && defined(LISP_FEATURE_X86_64) - /* KLUDGE: Store fault address into si_addr for compatibilities. */ - siginfo->si_addr = fault_addr; -#else void *fault_addr = arch_get_bad_addr(signal, siginfo, context); -#endif #if defined(LISP_FEATURE_RESTORE_TLS_SEGMENT_REGISTER_FROM_CONTEXT) FSHOW_SIGNAL((stderr, "/ TLS: restoring fs: %p in memory_fault_handler\n", @@ -389,7 +383,8 @@ static void freebsd_init() #endif /* LISP_FEATURE_X86 */ } -#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX) +#if defined(LISP_FEATURE_SB_THREAD) && !defined(LISP_FEATURE_SB_PTHREAD_FUTEX) \ + && !defined(LISP_FEATURE_SB_LUTEX) int futex_wait(int *lock_word, long oldval, long sec, unsigned long usec) { @@ -481,9 +476,16 @@ os_get_runtime_executable_path() #endif #ifdef __OpenBSD__ + +int openbsd_use_fxsave = 0; + void openbsd_init() { +#ifdef LISP_FEATURE_X86 + int mib[2]; + size_t size; +#endif /* * Show a warning if it looks like the memory available after * allocating the spaces won't be at least this much. @@ -495,6 +497,14 @@ openbsd_init() #endif struct rlimit rl; +#ifdef LISP_FEATURE_X86 + /* Save the machdep.osfxsr sysctl for use by os_restore_fp_control() */ + mib[0] = CTL_MACHDEP; + mib[1] = CPU_OSFXSR; + size = sizeof (openbsd_use_fxsave); + sysctl(mib, 2, &openbsd_use_fxsave, &size, NULL, 0); +#endif + /* OpenBSD, like NetBSD, counts mmap()ed space against the * process's data size limit. If the soft limit is lower than the * hard limit then try to yank it up, this lets users in the