On Tue, 3 Dec 2024, Pali Rohár wrote:
On Tuesday 03 December 2024 16:33:01 Martin Storsjö wrote:
On Wed, 27 Nov 2024, Pali Rohár wrote:
Variable startinfo is used only by __(w)getmainargs() call passed by the
pointer in pre_cpp_init() function. The __(w)getmainargs() function does
not use or store the pointer value, so the variable does not have to be
static. Declare this variable just on the pre_cpp_init() function stack.
---
mingw-w64-crt/crt/crtexe.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c
index 2c6fbd7e7062..319cace6f50a 100644
--- a/mingw-w64-crt/crt/crtexe.c
+++ b/mingw-w64-crt/crt/crtexe.c
@@ -62,7 +62,6 @@ static int argret;
static int mainret=0;
static int managedapp;
static int has_cctor = 0;
-static _startupinfo startinfo;
extern LPTOP_LEVEL_EXCEPTION_FILTER __mingw_oldexcpt_handler;
extern void _pei386_runtime_relocator (void);
@@ -125,6 +124,8 @@ pre_c_init (void)
static void __cdecl
pre_cpp_init (void)
{
+ _startupinfo startinfo;
+
startinfo.newmode = _newmode;
This looks ok - but do you happen to know any further about what
__getmainargs or __wgetmainargs do with this struct? Is it only used for
passing settings into those functions, or do they return data in it as well
(which we don't seem to use anyway)?
// Martin
It is input-only read-only structure. No pointer to the structure is
used after the end of the function. Moreover structure has only one
member, _newmode. So from ABI perspective, it is same as passing the
pointer to the _newmode (first and only member of the structure).
Ok, I pushed this one.
// Martin
_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public