* emulparams/arm_epoc_pe.sh: Remove ENTRY.
* emulparams/arm_wince_pe.sh: Likewise.
* emulparams/i386pe.sh: Likewise.
* emulparams/i386pe_posix.sh: Likewise.
* emulparams/mcorepe.sh: Likewise.
* emulparams/mipspe.sh: Likewise.
* emulparams/ppcpe.sh: Likewise.
* emulparams/armpe.sh: Likewise.
* emulparams/i386pep.sh: Likewise.
* emulparams/shpe.sh: Likewise.
Additionally cleaned up double-defined
variables SUBSYSTEM and INITIAL_SYMBOL_CHAR.
* emultempl/pe.em: Remove use of ENTRY.
(pe_subsystem): New local variable.
(gld_XXX_before_parse): Don't set default
entry point here.
(set_entry_point): New function to set entry
point.
(set_pe_subsystem): Remove code for entry point.
(gld_XXX_after_parse): Use set_entry_point here.
* emultempl/pep.em: Likewise.
+2009-11-04 Kai Tietz <kai.tietz@onevision.com>
+
+ * emulparams/arm_epoc_pe.sh: Remove ENTRY.
+ * emulparams/arm_wince_pe.sh: Likewise.
+ * emulparams/i386pe.sh: Likewise.
+ * emulparams/i386pe_posix.sh: Likewise.
+ * emulparams/mcorepe.sh: Likewise.
+ * emulparams/mipspe.sh: Likewise.
+ * emulparams/ppcpe.sh: Likewise.
+ * emulparams/armpe.sh: Likewise.
+ * emulparams/i386pep.sh: Likewise.
+ * emulparams/shpe.sh: Likewise.
+ Additionally cleaned up double-defined
+ variables SUBSYSTEM and INITIAL_SYMBOL_CHAR.
+ * emultempl/pe.em: Remove use of ENTRY.
+ (pe_subsystem): New local variable.
+ (gld_XXX_before_parse): Don't set default
+ entry point here.
+ (set_entry_point): New function to set entry
+ point.
+ (set_pe_subsystem): Remove code for entry point.
+ (gld_XXX_after_parse): Use set_entry_point here.
+ * emultempl/pep.em: Likewise.
+
2009-10-29 Nathan Sidwell <nathan@codesourcery.com>
* emulparams/vxworks.sh (OTHER_READONLY_SECTIONS): Move into ...
LITTLE_OUTPUT_FORMAT="epoc-pei-arm-little"
BIG_OUTPUT_FORMAT="epoc-pei-arm-big"
TEMPLATE_NAME=pe
-ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000
RELOCATEABLE_OUTPUT_FORMAT="pe-arm-wince-little"
TEMPLATE_NAME=pe
-ENTRY="WinMainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"\"
TARGET_PAGE_SIZE=0x1000
RELOCATEABLE_OUTPUT_FORMAT="pe-arm-little"
TEMPLATE_NAME=pe
-ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
OUTPUT_FORMAT="pei-i386"
RELOCATEABLE_OUTPUT_FORMAT="pe-i386"
TEMPLATE_NAME=pe
-ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000
OUTPUT_FORMAT="pei-i386"
RELOCATEABLE_OUTPUT_FORMAT="pe-i386"
TEMPLATE_NAME=pe
-ENTRY="___PosixProcessStartup"
SUBSYSTEM=7
EXECUTABLE_NAME=a.out
INITIAL_SYMBOL_CHAR=\"_\"
OUTPUT_FORMAT="pei-x86-64"
RELOCATEABLE_OUTPUT_FORMAT="pe-x86-64"
TEMPLATE_NAME=pep
-ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000
LITTLE_OUTPUT_FORMAT="pei-mcore-little"
BIG_OUTPUT_FORMAT="pei-mcore-big"
TEMPLATE_NAME=pe
-ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000
TEMPLATE_NAME=pe
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
-ENTRY="_mainCRTStartup"
TARGET_PAGE_SIZE=0x1000
SCRIPT_NAME=ppcpe
OUTPUT_FORMAT="pei-powerpcle"
TEMPLATE_NAME=pe
-ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000
TEMPLATE_NAME=pe
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
-ENTRY="_mainCRTStartup"
-SUBSYSTEM=PE_DEF_SUBSYSTEM
-INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000
# This shell script emits a C file. -*- C -*-
# It does some substitutions.
-test -z "${ENTRY}" && ENTRY="_mainCRTStartup"
if [ -z "$MACHINE" ]; then
OUTPUT_ARCH=${ARCH}
else
static struct internal_extra_pe_aouthdr pe;
static int dll;
+static int pe_subsystem = ${SUBSYSTEM};
static flagword real_flags = 0;
static int support_old_code = 0;
static char * thumb_entry_symbol = NULL;
fragment <<EOF
link_info.pei386_auto_import = ${default_auto_import};
link_info.pei386_runtime_pseudo_reloc = 1; /* Use by default version 1. */
-
-#if (PE_DEF_SUBSYSTEM == 9) || (PE_DEF_SUBSYSTEM == 2)
-#if defined TARGET_IS_mipspe || defined TARGET_IS_armpe || defined TARGET_IS_arm_wince_pe
- lang_default_entry ("WinMainCRTStartup");
-#else
- lang_default_entry ("_WinMainCRTStartup");
-#endif
-#else
- lang_default_entry ("${ENTRY}");
-#endif
#endif
}
\f
abort ();
}
+static void
+set_entry_point (void)
+{
+ const char *entry;
+ const char *initial_symbol_char;
+ int i;
+
+ static const struct
+ {
+ const int value;
+ const char *entry;
+ }
+ v[] =
+ {
+ { 1, "NtProcessStartup" },
+ { 2, "WinMainCRTStartup" },
+ { 3, "mainCRTStartup" },
+ { 7, "__PosixProcessStartup"},
+ { 9, "WinMainCRTStartup" },
+ {14, "mainCRTStartup" },
+ { 0, NULL }
+ };
+
+ /* Entry point name for arbitrary subsystem numbers. */
+ static const char default_entry[] = "mainCRTStartup";
+
+ if (link_info.shared || dll)
+ {
+#if defined (TARGET_IS_i386pe)
+ entry = "DllMainCRTStartup@12";
+#else
+ entry = "DllMainCRTStartup";
+#endif
+ }
+ else
+ {
+
+ for (i = 0; v[i].entry; i++)
+ if (v[i].value == pe_subsystem)
+ break;
+
+ /* If no match, use the default. */
+ if (v[i].entry != NULL)
+ entry = v[i].entry;
+ else
+ entry = default_entry;
+ }
+
+ initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
+ if (*initial_symbol_char != '\0')
+ {
+ char *alc_entry;
+
+ /* lang_default_entry expects its argument to be permanently
+ allocated, so we don't free this string. */
+ alc_entry = xmalloc (strlen (initial_symbol_char)
+ + strlen (entry)
+ + 1);
+ strcpy (alc_entry, initial_symbol_char);
+ strcat (alc_entry, entry);
+ entry = alc_entry;
+ }
+
+ lang_default_entry (entry);
+}
static void
set_pe_subsystem (void)
{
const char *sver;
- const char *entry;
- const char *initial_symbol_char;
char *end;
int len;
int i;
- int subsystem;
unsigned long temp_subsystem;
static const struct
{
const char *name;
const int value;
- const char *entry;
}
v[] =
{
- { "native", 1, "NtProcessStartup" },
- { "windows", 2, "WinMainCRTStartup" },
- { "console", 3, "mainCRTStartup" },
- { "posix", 7, "__PosixProcessStartup"},
- { "wince", 9, "WinMainCRTStartup" },
- { "xbox", 14, "mainCRTStartup" },
- { NULL, 0, NULL }
+ { "native", 1},
+ { "windows", 2},
+ { "console", 3},
+ { "posix", 7},
+ { "wince", 9},
+ { "xbox", 14},
+ { NULL, 0 }
};
- /* Entry point name for arbitrary subsystem numbers. */
- static const char default_entry[] = "mainCRTStartup";
/* Check for the presence of a version number. */
sver = strchr (optarg, ':');
{
len = sver - optarg;
set_pe_name ("__major_subsystem_version__",
- strtoul (sver + 1, &end, 0));
+ strtoul (sver + 1, &end, 0));
if (*end == '.')
set_pe_name ("__minor_subsystem_version__",
- strtoul (end + 1, &end, 0));
+ strtoul (end + 1, &end, 0));
if (*end != '\0')
einfo (_("%P: warning: bad version number in -subsystem option\n"));
}
if (v[i].value == (int) temp_subsystem)
break;
- /* If no match, use the default. */
- if (v[i].name != NULL)
- entry = v[i].entry;
- else
- entry = default_entry;
-
/* Use this subsystem. */
- subsystem = (int) temp_subsystem;
+ pe_subsystem = (int) temp_subsystem;
}
else
{
return;
}
- entry = v[i].entry;
- subsystem = v[i].value;
+ pe_subsystem = v[i].value;
}
- set_pe_name ("__subsystem__", subsystem);
-
- initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
- if (*initial_symbol_char != '\0')
- {
- char *alc_entry;
-
- /* lang_default_entry expects its argument to be permanently
- allocated, so we don't free this string. */
- alc_entry = xmalloc (strlen (initial_symbol_char)
- + strlen (entry)
- + 1);
- strcpy (alc_entry, initial_symbol_char);
- strcat (alc_entry, entry);
- entry = alc_entry;
- }
-
- lang_default_entry (entry);
+ set_pe_name ("__subsystem__", pe_subsystem);
return;
}
einfo (_("%P: warning: --export-dynamic is not supported for PE "
"targets, did you mean --export-all-symbols?\n"));
+ set_entry_point ();
+
after_parse_default ();
}
# This shell script emits a C file. -*- C -*-
# It does some substitutions.
-test -z "${ENTRY}" && ENTRY="_mainCRTStartup"
if [ -z "$MACHINE" ]; then
OUTPUT_ARCH=${ARCH}
else
static struct internal_extra_pe_aouthdr pep;
static int dll;
+static int pep_subsystem = ${SUBSYSTEM};
static flagword real_flags = IMAGE_FILE_LARGE_ADDRESS_AWARE;
static int support_old_code = 0;
static lang_assignment_statement_type *image_base_statement = 0;
config.has_shared = 1;
link_info.pei386_auto_import = -1;
link_info.pei386_runtime_pseudo_reloc = 2; /* Use by default version 2. */
-
-#if (PE_DEF_SUBSYSTEM == 9) || (PE_DEF_SUBSYSTEM == 2)
- lang_default_entry ("_WinMainCRTStartup");
-#else
- lang_default_entry ("${ENTRY}");
-#endif
#endif
}
\f
abort ();
}
+static void
+set_entry_point (void)
+{
+ const char *entry;
+ const char *initial_symbol_char;
+ int i;
+
+ static const struct
+ {
+ const int value;
+ const char *entry;
+ }
+ v[] =
+ {
+ { 1, "NtProcessStartup" },
+ { 2, "WinMainCRTStartup" },
+ { 3, "mainCRTStartup" },
+ { 7, "__PosixProcessStartup" },
+ { 9, "WinMainCRTStartup" },
+ {14, "mainCRTStartup" },
+ { 0, NULL }
+ };
+
+ /* Entry point name for arbitrary subsystem numbers. */
+ static const char default_entry[] = "mainCRTStartup";
+
+ if (link_info.shared || dll)
+ {
+ entry = "DllMainCRTStartup";
+ }
+ else
+ {
+ for (i = 0; v[i].entry; i++)
+ if (v[i].value == pep_subsystem)
+ break;
+
+ /* If no match, use the default. */
+ if (v[i].entry != NULL)
+ entry = v[i].entry;
+ else
+ entry = default_entry;
+ }
+
+ initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
+ if (*initial_symbol_char != '\0')
+ {
+ char *alc_entry;
+
+ /* lang_default_entry expects its argument to be permanently
+ allocated, so we don't free this string. */
+ alc_entry = xmalloc (strlen (initial_symbol_char)
+ + strlen (entry)
+ + 1);
+ strcpy (alc_entry, initial_symbol_char);
+ strcat (alc_entry, entry);
+ entry = alc_entry;
+ }
+
+ lang_default_entry (entry);
+}
static void
set_pep_subsystem (void)
{
const char *sver;
- const char *entry;
- const char *initial_symbol_char;
char *end;
int len;
int i;
- int subsystem;
unsigned long temp_subsystem;
static const struct
{
const char *name;
const int value;
- const char *entry;
}
v[] =
{
- { "native", 1, "NtProcessStartup" },
- { "windows", 2, "WinMainCRTStartup" },
- { "console", 3, "mainCRTStartup" },
- { "posix", 7, "__PosixProcessStartup"},
- { "wince", 9, "_WinMainCRTStartup" },
- { "xbox", 14, "mainCRTStartup" },
- { NULL, 0, NULL }
+ { "native", 1 },
+ { "windows", 2 },
+ { "console", 3 },
+ { "posix", 7 },
+ { "wince", 9 },
+ { "xbox", 14 },
+ { NULL, 0 }
};
- /* Entry point name for arbitrary subsystem numbers. */
- static const char default_entry[] = "mainCRTStartup";
/* Check for the presence of a version number. */
sver = strchr (optarg, ':');
if (v[i].value == (int) temp_subsystem)
break;
- /* If no match, use the default. */
- if (v[i].name != NULL)
- entry = v[i].entry;
- else
- entry = default_entry;
-
/* Use this subsystem. */
- subsystem = (int) temp_subsystem;
+ pep_subsystem = (int) temp_subsystem;
}
else
{
return;
}
- entry = v[i].entry;
- subsystem = v[i].value;
- }
-
- set_pep_name ("__subsystem__", subsystem);
-
- initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
- if (*initial_symbol_char != '\0')
- {
- char *alc_entry;
-
- /* lang_default_entry expects its argument to be permanently
- allocated, so we don't free this string. */
- alc_entry = xmalloc (strlen (initial_symbol_char)
- + strlen (entry)
- + 1);
- strcpy (alc_entry, initial_symbol_char);
- strcat (alc_entry, entry);
- entry = alc_entry;
+ pep_subsystem = v[i].value;
}
- lang_default_entry (entry);
+ set_pep_name ("__subsystem__", pep_subsystem);
return;
}
einfo (_("%P: warning: --export-dynamic is not supported for PE+ "
"targets, did you mean --export-all-symbols?\n"));
+ set_entry_point ();
+
after_parse_default ();
}