aboutsummaryrefslogtreecommitdiff
path: root/ld/emultempl
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1996-10-09 03:27:41 +0000
committerIan Lance Taylor <ian@airs.com>1996-10-09 03:27:41 +0000
commitd0d63887aa047c4c6601102b7a5dabf1c1ae9c14 (patch)
treee0ace5bdb8ce55da543b9cce233bb3ce273b94aa /ld/emultempl
parent99283e87795668b28a6d089bf59ecc87470900c9 (diff)
downloadgdb-d0d63887aa047c4c6601102b7a5dabf1c1ae9c14.zip
gdb-d0d63887aa047c4c6601102b7a5dabf1c1ae9c14.tar.gz
gdb-d0d63887aa047c4c6601102b7a5dabf1c1ae9c14.tar.bz2
* emultempl/pe.em (set_pe_subsystem): When setting the subsystem
to windows, set the entry point.
Diffstat (limited to 'ld/emultempl')
-rw-r--r--ld/emultempl/pe.em23
1 files changed, 23 insertions, 0 deletions
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index 1f83102..838a010 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -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;
}
}