From 586bc581afaad89f542f05be50a8ec2601f19415 Mon Sep 17 00:00:00 2001 From: martin Date: Wed, 31 Dec 2003 15:56:26 +0000 Subject: [PATCH] Use CC64FSZ instead of magic constant for stack frame size. Frob the clone's stack pointer to be BIASed - it is 64 bit code too. Use "carry set" as test for a failed syscall. --- lib/libc/arch/sparc64/sys/__clone.S | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/libc/arch/sparc64/sys/__clone.S b/lib/libc/arch/sparc64/sys/__clone.S index 4884b7519eeb..4b8af33eeb32 100644 --- a/lib/libc/arch/sparc64/sys/__clone.S +++ b/lib/libc/arch/sparc64/sys/__clone.S @@ -1,4 +1,4 @@ -/* $NetBSD: __clone.S,v 1.2 2002/05/07 01:34:22 eeh Exp $ */ +/* $NetBSD: __clone.S,v 1.3 2003/12/31 15:56:26 martin Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ WEAK_ALIAS(clone, __clone) * int __clone(int (*fn)(void *), void *stack, int flags, void *arg); */ ENTRY(__clone) - save %sp, -176, %sp + save %sp, -CC64FSZ, %sp /* * Sanity checks: func and stack may not be NULL. @@ -60,23 +60,24 @@ ENTRY(__clone) mov %i2, %o0 ! setup flags arg for syscall /* - * Store the function and the argument on our child's stack + * Store the function and the argument on our child's stack, + * subtract BIAS from childs stack pointer - it will be 64 bit + * code too. */ - sub %o1, 16, %o1 ! make space on the child's stack - stx %i0, [%o1] ! save func - stx %i3, [%o1+8] ! save arg + sub %o1, 16+BIAS, %o1 ! make space on the child's stack + stx %i0, [%o1+BIAS] ! save func + stx %i3, [%o1+8+BIAS] ! save arg /* * Args are now set up for system call as (flags, stack). */ mov SYS___clone, %g1 t ST_SYSCALL - be 9f + bcs 9f tst %o1 ! %o1 (rv[1]) == 0 in parent - 1: bz 2f ! yes, parent - ldx [%sp], %l0 ! grab the function - ldx [%sp+8], %o0 ! and the argument from the stack + ldx [%sp+BIAS], %l0 ! grab the function + ldx [%sp+8+BIAS], %o0 ! and the argument from the stack add %sp, 16, %sp ! restore the stack call %l0 ! Call the clone's entry point. nop