root/arch/i386/stand/libsa/unixsys.S

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __syscall
  2. syscall

    1 /*      $OpenBSD: unixsys.S,v 1.4 2004/01/13 23:54:07 millert Exp $     */
    2 
    3 /*
    4  * Copyright (c) 1997 Michael Shalayeff
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
   18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  *
   28  */
   29 
   30 #include <machine/asm.h>
   31 #include <sys/syscall.h>
   32 
   33 
   34 #ifdef __STDC__
   35 #define RSYSCALL(x) \
   36         ENTRY(u##x); \
   37                 movl     $(SYS_##x), %eax; \
   38                 jmp      1f
   39 #else
   40 #define RSYSCALL(x) \
   41         ENTRY(u/**/x); \
   42                 movl     $(SYS_/**/x), %eax; \
   43                 jmp      1f
   44 #endif
   45 
   46         .globl  _errno
   47 
   48 RSYSCALL(open)
   49 RSYSCALL(read)
   50 RSYSCALL(write)
   51 RSYSCALL(ioctl)
   52 RSYSCALL(close)
   53 RSYSCALL(exit)
   54 
   55 1:
   56         int     $0x80
   57 2:      jnc     3f
   58         movl    %eax, _errno
   59         movl    $-1, %eax
   60         movl    $-1, %edx
   61 3:      ret
   62 
   63 ENTRY(__syscall)
   64         movl    $(SYS___syscall), %eax
   65         jmp     1b
   66 
   67 ENTRY(syscall)
   68         popl    %ecx    /* rta */
   69         popl    %eax    /* syscall number */
   70         pushl   %ecx
   71         int     $0x80
   72         pushl   %ecx
   73         jmp     2b

/* [<][>][^][v][top][bottom][index][help] */