Procházet zdrojové kódy

- take LFS into account and add fallback via fadvise64

Bernhard Reutner-Fischer před 15 roky
rodič
revize
dfd1f080f4
1 změnil soubory, kde provedl 34 přidání a 4 odebrání
  1. 34 4
      libc/sysdeps/linux/i386/posix_fadvise64.S

+ 34 - 4
libc/sysdeps/linux/i386/posix_fadvise64.S

@@ -26,15 +26,14 @@
 .global posix_fadvise64
 .type   posix_fadvise64,%function
 posix_fadvise64:
-#ifdef __NR_posix_fadvise64_64
-
+#if defined __NR_fadvise64_64 && defined __UCLIBC_HAS_LFS__
 	/* Save regs  */
 	pushl	%ebp
 	pushl	%ebx
 	pushl	%esi
 	pushl	%edi
 
-	movl $__NR_posix_fadvise64_64, %eax	/* Syscall number in %eax.  */
+	movl $__NR_fadvise64_64, %eax	/* Syscall number in %eax.  */
 
 	movl	24(%esp), %ebx
 	movl	28(%esp), %ecx
@@ -55,7 +54,38 @@ posix_fadvise64:
 	/* If 0 > %eax > -4096 there was an error.  */
 	cmpl $-4096, %eax
 	ja __syscall_error
-#else
+#elif defined __NR_fadvise64
+	/* Save regs  */
+	pushl	%ebx
+	pushl	%esi
+	pushl	%edi
+
+	/* does len overflow long?  */
+	cmpl	$0, 40(%esp)
+	movl	$-EOVERFLOW, %eax
+	ja	overflow
+
+	movl $__NR_fadvise64, %eax	/* Syscall number in %eax.  */
+
+	movl	24(%esp), %ebx
+	movl	28(%esp), %ecx
+	movl	32(%esp), %edx
+	movl	36(%esp), %esi
+	movl	44(%esp), %edi
+
+	/* Do the system call trap.  */
+	int $0x80
+overflow:
+	/* Restore regs  */
+	popl	%edi
+	popl	%esi
+	popl	%ebx
+
+	/* If 0 > %eax > -4096 there was an error.  */
+	cmpl $-4096, %eax
+	ja __syscall_error
+
+#elif defined __UCLIBC_HAS_STUBS__
 	movl	$-ENOSYS, %eax
 	jmp __syscall_error
 #endif