diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-07-03 00:06:19 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-07-03 00:06:19 +0200 |
| commit | de30d37ba91b093d459365a93ea9cc4418fc502a (patch) | |
| tree | f61e6ffa33ee86a83b242ab9a250ca3b79dee161 /src/elfs | |
| parent | e2b6e32fe9326c3ed9a3a89b039a2544d48bf030 (diff) | |
| download | box64-de30d37ba91b093d459365a93ea9cc4418fc502a.tar.gz box64-de30d37ba91b093d459365a93ea9cc4418fc502a.zip | |
Reworked TLS to limit resizing, as it tends to break Unity3D games
Diffstat (limited to 'src/elfs')
| -rwxr-xr-x | src/elfs/elfloader.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 07328726..44582846 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -1152,12 +1152,10 @@ void RefreshElfTLS(elfheader_t* h) memcpy(dest, (void*)(h->tlsaddr+h->delta), h->tlsfilesize); tlsdatasize_t* ptr; if ((ptr = (tlsdatasize_t*)pthread_getspecific(my_context->tlskey)) != NULL) - if(ptr->tlssize==my_context->tlssize) { - // refresh in tlsdata too - dest = (char*)(ptr->tlsdata+ptr->tlssize+h->tlsbase); - printf_dump(LOG_DEBUG, "Refreshing active TLS block @%p from %p:0x%lx\n", dest, (void*)h->tlsaddr, h->tlssize-h->tlsfilesize); - memcpy(dest, (void*)(h->tlsaddr+h->delta), h->tlsfilesize); - } + // refresh in tlsdata too + dest = (char*)(ptr->data+h->tlsbase); + printf_dump(LOG_DEBUG, "Refreshing active TLS block @%p from %p:0x%lx\n", dest, (void*)h->tlsaddr, h->tlssize-h->tlsfilesize); + memcpy(dest, (void*)(h->tlsaddr+h->delta), h->tlsfilesize); } } @@ -1392,7 +1390,7 @@ void* GetTLSPointer(box64context_t* context, elfheader_t* h) } if(ptr->tlssize != context->tlssize) ptr = (tlsdatasize_t*)resizeTLSData(context, ptr); - return ptr->tlsdata+(ptr->tlssize+h->tlsbase); + return ptr->data+h->tlsbase; } void* GetDynamicSection(elfheader_t* h) |