Module Name: src
Committed By: matt
Date: Wed Aug 19 06:54:50 UTC 2009
Modified Files:
src/lib/libc/arch/mips/sys [matt-nb5-mips64]: __clone.S
Log Message:
Make this a bit closer to the orignal. Make the disassembled diff easier.
To generate a diff of this commit:
cvs rdiff -u -r1.7.14.1 -r1.7.14.2 src/lib/libc/arch/mips/sys/__clone.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libc/arch/mips/sys/__clone.S
diff -u src/lib/libc/arch/mips/sys/__clone.S:1.7.14.1 src/lib/libc/arch/mips/sys/__clone.S:1.7.14.2
--- src/lib/libc/arch/mips/sys/__clone.S:1.7.14.1 Sun Aug 16 03:36:02 2009
+++ src/lib/libc/arch/mips/sys/__clone.S Wed Aug 19 06:54:49 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: __clone.S,v 1.7.14.1 2009/08/16 03:36:02 matt Exp $ */
+/* $NetBSD: __clone.S,v 1.7.14.2 2009/08/19 06:54:49 matt Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
#include "SYS.h"
#if defined(SYSLIBC_SCCS) && !defined(lint)
- RCSID("$NetBSD: __clone.S,v 1.7.14.1 2009/08/16 03:36:02 matt Exp $");
+ RCSID("$NetBSD: __clone.S,v 1.7.14.2 2009/08/19 06:54:49 matt Exp $");
#endif /* SYSLIBC_SCCS and not lint */
#ifdef WEAK_ALIAS
@@ -60,8 +60,8 @@
* do this: the child's stack.
*/
PTR_SUBU a1, a1, CALLFRAME_SIZ
- REG_S a3, 0(a1)
- REG_S a0, SZREG(a1)
+ REG_S a0, 0(a1)
+ REG_S a3, SZREG(a1)
/*
* The system call expects (flags, stack).
@@ -78,25 +78,26 @@
/* NOTREACHED */
9: /*
- * Child: Fetch the function and argument from the new stack,
- * and create a frame so that the child can be safely called.
+ * Child: Fetch the function and argument from the new stack and create
+ a frame so that the child can be safely called.
*
* There are already register slots on the stack from above.
- * We take 4 register slots more. The lower 4 accommodate o32
- * argument save area. The next higher is used to save GP (if
- * ABICALLS). The highest is unused.
+ * They already include the o32 argument save area. The
+ * highest is unused. a1 should equal sp now.
*/
- REG_L a0, 0(sp)
- REG_L t9, SZREG(sp)
- SAVE_GP(4 * SZREG)
+ REG_L t9, 0(sp)
+ REG_L a0, SZREG(sp)
+
+ REG_S zero, CALLFRAME_RA(sp) /* make sure stack frame ends */
/* Call the clone's entry point. */
+ SAVE_GP(CALLFRAME_GP)
jal t9
- /* Pass the return value to SYS_exit. */
+ /* Pass the return value to _exit. */
move a0, v0
- SYSTRAP(exit)
+ PIC_TAILCALL(_exit)
/* NOTREACHED */
END(__clone)