hppa: fix loading of global pointer in _start [BZ #20277]
[glibc.git] / sysdeps / nacl / lowlevellock.h
blob330c726b20c1134dbc7b42273a605c90be2a6130
1 /* Low-level lock implementation. NaCl version.
2 Copyright (C) 2015-2016 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
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/>. */
19 #ifndef _LOWLEVELLOCK_H
21 /* Everything except the exit handling is the same as the generic code. */
22 # include <sysdeps/nptl/lowlevellock.h>
24 /* See exit-thread.h for details. */
25 # define NACL_EXITING_TID 1
27 # undef lll_wait_tid
28 # define lll_wait_tid(tid) \
29 do { \
30 __typeof (tid) __tid; \
31 volatile __typeof (tid) *__tidp = &(tid); \
32 while ((__tid = atomic_load_relaxed (__tidp)) != 0) \
33 { \
34 if (__tid == NACL_EXITING_TID) \
35 atomic_spin_nop (); \
36 else \
37 lll_futex_wait (__tidp, __tid, LLL_PRIVATE); \
38 } \
39 } while (0)
41 #endif /* lowlevellock.h */