X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fx86-bsd-os.h;h=dc9d9f785f3e713f9b9baa5ab4ecd7c2f20136ed;hb=0f3a5f2e8886d18d0b4f6485c38a42be629422ae;hp=d1e39f908e4191765c62c3ced649febe23bdebaf;hpb=68fd2d2dd6f265669a8957accd8a33e62786a97e;p=sbcl.git diff --git a/src/runtime/x86-bsd-os.h b/src/runtime/x86-bsd-os.h index d1e39f9..dc9d9f7 100644 --- a/src/runtime/x86-bsd-os.h +++ b/src/runtime/x86-bsd-os.h @@ -1,8 +1,43 @@ -#ifndef _X86_LINUX_OS_H -#define _X86_LINUX_OS_H +#ifndef _X86_BSD_OS_H +#define _X86_BSD_OS_H -static inline os_context_t *arch_os_get_context(void **void_context) { - return (os_context_t *) *void_context; +#ifdef LISP_FEATURE_FREEBSD +#include +#include +#endif + +typedef int os_context_register_t; + +static inline os_context_t *arch_os_get_context(void **void_context) +{ + return (os_context_t *) *void_context; } -#endif /* _X86_LINUX_OS_H */ +/* The different BSD variants have diverged in exactly where they + * store signal context information, but at least they tend to use the + * same stems to name the structure fields, so by using this macro we + * can share a fair amount of code between different variants. */ +#if defined __FreeBSD__ +#define CONTEXT_ADDR_FROM_STEM(stem) &context->uc_mcontext.mc_ ## stem +#elif defined(__OpenBSD__) +#define CONTEXT_ADDR_FROM_STEM(stem) &context->sc_ ## stem +#elif defined __NetBSD__ +#define CONTEXT_ADDR_FROM_STEM(stem) &((context)->uc_mcontext.__gregs[_REG_ ## stem]) +#else +#error unsupported BSD variant +#endif + +#if defined LISP_FEATURE_FREEBSD +#if defined(LISP_FEATURE_RESTORE_TLS_SEGMENT_REGISTER_FROM_CONTEXT) +void os_restore_tls_segment_register(os_context_t *context); +#endif +#define RESTORE_FP_CONTROL_FROM_CONTEXT +void os_restore_fp_control(os_context_t *context); +#endif + +#if defined LISP_FEATURE_OPENBSD +#define RESTORE_FP_CONTROL_FROM_CONTEXT +void os_restore_fp_control(os_context_t *context); +#endif + +#endif /* _X86_BSD_OS_H */