]> git.proxmox.com Git - wasi-libc.git/blob - libc-top-half/musl/src/ldso/arm/tlsdesc.S
Update to musl 1.1.22.
[wasi-libc.git] / libc-top-half / musl / src / ldso / arm / tlsdesc.S
1 .syntax unified
2
3 .text
4 .global __tlsdesc_static
5 .hidden __tlsdesc_static
6 .type __tlsdesc_static,%function
7 __tlsdesc_static:
8 ldr r0,[r0]
9 bx lr
10
11 .hidden __tls_get_new
12
13 .global __tlsdesc_dynamic
14 .hidden __tlsdesc_dynamic
15 .type __tlsdesc_dynamic,%function
16 __tlsdesc_dynamic:
17 push {r2,r3,ip,lr}
18 ldr r1,[r0]
19 ldr r2,[r1,#4] // r2 = offset
20 ldr r1,[r1] // r1 = modid
21
22 #if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
23 || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
24 mrc p15,0,r0,c13,c0,3
25 #else
26 ldr r0,1f
27 add r0,r0,pc
28 ldr r0,[r0]
29 2:
30 #if __ARM_ARCH >= 5
31 blx r0 // r0 = tp
32 #else
33 mov lr,pc
34 bx r0
35 #endif
36 #endif
37 ldr r3,[r0,#-4] // r3 = dtv
38 ldr ip,[r3,r1,LSL #2]
39 sub r0,ip,r0
40 add r0,r0,r2 // r0 = r3[r1]-r0+r2
41 #if __ARM_ARCH >= 5
42 pop {r2,r3,ip,pc}
43 #else
44 pop {r2,r3,ip,lr}
45 bx lr
46 #endif
47
48 #if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
49 || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
50 #else
51 .align 2
52 1: .word __a_gettp_ptr - 2b
53 #endif