From c5a2f1fcef0eb955412debefe4f4058f225cc545 Mon Sep 17 00:00:00 2001 From: Mark Seaborn Date: Wed, 18 Feb 2009 22:52:13 +0000 Subject: [PATCH] Remove Linux versions of posix_fadvise64 in favour of stub version The assembly version's .text.compat section was not aligned properly, because binutils currently only implicitly aligns .text, so it was causing a validator failure. --- sysdeps/unix/sysv/linux/i386/posix_fadvise64.S | 162 ------------------------- sysdeps/unix/sysv/linux/posix_fadvise64.c | 82 ------------- 2 files changed, 244 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/i386/posix_fadvise64.S delete mode 100644 sysdeps/unix/sysv/linux/posix_fadvise64.c diff --git a/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S b/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S deleted file mode 100644 index b0b9ed6ed2..0000000000 --- a/sysdeps/unix/sysv/linux/i386/posix_fadvise64.S +++ /dev/null @@ -1,162 +0,0 @@ -/* Copyright (C) 1995-2000,2002,2003,2004,2005,2006 - 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. */ - -#include -#include -#include - -#include - -#define EINVAL 22 -#define ENOSYS 38 -#define EOVERFLOW 75 - -#define SVRSP 16 /* saved register space */ -#define PARMS LINKAGE+SVRSP /* space for 4 saved regs */ -#define FD PARMS -#define OFFLO FD+4 -#define OFFHI OFFLO+4 -#define LENLO OFFHI+4 -#define LENHI LENLO+4 -#define FLAGS LENHI+4 - - .text -ENTRY (BP_SYM (__posix_fadvise64_l64)) - -#ifdef __NR_fadvise64_64 - - /* Save registers. */ - pushl %ebp - cfi_adjust_cfa_offset (4) - pushl %ebx - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %edi - cfi_adjust_cfa_offset (4) - - movl FD(%esp), %ebx - cfi_rel_offset (ebx, 8) - movl OFFLO(%esp), %ecx - movl OFFHI(%esp), %edx - movl LENLO(%esp), %esi - cfi_rel_offset (esi, 4) - movl LENHI(%esp), %edi - cfi_rel_offset (edi, 0) - movl FLAGS(%esp), %ebp - cfi_rel_offset (ebp, 12) - - movl $SYS_ify(fadvise64_64), %eax - ENTER_KERNEL - - /* Restore registers. */ - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - popl %ebp - cfi_adjust_cfa_offset (-4) - cfi_restore (ebp) - -#ifndef __ASSUME_FADVISE64_64_SYSCALL - cmpl $-ENOSYS, %eax - je 1f -#endif - - /* The function returns zero, or the error number. So all we - have to do is negate the value passed back from the kernel. */ - /* If 0 > %eax > -4096 there was an error. */ - negl %eax - - /* Successful; return the syscall's value. */ - popl %ecx; nacljmp %ecx -#endif - -#if defined __NR_fadvise64 \ - && (!defined __ASSUME_FADVISE64_64_SYSCALL || !defined __NR_fadvise64_64) -1: /* Save registers. */ - pushl %ebx - cfi_adjust_cfa_offset (4) - pushl %esi - cfi_adjust_cfa_offset (4) - pushl %edi - cfi_adjust_cfa_offset (4) - - /* Overflow check. */ - cmpl $0, LENHI(%esp) - movl $-EOVERFLOW, %eax - jne L(overflow) - - movl FD(%esp), %ebx - cfi_rel_offset (ebx, 8) - movl OFFLO(%esp), %ecx - movl OFFHI(%esp), %edx - movl LENLO(%esp), %esi - cfi_rel_offset (esi, 4) - movl FLAGS(%esp), %edi - cfi_rel_offset (edi, 0) - - movl $SYS_ify(fadvise64), %eax - ENTER_KERNEL - - /* Restore registers. */ -L(overflow): - popl %edi - cfi_adjust_cfa_offset (-4) - cfi_restore (edi) - popl %esi - cfi_adjust_cfa_offset (-4) - cfi_restore (esi) - popl %ebx - cfi_adjust_cfa_offset (-4) - cfi_restore (ebx) - - /* If 0 > %eax > -4096 there was an error. */ - negl %eax - - /* Successful; return the syscall's value. */ - popl %ecx; nacljmp %ecx -#else - movl $ENOSYS, %eax - popl %ecx; nacljmp %ecx -#endif - -END (BP_SYM (__posix_fadvise64_l64)) - -#ifdef __NR_fadvise64 - .section .text.compat, "ax" -ENTRY (__posix_fadvise64_l32) - DO_CALL (fadvise64, 5) - negl %eax - popl %ecx; nacljmp %ecx -PSEUDO_END_ERRVAL (__posix_fadvise64_l32) -#else -ENTRY (BP_SYM (__posix_fadvise64_l32)) - movl $ENOSYS, %eax - popl %ecx; nacljmp %ecx -END (BP_SYM (__posix_fadvise64_l32)) -#endif - -default_symbol_version (__posix_fadvise64_l64, posix_fadvise64, GLIBC_2.3.3) -symbol_version (__posix_fadvise64_l32, posix_fadvise64, GLIBC_2.2) diff --git a/sysdeps/unix/sysv/linux/posix_fadvise64.c b/sysdeps/unix/sysv/linux/posix_fadvise64.c deleted file mode 100644 index 3555ae8352..0000000000 --- a/sysdeps/unix/sysv/linux/posix_fadvise64.c +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright (C) 2003, 2004 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. */ - -#include -#include -#include -#include - -int __posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise); -int __posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise); - -/* Advice the system about the expected behaviour of the application with - respect to the file associated with FD. */ - -int -__posix_fadvise64_l64 (int fd, off64_t offset, off64_t len, int advise) -{ -#ifdef __NR_fadvise64_64 - INTERNAL_SYSCALL_DECL (err); - int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd, - __LONG_LONG_PAIR ((long) (offset >> 32), - (long) offset), - __LONG_LONG_PAIR ((long) (len >> 32), - (long) len), - advise); - if (!INTERNAL_SYSCALL_ERROR_P (ret, err)) - return 0; -# ifndef __ASSUME_FADVISE64_64_SYSCALL - if (INTERNAL_SYSCALL_ERRNO (ret, err) != ENOSYS) -# endif - return INTERNAL_SYSCALL_ERRNO (ret, err); -#endif -#ifndef __ASSUME_FADVISE64_64_SYSCALL -# ifdef __NR_fadvise64 - if (len != (off_t) len) - return EOVERFLOW; - - INTERNAL_SYSCALL_DECL (err2); - int ret2 = INTERNAL_SYSCALL (fadvise64, err2, 5, fd, - __LONG_LONG_PAIR ((long) (offset >> 32), - (long) offset), - (off_t) len, advise); - if (!INTERNAL_SYSCALL_ERROR_P (ret2, err2)) - return 0; - return INTERNAL_SYSCALL_ERRNO (ret2, err2); -# else - return ENOSYS; -# endif -#endif -} - -#include - -#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_3_3) - -int -attribute_compat_text_section -__posix_fadvise64_l32 (int fd, off64_t offset, size_t len, int advise) -{ - return __posix_fadvise64_l64 (fd, offset, len, advise); -} - -versioned_symbol (libc, __posix_fadvise64_l64, posix_fadvise64, GLIBC_2_3_3); -compat_symbol (libc, __posix_fadvise64_l32, posix_fadvise64, GLIBC_2_2); -#else -strong_alias (__posix_fadvise64_l64, posix_fadvise64); -#endif -- 2.11.4.GIT