forked from OSchip/llvm-project
[compiler-rt] Don't change g_tls_size after initialization.
Summary: g_tls_size is not supposed to be changed after initialization. It's not atomic, not guarded by a lock, nor thread_local. But it's read by multiple threads. The reason why it's mutated is mips and powerpc64 specific. We can implement the same funcitonality without mutating g_tls_size. I'm not sure how to write a test for this. Please advice. Thanks! Reviewers: eugenis, kcc Subscribers: kubamracek, dberris, llvm-commits Differential Revision: https://reviews.llvm.org/D29236 llvm-svn: 293586
This commit is contained in:
parent
fa3d93a148
commit
f63f58a28f
|
@ -270,9 +270,7 @@ static uptr TlsPreTcbSize() {
|
|||
# endif
|
||||
const uptr kTlsAlign = 16;
|
||||
const uptr kTlsPreTcbSize =
|
||||
(ThreadDescriptorSize() + kTcbHead + kTlsAlign - 1) & ~(kTlsAlign - 1);
|
||||
InitTlsSize();
|
||||
g_tls_size = (g_tls_size + kTlsPreTcbSize + kTlsAlign -1) & ~(kTlsAlign - 1);
|
||||
RoundUpTo(ThreadDescriptorSize() + kTcbHead, kTlsAlign);
|
||||
return kTlsPreTcbSize;
|
||||
}
|
||||
#endif
|
||||
|
@ -379,6 +377,8 @@ uptr GetTlsSize() {
|
|||
uptr addr, size;
|
||||
GetTls(&addr, &size);
|
||||
return size;
|
||||
#elif defined(__mips__) || defined(__powerpc64__)
|
||||
return RoundUpTo(g_tls_size + TlsPreTcbSize(), 16);
|
||||
#else
|
||||
return g_tls_size;
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue