about summary refs log tree commit diff stats
path: root/src/elfs
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-07-03 00:06:19 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-07-03 00:06:19 +0200
commitde30d37ba91b093d459365a93ea9cc4418fc502a (patch)
treef61e6ffa33ee86a83b242ab9a250ca3b79dee161 /src/elfs
parente2b6e32fe9326c3ed9a3a89b039a2544d48bf030 (diff)
downloadbox64-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-xsrc/elfs/elfloader.c12
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)