diff options
Diffstat (limited to 'mit-pthreads/machdep/syscall-i386-linux-1.0.S')
-rw-r--r-- | mit-pthreads/machdep/syscall-i386-linux-1.0.S | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/mit-pthreads/machdep/syscall-i386-linux-1.0.S b/mit-pthreads/machdep/syscall-i386-linux-1.0.S new file mode 100644 index 00000000000..1399c812e2f --- /dev/null +++ b/mit-pthreads/machdep/syscall-i386-linux-1.0.S @@ -0,0 +1,406 @@ +/* ==== 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 |