context: move Mac swapcontext() to separate compilation unit
[model-checker.git] / context.h
index 862cda5e392451f19bb9b5cfe63680562dbf44bb..ea32d2f5edf3e21a4a95623899df07919eb1cf35 100644 (file)
--- a/context.h
+++ b/context.h
@@ -8,30 +8,17 @@
 
 #include <ucontext.h>
 
-static inline int model_swapcontext(ucontext_t *oucp, ucontext_t *ucp)
-{
 #ifdef MAC
-       /*
-        * Mac OSX swapcontext() clobbers some registers, so use a hand-rolled
-        * version with {get,set}context(). We can avoid the same problem
-        * (where optimizations can break the following code) because we don't
-        * statically link with the C library
-        */
-
-       /* volatile, so that 'i' doesn't get promoted to a register */
-       volatile int i = 0;
 
-       getcontext(oucp);
+int model_swapcontext(ucontext_t *oucp, ucontext_t *ucp);
 
-       if (i == 0) {
-               i = 1;
-               setcontext(ucp);
-       }
+#else /* !MAC */
 
-       return 0;
-#else
+static inline int model_swapcontext(ucontext_t *oucp, ucontext_t *ucp)
+{
        return swapcontext(oucp, ucp);
-#endif
 }
 
+#endif /* !MAC */
+
 #endif /* __CONTEXT_H__ */