@@ -158,34 +158,14 @@ bool SanitizerGetThreadName(char *name, int max_len) {
158
158
159
159
#if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO
160
160
static uptr g_tls_size;
161
- #endif
162
161
163
162
#ifdef __i386__
164
163
# define DL_INTERNAL_FUNCTION __attribute__ ((regparm(3 ), stdcall))
165
164
#else
166
165
# define DL_INTERNAL_FUNCTION
167
166
#endif
168
167
169
- #if defined(__mips__) || defined(__powerpc64__)
170
- // TlsPreTcbSize includes size of struct pthread_descr and size of tcb
171
- // head structure. It lies before the static tls blocks.
172
- static uptr TlsPreTcbSize () {
173
- # if defined(__mips__)
174
- const uptr kTcbHead = 16 ; // sizeof (tcbhead_t)
175
- # elif defined(__powerpc64__)
176
- const uptr kTcbHead = 88 ; // sizeof (tcbhead_t)
177
- # endif
178
- const uptr kTlsAlign = 16 ;
179
- const uptr kTlsPreTcbSize =
180
- (ThreadDescriptorSize () + kTcbHead + kTlsAlign - 1 ) & ~(kTlsAlign - 1 );
181
- InitTlsSize ();
182
- g_tls_size = (g_tls_size + kTlsPreTcbSize + kTlsAlign -1 ) & ~(kTlsAlign - 1 );
183
- return kTlsPreTcbSize ;
184
- }
185
- #endif
186
-
187
168
void InitTlsSize () {
188
- #if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO
189
169
// all current supported platforms have 16 bytes stack alignment
190
170
const size_t kStackAlign = 16 ;
191
171
typedef void (*get_tls_func)(size_t *, size_t *) DL_INTERNAL_FUNCTION;
@@ -201,8 +181,10 @@ void InitTlsSize() {
201
181
if (tls_align < kStackAlign )
202
182
tls_align = kStackAlign ;
203
183
g_tls_size = RoundUpTo (tls_size, tls_align);
204
- #endif // !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO
205
184
}
185
+ #else
186
+ void InitTlsSize () { }
187
+ #endif // !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO
206
188
207
189
#if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) \
208
190
|| defined(__aarch64__) || defined(__powerpc64__)) \
@@ -278,6 +260,24 @@ uptr ThreadSelfOffset() {
278
260
return kThreadSelfOffset ;
279
261
}
280
262
263
+ #if defined(__mips__) || defined(__powerpc64__)
264
+ // TlsPreTcbSize includes size of struct pthread_descr and size of tcb
265
+ // head structure. It lies before the static tls blocks.
266
+ static uptr TlsPreTcbSize () {
267
+ # if defined(__mips__)
268
+ const uptr kTcbHead = 16 ; // sizeof (tcbhead_t)
269
+ # elif defined(__powerpc64__)
270
+ const uptr kTcbHead = 88 ; // sizeof (tcbhead_t)
271
+ # endif
272
+ const uptr kTlsAlign = 16 ;
273
+ const uptr kTlsPreTcbSize =
274
+ (ThreadDescriptorSize () + kTcbHead + kTlsAlign - 1 ) & ~(kTlsAlign - 1 );
275
+ InitTlsSize ();
276
+ g_tls_size = (g_tls_size + kTlsPreTcbSize + kTlsAlign -1 ) & ~(kTlsAlign - 1 );
277
+ return kTlsPreTcbSize ;
278
+ }
279
+ #endif
280
+
281
281
uptr ThreadSelf () {
282
282
uptr descr_addr;
283
283
# if defined(__i386__)
0 commit comments