summaryrefslogtreecommitdiff
path: root/test/unistd/clone_cruft.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/unistd/clone_cruft.h')
-rw-r--r--test/unistd/clone_cruft.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/unistd/clone_cruft.h b/test/unistd/clone_cruft.h
new file mode 100644
index 0000000..b6a395d
--- /dev/null
+++ b/test/unistd/clone_cruft.h
@@ -0,0 +1,24 @@
+/* because people like to make things difficult */
+
+#undef do_clone
+
+#define crappy_sizeof(s) (s == NULL ? 0 : sizeof(s))
+
+#if defined __ia64__
+
+extern int __clone2 (int (*__fn) (void *__arg), void *__child_stack_base,
+ size_t __child_stack_size, int __flags, void *__arg, ...);
+# define do_clone(fn, stack, flags, arg) \
+ __clone2(fn, stack, crappy_sizeof(stack), flags, arg, NULL, NULL, NULL)
+
+#elif defined __hppa__
+
+# define do_clone(fn, stack, flags, arg) \
+ clone(fn, stack, flags, arg)
+
+#else
+
+# define do_clone(fn, stack, flags, arg) \
+ clone(fn, stack+crappy_sizeof(stack), flags, arg)
+
+#endif