summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/m68k/bits/vfork.h
blob: ceb9af8a6e4cc90260e1a7f04f05b345ab37e3fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* orginally from include/unistd.h, written by ndf@linux.mit.edu> */

#ifndef _M68K_VFORK_H
#define _M68K_VFORK_H	1

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() ({						\
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;						\
	__res = (pid_t)-1;					\
}								\
(pid_t)__res;							\
})


#define clone clone_not_available_use__clone

#endif /* _M68K_VFORK_H */