Skip to content

Commit 81ef8e2

Browse files
authored
[NFC][sanitizer] Extract GetDTLSRange (#107934)
1 parent ae02211 commit 81ef8e2

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,17 @@ SANITIZER_WEAK_ATTRIBUTE
110110
const void *__sanitizer_get_allocated_begin(const void *p);
111111
}
112112

113+
static bool GetDTLSRange(uptr &tls_beg, uptr &tls_size) {
114+
const void *start = __sanitizer_get_allocated_begin((void *)tls_beg);
115+
if (!start)
116+
return false;
117+
tls_beg = (uptr)start;
118+
tls_size = __sanitizer_get_allocated_size(start);
119+
VReport(2, "__tls_get_addr: glibc >=2.25 suspected; tls={%p,0x%zx}\n",
120+
(void *)tls_beg, tls_size);
121+
return true;
122+
}
123+
113124
DTLS::DTV *DTLS_on_tls_get_addr(void *arg_void, void *res,
114125
uptr static_tls_begin, uptr static_tls_end) {
115126
if (!common_flags()->intercept_tls_get_addr) return 0;
@@ -135,13 +146,7 @@ DTLS::DTV *DTLS_on_tls_get_addr(void *arg_void, void *res,
135146
// creation.
136147
VReport(2, "__tls_get_addr: static tls: %p\n", (void *)tls_beg);
137148
tls_size = 0;
138-
} else if (const void *start =
139-
__sanitizer_get_allocated_begin((void *)tls_beg)) {
140-
tls_beg = (uptr)start;
141-
tls_size = __sanitizer_get_allocated_size(start);
142-
VReport(2, "__tls_get_addr: glibc >=2.25 suspected; tls={%p,0x%zx}\n",
143-
(void *)tls_beg, tls_size);
144-
} else {
149+
} else if (!GetDTLSRange(tls_beg, tls_size)) {
145150
VReport(2, "__tls_get_addr: Can't guess glibc version\n");
146151
// This may happen inside the DTOR of main thread, so just ignore it.
147152
tls_size = 0;

0 commit comments

Comments
 (0)