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.
This commit is contained in:
Kai Tietz 2009-11-04 18:13:05 +00:00
parent 22b127cceb
commit decfa41eac
13 changed files with 198 additions and 133 deletions

View file

@ -1,3 +1,27 @@
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 ...

View file

@ -4,7 +4,6 @@ OUTPUT_FORMAT="epoc-pei-arm-little"
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

View file

@ -8,7 +8,6 @@ BIG_OUTPUT_FORMAT="pei-arm-wince-big"
RELOCATEABLE_OUTPUT_FORMAT="pe-arm-wince-little"
TEMPLATE_NAME=pe
ENTRY="WinMainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"\"
TARGET_PAGE_SIZE=0x1000

View file

@ -8,7 +8,6 @@ BIG_OUTPUT_FORMAT="pei-arm-big"
RELOCATEABLE_OUTPUT_FORMAT="pe-arm-little"
TEMPLATE_NAME=pe
ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"

View file

@ -3,7 +3,6 @@ SCRIPT_NAME=pe
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

View file

@ -3,7 +3,6 @@ SCRIPT_NAME=pe
OUTPUT_FORMAT="pei-i386"
RELOCATEABLE_OUTPUT_FORMAT="pe-i386"
TEMPLATE_NAME=pe
ENTRY="___PosixProcessStartup"
SUBSYSTEM=7
EXECUTABLE_NAME=a.out
INITIAL_SYMBOL_CHAR=\"_\"

View file

@ -3,7 +3,6 @@ SCRIPT_NAME=pep
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

View file

@ -4,7 +4,6 @@ OUTPUT_FORMAT="pei-mcore-little"
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

View file

@ -6,5 +6,4 @@ RELOCATEABLE_OUTPUT_FORMAT="ecoff-littlemips"
TEMPLATE_NAME=pe
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
ENTRY="_mainCRTStartup"
TARGET_PAGE_SIZE=0x1000

View file

@ -2,7 +2,6 @@ ARCH=powerpc
SCRIPT_NAME=ppcpe
OUTPUT_FORMAT="pei-powerpcle"
TEMPLATE_NAME=pe
ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000

View file

@ -4,7 +4,4 @@ OUTPUT_FORMAT="pei-shl"
TEMPLATE_NAME=pe
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
ENTRY="_mainCRTStartup"
SUBSYSTEM=PE_DEF_SUBSYSTEM
INITIAL_SYMBOL_CHAR=\"_\"
TARGET_PAGE_SIZE=0x1000

View file

@ -1,6 +1,5 @@
# 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
@ -122,6 +121,7 @@ fragment <<EOF
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;
@ -162,16 +162,6 @@ esac
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
}
@ -459,90 +449,53 @@ set_pe_name (char *name, long val)
abort ();
}
static void
set_pe_subsystem (void)
set_entry_point (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 }
{ 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";
/* Check for the presence of a version number. */
sver = strchr (optarg, ':');
if (sver == NULL)
len = strlen (optarg);
if (link_info.shared || dll)
{
#if defined (TARGET_IS_i386pe)
entry = "DllMainCRTStartup@12";
#else
entry = "DllMainCRTStartup";
#endif
}
else
{
len = sver - optarg;
set_pe_name ("__major_subsystem_version__",
strtoul (sver + 1, &end, 0));
if (*end == '.')
set_pe_name ("__minor_subsystem_version__",
strtoul (end + 1, &end, 0));
if (*end != '\0')
einfo (_("%P: warning: bad version number in -subsystem option\n"));
}
/* Check for numeric subsystem. */
temp_subsystem = strtoul (optarg, & end, 0);
if ((*end == ':' || *end == '\0') && (temp_subsystem < 65536))
{
/* Search list for a numeric match to use its entry point. */
for (i = 0; v[i].name; i++)
if (v[i].value == (int) temp_subsystem)
break;
for (i = 0; v[i].entry; i++)
if (v[i].value == pe_subsystem)
break;
/* If no match, use the default. */
if (v[i].name != NULL)
entry = v[i].entry;
if (v[i].entry != NULL)
entry = v[i].entry;
else
entry = default_entry;
/* Use this subsystem. */
subsystem = (int) temp_subsystem;
entry = default_entry;
}
else
{
/* Search for subsystem by name. */
for (i = 0; v[i].name; i++)
if (strncmp (optarg, v[i].name, len) == 0
&& v[i].name[len] == '\0')
break;
if (v[i].name == NULL)
{
einfo (_("%P%F: invalid subsystem type %s\n"), optarg);
return;
}
entry = v[i].entry;
subsystem = v[i].value;
}
set_pe_name ("__subsystem__", subsystem);
initial_symbol_char = ${INITIAL_SYMBOL_CHAR};
if (*initial_symbol_char != '\0')
@ -560,6 +513,78 @@ set_pe_subsystem (void)
}
lang_default_entry (entry);
}
static void
set_pe_subsystem (void)
{
const char *sver;
char *end;
int len;
int i;
unsigned long temp_subsystem;
static const struct
{
const char *name;
const int value;
}
v[] =
{
{ "native", 1},
{ "windows", 2},
{ "console", 3},
{ "posix", 7},
{ "wince", 9},
{ "xbox", 14},
{ NULL, 0 }
};
/* Check for the presence of a version number. */
sver = strchr (optarg, ':');
if (sver == NULL)
len = strlen (optarg);
else
{
len = sver - optarg;
set_pe_name ("__major_subsystem_version__",
strtoul (sver + 1, &end, 0));
if (*end == '.')
set_pe_name ("__minor_subsystem_version__",
strtoul (end + 1, &end, 0));
if (*end != '\0')
einfo (_("%P: warning: bad version number in -subsystem option\n"));
}
/* Check for numeric subsystem. */
temp_subsystem = strtoul (optarg, & end, 0);
if ((*end == ':' || *end == '\0') && (temp_subsystem < 65536))
{
/* Search list for a numeric match to use its entry point. */
for (i = 0; v[i].name; i++)
if (v[i].value == (int) temp_subsystem)
break;
/* Use this subsystem. */
pe_subsystem = (int) temp_subsystem;
}
else
{
/* Search for subsystem by name. */
for (i = 0; v[i].name; i++)
if (strncmp (optarg, v[i].name, len) == 0
&& v[i].name[len] == '\0')
break;
if (v[i].name == NULL)
{
einfo (_("%P%F: invalid subsystem type %s\n"), optarg);
return;
}
pe_subsystem = v[i].value;
}
set_pe_name ("__subsystem__", pe_subsystem);
return;
}
@ -889,6 +914,8 @@ gld_${EMULATION_NAME}_after_parse (void)
einfo (_("%P: warning: --export-dynamic is not supported for PE "
"targets, did you mean --export-all-symbols?\n"));
set_entry_point ();
after_parse_default ();
}

View file

@ -1,6 +1,5 @@
# 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
@ -102,6 +101,7 @@ fragment <<EOF
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;
@ -127,12 +127,6 @@ gld_${EMULATION_NAME}_before_parse (void)
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
}
@ -403,37 +397,91 @@ set_pep_name (char *name, bfd_vma val)
abort ();
}
static void
set_pep_subsystem (void)
set_entry_point (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 }
{ 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;
char *end;
int len;
int i;
unsigned long temp_subsystem;
static const struct
{
const char *name;
const int value;
}
v[] =
{
{ "native", 1 },
{ "windows", 2 },
{ "console", 3 },
{ "posix", 7 },
{ "wince", 9 },
{ "xbox", 14 },
{ NULL, 0 }
};
/* Check for the presence of a version number. */
sver = strchr (optarg, ':');
if (sver == NULL)
@ -459,14 +507,8 @@ set_pep_subsystem (void)
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
{
@ -482,28 +524,10 @@ set_pep_subsystem (void)
return;
}
entry = v[i].entry;
subsystem = v[i].value;
pep_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;
}
lang_default_entry (entry);
set_pep_name ("__subsystem__", pep_subsystem);
return;
}
@ -827,6 +851,8 @@ gld_${EMULATION_NAME}_after_parse (void)
einfo (_("%P: warning: --export-dynamic is not supported for PE+ "
"targets, did you mean --export-all-symbols?\n"));
set_entry_point ();
after_parse_default ();
}