diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/i386/Makefile | 2 | ||||
| -rw-r--r-- | libc/sysdeps/linux/i386/mmap.S | 49 | 
2 files changed, 50 insertions, 1 deletions
diff --git a/libc/sysdeps/linux/i386/Makefile b/libc/sysdeps/linux/i386/Makefile index e7cee0c0b..bde820b2b 100644 --- a/libc/sysdeps/linux/i386/Makefile +++ b/libc/sysdeps/linux/i386/Makefile @@ -25,7 +25,7 @@ SCRT_OBJ = $(patsubst %,S%, $(CRT_OBJ))  CTOR_TARGETS=$(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o  SSRC=__longjmp.S vfork.S clone.S setjmp.S bsd-setjmp.S \ -	bsd-_setjmp.S syscall.S mmap64.S +	bsd-_setjmp.S syscall.S mmap.S mmap64.S  SOBJS=$(patsubst %.S,%.o, $(SSRC))  CSRC=brk.c sigaction.c __syscall_error.c diff --git a/libc/sysdeps/linux/i386/mmap.S b/libc/sysdeps/linux/i386/mmap.S new file mode 100644 index 000000000..5dde939bf --- /dev/null +++ b/libc/sysdeps/linux/i386/mmap.S @@ -0,0 +1,49 @@ +/* Copyright (C) 1995,96,97,98,99,2000,2002,2005 Free Software Foundation, Inc. +   This file is part of the GNU C Library. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, write to the Free +   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +   02111-1307 USA.  */ + +#define _ERRNO_H	1 +#include <features.h> +#include <bits/errno.h> +#include <sys/syscall.h> + +.text +.global mmap +.type   mmap,%function +mmap: + +	/* Save registers.  */ +	movl %ebx, %edx + +	movl $__NR_mmap, %eax	/* System call number in %eax.  */ + +	lea 4(%esp), %ebx		/* Address of args is 1st arg.  */ + +	/* Do the system call trap.  */ +	int $0x80 + +	/* Restore registers.  */ +	movl %edx, %ebx + +	/* If 0 > %eax > -4096 there was an error.  */ +	cmpl $-4096, %eax +	ja __syscall_error + +	/* Successful; return the syscall's value.  */ +	ret + +.size mmap,.-mmap  | 
