https://git.reactos.org/?p=reactos.git;a=commitdiff;h=439aefb31d9a09eb79a7a0417f57b7a6eee17400

commit 439aefb31d9a09eb79a7a0417f57b7a6eee17400
Author:     Jérôme Gardou <jerome.gar...@reactos.org>
AuthorDate: Fri Apr 23 15:30:41 2021 +0200
Commit:     Jérôme Gardou <zefk...@users.noreply.github.com>
CommitDate: Wed Apr 28 13:10:23 2021 +0200

    [CRT] Sync tlssup.c with mingw-w64
    
    This allows amd64 built binary to be loaded.
---
 sdk/lib/crt/startup/tlssup.c | 40 +++++++++++++++-------------------------
 1 file changed, 15 insertions(+), 25 deletions(-)

diff --git a/sdk/lib/crt/startup/tlssup.c b/sdk/lib/crt/startup/tlssup.c
index e52a554536c..15abfb0fa12 100644
--- a/sdk/lib/crt/startup/tlssup.c
+++ b/sdk/lib/crt/startup/tlssup.c
@@ -1,6 +1,6 @@
 /**
  * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the w64 mingw-runtime package.
+ * This file is part of the mingw-w64 runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  *
  * Written by Kai Tietz  <kai.ti...@onevision.com>
@@ -12,27 +12,18 @@
 
 #include <sect_attribs.h>
 
-/*#ifndef WIN32_LEAN_AND_MEAN
+#ifndef WIN32_LEAN_AND_MEAN
 #define WIN32_LEAN_AND_MEAN
 #endif
-#include <windows.h>*/
-
-#include <stdarg.h>
-#include <windef.h>
-#include <winbase.h>
+#include <windows.h>
 
 #include <stdio.h>
 #include <memory.h>
 #include <malloc.h>
-#ifndef _WIN64
-#include <stdlib.h> /* for _winmajor */
-#endif
-
-#ifndef __INTERNAL_FUNC_DEFINED
-#define __INTERNAL_FUNC_DEFINED
-typedef void (__cdecl *_PVFV)(void);
-typedef int (__cdecl *_PIFV)(void);
-typedef void (__cdecl *_PVFI)(int);
+#ifndef __REACTOS__
+#include <corecrt_startup.h>
+#else
+#include <internal.h>
 #endif
 
 extern WINBOOL __mingw_TLScallback (HANDLE hDllHandle, DWORD reason, LPVOID 
reserved);
@@ -47,15 +38,18 @@ typedef struct TlsDtorNode {
 
 ULONG _tls_index = 0;
 
-/* TLS raw template data start and end. */
-_CRTALLOC(".tls") char _tls_start = 0;
-_CRTALLOC(".tls$ZZZ") char _tls_end = 0;
+/* TLS raw template data start and end.
+   We use here pointer-types for start/end so that tls-data remains
+   aligned on pointer-size-width.  This seems to be required for
+   pe-loader. */
+_CRTALLOC(".tls") char *_tls_start = NULL;
+_CRTALLOC(".tls$ZZZ") char *_tls_end = NULL;
 
 _CRTALLOC(".CRT$XLA") PIMAGE_TLS_CALLBACK __xl_a = 0;
 _CRTALLOC(".CRT$XLZ") PIMAGE_TLS_CALLBACK __xl_z = 0;
 
-_CRTALLOC(".rdata$T") const IMAGE_TLS_DIRECTORY _tls_used = {
-  (ULONG_PTR) &_tls_start+1, (ULONG_PTR) &_tls_end,
+const IMAGE_TLS_DIRECTORY _tls_used = {
+  (ULONG_PTR) &_tls_start, (ULONG_PTR) &_tls_end,
   (ULONG_PTR) &_tls_index, (ULONG_PTR) (&__xl_a+1),
   (ULONG) 0, (ULONG) 0
 };
@@ -80,10 +74,6 @@ static __CRT_THREAD TlsDtorNode dtor_list_head;
 
 extern int _CRT_MT;
 
-#ifndef _WIN64
-int __mingw_usemthread_dll;
-#endif
-
 BOOL WINAPI __dyn_tls_init (HANDLE, DWORD, LPVOID);
 
 BOOL WINAPI

Reply via email to