16759, 16760, 16770, 16786, 16789, 16791, 16796, 16799, 16800, 16815,
16823, 16824, 16831, 16838, 16849, 16854, 16876, 16877, 16878, 16885,
16888, 16890, 16912, 16915, 16916, 16917, 16922, 16927, 16928, 16932,
- 16943, 16958, 16966, 16967, 16965, 16977, 16978, 16984.
+ 16943, 16958, 16966, 16967, 16965, 16977, 16978, 16984, 16990.
* The minimum Linux kernel version that this version of the GNU C Library
can be used with is 2.6.32.
.size _dl_tlsdesc_lazy_resolver, .-_dl_tlsdesc_lazy_resolver
/* Holder for lazy tls descriptors being resolve in another thread.
- Same ABI as the lazy resolver itself. */
+
+ Our calling convention is to clobber r0, r1 and the processor
+ flags. All others that are modified must be saved */
.hidden _dl_tlsdesc_resolve_hold
.global _dl_tlsdesc_resolve_hold
.type _dl_tlsdesc_resolve_hold,#function
eabi_fnstart
.align 2
_dl_tlsdesc_resolve_hold:
- /* Tell the unwinder that r2 has already been pushed. */
- eabi_save ({r2})
- cfi_adjust_cfa_offset (4)
+ eabi_save ({r2,r3,ip,lr})
+ push {r2, r3, ip, lr}
+ cfi_adjust_cfa_offset (16)
cfi_rel_offset (r2, 0)
- eabi_save ({r0,r1,r3,ip,lr})
- push {r0, r1, r3, ip, lr}
- cfi_adjust_cfa_offset (20)
- cfi_rel_offset (r0, 0)
- cfi_rel_offset (r1, 4)
- cfi_rel_offset (r3, 8)
- cfi_rel_offset (ip, 12)
- cfi_rel_offset (lr, 16)
- adr r2, _dl_tlsdesc_resolve_hold
+ cfi_rel_offset (r3, 4)
+ cfi_rel_offset (ip, 8)
+ cfi_rel_offset (lr, 12)
+ adr r1, _dl_tlsdesc_resolve_hold
bl _dl_tlsdesc_resolve_hold_fixup
- pop {r0, r1, r3, ip, lr}
- cfi_adjust_cfa_offset (-20)
+ pop {r2, r3, ip, lr}
+ cfi_adjust_cfa_offset (-16)
cfi_restore (lr)
cfi_restore (ip)
cfi_restore (r3)
- cfi_restore (r1)
- cfi_restore (r0)
- pop {r2}
- cfi_adjust_cfa_offset (-4)
cfi_restore (r2)
sfi_breg r0, \
ldr r1, [\B, #4]