summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/m68k/bits/vfork.h
diff options
context:
space:
mode:
Diffstat (limited to 'libc/sysdeps/linux/m68k/bits/vfork.h')
-rw-r--r--libc/sysdeps/linux/m68k/bits/vfork.h14
1 files changed, 10 insertions, 4 deletions
diff --git a/libc/sysdeps/linux/m68k/bits/vfork.h b/libc/sysdeps/linux/m68k/bits/vfork.h
index 0b6ffa2c0..ceb9af8a6 100644
--- a/libc/sysdeps/linux/m68k/bits/vfork.h
+++ b/libc/sysdeps/linux/m68k/bits/vfork.h
@@ -5,11 +5,17 @@
extern int _clone __P ((int (*fn)(void *arg), void *child_stack, int flags, void *arg));
+#ifndef __NR_vfork
+#define __NR_vfork __NR_fork /* uClinux-2.0 only has fork which is vfork */
+#endif
+
#define vfork() ({ \
-register unsigned long __res __asm__ ("%d0") = __NR_fork; \
-__asm__ __volatile__ ("trap #0" \
- : "=g" (__res) \
- : "0" (__res) \
+unsigned long __res; \
+__asm__ __volatile__ ("movel %1,%%d0;" \
+ "trap #0;" \
+ "movel %%d0,%0" \
+ : "=d" (__res) \
+ : "0" (__NR_vfork) \
: "%d0"); \
if (__res >= (unsigned long)-4096) { \
errno = -__res; \