diff options
author | Narayan Kamath <narayan@google.com> | 2014-05-28 18:02:33 +0000 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-05-28 18:03:01 +0000 |
commit | 75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4 (patch) | |
tree | 17a0bb533344ff11f7401dba76d950b71c7bd1b1 /libc/arch-mips64 | |
parent | ced906c849704f379d7191822f6d74993d4fa296 (diff) | |
download | bionic-75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4.zip bionic-75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4.tar.gz bionic-75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4.tar.bz2 |
Revert "Lose the hand-written futex assembler."
This reverts commit ced906c849704f379d7191822f6d74993d4fa296.
Causes issues on art / dalvik due to a broken return value
check and other undiagnosed issues.
bug: 15195455
Change-Id: I5d6bbb389ecefb0e33a5237421a9d56d32a9317c
Diffstat (limited to 'libc/arch-mips64')
-rw-r--r-- | libc/arch-mips64/bionic/futex_mips.S | 64 | ||||
-rw-r--r-- | libc/arch-mips64/mips64.mk | 1 | ||||
-rw-r--r-- | libc/arch-mips64/syscalls/futex.S | 25 |
3 files changed, 90 insertions, 0 deletions
diff --git a/libc/arch-mips64/bionic/futex_mips.S b/libc/arch-mips64/bionic/futex_mips.S new file mode 100644 index 0000000..60c218c --- /dev/null +++ b/libc/arch-mips64/bionic/futex_mips.S @@ -0,0 +1,64 @@ +/* + * 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> + +#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) +FRAMESZ = MKFSIZ(NARGSAVE+2,0) +FRAME_A4 = 4*REGSZ +FRAME_A5 = 5*REGSZ +#else +FRAMESZ = 0 +#endif + +// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout) +LEAF(__futex_syscall4,FRAMESZ) +#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) + PTR_SUBU sp, FRAMESZ + REG_S $0,FRAME_A5(sp) /* val3 */ + REG_S $0,FRAME_A4(sp) /* addr2 */ +#else + move a5,$0 /* val3 */ + move a4,$0 /* addr2 */ +#endif +# move a3,a3 /* timespec */ +# move a2,a2 /* val */ +# move a1,a1 /* op */ +# move a0,a0 /* ftx */ + LI v0,__NR_futex + syscall + neg v0 /* Negate errno */ + bnez a3,1f /* Check for error */ + move v0,$0 /* Return 0 if no error */ +1: +#if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) + PTR_ADDU sp,FRAMESZ +#endif + j ra + END(__futex_syscall4) +.hidden __futex_syscall4 diff --git a/libc/arch-mips64/mips64.mk b/libc/arch-mips64/mips64.mk index 26390a6..b6e0209 100644 --- a/libc/arch-mips64/mips64.mk +++ b/libc/arch-mips64/mips64.mk @@ -43,6 +43,7 @@ libc_bionic_src_files_mips64 := \ arch-mips64/bionic/__bionic_clone.S \ arch-mips64/bionic/bzero.S \ arch-mips64/bionic/_exit_with_stack_teardown.S \ + arch-mips64/bionic/futex_mips.S \ arch-mips64/bionic/__get_sp.S \ arch-mips64/bionic/getdents.cpp \ arch-mips64/bionic/memcmp16.S \ diff --git a/libc/arch-mips64/syscalls/futex.S b/libc/arch-mips64/syscalls/futex.S new file mode 100644 index 0000000..dc7dcc6 --- /dev/null +++ b/libc/arch-mips64/syscalls/futex.S @@ -0,0 +1,25 @@ +/* Generated by gensyscalls.py. Do not edit. */ + +#include <private/bionic_asm.h> + +ENTRY(futex) + .set push + .set noreorder + li v0, __NR_futex + syscall + bnez a3, 1f + move a0, v0 + j ra + nop +1: + move t0, ra + bal 2f + nop +2: + .cpsetup ra, t1, 2b + LA t9,__set_errno + .cpreturn + j t9 + move ra, t0 + .set pop +END(futex) |