URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [sysdeps/] [linux/] [i386/] [mmap64.S] - Rev 1765
Compare with Previous | Blame | View Log
/* Copyright (C) 1995,96,97,98,99,2000,2002 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/ormodify it under the terms of the GNU Lesser General PublicLicense as published by the Free Software Foundation; eitherversion 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULesser General Public License for more details.You should have received a copy of the GNU Lesser General PublicLicense along with the GNU C Library; if not, write to the FreeSoftware Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307 USA. */#define _ERRNO_H 1#include <features.h>#include <bits/errno.h>#include <sys/syscall.h>#if defined __UCLIBC_HAS_LFS__ && defined __NR_mmap2#define LINKAGE 4#define PTR_SIZE 4#define SVRSP 16 /* saved register space */#define PARMS LINKAGE+SVRSP /* space for 4 saved regs */#define ADDR PARMS#define LEN ADDR+PTR_SIZE#define PROT LEN+4#define FLAGS PROT+4#define FD FLAGS+4#define OFFLO FD+4#define OFFHI OFFLO+4.text.globl mmap64;.type mmap64,@function;.align 1<<4;mmap64:/* Save registers. */pushl %ebppushl %ebxpushl %esipushl %edimovl OFFLO(%esp), %edxmovl OFFHI(%esp), %ecxtestl $0xfff, %edxjne L_einvalshrdl $12, %ecx, %edx /* mmap2 takes the offset in pages. */shrl $12, %ecxjne L_einvalmovl %edx, %ebpmovl ADDR(%esp), %ebxmovl LEN(%esp), %ecxmovl PROT(%esp), %edxmovl FLAGS(%esp), %esimovl FD(%esp), %edimovl $__NR_mmap2, %eax /* System call number in %eax. */int $0x80/* Restore registers. */popl %edipopl %esipopl %ebxpopl %ebp/* If 0 > %eax > -4096 there was an error. */cmpl $-4095,%eaxjae __syscall_errorret/* This means the offset value is too large. */L_einval:popl %edipopl %esipopl %ebxpopl %ebpmovl $-EINVAL, %eaxjmp __syscall_error__syscall_error:negl %eaxpushl %eax#ifdef __PIC__call .Lthere.Lthere:popl %ebxaddl $_GLOBAL_OFFSET_TABLE_+[.- .Lthere ], %ebxcall __errno_location@PLT#elsecall __errno_location#endifpopl %ecxmovl %ecx, (%eax)xorl %eax, %eaxdecl %eax.Lsize:.size mmap64,.Lsize-mmap64#endif
