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:
parent
22b127cceb
commit
decfa41eac
13 changed files with 198 additions and 133 deletions
24
ld/ChangeLog
24
ld/ChangeLog
|
@ -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 ...
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=\"_\"
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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=\"_\"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,37 +449,96 @@ 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";
|
||||
|
||||
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;
|
||||
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)
|
||||
|
@ -515,14 +564,8 @@ set_pe_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;
|
||||
pe_subsystem = (int) temp_subsystem;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -538,28 +581,10 @@ set_pe_subsystem (void)
|
|||
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;
|
||||
}
|
||||
|
@ -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 ();
|
||||
}
|
||||
|
||||
|
|
|
@ -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 ();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue