summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-01-03 00:24:45 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-01-03 00:24:45 +0000
commit3b36564b18d83ec313fd2aa6d7f38576dea3f6b8 (patch)
treefeedcf05571335f0f43fca942b8ece2301c70953 /libc
parent66d166192e6b0e1091550e9f584e92521e375df7 (diff)
parenta85aaf11fafd52b1304cc288d0699411ae510cc8 (diff)
downloadbionic-3b36564b18d83ec313fd2aa6d7f38576dea3f6b8.zip
bionic-3b36564b18d83ec313fd2aa6d7f38576dea3f6b8.tar.gz
bionic-3b36564b18d83ec313fd2aa6d7f38576dea3f6b8.tar.bz2
Merge "Use the MAX_ERRNO constant."
Diffstat (limited to 'libc')
-rw-r--r--libc/arch-x86/bionic/syscall.S5
-rw-r--r--libc/arch-x86/bionic/vfork.S57
2 files changed, 42 insertions, 20 deletions
diff --git a/libc/arch-x86/bionic/syscall.S b/libc/arch-x86/bionic/syscall.S
index 4452da4..0178f41 100644
--- a/libc/arch-x86/bionic/syscall.S
+++ b/libc/arch-x86/bionic/syscall.S
@@ -10,8 +10,7 @@
* %ebp: arg5 - callee save
*/
-#include <asm/unistd.h>
-#include <machine/asm.h>
+#include <private/bionic_asm.h>
ENTRY(syscall)
# Push the callee save registers.
@@ -34,7 +33,7 @@ ENTRY(syscall)
int $0x80
# Error?
- cmpl $-4095, %eax
+ cmpl $-MAX_ERRNO, %eax
jb 1f
# Yes, so set errno.
negl %eax
diff --git a/libc/arch-x86/bionic/vfork.S b/libc/arch-x86/bionic/vfork.S
index 7b62449..ec6f6ca 100644
--- a/libc/arch-x86/bionic/vfork.S
+++ b/libc/arch-x86/bionic/vfork.S
@@ -1,22 +1,45 @@
-#include <machine/asm.h>
-#include <asm/unistd.h>
-
-/* Get rid of the stack modifications (popl/ret) after vfork() success.
- * vfork is VERY sneaky. One has to be very careful about what can be done
- * between a successful vfork and a a subsequent execve()
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
*/
+#include <private/bionic_asm.h>
+
+// This custom code preserves the return address across the system call.
+
ENTRY(vfork)
- /* grab the return address */
- popl %ecx
- movl $__NR_vfork, %eax
- int $0x80
- cmpl $-129, %eax
- jb 1f
- negl %eax
- pushl %eax
- call __set_errno
- orl $-1, %eax
+ popl %ecx // Grab the return address.
+ movl $__NR_vfork, %eax
+ int $0x80
+ cmpl $-MAX_ERRNO, %eax
+ jb 1f
+ negl %eax
+ pushl %eax
+ call __set_errno
+ orl $-1, %eax
1:
- jmp *%ecx
+ jmp *%ecx // Jump to the stored return address.
END(vfork)