# define PTHREAD_MUTEX_LOCK ___pthread_mutex_lock
PTHREAD_MUTEX_LOCK (pthread_mutex_t *mutex)
{
/* See concurrency notes regarding mutex type which is loaded from __kind
in struct __pthread_mutex_s in sysdeps/nptl/bits/thread-shared-types.h. */
unsigned int type = PTHREAD_MUTEX_TYPE_ELISION (mutex);
LIBC_PROBE (mutex_entry, 1, mutex);
if (__builtin_expect (type & ~(PTHREAD_MUTEX_KIND_MASK_NP
| PTHREAD_MUTEX_ELISION_FLAGS_NP), 0))
return __pthread_mutex_lock_full (mutex);
if (__glibc_likely (type == PTHREAD_MUTEX_TIMED_NP))
{
FORCE_ELISION (mutex, goto elision);
simple:
/* Normal mutex. */
LLL_MUTEX_LOCK_OPTIMIZED (mutex);
assert (mutex->__data.__owner == 0);
}
#if ENABLE_ELISION_SUPPORT
else if (__glibc_likely (type == PTHREAD_MUTEX_TIMED_ELISION_NP))
{
elision: __attribute__((unused))
/* This case can never happen on a system without elision,
as the mutex type initialization functions will not
allow to set the elision flags. */
/* Don't record owner or users for elision case. This is a
tail call. */
return LLL_MUTEX_LOCK_ELISION (mutex);
}
#endif
else if (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex)
== PTHREAD_MUTEX_RECURSIVE_NP, 1))
{
/* Recursive mutex. */
pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
/* Check whether we already hold the mutex. */
if (mutex->__data.__owner == id)
{
/* Just bump the counter. */
if (__glibc_unlikely (mutex->__data.__count + 1 == 0))
/* Overflow of the counter. */
return EAGAIN;
++mutex->__data.__count;
return 0;
}
/* We have to get the mutex. */
LLL_MUTEX_LOCK_OPTIMIZED (mutex);
assert (mutex->__data.__owner == 0);
mutex->__data.__count = 1;
}
else if (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex)
== PTHREAD_MUTEX_ADAPTIVE_NP, 1))
{
if (LLL_MUTEX_TRYLOCK (mutex) != 0)
{
int cnt = 0;
int max_cnt = MIN (max_adaptive_count (),
mutex->__data.__spins * 2 + 10);
int spin_count, exp_backoff = 1;
unsigned int jitter = get_jitter ();
do
{
/* In each loop, spin count is exponential backoff plus
random jitter, random range is [0, exp_backoff-1]. */
spin_count = exp_backoff + (jitter & (exp_backoff - 1));
cnt += spin_count;
if (cnt >= max_cnt)
{
/* If cnt exceeds max spin count, just go to wait
queue. */
LLL_MUTEX_LOCK (mutex);
break;
}
do
atomic_spin_nop ();
while (--spin_count > 0);
/* Prepare for next loop. */
exp_backoff = get_next_backoff (exp_backoff);
}
while (LLL_MUTEX_READ_LOCK (mutex) != 0
|| LLL_MUTEX_TRYLOCK (mutex) != 0);
mutex->__data.__spins += (cnt - mutex->__data.__spins) / 8;
}
assert (mutex->__data.__owner == 0);
}
else
{
pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
assert (PTHREAD_MUTEX_TYPE (mutex) == PTHREAD_MUTEX_ERRORCHECK_NP);
/* Check whether we already hold the mutex. */
if (__glibc_unlikely (mutex->__data.__owner == id))
return EDEADLK;
goto simple;
}
pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
/* Record the ownership. */
mutex->__data.__owner = id;
#ifndef NO_INCR
++mutex->__data.__nusers;
#endif
LIBC_PROBE (mutex_acquired, 1, mutex);
return 0;
}
# define LLL_MUTEX_LOCK(mutex) \
lll_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex))
/* This is an expression rather than a statement even though its value is
void, so that it can be used in a comma expression or as an expression
that's cast to void. */
/* The inner conditional compiles to a call to __lll_lock_wait_private if
private is known at compile time to be LLL_PRIVATE, and to a call to
__lll_lock_wait otherwise. */
/* If FUTEX is 0 (not acquired), set to 1 (acquired with no waiters) and
return. Otherwise, ensure that it is >1 (acquired, possibly with waiters)
and then block until we acquire the lock, at which point FUTEX will still be
>1. The lock is always acquired on return. */
#define __lll_lock(futex, private) \
((void) \
({ \
int *__futex = (futex); \
if (__glibc_unlikely \
(atomic_compare_and_exchange_bool_acq (__futex, 1, 0))) \
{ \
if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \
__lll_lock_wait_private (__futex); \
else \
__lll_lock_wait (__futex, private); \
} \
}))
#define lll_lock(futex, private) \
__lll_lock (&(futex), private)
void
__lll_lock_wait (int *futex, int private)
{
if (atomic_load_relaxed (futex) == 2)
goto futex;
while (atomic_exchange_acquire (futex, 2) != 0)
{
futex:
LIBC_PROBE (lll_lock_wait, 1, futex);
futex_wait ((unsigned int *) futex, 2, private); /* Wait if *futex == 2. */
}
}
libc_hidden_def (__lll_lock_wait)
00010548 <__pthread_mutex_lock_full>:
10548: 68c3 ldr r3, [r0, #12]
1054a: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
1054e: ee1d 5f70 mrc 15, 0, r5, cr13, cr0, {3}
10552: f5a5 6698 sub.w r6, r5, #1216 ; 0x4c0
10556: b0a0 sub sp, #128 ; 0x80
10558: f003 027f and.w r2, r3, #127 ; 0x7f
1055c: 4604 mov r4, r0
1055e: 3a10 subs r2, #16
10560: f8d6 9068 ldr.w r9, [r6, #104] ; 0x68
10564: 2a33 cmp r2, #51 ; 0x33
10566: f200 8115 bhi.w 10794 <__pthread_mutex_lock_full+0x24c>
1056a: e8df f012 tbh [pc, r2, lsl #1]
1056e: 00e6 .short 0x00e6
10570: 00e600e6 .word 0x00e600e6
10574: 011300e6 .word 0x011300e6
10578: 01130113 .word 0x01130113
1057c: 01130113 .word 0x01130113
10580: 01130113 .word 0x01130113
10584: 01130113 .word 0x01130113
10588: 01130113 .word 0x01130113
1058c: 008c0113 .word 0x008c0113
10590: 008c008c .word 0x008c008c
10594: 0113008c .word 0x0113008c
10598: 01130113 .word 0x01130113
1059c: 01130113 .word 0x01130113
105a0: 01130113 .word 0x01130113
105a4: 01130113 .word 0x01130113
105a8: 01130113 .word 0x01130113
105ac: 008c0113 .word 0x008c0113
105b0: 008c008c .word 0x008c008c
105b4: 0113008c .word 0x0113008c
105b8: 01130113 .word 0x01130113
105bc: 01130113 .word 0x01130113
105c0: 01130113 .word 0x01130113
105c4: 01130113 .word 0x01130113
105c8: 01130113 .word 0x01130113
105cc: 00340113 .word 0x00340113
105d0: 00340034 .word 0x00340034
105d4: 0034 .short 0x0034
105d6: 6882 ldr r2, [r0, #8]
105d8: 6801 ldr r1, [r0, #0]
105da: 454a cmp r2, r9
105dc: f000 8101 beq.w 107e2 <__pthread_mutex_lock_full+0x29a>
105e0: f04f 0800 mov.w r8, #0
105e4: f04f 35ff mov.w r5, #4294967295 ; 0xffffffff
105e8: f6cf 78f8 movt r8, #65528 ; 0xfff8
105ec: ea4f 4ad1 mov.w sl, r1, lsr #19
105f0: f000 feda bl 113a8 <__pthread_current_priority>
105f4: 4550 cmp r0, sl
105f6: f300 8121 bgt.w 1083c <__pthread_mutex_lock_full+0x2f4>
105fa: 4628 mov r0, r5
105fc: 4651 mov r1, sl
105fe: f000 fd81 bl 11104 <__pthread_tpp_change_priority>
10602: 2800 cmp r0, #0
10604: f040 80c3 bne.w 1078e <__pthread_mutex_lock_full+0x246>
10608: ea4f 45ca mov.w r5, sl, lsl #19
1060c: f045 0701 orr.w r7, r5, #1
10610: e854 3f00 ldrex r3, [r4]
10614: 42ab cmp r3, r5
10616: d105 bne.n 10624 <__pthread_mutex_lock_full+0xdc>
10618: e844 7200 strex r2, r7, [r4]
1061c: 2a00 cmp r2, #0
1061e: d1f7 bne.n 10610 <__pthread_mutex_lock_full+0xc8>
10620: f3bf 8f5b dmb ish
10624: 429d cmp r5, r3
10626: f000 80b9 beq.w 1079c <__pthread_mutex_lock_full+0x254>
1062a: f045 0602 orr.w r6, r5, #2
1062e: e019 b.n 10664 <__pthread_mutex_lock_full+0x11c>
10630: 429d cmp r5, r3
10632: d00a beq.n 1064a <__pthread_mutex_lock_full+0x102>
10634: 68e1 ldr r1, [r4, #12]
10636: 4620 mov r0, r4
10638: 4632 mov r2, r6
1063a: 2300 movs r3, #0
1063c: f04f 0cf0 mov.w ip, #240 ; 0xf0
10640: 43c9 mvns r1, r1
10642: f001 0180 and.w r1, r1, #128 ; 0x80
10646: f004 ffa3 bl 15590 <__libc_do_syscall>
1064a: e854 3f00 ldrex r3, [r4]
1064e: 42ab cmp r3, r5
10650: d105 bne.n 1065e <__pthread_mutex_lock_full+0x116>
10652: e844 6200 strex r2, r6, [r4]
10656: 2a00 cmp r2, #0
10658: d1f7 bne.n 1064a <__pthread_mutex_lock_full+0x102>
1065a: f3bf 8f5b dmb ish
1065e: 429d cmp r5, r3
10660: f000 809c beq.w 1079c <__pthread_mutex_lock_full+0x254>
10664: e854 3f00 ldrex r3, [r4]
10668: 42bb cmp r3, r7
1066a: d105 bne.n 10678 <__pthread_mutex_lock_full+0x130>
1066c: e844 6200 strex r2, r6, [r4]
10670: 2a00 cmp r2, #0
10672: d1f7 bne.n 10664 <__pthread_mutex_lock_full+0x11c>
10674: f3bf 8f5b dmb ish
10678: ea03 0208 and.w r2, r3, r8
1067c: 4619 mov r1, r3
1067e: 42aa cmp r2, r5
10680: d0d6 beq.n 10630 <__pthread_mutex_lock_full+0xe8>
10682: 4655 mov r5, sl
10684: e7b2 b.n 105ec <__pthread_mutex_lock_full+0xa4>
10686: f013 0710 ands.w r7, r3, #16
1068a: f003 0803 and.w r8, r3, #3
1068e: f040 80a2 bne.w 107d6 <__pthread_mutex_lock_full+0x28e>
10692: 6823 ldr r3, [r4, #0]
10694: f023 4340 bic.w r3, r3, #3221225472 ; 0xc0000000
10698: 454b cmp r3, r9
1069a: f000 8138 beq.w 1090e <__pthread_mutex_lock_full+0x3c6>
1069e: e854 3f00 ldrex r3, [r4]
106a2: 2b00 cmp r3, #0
106a4: d105 bne.n 106b2 <__pthread_mutex_lock_full+0x16a>
106a6: e844 9200 strex r2, r9, [r4]
106aa: 2a00 cmp r2, #0
106ac: d1f7 bne.n 1069e <__pthread_mutex_lock_full+0x156>
106ae: f3bf 8f5b dmb ish
106b2: 2b00 cmp r3, #0
106b4: d079 beq.n 107aa <__pthread_mutex_lock_full+0x262>
106b6: 2106 movs r1, #6
106b8: b927 cbnz r7, 106c4 <__pthread_mutex_lock_full+0x17c>
106ba: 68e3 ldr r3, [r4, #12]
106bc: f003 0380 and.w r3, r3, #128 ; 0x80
106c0: f083 0186 eor.w r1, r3, #134 ; 0x86
106c4: 4620 mov r0, r4
106c6: 2201 movs r2, #1
106c8: 2300 movs r3, #0
106ca: f04f 0cf0 mov.w ip, #240 ; 0xf0
106ce: f004 ff5f bl 15590 <__libc_do_syscall>
106d2: f510 5f80 cmn.w r0, #4096 ; 0x1000
106d6: f240 809a bls.w 1080e <__pthread_mutex_lock_full+0x2c6>
106da: f020 0320 bic.w r3, r0, #32
106de: 3323 adds r3, #35 ; 0x23
106e0: f040 8095 bne.w 1080e <__pthread_mutex_lock_full+0x2c6>
106e4: f110 0f23 cmn.w r0, #35 ; 0x23
106e8: f000 817a beq.w 109e0 <__pthread_mutex_lock_full+0x498>
106ec: 1cc3 adds r3, r0, #3
106ee: bf18 it ne
106f0: 2301 movne r3, #1
106f2: 2f00 cmp r7, #0
106f4: bf08 it eq
106f6: 2301 moveq r3, #1
106f8: 2b00 cmp r3, #0
106fa: f000 8161 beq.w 109c0 <__pthread_mutex_lock_full+0x478>
106fe: 4cc3 ldr r4, [pc, #780] ; (10a0c <__pthread_mutex_lock_full+0x4c4>)
10700: 4ec3 ldr r6, [pc, #780] ; (10a10 <__pthread_mutex_lock_full+0x4c8>)
10702: 2000 movs r0, #0
10704: 466a mov r2, sp
10706: 4601 mov r1, r0
10708: 2308 movs r3, #8
1070a: f04f 0caf mov.w ip, #175 ; 0xaf
1070e: f004 ff3f bl 15590 <__libc_do_syscall>
10712: f510 5f80 cmn.w r0, #4096 ; 0x1000
10716: d874 bhi.n 10802 <__pthread_mutex_lock_full+0x2ba>
10718: 2800 cmp r0, #0
1071a: d1f2 bne.n 10702 <__pthread_mutex_lock_full+0x1ba>
1071c: 4619 mov r1, r3
1071e: 4668 mov r0, sp
10720: f04f 0cb3 mov.w ip, #179 ; 0xb3
10724: f004 ff34 bl 15590 <__libc_do_syscall>
10728: f510 5f80 cmn.w r0, #4096 ; 0x1000
1072c: d9e9 bls.n 10702 <__pthread_mutex_lock_full+0x1ba>
1072e: 4633 mov r3, r6
10730: 4240 negs r0, r0
10732: 447b add r3, pc
10734: 681b ldr r3, [r3, #0]
10736: 50e8 str r0, [r5, r3]
10738: e7e3 b.n 10702 <__pthread_mutex_lock_full+0x1ba>
1073a: f100 0514 add.w r5, r0, #20
1073e: 67b5 str r5, [r6, #120] ; 0x78
10740: 6803 ldr r3, [r0, #0]
10742: 2100 movs r1, #0
10744: 2b00 cmp r3, #0
10746: f040 8082 bne.w 1084e <__pthread_mutex_lock_full+0x306>
1074a: ea49 0001 orr.w r0, r9, r1
1074e: e854 2f00 ldrex r2, [r4]
10752: 2a00 cmp r2, #0
10754: d105 bne.n 10762 <__pthread_mutex_lock_full+0x21a>
10756: e844 0700 strex r7, r0, [r4]
1075a: 2f00 cmp r7, #0
1075c: d1f7 bne.n 1074e <__pthread_mutex_lock_full+0x206>
1075e: f3bf 8f5b dmb ish
10762: 2a00 cmp r2, #0
10764: d174 bne.n 10850 <__pthread_mutex_lock_full+0x308>
10766: 68a1 ldr r1, [r4, #8]
10768: f64f 72fe movw r2, #65534 ; 0xfffe
1076c: f6c7 72ff movt r2, #32767 ; 0x7fff
10770: 4291 cmp r1, r2
10772: f000 80e2 beq.w 1093a <__pthread_mutex_lock_full+0x3f2>
10776: 2201 movs r2, #1
10778: 6062 str r2, [r4, #4]
1077a: 6f32 ldr r2, [r6, #112] ; 0x70
1077c: 6162 str r2, [r4, #20]
1077e: 6735 str r5, [r6, #112] ; 0x70
10780: 67b3 str r3, [r6, #120] ; 0x78
10782: 6923 ldr r3, [r4, #16]
10784: 2000 movs r0, #0
10786: f8c4 9008 str.w r9, [r4, #8]
1078a: 3301 adds r3, #1
1078c: 6123 str r3, [r4, #16]
1078e: b020 add sp, #128 ; 0x80
10790: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
10794: 2016 movs r0, #22
10796: b020 add sp, #128 ; 0x80
10798: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
1079c: 68a3 ldr r3, [r4, #8]
1079e: 2b00 cmp r3, #0
107a0: f040 80e6 bne.w 10970 <__pthread_mutex_lock_full+0x428>
107a4: 2301 movs r3, #1
107a6: 6063 str r3, [r4, #4]
107a8: e7eb b.n 10782 <__pthread_mutex_lock_full+0x23a>
107aa: 2f00 cmp r7, #0
107ac: d0fa beq.n 107a4 <__pthread_mutex_lock_full+0x25c>
107ae: 68a2 ldr r2, [r4, #8]
107b0: f64f 73fe movw r3, #65534 ; 0xfffe
107b4: f6c7 73ff movt r3, #32767 ; 0x7fff
107b8: 429a cmp r2, r3
107ba: f000 80cd beq.w 10958 <__pthread_mutex_lock_full+0x410>
107be: 2301 movs r3, #1
107c0: 6063 str r3, [r4, #4]
107c2: 6f32 ldr r2, [r6, #112] ; 0x70
107c4: 4623 mov r3, r4
107c6: f843 2f14 str.w r2, [r3, #20]!
107ca: f043 0301 orr.w r3, r3, #1
107ce: 6733 str r3, [r6, #112] ; 0x70
107d0: 2300 movs r3, #0
107d2: 67b3 str r3, [r6, #120] ; 0x78
107d4: e7d5 b.n 10782 <__pthread_mutex_lock_full+0x23a>
107d6: f100 0314 add.w r3, r0, #20
107da: f043 0301 orr.w r3, r3, #1
107de: 67b3 str r3, [r6, #120] ; 0x78
107e0: e757 b.n 10692 <__pthread_mutex_lock_full+0x14a>
107e2: f003 0303 and.w r3, r3, #3
107e6: 2b02 cmp r3, #2
107e8: f000 80a5 beq.w 10936 <__pthread_mutex_lock_full+0x3ee>
107ec: 2b01 cmp r3, #1
107ee: f47f aef7 bne.w 105e0 <__pthread_mutex_lock_full+0x98>
107f2: 6843 ldr r3, [r0, #4]
107f4: 1c5a adds r2, r3, #1
107f6: f000 80de beq.w 109b6 <__pthread_mutex_lock_full+0x46e>
107fa: 3301 adds r3, #1
107fc: 2000 movs r0, #0
107fe: 6063 str r3, [r4, #4]
10800: e7c5 b.n 1078e <__pthread_mutex_lock_full+0x246>
10802: 4623 mov r3, r4
10804: 4240 negs r0, r0
10806: 447b add r3, pc
10808: 681b ldr r3, [r3, #0]
1080a: 50e8 str r0, [r5, r3]
1080c: e779 b.n 10702 <__pthread_mutex_lock_full+0x1ba>
1080e: 6823 ldr r3, [r4, #0]
10810: f003 4380 and.w r3, r3, #1073741824 ; 0x40000000
10814: 2f00 cmp r7, #0
10816: d13c bne.n 10892 <__pthread_mutex_lock_full+0x34a>
10818: 2b00 cmp r3, #0
1081a: d0c3 beq.n 107a4 <__pthread_mutex_lock_full+0x25c>
1081c: f248 53c0 movw r3, #34240 ; 0x85c0
10820: f248 4170 movw r1, #33904 ; 0x8470
10824: f248 503c movw r0, #34108 ; 0x853c
10828: f2c0 0305 movt r3, #5
1082c: f2c0 0105 movt r1, #5
10830: f2c0 0005 movt r0, #5
10834: f44f 72da mov.w r2, #436 ; 0x1b4
10838: f004 ff34 bl 156a4 <__assert_fail>
1083c: 1c6b adds r3, r5, #1
1083e: d0a9 beq.n 10794 <__pthread_mutex_lock_full+0x24c>
10840: 4628 mov r0, r5
10842: f04f 31ff mov.w r1, #4294967295 ; 0xffffffff
10846: f000 fc5d bl 11104 <__pthread_tpp_change_priority>
1084a: 2016 movs r0, #22
1084c: e79f b.n 1078e <__pthread_mutex_lock_full+0x246>
1084e: 461a mov r2, r3
10850: f012 4080 ands.w r0, r2, #1073741824 ; 0x40000000
10854: d03b beq.n 108ce <__pthread_mutex_lock_full+0x386>
10856: f002 4000 and.w r0, r2, #2147483648 ; 0x80000000
1085a: ea49 0301 orr.w r3, r9, r1
1085e: 4318 orrs r0, r3
10860: e854 3f00 ldrex r3, [r4]
10864: 4293 cmp r3, r2
10866: d105 bne.n 10874 <__pthread_mutex_lock_full+0x32c>
10868: e844 0700 strex r7, r0, [r4]
1086c: 2f00 cmp r7, #0
1086e: d1f7 bne.n 10860 <__pthread_mutex_lock_full+0x318>
10870: f3bf 8f5b dmb ish
10874: 429a cmp r2, r3
10876: f47f af65 bne.w 10744 <__pthread_mutex_lock_full+0x1fc>
1087a: 2201 movs r2, #1
1087c: f06f 4300 mvn.w r3, #2147483648 ; 0x80000000
10880: e9c4 2301 strd r2, r3, [r4, #4]
10884: 6f33 ldr r3, [r6, #112] ; 0x70
10886: 6163 str r3, [r4, #20]
10888: 6735 str r5, [r6, #112] ; 0x70
1088a: 2300 movs r3, #0
1088c: 2082 movs r0, #130 ; 0x82
1088e: 67b3 str r3, [r6, #120] ; 0x78
10890: e77d b.n 1078e <__pthread_mutex_lock_full+0x246>
10892: 2b00 cmp r3, #0
10894: d08b beq.n 107ae <__pthread_mutex_lock_full+0x266>
10896: 6823 ldr r3, [r4, #0]
10898: f023 4280 bic.w r2, r3, #1073741824 ; 0x40000000
1089c: e854 1f00 ldrex r1, [r4]
108a0: 4299 cmp r1, r3
108a2: d105 bne.n 108b0 <__pthread_mutex_lock_full+0x368>
108a4: e844 2000 strex r0, r2, [r4]
108a8: 2800 cmp r0, #0
108aa: d1f7 bne.n 1089c <__pthread_mutex_lock_full+0x354>
108ac: f3bf 8f5b dmb ish
108b0: d1f1 bne.n 10896 <__pthread_mutex_lock_full+0x34e>
108b2: 2201 movs r2, #1
108b4: f06f 4300 mvn.w r3, #2147483648 ; 0x80000000
108b8: e9c4 2301 strd r2, r3, [r4, #4]
108bc: 6f33 ldr r3, [r6, #112] ; 0x70
108be: f844 3f14 str.w r3, [r4, #20]!
108c2: 4314 orrs r4, r2
108c4: 6734 str r4, [r6, #112] ; 0x70
108c6: 2300 movs r3, #0
108c8: 2082 movs r0, #130 ; 0x82
108ca: 67b3 str r3, [r6, #120] ; 0x78
108cc: e75f b.n 1078e <__pthread_mutex_lock_full+0x246>
108ce: f022 4340 bic.w r3, r2, #3221225472 ; 0xc0000000
108d2: 454b cmp r3, r9
108d4: d064 beq.n 109a0 <__pthread_mutex_lock_full+0x458>
108d6: 2a00 cmp r2, #0
108d8: db0e blt.n 108f8 <__pthread_mutex_lock_full+0x3b0>
108da: f042 4300 orr.w r3, r2, #2147483648 ; 0x80000000
108de: e854 0f00 ldrex r0, [r4]
108e2: 4290 cmp r0, r2
108e4: d105 bne.n 108f2 <__pthread_mutex_lock_full+0x3aa>
108e6: e844 3700 strex r7, r3, [r4]
108ea: 2f00 cmp r7, #0
108ec: d1f7 bne.n 108de <__pthread_mutex_lock_full+0x396>
108ee: f3bf 8f5b dmb ish
108f2: bf08 it eq
108f4: 461a moveq r2, r3
108f6: d108 bne.n 1090a <__pthread_mutex_lock_full+0x3c2>
108f8: 2100 movs r1, #0
108fa: 4620 mov r0, r4
108fc: 460b mov r3, r1
108fe: f04f 0cf0 mov.w ip, #240 ; 0xf0
10902: f004 fe45 bl 15590 <__libc_do_syscall>
10906: f04f 4100 mov.w r1, #2147483648 ; 0x80000000
1090a: 6823 ldr r3, [r4, #0]
1090c: e71a b.n 10744 <__pthread_mutex_lock_full+0x1fc>
1090e: f1b8 0f02 cmp.w r8, #2
10912: bf02 ittt eq
10914: 2300 moveq r3, #0
10916: 2023 moveq r0, #35 ; 0x23
10918: 67b3 streq r3, [r6, #120] ; 0x78
1091a: f43f af38 beq.w 1078e <__pthread_mutex_lock_full+0x246>
1091e: f1b8 0f01 cmp.w r8, #1
10922: f47f aebc bne.w 1069e <__pthread_mutex_lock_full+0x156>
10926: 6863 ldr r3, [r4, #4]
10928: 2000 movs r0, #0
1092a: 67b0 str r0, [r6, #120] ; 0x78
1092c: 1c59 adds r1, r3, #1
1092e: d042 beq.n 109b6 <__pthread_mutex_lock_full+0x46e>
10930: 3301 adds r3, #1
10932: 6063 str r3, [r4, #4]
10934: e72b b.n 1078e <__pthread_mutex_lock_full+0x246>
10936: 2023 movs r0, #35 ; 0x23
10938: e729 b.n 1078e <__pthread_mutex_lock_full+0x246>
1093a: 6063 str r3, [r4, #4]
1093c: f3bf 8f5b dmb ish
10940: e854 2f00 ldrex r2, [r4]
10944: e844 3100 strex r1, r3, [r4]
10948: 2900 cmp r1, #0
1094a: d1f9 bne.n 10940 <__pthread_mutex_lock_full+0x3f8>
1094c: 2a01 cmp r2, #1
1094e: dc1f bgt.n 10990 <__pthread_mutex_lock_full+0x448>
10950: 2300 movs r3, #0
10952: 2083 movs r0, #131 ; 0x83
10954: 67b3 str r3, [r6, #120] ; 0x78
10956: e71a b.n 1078e <__pthread_mutex_lock_full+0x246>
10958: 2200 movs r2, #0
1095a: 4620 mov r0, r4
1095c: 6062 str r2, [r4, #4]
1095e: 4613 mov r3, r2
10960: 2107 movs r1, #7
10962: f04f 0cf0 mov.w ip, #240 ; 0xf0
10966: f004 fe13 bl 15590 <__libc_do_syscall>
1096a: 2083 movs r0, #131 ; 0x83
1096c: 67b2 str r2, [r6, #120] ; 0x78
1096e: e70e b.n 1078e <__pthread_mutex_lock_full+0x246>
10970: f248 53c0 movw r3, #34240 ; 0x85c0
10974: f248 4170 movw r1, #33904 ; 0x8470
10978: f248 5068 movw r0, #34152 ; 0x8568
1097c: f2c0 0305 movt r3, #5
10980: f2c0 0105 movt r1, #5
10984: f2c0 0005 movt r0, #5
10988: f240 2246 movw r2, #582 ; 0x246
1098c: f004 fe8a bl 156a4 <__assert_fail>
10990: 2101 movs r1, #1
10992: 4620 mov r0, r4
10994: 460a mov r2, r1
10996: f04f 0cf0 mov.w ip, #240 ; 0xf0
1099a: f004 fdf9 bl 15590 <__libc_do_syscall>
1099e: e7d7 b.n 10950 <__pthread_mutex_lock_full+0x408>
109a0: 68e3 ldr r3, [r4, #12]
109a2: f003 037f and.w r3, r3, #127 ; 0x7f
109a6: 2b12 cmp r3, #18
109a8: d007 beq.n 109ba <__pthread_mutex_lock_full+0x472>
109aa: 2b11 cmp r3, #17
109ac: d193 bne.n 108d6 <__pthread_mutex_lock_full+0x38e>
109ae: 6863 ldr r3, [r4, #4]
109b0: 67b0 str r0, [r6, #120] ; 0x78
109b2: 1c5d adds r5, r3, #1
109b4: d1bc bne.n 10930 <__pthread_mutex_lock_full+0x3e8>
109b6: 200b movs r0, #11
109b8: e6e9 b.n 1078e <__pthread_mutex_lock_full+0x246>
109ba: 67b0 str r0, [r6, #120] ; 0x78
109bc: 2023 movs r0, #35 ; 0x23
109be: e6e6 b.n 1078e <__pthread_mutex_lock_full+0x246>
109c0: f248 53c0 movw r3, #34240 ; 0x85c0
109c4: f248 4170 movw r1, #33904 ; 0x8470
109c8: f248 5004 movw r0, #34052 ; 0x8504
109cc: f2c0 0305 movt r3, #5
109d0: f2c0 0105 movt r1, #5
109d4: f2c0 0005 movt r0, #5
109d8: f240 12ab movw r2, #427 ; 0x1ab
109dc: f004 fe62 bl 156a4 <__assert_fail>
109e0: f108 38ff add.w r8, r8, #4294967295 ; 0xffffffff
109e4: 4590 cmp r8, r2
109e6: f63f ae8a bhi.w 106fe <__pthread_mutex_lock_full+0x1b6>
109ea: f248 53c0 movw r3, #34240 ; 0x85c0
109ee: f248 4170 movw r1, #33904 ; 0x8470
109f2: f248 4088 movw r0, #33928 ; 0x8488
109f6: f2c0 0305 movt r3, #5
109fa: f2c0 0105 movt r1, #5
109fe: f2c0 0005 movt r0, #5
10a02: f44f 72d4 mov.w r2, #424 ; 0x1a8
10a06: f004 fe4d bl 156a4 <__assert_fail>
10a0a: bf00 nop
10a0c: 0006e81a .word 0x0006e81a
10a10: 0006e8ee .word 0x0006e8ee