https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f2f97f9f4c4f85c9ce702…
commit f2f97f9f4c4f85c9ce70261cebcde0df1a97187d
Author: Mohamed Mediouni <mmediouni(a)gmx.fr>
AuthorDate: Sat Jun 1 12:51:37 2019 +0200
Commit: Stanislav Motylkov <x86corez(a)gmail.com>
CommitDate: Sun Apr 26 19:56:34 2020 +0300
[CRT] ARM & ARM64 Windows do not have initenv in their CRTs (#1597)
Native CRT on ARM & ARM64 Windows doesn't have these functions.
For compatibility, it's mandatory to not have it at all. Otherwise,
ARM executables built for ReactOS do not run on true ARM Windows.
Consider doing full sync with mingw-w64 CRT in future.
---
sdk/lib/crt/startup/crtexe.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/sdk/lib/crt/startup/crtexe.c b/sdk/lib/crt/startup/crtexe.c
index fa20f4166e0..d66db0bf2e7 100644
--- a/sdk/lib/crt/startup/crtexe.c
+++ b/sdk/lib/crt/startup/crtexe.c
@@ -24,6 +24,10 @@
#include <mbstring.h>
#endif
+/* Special handling for ARM & ARM64, __winitenv & __initenv aren't present
there. */
+
+#if !defined(__arm__) && !defined(__aarch64__)
+
#ifndef __winitenv
extern wchar_t *** __MINGW_IMP_SYMBOL(__winitenv);
#define __winitenv (* __MINGW_IMP_SYMBOL(__winitenv))
@@ -34,6 +38,8 @@ extern char *** __MINGW_IMP_SYMBOL(__initenv);
#define __initenv (* __MINGW_IMP_SYMBOL(__initenv))
#endif
+#endif
+
/* Hack, for bug in ld. Will be removed soon. */
#if defined(__GNUC__)
#define __ImageBase __MINGW_LSYMBOL(_image_base__)
@@ -306,12 +312,16 @@ __tmainCRTStartup (void)
duplicate_ppstrings (argc, &argv);
__main ();
#ifdef WPRFLAG
+#if !defined(__arm__) && !defined(__aarch64__)
__winitenv = envp;
+#endif
/* C++ initialization.
gcc inserts this call automatically for a function called main, but not for wmain.
*/
mainret = wmain (argc, argv, envp);
#else
+#if !defined(__arm__) && !defined(__aarch64__)
__initenv = envp;
+#endif
mainret = main (argc, argv, envp);
#endif
if (!managedapp)