use hidden __tls_get_new for tls/tlsdesc lookup fallback cases
[musl] / src / ldso / x86_64 / tlsdesc.s
1 .text
2 .global __tlsdesc_static
3 .type __tlsdesc_static,@function
4 __tlsdesc_static:
5         mov 8(%rax),%rax
6         ret
7
8 .hidden __tls_get_new
9
10 .global __tlsdesc_dynamic
11 .type __tlsdesc_dynamic,@function
12 __tlsdesc_dynamic:
13         mov 8(%rax),%rax
14         push %rdx
15         mov %fs:8,%rdx
16         push %rcx
17         mov (%rax),%rcx
18         cmp %rcx,(%rdx)
19         jc 1f
20         mov 8(%rax),%rax
21         add (%rdx,%rcx,8),%rax
22 2:      pop %rcx
23         sub %fs:0,%rax
24         pop %rdx
25         ret
26 1:      push %rdi
27         push %rdi
28         push %rsi
29         push %r8
30         push %r9
31         push %r10
32         push %r11
33         mov %rax,%rdi
34         call __tls_get_new
35         pop %r11
36         pop %r10
37         pop %r9
38         pop %r8
39         pop %rsi
40         pop %rdi
41         pop %rdi
42         jmp 2b