From 2060c2091a45e840f3843f95d1b7aac1d17db078 Mon Sep 17 00:00:00 2001 From: tsubai Date: Sun, 22 Jul 2001 17:18:25 +0000 Subject: [PATCH] Add __clone() for sh3. --- lib/libc/arch/sh3/sys/__clone.S | 80 +++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 lib/libc/arch/sh3/sys/__clone.S diff --git a/lib/libc/arch/sh3/sys/__clone.S b/lib/libc/arch/sh3/sys/__clone.S new file mode 100644 index 000000000000..a1ff8984a8bb --- /dev/null +++ b/lib/libc/arch/sh3/sys/__clone.S @@ -0,0 +1,80 @@ +/* $NetBSD: __clone.S,v 1.1 2001/07/22 17:18:25 tsubai Exp $ */ + +/*- + * Copyright (c) 2001 Tsubai Masanari. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include "SYS.h" + +#ifdef WEAK_ALIAS +WEAK_ALIAS(clone,__clone) +#endif + +/* + * int __clone(int (*fn)(void *), void *stack, int flags, void *arg); + */ +ENTRY(__clone) + /* + * Sanity checks: func and stack may not be NULL. + */ + tst r4, r4 + bt inval + tst r5, r5 + bt inval + + mov r4, r2 + mov r6, r4 + mov.l LSYS___clone, r0 + trapa #0x80 + bf err + + tst r0, r0 + bf 1f /* We're the parent, just return. */ + + jsr @r2 /* Call the clone's entry point. */ + mov r7, r4 /* arg */ + + mov.l L__exit, r1 + jsr @r1 + mov r0, r4 + +inval: + mov #EINVAL, r0 +err: + mov.l Lcerror, r1 + jmp @r1 + nop +1: + rts + nop + + .align 2 +LSYS___clone: + .long SYS___clone +L__exit: + .long _C_LABEL(_exit) +Lcerror: + .long cerror