syscall-i386-linux-1.0.S
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:8k
源码类别:
MySQL数据库
开发平台:
Visual C++
- /* ==== syscall.S ============================================================
- * Copyright (c) 1994 Chris Provenzano, proven@mit.edu
- * All rights reserved.
- *
- * Description : Machine dependent syscalls for i386/i486/i586
- *
- * 1.00 93/08/26 proven
- * -Started coding this file.
- *
- * 1.01 93/11/13 proven
- * -The functions readv() and writev() added.
- *
- * 1.16 94/01/30 proven
- * -This file now requires gas version 2.0 or greater.
- */
- #ifndef lint
- .text
- .asciz "$Id$";
- #endif
- #include <sys/syscall.h>
- #include <config.h>
- #ifdef __ELF__
- #define NAME(X) machdep_sys_##X
- #define END(X) 1: ; .type NAME(X),@function ; .size NAME(X),1b - NAME(X)
- #else
- #define NAME(X) _machdep_sys_##X
- #define END(X)
- #endif
- #define SYSCALL0(x)
- .globl NAME(x) ;
- NAME(x):
- push %ebx;
- lea SYS_##x, %eax;
- int $0x80;
- pop %ebx;
- ret;
- END(x)
- #define SYSCALL1(x)
- .globl NAME(x) ;
- NAME(x):
- push %ebx;
- mov 8(%esp), %ebx;
- lea SYS_##x, %eax;
- int $0x80;
- pop %ebx;
- ret;
- END(x)
- #define SYSCALL2(x)
- .globl NAME(x) ;
- NAME(x):
- push %ebx;
- mov 8(%esp), %ebx;
- mov 12(%esp), %ecx;
- lea SYS_##x, %eax;
- int $0x80;
- pop %ebx;
- ret;
- END(x)
- #define STATCALL2(x)
- .globl NAME(x) ;
- NAME(x):
- push %ebx;
- mov 8(%esp), %ebx;
- mov 12(%esp), %ecx;
- lea SYS_prev_##x, %eax;
- int $0x80;
- pop %ebx;
- ret;
- END(x)
- #define SYSCALL3(x)
- .globl NAME(x) ;
- NAME(x):
- push %ebx;
- mov 8(%esp), %ebx;
- mov 12(%esp), %ecx;
- mov 16(%esp), %edx;
- lea SYS_##x, %eax;
- int $0x80;
- pop %ebx;
- ret;
- END(x)
- #define SYSCALL4(x)
- .globl NAME(x) ;
- NAME(x):
- push %ebx;
- push %esi;
- mov 12(%esp), %ebx;
- mov 16(%esp), %ecx;
- mov 20(%esp), %edx;
- mov 24(%esp), %esi;
- lea SYS_##x, %eax;
- int $0x80;
- pop %esi;
- pop %ebx;
- ret;
- END(x)
- #define SYSCALL5(x)
- .globl NAME(x) ;
- NAME(x):
- push %ebx;
- push %esi;
- push %edi;
- mov 16(%esp), %ebx;
- mov 20(%esp), %ecx;
- mov 24(%esp), %edx;
- mov 28(%esp), %esi;
- mov 32(%esp), %edi;
- lea SYS_##x, %eax;
- int $0x80;
- pop %edi;
- pop %esi;
- pop %ebx;
- ret;
- END(x)
- /* =========================================================================
- * exit 1 select 82
- * fork 2 fstatfs 100
- * read 3 socketcall 102
- * write 4 flock 143
- * open 5 readv 145
- * creat 8 writev 146
- * link 9
- * unlink 10
- * execve 11
- * chdir 12
- * chmod 15
- * chown 16
- * lseek 19
- * rename 38
- * dup 41
- * pipe 42
- * ioctl 54
- * fcntl 55
- * dup2 63
- * readdir 89
- * ftruncate 93
- * fchmod 94
- * fchown 95
- */
- /*
- * Initial asm stuff for all functions.
- */
- .text
- .align 2
- /* ==========================================================================
- * machdep_sys_read()
- */
- SYSCALL3(read)
- /* ==========================================================================
- * machdep_sys_write()
- */
- SYSCALL3(write)
- /* ==========================================================================
- * machdep_sys_open()
- */
- SYSCALL3(open)
- /* ==========================================================================
- * machdep_sys_close()
- */
- SYSCALL1(close)
- /* ==========================================================================
- * machdep_sys_creat()
- */
- SYSCALL2(creat)
- /* ==========================================================================
- * machdep_sys_dup2()
- */
- SYSCALL2(dup2)
- /* ==========================================================================
- * machdep_sys_fcntl()
- */
- SYSCALL3(fcntl)
- /* ==========================================================================
- * machdep_sys_fchown()
- */
- SYSCALL3(fchown)
- /* ==========================================================================
- * machdep_sys_fchmod()
- */
- SYSCALL2(fchmod)
- /* ==========================================================================
- * machdep_sys_ioctl()
- */
- SYSCALL3(ioctl)
- /* ==========================================================================
- * machdep_sys_chown()
- */
- SYSCALL3(chown)
- /* ==========================================================================
- * machdep_sys_chmod()
- */
- SYSCALL2(chmod)
- /* ==========================================================================
- * machdep_sys_chdir()
- */
- SYSCALL1(chdir)
- /* ==========================================================================
- * machdep_sys_unlink()
- */
- SYSCALL1(unlink)
- /* ==========================================================================
- * machdep_sys_link()
- */
- SYSCALL2(link)
- /* ==========================================================================
- * machdep_sys_rename()
- */
- SYSCALL2(rename)
- /* ==========================================================================
- * machdep_sys_lseek()
- */
- SYSCALL3(lseek)
- /* ==========================================================================
- * machdep_sys_pipe()
- */
- SYSCALL1(pipe)
- /* ==========================================================================
- * machdep_sys_dup()
- */
- SYSCALL1(dup)
- /* ==========================================================================
- * machdep_sys_fork()
- */
- SYSCALL0(fork)
- /* ==========================================================================
- * machdep_sys_execve()
- */
- SYSCALL3(execve)
- /* ==========================================================================
- * machdep_sys_stat()
- */
- #ifdef __ELF__
- STATCALL2(stat)
- #else
- SYSCALL2(stat)
- #endif
- /* ==========================================================================
- * machdep_sys_fstat()
- */
- #ifdef __ELF__
- STATCALL2(fstat)
- #else
- SYSCALL2(fstat)
- #endif
- /* ==========================================================================
- * machdep_sys_lstat()
- */
- #ifdef __ELF__
- STATCALL2(lstat)
- #else
- SYSCALL2(lstat)
- #endif
- /* ==========================================================================
- * machdep_sys_fstatfs()
- */
- SYSCALL2(fstatfs)
- /* ==========================================================================
- * machdep_sys_ftruncate()
- */
- SYSCALL2(ftruncate)
- /* ==========================================================================
- * Nonstandard calls used to make the system work
- *
- * ==========================================================================
- * machdep_sys_select()
- */
- .globl NAME(select)
- NAME(select):
- push %ebx
- lea 8(%esp), %ebx
- lea SYS_select, %eax
- int $0x80
- pop %ebx
- ret
- END(select)
- /* ==========================================================================
- * machdep_sys_wait4()
- */
- SYSCALL4(wait4)
- /* ==========================================================================
- * machdep_sys_readdir()
- */
- SYSCALL3(readdir)
- /* ==========================================================================
- * machdep_sys_socketcall()
- */
- SYSCALL2(socketcall)
- SYSCALL1(exit)
- SYSCALL3(sigprocmask)
- /* ==========================================================================
- * machdep_sys_sigsuspend()
- */
- .globl NAME(sigsuspend)
- NAME(sigsuspend):
- push %ebp
- mov %esp,%ebp
- push %edi
- push %esi
- push %ebx
- mov 8(%ebp), %edx
- mov (%edx), %edx
- lea SYS_sigsuspend, %eax
- int $0x80
- pop %ebx
- pop %esi
- pop %edi
- mov %ebp,%esp
- pop %ebp
- ret
- END(sigsuspend)
- /* ==========================================================================
- * machdep_sys_readv()
- */
- #ifdef HAVE_SYSCALL_READV
- SYSCALL3(readv)
- #endif
- /* ==========================================================================
- * machdep_sys_writev()
- */
- #ifdef HAVE_SYSCALL_WRITEV
- SYSCALL3(writev)
- #endif
- /* ==========================================================================
- * machdep_sys_flock()
- */
- #ifdef HAVE_SYSCALL_FLOCK
- SYSCALL2(flock)
- #endif