1 /* Copyright (C) 2002-2014 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
20 #include <shlib-compat.h>
21 #include <pthread-errnos.h>
22 #include <structsem.h>
23 #include <lowlevellock.h>
29 .type __new_sem_post,@function
34 cfi_adjust_cfa_offset(4)
42 movl VALUE(%ebx), %eax
44 0: cmpl $SEM_VALUE_MAX, %eax
51 cmpxchgl %edx, VALUE(%ebx)
55 cmpl $0, NWAITERS(%ebx)
58 movl $FUTEX_WAKE, %ecx
59 orl PRIVATE(%ebx), %ecx
69 cfi_adjust_cfa_offset(-4)
73 cfi_adjust_cfa_offset(4)
82 addl $_GLOBAL_OFFSET_TABLE_, %ebx
83 #ifdef NO_TLS_DIRECT_SEG_REFS
84 movl errno@gotntpoff(%ebx), %edx
88 movl errno@gotntpoff(%ebx), %edx
89 movl $EINVAL, %gs:(%edx)
103 addl $_GLOBAL_OFFSET_TABLE_, %ebx
104 #ifdef NO_TLS_DIRECT_SEG_REFS
105 movl errno@gotntpoff(%ebx), %edx
107 movl $EOVERFLOW, (%edx)
109 movl errno@gotntpoff(%ebx), %edx
110 movl $EOVERFLOW, %gs:(%edx)
115 cfi_adjust_cfa_offset(-4)
119 .size __new_sem_post,.-__new_sem_post
120 versioned_symbol(libpthread, __new_sem_post, sem_post, GLIBC_2_1)
121 #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
122 .global __old_sem_post
123 .type __old_sem_post,@function
127 cfi_adjust_cfa_offset(4)
134 movl $SYS_futex, %eax
135 movl $FUTEX_WAKE, %ecx
144 cfi_adjust_cfa_offset(-4)
148 .size __old_sem_post,.-__old_sem_post
149 compat_symbol(libpthread, __old_sem_post, sem_post, GLIBC_2_0)