static HANDLE main_exe_file;
static UINT tls_module_count; /* number of modules with TLS directory */
static UINT tls_total_size; /* total size of TLS storage */
-static const IMAGE_TLS_DIRECTORY **tls_dirs; /* array of TLS directories */
+static IMAGE_TLS_DIRECTORY *tls_dirs; /* array of TLS directories */
static RTL_CRITICAL_SECTION loader_section;
static RTL_CRITICAL_SECTION_DEBUG critsect_debug =
TRACE( "count %u size %u\n", tls_module_count, tls_total_size );
- tls_dirs = RtlAllocateHeap( GetProcessHeap(), 0, tls_module_count * sizeof(*tls_dirs) );
+ tls_dirs = RtlAllocateHeap( GetProcessHeap(), 0, tls_module_count *
+ sizeof(IMAGE_TLS_DIRECTORY) );
if (!tls_dirs) return STATUS_NO_MEMORY;
for (i = 0, entry = mark->Flink; entry != mark; entry = entry->Flink)
if (!(dir = RtlImageDirectoryEntryToData( mod->BaseAddress, TRUE,
IMAGE_DIRECTORY_ENTRY_TLS, &size )))
continue;
- tls_dirs[i] = dir;
*(DWORD *)dir->AddressOfIndex = i;
+ memcpy( &tls_dirs[i], dir, sizeof(IMAGE_TLS_DIRECTORY) );
mod->TlsIndex = i;
mod->LoadCount = -1; /* can't unload it */
i++;
for (i = 0; i < tls_module_count; i++)
{
- const IMAGE_TLS_DIRECTORY *dir = tls_dirs[i];
+ const IMAGE_TLS_DIRECTORY *dir = &tls_dirs[i];
ULONG size = dir->EndAddressOfRawData - dir->StartAddressOfRawData;
TRACE( "thread %04x idx %d: %d/%d bytes from %p to %p\n",