History log of /bionic/libc/arch-x86/bionic/syscall.S
Revision Date Author Comments
9ce09e423f24823d52f19ab8247e078977100132 12-Nov-2015 Mingwei Shi <mingwei.shi@intel.com> libc: implement kernel vdso syscalls for i386

This patch uses __kernel_vsyscall instead of "int 0x80"
as the syscall entry point. AT_SYSINFO points to
an adapter to mask the arch specific difference and gives a
performance boost on i386 architecture.

Bug: http://b/27533895
Change-ID: Ib340c604d02c6c25714a95793737e3cfdc3fc5d7
Signed-off-by: Mingwei Shi <mingwei.shi@intel.com>

(cherry picked from commit be910529322b461148debefd50b9e0d67ae84f8e)
940d3122c9c88eb3e46f8862a02a668fa0f4cf2b 15-Apr-2015 Christopher Ferris <cferris@google.com> Fix addition of extra arg to cfi_restore.

Change-Id: I8fdcc1ae3e91b69ccbcec756a89e1ccb4fa1be53
605ee81b0660760dd191f2e2de4c4c92dca5192f 13-Apr-2015 Christopher Ferris <cferris@google.com> Add missing cfi directives for x86 assembler.

Change-Id: I80d3e33a71bbaeab5f39b667ebe61e865fd54b80
011e111d299284b65af07add523a9dccac356244 09-Sep-2014 Elliott Hughes <enh@google.com> Ensure __set_errno is still visible on LP32.

The use of the .hidden directive to avoid going via the PLT for
__set_errno had the side-effect of actually making __set_errno
hidden (which is odd because assembler directives don't usually
affect symbols defined in a different file --- you can't even
create a weak reference to a symbol that's defined in a different
file).

This change switches the system call stubs over to a new always-hidden
__set_errno_internal and has a visible __set_errno on LP32 just for
binary compatibility with old NDK apps.

(cherry-pick of 7efad83d430f4d824f2aaa75edea5106f6ff8aae.)

Bug: 17423135
Change-Id: I6b6d7a05dda85f923d22e5ffd169a91e23499b7b
7efad83d430f4d824f2aaa75edea5106f6ff8aae 09-Sep-2014 Elliott Hughes <enh@google.com> Ensure __set_errno is still visible on LP32.

The use of the .hidden directive to avoid going via the PLT for
__set_errno had the side-effect of actually making __set_errno
hidden (which is odd because assembler directives don't usually
affect symbols defined in a different file --- you can't even
create a weak reference to a symbol that's defined in a different
file).

This change switches the system call stubs over to a new always-hidden
__set_errno_internal and has a visible __set_errno on LP32 just for
binary compatibility with old NDK apps.

Bug: 17423135
Change-Id: I6b6d7a05dda85f923d22e5ffd169a91e23499b7b
3726f9c38b4b27b492e378e20c52be859225e5f3 09-Aug-2014 Dan Albert <danalbert@google.com> Revert "Fix incorrect relocations for x86."

Bug: 16853291
This reverts commit 512bc5232689bec9c763c8247b59de970096ff87.
512bc5232689bec9c763c8247b59de970096ff87 07-Aug-2014 Dan Albert <danalbert@google.com> Fix incorrect relocations for x86.

These calls were not going through the PLT like they should have been.

Bug: 16853291
Change-Id: Id70488b077256a70137c4417f21be2c2d1d4341c
15a0456d0b7618554ed3d49287e77b6d43a2812a 06-Jun-2014 Elliott Hughes <enh@google.com> Remove unnecessary instructions from x86/x86_64 syscalls.

__set_errno returns -1 exactly so that callers don't need to bother.
The other architectures were already taking advantage of this, but
no one had ever fixed x86 and x86_64.

Change-Id: Ie131494be664f6c4a1bbf8c61bbbed58eac56122
a85aaf11fafd52b1304cc288d0699411ae510cc8 03-Jan-2014 Elliott Hughes <enh@google.com> Use the MAX_ERRNO constant.

If you're going to hardcode a constant, you could at least try to
get the constant right...

Change-Id: I886a2593357d1c4dfd6c42649c63e8a35c15a441
4cdde5f12364079a2b55fa4fc4ed53364cb8465d 22-Mar-2013 Elliott Hughes <enh@google.com> Replace unnecessary x86 uses of <sys/linux-syscalls.h> with <asm/unistd.h>.

Change-Id: I9d016ee8e8329cccf244d27c336d9524348af996
bdff26df2749d8d66e5d4eb5a2ecf4a9ff50fad2 12-Feb-2013 Elliott Hughes <enh@google.com> Use ENTRY/END in custom x86 assembler too.

Change-Id: Ic2e482e5daff29c65d3b2ab0b2111c996bbc6226
c164f2a9694fa8c373ec72d237ee16b412aa5c53 12-Apr-2012 Jin Wei <wei.a.jin@intel.com> bionic: modify syscall to use 6 registers to pass parameter.

Kernel allows to use 6 registers(exclude eax) to pass parameter.
But in syscall's implementation, it only uses five registers.
It will lead to error when 6 parameters passed.

Change-Id: I92d663194e6334c3847f0c0c257ca3b9dee0edef
Author: Jin Wei <wei.a.jin@intel.com>
Signed-off-by: Xiaokang Qin <xiaokang.qin@intel.com>
Signed-off-by: Beare, Bruce J <bruce.j.beare@intel.com>
Signed-off-by: Jack Ren <jack.ren@intel.com>
Author-tracking-BZ: 30838
5288fee835a6e52d7870b3ee3320a5a3ddb96f34 17-Jun-2011 Jun Nakajima <jun.nakajima@intel.com> x86 libc: Fix the range to check the error

The spec says "A value in the range between -4095 to -1 indicates an error" (not -129).
This was pointed out in the comment in 22039.

Change-Id: I11b7c45015a9e4ccf09aed5364a889437eab6ab8
Signed-off-by: Jun Nakajima <jun.nakajima@intel.com>
8488efaa0913f8484cbfdb61180e47bc19fff5d8 28-Mar-2011 Kan-Ru Chen <kanru@0xlab.org> x86 libc: fix the wrong return value of syscall

According to Intel ABI spec, there is no need to save %eax, %ecx, %edx
on the stack. Worse, popping %eax will wipe out the return value.

Change-Id: Ida536c3b98174b8deef88f8f3b9352eaaeb7c0c0
3c543e1da9a2780a70b25299f39734bf0a18c4a0 04-Mar-2010 Bruce Beare <brucex.j.beare@intel.com> x86 syscall system call implementation