* emultempl/pe.em (set_pe_subsystem): When setting the subsystem
authorIan Lance Taylor <ian@airs.com>
Wed, 9 Oct 1996 03:27:41 +0000 (03:27 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 9 Oct 1996 03:27:41 +0000 (03:27 +0000)
to windows, set the entry point.

ld/ChangeLog
ld/emultempl/pe.em

index b91608682eb1189673343f7e0ac362c491b4895a..d0cd9cc94f0fe8167233eaa637310e23261aefbf 100644 (file)
@@ -1,5 +1,8 @@
 Tue Oct  8 12:07:13 1996  Ian Lance Taylor  <ian@cygnus.com>
 
+       * emultempl/pe.em (set_pe_subsystem): When setting the subsystem
+       to windows, set the entry point.
+
        * Makefile.in (ldlex.c): Don't pass any options to $(LEX).
 
 Mon Oct  7 17:29:05 1996  Ian Lance Taylor  <ian@cygnus.com>
index 1f83102aa4d80375c3f87dd2226da109ff237236..838a010ee32af0409da47343657c452370eaf583 100644 (file)
@@ -192,6 +192,29 @@ set_pe_subsystem ()
       if (!strcmp (optarg, v[i].name)) 
        {
          set_pe_name ("__subsystem__", v[i].value);
+
+         /* If the subsystem is windows, we use a different entry
+            point.  We also register the entry point as an undefined
+            symbol.  The reason we do this is so that the user
+            doesn't have to because they would have to use the -u
+            switch if they were specifying an entry point other than
+            _mainCRTStartup.  Specifically, if creating a windows
+            application, entry point _WinMainCRTStartup must be
+            specified.  What I have found for non console
+            applications (entry not _mainCRTStartup) is that the .obj
+            that contains mainCRTStartup is brought in since it is
+            the first encountered in libc.lib and it has other
+            symbols in it which will be pulled in by the link
+            process.  To avoid this, adding -u with the entry point
+            name specified forces the correct .obj to be used.  We
+            can avoid making the user do this by always adding the
+            entry point name as an undefined symbol.  */
+         if (v[i].value == 2)
+           {
+             lang_add_entry ("_WinMainCRTStartup", 1);
+             ldlang_add_undef ("_WinMainCRTStartup");
+           }
+
          return;
        }
     }