OSDN Git Service

* crt1.c (__mingw_CRTStartup): Add explicit call to libgcc's __main.
authordannysmith <dannysmith>
Mon, 11 Jun 2007 08:38:16 +0000 (08:38 +0000)
committerdannysmith <dannysmith>
Mon, 11 Jun 2007 08:38:16 +0000 (08:38 +0000)
winsup/mingw/ChangeLog
winsup/mingw/crt1.c

index ff74c3b..ae7d1ec 100644 (file)
@@ -1,3 +1,7 @@
+2007-06-11  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       * crt1.c (__mingw_CRTStartup): Add explicit call to gcc's __main.
+
 2007-05-08  Danny Smith  <dannysmith@users.sourceforge.net>
 
        * include/stdint.h (intptr_t): Fix typo.
index ad8270a..6ab7c1d 100644 (file)
@@ -29,6 +29,7 @@
 #include "init.c"
 #include "cpu_features.h"
 
+extern void __main ();
 extern void _pei386_runtime_relocator (void);
 
 extern int main (int, char **, char **);
@@ -219,6 +220,14 @@ __mingw_CRTStartup (void)
      or in functions inlined into main.  */
   asm  __volatile__  ("andl $-16, %%esp" : : : "%esp");
 
+   /* From libgcc.a, __main calls global class constructors via
+      __do_global_ctors, This in turn  registers  __do_global_dtors
+      as the first entry of the app's atexit table.  We do this
+      explicitly at app startup rather than rely on gcc to generate
+      the call in main's  prologue, since main may be imported from a dll
+      which has its own __do_global_ctors.  */
+    __main ();
+
   /*
    * Call the main function. If the user does not supply one
    * the one in the 'libmingw32.a' library will be linked in, and