File: tls-macros.h

package info (click to toggle)
glibc 2.28-8
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 271,788 kB
  • sloc: ansic: 1,008,637; asm: 259,607; makefile: 11,271; sh: 10,477; python: 6,910; cpp: 4,992; perl: 2,258; awk: 2,005; yacc: 290; pascal: 182; sed: 73
file content (46 lines) | stat: -rw-r--r-- 1,939 bytes parent folder | download | duplicates (16)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#define TLS_LE(x)					\
  ({ int *__result;					\
     asm ("addi %0, r23, %%tls_le(" #x ")"		\
	  : "=r" (__result));		                \
     __result; })

#define TLS_IE(x)					\
  ({ int *__result;					\
     int __tmp;                                         \
     asm ("nextpc %0 ; "                                \
          "1: movhi %1, %%hiadj(_gp_got - 1b) ; "	\
          "addi %1, %1, %%lo(_gp_got - 1b) ; "		\
          "add %0, %0, %1 ; "                           \
          "ldw %1, %%tls_ie(" #x ")(%0) ; "        	\
	  "add %1, r23, %1"              		\
          : "=&r" (__tmp), "=&r" (__result));           \
     __result; })

#define TLS_LD(x)					\
  ({ char *__result;					\
     char *__result2;                                   \
     int *__result3;                                    \
     int __tmp;                                         \
     extern void *__tls_get_addr (void *);		\
     asm ("nextpc %0 ; "                                \
          "1: movhi %1, %%hiadj(_gp_got - 1b) ; "	\
          "addi %1, %1, %%lo(_gp_got - 1b) ; "		\
          "add %0, %0, %1 ; "                           \
          "addi %0, %0, %%tls_ldm(" #x ")"              \
          : "=r" (__result), "=r" (__tmp));             \
     __result2 = (char *)__tls_get_addr (__result);	\
     asm ("addi %0, %1, %%tls_ldo(" #x ")"              \
	  : "=r" (__result3) : "r" (__result2));        \
     __result3; })

#define TLS_GD(x)					\
  ({ int *__result;					\
     int __tmp;                                         \
     extern void *__tls_get_addr (void *);		\
     asm ("nextpc %0 ; "                                \
          "1: movhi %1, %%hiadj(_gp_got - 1b) ; "	\
          "addi %1, %1, %%lo(_gp_got - 1b) ; "		\
          "add %0, %0, %1 ; "                           \
          "addi %0, %0, %%tls_gd(" #x ")"		\
	  : "=r" (__result), "=r" (__tmp));		\
     (int *)__tls_get_addr (__result); })