Skip to content

Commit b620fde

Browse files
authored
[NFC][sanitizer] Early returns in DTLS_on_tls_get_addr (#109539)
1 parent 86fb006 commit b620fde

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ DTLS::DTV *DTLS_on_tls_get_addr(void *arg_void, void *res,
136136
if (!dtv || dtv->beg)
137137
return nullptr;
138138
CHECK_LE(static_tls_begin, static_tls_end);
139-
uptr tls_size = 0;
140139
uptr tls_beg = reinterpret_cast<uptr>(res) - arg->offset - kDtvOffset;
141140
VReport(2,
142141
"__tls_get_addr: %p {0x%zx,0x%zx} => %p; tls_beg: %p; sp: %p "
@@ -148,16 +147,20 @@ DTLS::DTV *DTLS_on_tls_get_addr(void *arg_void, void *res,
148147
// This is the static TLS block which was initialized / unpoisoned at thread
149148
// creation.
150149
VReport(2, "__tls_get_addr: static tls: %p\n", (void *)tls_beg);
151-
tls_size = 0;
152-
} else {
153-
tls_size = __sanitizer_get_dtls_size(reinterpret_cast<void *>(tls_beg));
154-
if (!tls_size) {
155-
VReport(2, "__tls_get_addr: Can't guess glibc version\n");
156-
// This may happen inside the DTOR of main thread, so just ignore it.
157-
}
150+
dtv->beg = tls_beg;
151+
dtv->size = 0;
152+
return nullptr;
153+
}
154+
if (uptr tls_size =
155+
__sanitizer_get_dtls_size(reinterpret_cast<void *>(tls_beg))) {
156+
dtv->beg = tls_beg;
157+
dtv->size = tls_size;
158+
return dtv;
158159
}
160+
VReport(2, "__tls_get_addr: Can't guess glibc version\n");
161+
// This may happen inside the DTOR of main thread, so just ignore it.
159162
dtv->beg = tls_beg;
160-
dtv->size = tls_size;
163+
dtv->size = 0;
161164
return dtv;
162165
}
163166

0 commit comments

Comments
 (0)