* [parisc-linux] [PATCH] vfork() for parisc
@ 2006-07-24 3:14 Kyle McMartin
[not found] ` <44C693EA.5080704@zytor.com>
0 siblings, 1 reply; 2+ messages in thread
From: Kyle McMartin @ 2006-07-24 3:14 UTC (permalink / raw)
To: klibc; +Cc: parisc-linux
Implement "pid_t vfork(void)" for parisc.
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
---
Ugh. vfork() me harder.
Kbuild | 2 +-
vfork.S | 31 +++++++++++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/usr/klibc/arch/parisc/Kbuild b/usr/klibc/arch/parisc/Kbuild
index d57a873..57ca5c2 100644
--- a/usr/klibc/arch/parisc/Kbuild
+++ b/usr/klibc/arch/parisc/Kbuild
@@ -2,7 +2,7 @@ #
# klibc files for parisc
#
-klib-y := setjmp.o syscall.o
+klib-y := setjmp.o syscall.o vfork.o
always := crt0.o
targets := crt0.o
diff --git a/usr/klibc/arch/parisc/vfork.S b/usr/klibc/arch/parisc/vfork.S
new file mode 100644
index 0000000..97ebc8f
--- /dev/null
+++ b/usr/klibc/arch/parisc/vfork.S
@@ -0,0 +1,31 @@
+/*
+ * arch/parisc/vfork.S, "vfork() me harder. ugh." -- kyle
+ *
+ * %r20 contains the system call number, %rp contains whence we came,
+ * %rp is saved and restored across the syscall, thankfully.
+ *
+ */
+
+ .text
+ .align 64 ; cache-width aligned
+ .globl vfork
+ .type vfork,@function
+vfork:
+ /* pid_t vfork(void) */
+ ble 0x100(%sr2, %r0) ; jump to gateway page
+ nop
+
+ ldi -0x1000,%r19 ; %r19 = -4096
+ sub %r0,%ret0,%r22 ; %r22 = -%ret0
+ cmpb,>>=,n %r19,%ret0,1f ; if %ret0 >= -4096UL
+ ldi -1,%ret0 ; nullified on taken forward
+
+ /* store %r22 to errno... */
+ ldil L%errno,%r1
+ ldo R%errno(%r1),%r1
+ stw %r22,0(%r1)
+1:
+ bv %r0(%rp) ; jump back
+ nop
+
+ .size vfork,.-vfork
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-07-25 22:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-24 3:14 [parisc-linux] [PATCH] vfork() for parisc Kyle McMartin
[not found] ` <44C693EA.5080704@zytor.com>
[not found] ` <20060725221524.GA5625@athena.road.mcmartin.ca>
2006-07-25 22:28 ` [parisc-linux] Re: [klibc] " H. Peter Anvin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.