summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/cris/vfork.S
diff options
context:
space:
mode:
authorThorsten Glaser <tg@mirbsd.org>2011-03-26 15:11:51 +0000
committerMike Frysinger <vapier@gentoo.org>2011-03-26 23:50:49 -0400
commit9b5df2295b4a3cfc63a15b6490f2b61dcf7c1be9 (patch)
tree0612cb24c1d56092bc5d0bafc1687354f173b12e /libc/sysdeps/linux/cris/vfork.S
parent251f2266bf24b1b396f59eef60d0acf41fdd02e4 (diff)
cris: add provide arch-specific vfork implementation
vfork must be called with nothing at all on the stack, so implementing it via syscall() does not work. Signed-off-by: Thorsten Glaser <tg@mirbsd.org> Signed-off-by: Waldemar Brodkorb <wbx@openadk.org> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'libc/sysdeps/linux/cris/vfork.S')
-rw-r--r--libc/sysdeps/linux/cris/vfork.S30
1 files changed, 30 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/cris/vfork.S b/libc/sysdeps/linux/cris/vfork.S
new file mode 100644
index 000000000..ea8a81d82
--- /dev/null
+++ b/libc/sysdeps/linux/cris/vfork.S
@@ -0,0 +1,30 @@
+/*-
+ * Copyright (c) 2011
+ * Thorsten Glaser <tg@freewrt.org>
+ *
+ * This file is available either under the terms and conditions of
+ * the MirOS Licence, or the same terms as klibc or uClibc.
+ */
+
+#include "sysdep.h"
+
+ .syntax no_register_prefix
+
+/*
+ * vfork is special, but PSEUDO() would probably work were it not broken;
+ * there must be nothing at all on the stack above the stack frame of the
+ * enclosing function
+ */
+
+ENTRY(__vfork)
+ movu.w __NR_vfork,$r9
+ break 13
+ cmps.w -4096,$r10
+ bhs 0f
+ nop
+ Ret
+ nop
+PSEUDO_END(__vfork)
+
+weak_alias(__vfork,vfork)
+libc_hidden_weak(vfork)