+#if !defined PTRACE_FLAVOUR_LINUX && !defined PTRACE_FLAVOUR_BSD
+/*
+ * Attempt to autodetect ptrace flavour.
+ */
+#if defined PTRACE_ATTACH
+
+/*
+ * Linux flavour.
+ */
+#define ATTACH_TO(pid) ptrace(PTRACE_ATTACH, pid, NULL, 0)
+#define ATTACH_STR "ptrace(PTRACE_ATTACH, %d)"
+#define CONTINUE(pid) ptrace(PTRACE_CONT, pid, NULL, 0)
+#define CONT_STR "ptrace(PTRACE_CONT, %d)"
+
+#elif defined PT_ATTACH
+
+/*
+ * BSD/MacOS flavour.
+ */
+#define ATTACH_TO(pid) ptrace(PT_ATTACH, pid, NULL, 0)
+#define ATTACH_STR "ptrace(PT_ATTACH, %d)"
+#define CONTINUE(pid) ptrace(PT_CONTINUE, pid, (caddr_t)1, 0)
+#define CONT_STR "ptrace(PT_CONTINUE, %d)"
+
+#else
+#error Unable to autodetect ptrace flavour.
+#endif /* ptrace flavour detection */
+
+#endif /* outer ifdef containing flavour detection */
+