From ced906c849704f379d7191822f6d74993d4fa296 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 22 May 2014 19:49:11 -0700 Subject: [PATCH] Lose the hand-written futex assembler. Also stop exporting 'futex'. Bug: 12250341 Change-Id: Icc4fa4296cd04dfe0d1061822c69e2eb40c3433a --- libc/SYSCALLS.TXT | 2 -- libc/arch-arm/arm.mk | 1 - libc/arch-arm/bionic/futex_arm.S | 38 -------------------- libc/arch-arm/syscalls/futex.S | 22 ------------ libc/arch-arm64/arm64.mk | 1 - libc/arch-arm64/bionic/futex_arm64.S | 47 ------------------------- libc/arch-arm64/syscalls/futex.S | 25 ------------- libc/arch-mips/bionic/futex_mips.S | 50 -------------------------- libc/arch-mips/mips.mk | 1 - libc/arch-mips/syscalls/futex.S | 19 ---------- libc/arch-mips64/bionic/futex_mips.S | 64 ---------------------------------- libc/arch-mips64/mips64.mk | 1 - libc/arch-mips64/syscalls/futex.S | 25 ------------- libc/arch-x86/bionic/futex_x86.S | 16 --------- libc/arch-x86/syscalls/futex.S | 42 ---------------------- libc/arch-x86/x86.mk | 1 - libc/arch-x86_64/bionic/futex_x86_64.S | 37 -------------------- libc/arch-x86_64/syscalls/futex.S | 17 --------- libc/arch-x86_64/x86_64.mk | 1 - libc/private/bionic_futex.h | 23 ++++++++---- 20 files changed, 17 insertions(+), 416 deletions(-) delete mode 100644 libc/arch-arm/bionic/futex_arm.S delete mode 100644 libc/arch-arm/syscalls/futex.S delete mode 100644 libc/arch-arm64/bionic/futex_arm64.S delete mode 100644 libc/arch-arm64/syscalls/futex.S delete mode 100644 libc/arch-mips/bionic/futex_mips.S delete mode 100644 libc/arch-mips/syscalls/futex.S delete mode 100644 libc/arch-mips64/bionic/futex_mips.S delete mode 100644 libc/arch-mips64/syscalls/futex.S delete mode 100644 libc/arch-x86/bionic/futex_x86.S delete mode 100644 libc/arch-x86/syscalls/futex.S delete mode 100644 libc/arch-x86_64/bionic/futex_x86_64.S delete mode 100644 libc/arch-x86_64/syscalls/futex.S diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT index 60cf98019..785d19158 100644 --- a/libc/SYSCALLS.TXT +++ b/libc/SYSCALLS.TXT @@ -305,8 +305,6 @@ int eventfd:eventfd2(unsigned int, int) all void _exit|_Exit:exit_group(int) all void __exit:exit(int) all -int futex(void*, int, int, void*, void*, int) all - int inotify_init1(int) all int inotify_add_watch(int, const char*, unsigned int) all int inotify_rm_watch(int, unsigned int) all diff --git a/libc/arch-arm/arm.mk b/libc/arch-arm/arm.mk index 3821854ad..c509b8366 100644 --- a/libc/arch-arm/arm.mk +++ b/libc/arch-arm/arm.mk @@ -53,7 +53,6 @@ libc_bionic_src_files_arm += \ arch-arm/bionic/__bionic_clone.S \ arch-arm/bionic/eabi.c \ arch-arm/bionic/_exit_with_stack_teardown.S \ - arch-arm/bionic/futex_arm.S \ arch-arm/bionic/__get_sp.S \ arch-arm/bionic/libgcc_compat.c \ arch-arm/bionic/memcmp16.S \ diff --git a/libc/arch-arm/bionic/futex_arm.S b/libc/arch-arm/bionic/futex_arm.S deleted file mode 100644 index 89a1e9689..000000000 --- a/libc/arch-arm/bionic/futex_arm.S +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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 - -// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout) -ENTRY_PRIVATE(__futex_syscall4) - mov ip, r7 - ldr r7, =__NR_futex - swi #0 - mov r7, ip - bx lr -END(__futex_syscall4) diff --git a/libc/arch-arm/syscalls/futex.S b/libc/arch-arm/syscalls/futex.S deleted file mode 100644 index 1646ca207..000000000 --- a/libc/arch-arm/syscalls/futex.S +++ /dev/null @@ -1,22 +0,0 @@ -/* Generated by gensyscalls.py. Do not edit. */ - -#include - -ENTRY(futex) - mov ip, sp - stmfd sp!, {r4, r5, r6, r7} - .cfi_def_cfa_offset 16 - .cfi_rel_offset r4, 0 - .cfi_rel_offset r5, 4 - .cfi_rel_offset r6, 8 - .cfi_rel_offset r7, 12 - ldmfd ip, {r4, r5, r6} - ldr r7, =__NR_futex - swi #0 - ldmfd sp!, {r4, r5, r6, r7} - .cfi_def_cfa_offset 0 - cmn r0, #(MAX_ERRNO + 1) - bxls lr - neg r0, r0 - b __set_errno -END(futex) diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk index 7a9eb4ebd..93b0b0b27 100644 --- a/libc/arch-arm64/arm64.mk +++ b/libc/arch-arm64/arm64.mk @@ -37,7 +37,6 @@ libc_bionic_src_files_arm64 := \ arch-arm64/bionic/__bionic_clone.S \ arch-arm64/bionic/bzero_arm64.c \ arch-arm64/bionic/_exit_with_stack_teardown.S \ - arch-arm64/bionic/futex_arm64.S \ arch-arm64/bionic/__get_sp.S \ arch-arm64/bionic/__rt_sigreturn.S \ arch-arm64/bionic/_setjmp.S \ diff --git a/libc/arch-arm64/bionic/futex_arm64.S b/libc/arch-arm64/bionic/futex_arm64.S deleted file mode 100644 index 9d7465ae4..000000000 --- a/libc/arch-arm64/bionic/futex_arm64.S +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2013 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 - -// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout) -ENTRY_PRIVATE(__futex_syscall4) - stp x29, x30, [sp, #-16]! - .cfi_def_cfa_offset 16 - .cfi_rel_offset x29, 0 - .cfi_rel_offset x30, 8 - mov x29, sp - - mov x8, __NR_futex - svc #0 - - ldp x29, x30, [sp], #16 - .cfi_def_cfa_offset 0 - .cfi_restore x29 - .cfi_restore x30 - ret -END(__futex_syscall4) diff --git a/libc/arch-arm64/syscalls/futex.S b/libc/arch-arm64/syscalls/futex.S deleted file mode 100644 index c14ebbff1..000000000 --- a/libc/arch-arm64/syscalls/futex.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated by gensyscalls.py. Do not edit. */ - -#include - -ENTRY(futex) - stp x29, x30, [sp, #-16]! - .cfi_def_cfa_offset 16 - .cfi_rel_offset x29, 0 - .cfi_rel_offset x30, 8 - mov x29, sp - - mov x8, __NR_futex - svc #0 - - ldp x29, x30, [sp], #16 - .cfi_def_cfa_offset 0 - .cfi_restore x29 - .cfi_restore x30 - - cmn x0, #(MAX_ERRNO + 1) - cneg x0, x0, hi - b.hi __set_errno - - ret -END(futex) diff --git a/libc/arch-mips/bionic/futex_mips.S b/libc/arch-mips/bionic/futex_mips.S deleted file mode 100644 index 5a09f325d..000000000 --- a/libc/arch-mips/bionic/futex_mips.S +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 - -// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout) -ENTRY_PRIVATE(__futex_syscall4) - subu sp,4*6 - sw $0,20(sp) /* val3 */ - sw $0,16(sp) /* addr2 */ -# move a3,a3 /* timespec */ -# move a2,a2 /* val */ -# li a1,a1 /* op */ -# move a0,a0 /* ftx */ - li v0,__NR_futex - syscall - .set noreorder - bnez a3, 1f /* Check for error */ - neg v0 /* Negate error number if it's valid */ - move v0,$0 /* Otherwise return 0 */ -1: - .set reorder - addu sp,4*6 - j ra -END(__futex_syscall4) diff --git a/libc/arch-mips/mips.mk b/libc/arch-mips/mips.mk index d7d1df417..2c87a9ee3 100644 --- a/libc/arch-mips/mips.mk +++ b/libc/arch-mips/mips.mk @@ -58,7 +58,6 @@ libc_bionic_src_files_mips += \ arch-mips/bionic/bzero.S \ arch-mips/bionic/cacheflush.cpp \ arch-mips/bionic/_exit_with_stack_teardown.S \ - arch-mips/bionic/futex_mips.S \ arch-mips/bionic/__get_sp.S \ arch-mips/bionic/memcmp16.S \ arch-mips/bionic/_setjmp.S \ diff --git a/libc/arch-mips/syscalls/futex.S b/libc/arch-mips/syscalls/futex.S deleted file mode 100644 index a865fea10..000000000 --- a/libc/arch-mips/syscalls/futex.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Generated by gensyscalls.py. Do not edit. */ - -#include - -ENTRY(futex) - .set noreorder - .cpload t9 - li v0, __NR_futex - syscall - bnez a3, 1f - move a0, v0 - j ra - nop -1: - la t9,__set_errno - j t9 - nop - .set reorder -END(futex) diff --git a/libc/arch-mips64/bionic/futex_mips.S b/libc/arch-mips64/bionic/futex_mips.S deleted file mode 100644 index 60c218c26..000000000 --- a/libc/arch-mips64/bionic/futex_mips.S +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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 - -#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 b6e0209a6..26390a648 100644 --- a/libc/arch-mips64/mips64.mk +++ b/libc/arch-mips64/mips64.mk @@ -43,7 +43,6 @@ 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 deleted file mode 100644 index dc7dcc6ee..000000000 --- a/libc/arch-mips64/syscalls/futex.S +++ /dev/null @@ -1,25 +0,0 @@ -/* Generated by gensyscalls.py. Do not edit. */ - -#include - -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) diff --git a/libc/arch-x86/bionic/futex_x86.S b/libc/arch-x86/bionic/futex_x86.S deleted file mode 100644 index 94647cabd..000000000 --- a/libc/arch-x86/bionic/futex_x86.S +++ /dev/null @@ -1,16 +0,0 @@ -#include - -// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout) -ENTRY_PRIVATE(__futex_syscall4) - pushl %ebx - pushl %esi - movl 12(%esp), %ebx /* ftx */ - movl 16(%esp), %ecx /* op */ - movl 20(%esp), %edx /* val */ - movl 24(%esp), %esi /* timeout */ - movl $__NR_futex, %eax - int $0x80 - popl %esi - popl %ebx - ret -END(__futex_syscall4) diff --git a/libc/arch-x86/syscalls/futex.S b/libc/arch-x86/syscalls/futex.S deleted file mode 100644 index 7a5291361..000000000 --- a/libc/arch-x86/syscalls/futex.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Generated by gensyscalls.py. Do not edit. */ - -#include - -ENTRY(futex) - pushl %ebx - pushl %ecx - pushl %edx - pushl %esi - pushl %edi - pushl %ebp - .cfi_def_cfa_offset 24 - .cfi_rel_offset ebx, 0 - .cfi_rel_offset ecx, 4 - .cfi_rel_offset edx, 8 - .cfi_rel_offset esi, 12 - .cfi_rel_offset edi, 16 - .cfi_rel_offset ebp, 20 - mov 28(%esp), %ebx - mov 32(%esp), %ecx - mov 36(%esp), %edx - mov 40(%esp), %esi - mov 44(%esp), %edi - mov 48(%esp), %ebp - movl $__NR_futex, %eax - int $0x80 - cmpl $-MAX_ERRNO, %eax - jb 1f - negl %eax - pushl %eax - call __set_errno - addl $4, %esp - orl $-1, %eax -1: - popl %ebp - popl %edi - popl %esi - popl %edx - popl %ecx - popl %ebx - ret -END(futex) diff --git a/libc/arch-x86/x86.mk b/libc/arch-x86/x86.mk index 34da0ced1..aa183cb83 100644 --- a/libc/arch-x86/x86.mk +++ b/libc/arch-x86/x86.mk @@ -23,7 +23,6 @@ libc_bionic_src_files_x86 := \ libc_bionic_src_files_x86 += \ arch-x86/bionic/__bionic_clone.S \ arch-x86/bionic/_exit_with_stack_teardown.S \ - arch-x86/bionic/futex_x86.S \ arch-x86/bionic/__get_sp.S \ arch-x86/bionic/_setjmp.S \ arch-x86/bionic/setjmp.S \ diff --git a/libc/arch-x86_64/bionic/futex_x86_64.S b/libc/arch-x86_64/bionic/futex_x86_64.S deleted file mode 100644 index c24843930..000000000 --- a/libc/arch-x86_64/bionic/futex_x86_64.S +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2013 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 - -// int __futex_syscall4(volatile void* ftx, int op, int val, const struct timespec* timeout) -ENTRY_PRIVATE(__futex_syscall4) - mov %rcx, %r10 /* timeout */ - mov $__NR_futex, %eax - syscall - ret -END(__futex_syscall4) diff --git a/libc/arch-x86_64/syscalls/futex.S b/libc/arch-x86_64/syscalls/futex.S deleted file mode 100644 index 62f64bd9f..000000000 --- a/libc/arch-x86_64/syscalls/futex.S +++ /dev/null @@ -1,17 +0,0 @@ -/* Generated by gensyscalls.py. Do not edit. */ - -#include - -ENTRY(futex) - movq %rcx, %r10 - movl $__NR_futex, %eax - syscall - cmpq $-MAX_ERRNO, %rax - jb 1f - negl %eax - movl %eax, %edi - call __set_errno - orq $-1, %rax -1: - ret -END(futex) diff --git a/libc/arch-x86_64/x86_64.mk b/libc/arch-x86_64/x86_64.mk index 2bcf43258..e3c2562bb 100644 --- a/libc/arch-x86_64/x86_64.mk +++ b/libc/arch-x86_64/x86_64.mk @@ -30,7 +30,6 @@ libc_common_src_files_x86_64 += \ libc_bionic_src_files_x86_64 := \ arch-x86_64/bionic/__bionic_clone.S \ arch-x86_64/bionic/_exit_with_stack_teardown.S \ - arch-x86_64/bionic/futex_x86_64.S \ arch-x86_64/bionic/__get_sp.S \ arch-x86_64/bionic/__rt_sigreturn.S \ arch-x86_64/bionic/_setjmp.S \ diff --git a/libc/private/bionic_futex.h b/libc/private/bionic_futex.h index 11699cea6..dd277ed65 100644 --- a/libc/private/bionic_futex.h +++ b/libc/private/bionic_futex.h @@ -28,31 +28,42 @@ #ifndef _BIONIC_FUTEX_H #define _BIONIC_FUTEX_H +#include #include -#include #include #include +#include +#include __BEGIN_DECLS struct timespec; -extern int __futex_syscall4(volatile void* ftx, int op, int value, const struct timespec* timeout); +static inline int __futex(volatile void* ftx, int op, int value, const struct timespec* timeout) { + // Our generated syscall assembler sets errno, but our callers (pthread functions) don't want to. + int saved_errno = errno; + if (syscall(__NR_futex, ftx, op, value, timeout) == 0) { + return 0; + } + int result = -errno; + errno = saved_errno; + return result; +} static inline int __futex_wake(volatile void* ftx, int count) { - return __futex_syscall4(ftx, FUTEX_WAKE, count, NULL); + return __futex(ftx, FUTEX_WAKE, count, NULL); } static inline int __futex_wake_ex(volatile void* ftx, bool shared, int count) { - return __futex_syscall4(ftx, shared ? FUTEX_WAKE : FUTEX_WAKE_PRIVATE, count, NULL); + return __futex(ftx, shared ? FUTEX_WAKE : FUTEX_WAKE_PRIVATE, count, NULL); } static inline int __futex_wait(volatile void* ftx, int value, const struct timespec* timeout) { - return __futex_syscall4(ftx, FUTEX_WAIT, value, timeout); + return __futex(ftx, FUTEX_WAIT, value, timeout); } static inline int __futex_wait_ex(volatile void* ftx, bool shared, int value, const struct timespec* timeout) { - return __futex_syscall4(ftx, shared ? FUTEX_WAIT : FUTEX_WAIT_PRIVATE, value, timeout); + return __futex(ftx, shared ? FUTEX_WAIT : FUTEX_WAIT_PRIVATE, value, timeout); } __END_DECLS -- 2.11.0