diff options
author | Elliott Hughes <enh@google.com> | 2013-03-12 14:57:30 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2013-03-12 17:43:58 -0700 |
commit | 9aceab50155b17741faded1fb22e2daa51a07fb1 (patch) | |
tree | d1a976cb41c6aa807c6b07f0e858f92ea5763b4f /libc/tools | |
parent | 94a34010c1f989032c0a4dc7a7a68d069ca23b1e (diff) | |
download | bionic-9aceab50155b17741faded1fb22e2daa51a07fb1.zip bionic-9aceab50155b17741faded1fb22e2daa51a07fb1.tar.gz bionic-9aceab50155b17741faded1fb22e2daa51a07fb1.tar.bz2 |
Use the kernel's MAX_ERRNO in the syscall stubs.
Bug: http://code.google.com/p/android/issues/detail?id=53104
Change-Id: Iaabf7025b153e96dc5eca231a33a32d4cb7d8116
Diffstat (limited to 'libc/tools')
-rwxr-xr-x | libc/tools/gensyscalls.py | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py index 5e519de..91e7a57 100755 --- a/libc/tools/gensyscalls.py +++ b/libc/tools/gensyscalls.py @@ -46,6 +46,7 @@ def create_file( relpath ): # x86_header = """/* autogenerated by gensyscalls.py */ +#include <linux/err.h> #include <machine/asm.h> #include <sys/linux-syscalls.h> @@ -56,7 +57,7 @@ x86_registers = [ "%ebx", "%ecx", "%edx", "%esi", "%edi", "%ebp" ] x86_call = """ movl $%(idname)s, %%eax int $0x80 - cmpl $-129, %%eax + cmpl $-MAX_ERRNO, %%eax jb 1f negl %%eax pushl %%eax @@ -75,6 +76,7 @@ END(%(fname)s) # arm_header = """/* autogenerated by gensyscalls.py */ +#include <linux/err.h> #include <machine/asm.h> #include <sys/linux-syscalls.h> @@ -86,9 +88,10 @@ arm_eabi_call_default = arm_header + """\ ldr r7, =%(idname)s swi #0 mov r7, ip - movs r0, r0 - bxpl lr - b __set_syscall_errno + cmn r0, #(MAX_ERRNO + 1) + bxls lr + neg r0, r0 + b __set_errno END(%(fname)s) """ @@ -100,9 +103,10 @@ arm_eabi_call_long = arm_header + """\ ldr r7, =%(idname)s swi #0 ldmfd sp!, {r4, r5, r6, r7} - movs r0, r0 - bxpl lr - b __set_syscall_errno + cmn r0, #(MAX_ERRNO + 1) + bxls lr + neg r0, r0 + b __set_errno END(%(fname)s) """ |