[PATCH 1/6] Split x86_64 out of main Linux kernel-features.h.
[glibc.git] / sysdeps / i386 / tls-macros.h
blob0b857383c98f658b4a39b9743f53c3925fd04694
1 #define TLS_LE(x) \
2 ({ int *__l; \
3 asm ("movl %%gs:0,%0\n\t" \
4 "subl $" #x "@tpoff,%0" \
5 : "=r" (__l)); \
6 __l; })
8 #ifdef PIC
9 # define TLS_IE(x) \
10 ({ int *__l; \
11 asm ("movl %%gs:0,%0\n\t" \
12 "subl " #x "@gottpoff(%%ebx),%0" \
13 : "=r" (__l)); \
14 __l; })
15 #else
16 # define TLS_IE(x) \
17 ({ int *__l, __b; \
18 asm ("call 1f\n\t" \
19 ".subsection 1\n" \
20 "1:\tmovl (%%esp), %%ebx\n\t" \
21 "ret\n\t" \
22 ".previous\n\t" \
23 "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \
24 "movl %%gs:0,%0\n\t" \
25 "subl " #x "@gottpoff(%%ebx),%0" \
26 : "=r" (__l), "=&b" (__b)); \
27 __l; })
28 #endif
30 #ifdef PIC
31 # define TLS_LD(x) \
32 ({ int *__l, __c, __d; \
33 asm ("leal " #x "@tlsldm(%%ebx),%%eax\n\t" \
34 "call ___tls_get_addr@plt\n\t" \
35 "leal " #x "@dtpoff(%%eax), %%eax" \
36 : "=a" (__l), "=&c" (__c), "=&d" (__d)); \
37 __l; })
38 #else
39 # define TLS_LD(x) \
40 ({ int *__l, __b, __c, __d; \
41 asm ("call 1f\n\t" \
42 ".subsection 1\n" \
43 "1:\tmovl (%%esp), %%ebx\n\t" \
44 "ret\n\t" \
45 ".previous\n\t" \
46 "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \
47 "leal " #x "@tlsldm(%%ebx),%%eax\n\t" \
48 "call ___tls_get_addr@plt\n\t" \
49 "leal " #x "@dtpoff(%%eax), %%eax" \
50 : "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \
51 __l; })
52 #endif
54 #ifdef PIC
55 # define TLS_GD(x) \
56 ({ int *__l, __c, __d; \
57 asm ("leal " #x "@tlsgd(%%ebx),%%eax\n\t" \
58 "call ___tls_get_addr@plt\n\t" \
59 "nop" \
60 : "=a" (__l), "=&c" (__c), "=&d" (__d)); \
61 __l; })
62 #else
63 # define TLS_GD(x) \
64 ({ int *__l, __b, __c, __d; \
65 asm ("call 1f\n\t" \
66 ".subsection 1\n" \
67 "1:\tmovl (%%esp), %%ebx\n\t" \
68 "ret\n\t" \
69 ".previous\n\t" \
70 "addl $_GLOBAL_OFFSET_TABLE_, %%ebx\n\t" \
71 "leal " #x "@tlsgd(%%ebx),%%eax\n\t" \
72 "call ___tls_get_addr@plt\n\t" \
73 "nop" \
74 : "=a" (__l), "=&b" (__b), "=&c" (__c), "=&d" (__d)); \
75 __l; })
76 #endif