[BACK]Return to __clone.S CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / arch / x86_64 / sys

Annotation of src/lib/libc/arch/x86_64/sys/__clone.S, Revision 1.3

1.3     ! joerg       1: /*     $NetBSD: __clone.S,v 1.2 2002/06/06 20:51:17 fvdl Exp $ */
1.1       fvdl        2:
                      3: /*
                      4:  * Copyright (c) 2002 Wasabi Systems, Inc.
                      5:  * All rights reserved.
                      6:  *
                      7:  * Written by Frank van der Linden for Wasabi Systems, Inc.
                      8:  *
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  * 3. All advertising materials mentioning features or use of this software
                     18:  *    must display the following acknowledgement:
                     19:  *      This product includes software developed for the NetBSD Project by
                     20:  *      Wasabi Systems, Inc.
                     21:  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
                     22:  *    or promote products derived from this software without specific prior
                     23:  *    written permission.
                     24:  *
                     25:  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
                     26:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     27:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     28:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
                     29:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     30:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     31:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     32:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     33:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     34:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     35:  * POSSIBILITY OF SUCH DAMAGE.
                     36:  */
                     37:
                     38: #include <machine/asm.h>
                     39: #include <sys/errno.h>
                     40: #include "SYS.h"
                     41:
                     42: #ifdef WEAK_ALIAS
                     43: WEAK_ALIAS(clone, __clone)
                     44: #endif
                     45:        .text
                     46:
                     47: /*
                     48:  * int clone(int (*fn)(void *), void *stack, int flags, void *arg);
                     49:  */
                     50: ENTRY(__clone)
                     51:        pushq   %r12
                     52:        pushq   %r13
                     53:        /*
                     54:         * Sanity checks: func and stack may not be NULL.
                     55:         */
                     56:        testq   %rdi,%rdi
                     57:        je      3f
                     58:        testq   %rsi,%rsi
                     59:        je      3f
                     60:
                     61:
                     62:        movq    %rdi,%r12
                     63:        movq    %rcx,%r13
                     64:
                     65:        movq    %rdx,%rdi
                     66:
                     67:        pushq   $0              /* dummy return address */
                     68:
                     69:        SYSTRAP(__clone)
                     70:        jc      4f
                     71:        cmpl    $0,%eax
                     72:        jne     2f              /* we're the parent */
                     73:        movq    %r13,%rdi       /* restore argument */
                     74:        call    *%r12           /* this is the clone, call the function */
                     75:
                     76:        movq    %rax,%rdi
                     77: #ifdef PIC
                     78:        call    PIC_PLT(_C_LABEL(_exit))
                     79: #else
                     80:        call    _C_LABEL(_exit)
                     81: #endif
                     82:
                     83: 2:
                     84:        addq    $8,%rsp
                     85:        popq    %r13
                     86:        popq    %r12
                     87:        ret
                     88: 3:
                     89:        movl    $EINVAL,%eax
                     90:        jmp     5f
                     91: 4:
                     92:        addq    $8,%rsp
1.2       fvdl       93: 5:
1.1       fvdl       94:        popq    %r13
                     95:        popq    %r12
                     96:        jmp     CERROR

CVSweb <webmaster@jp.NetBSD.org>