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 #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)