2010-05-15 Kai Tietz <kai.tietz@onevision.com>

* emultempl/pe.em (is_underscoring): New helper function.
	(gld_${EMULATION_NAME}_before_parse): Replace code
	for pe(p)_leading_underscore detection by is_underscoring.
	(U): Likewise.
	(GET_INIT_SYMBOL_NAME): Likewise.
	(U_SIZE): Likewise.
	(set_pe_name):
	(set_entry_point):
	(gld_${EMULATION_NAME}_set_symbols):
	* emultempl/pep.em: Likewise.
	* pe-dll.c (pe_detail_list): Set default
	underscoring for x64 target.
	(pe_dll_id_target): Add initialization of
	pe(p)_leading_underscore.
This commit is contained in:
Kai Tietz 2010-05-15 19:50:44 +00:00
parent 1b610c931b
commit d74720d2cb
4 changed files with 75 additions and 86 deletions

View File

@ -1,3 +1,20 @@
2010-05-15 Kai Tietz <kai.tietz@onevision.com>
* emultempl/pe.em (is_underscoring): New helper function.
(gld_${EMULATION_NAME}_before_parse): Replace code
for pe(p)_leading_underscore detection by is_underscoring.
(U): Likewise.
(GET_INIT_SYMBOL_NAME): Likewise.
(U_SIZE): Likewise.
(set_pe_name):
(set_entry_point):
(gld_${EMULATION_NAME}_set_symbols):
* emultempl/pep.em: Likewise.
* pe-dll.c (pe_detail_list): Set default
underscoring for x64 target.
(pe_dll_id_target): Add initialization of
pe(p)_leading_underscore.
2010-05-15 Dave Korn <dave.korn.cygwin@gmail.com> 2010-05-15 Dave Korn <dave.korn.cygwin@gmail.com>
* pe-dll.c: Removed trailing whitespaces. * pe-dll.c: Removed trailing whitespaces.

View File

@ -142,20 +142,24 @@ static char *pe_dll_search_prefix = NULL;
extern const char *output_filename; extern const char *output_filename;
static void static int is_underscoring (void)
gld_${EMULATION_NAME}_before_parse (void)
{ {
int u; int u = 0;
/* Now we check target's default for getting proper symbol_char. */ if (pe_leading_underscore != -1)
u = pe_leading_underscore; return pe_leading_underscore;
if (u == -1 if (!bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL); bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1) if (u == -1)
abort (); abort ();
pe_leading_underscore = u; pe_leading_underscore = (u != 0 ? 1 : 0);
return pe_leading_underscore;
}
static void
gld_${EMULATION_NAME}_before_parse (void)
{
is_underscoring ();
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
output_filename = "${EXECUTABLE_NAME:-a.exe}"; output_filename = "${EXECUTABLE_NAME:-a.exe}";
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
@ -353,16 +357,16 @@ typedef struct
underscore. */ underscore. */
#define GET_INIT_SYMBOL_NAME(IDX) \ #define GET_INIT_SYMBOL_NAME(IDX) \
(init[(IDX)].symbol \ (init[(IDX)].symbol \
+ ((init[(IDX)].is_c_symbol == FALSE || pe_leading_underscore != 0) ? 0 : 1)) + ((init[(IDX)].is_c_symbol == FALSE || (is_underscoring () != 0)) ? 0 : 1))
/* Decorates the C visible symbol by underscore, if target requires. */ /* Decorates the C visible symbol by underscore, if target requires. */
#define U(CSTR) \ #define U(CSTR) \
(pe_leading_underscore == 0 ? CSTR : "_" CSTR) ((is_underscoring () == 0) ? CSTR : "_" CSTR)
/* Get size of constant string for a possible underscore prefixed /* Get size of constant string for a possible underscore prefixed
C visible symbol. */ C visible symbol. */
#define U_SIZE(CSTR) \ #define U_SIZE(CSTR) \
(sizeof (CSTR) + pe_leading_underscore == 0 ? 0 : 1) (sizeof (CSTR) + (is_underscoring () == 0 ? 0 : 1))
#define D(field,symbol,def,usc) {&pe.field,sizeof(pe.field), def, symbol, 0, usc} #define D(field,symbol,def,usc) {&pe.field,sizeof(pe.field), def, symbol, 0, usc}
@ -474,17 +478,8 @@ gld_${EMULATION_NAME}_list_options (FILE *file)
static void static void
set_pe_name (char *name, long val) set_pe_name (char *name, long val)
{ {
int i, u; int i;
is_underscoring ();
/* Now we check target's default for getting proper symbol_char. */
u = pe_leading_underscore;
if (u == -1
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1)
abort ();
pe_leading_underscore = u;
/* Find the name and set it. */ /* Find the name and set it. */
for (i = 0; init[i].ptr; i++) for (i = 0; init[i].ptr; i++)
@ -506,7 +501,7 @@ set_entry_point (void)
{ {
const char *entry; const char *entry;
const char *initial_symbol_char; const char *initial_symbol_char;
int i, u = -1; int i;
static const struct static const struct
{ {
@ -549,16 +544,7 @@ set_entry_point (void)
entry = default_entry; entry = default_entry;
} }
/* Now we check target's default for getting proper symbol_char. */ initial_symbol_char = (is_underscoring () != 0 ? "_" : "");
u = pe_leading_underscore;
if (u == -1
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1)
abort ();
initial_symbol_char = (u == 1 ? "_" : "");
pe_leading_underscore = u;
if (*initial_symbol_char != '\0') if (*initial_symbol_char != '\0')
{ {
@ -915,16 +901,9 @@ gld_${EMULATION_NAME}_set_symbols (void)
{ {
/* Run through and invent symbols for all the /* Run through and invent symbols for all the
names and insert the defaults. */ names and insert the defaults. */
int j, u; int j;
/* Now we check target's default for getting proper symbol_char. */
u = pe_leading_underscore;
if (u == -1
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1) is_underscoring ();
abort ();
pe_leading_underscore = u;
if (!init[IMAGEBASEOFF].inited) if (!init[IMAGEBASEOFF].inited)
{ {

View File

@ -115,20 +115,25 @@ static char * pep_dll_search_prefix = NULL;
extern const char *output_filename; extern const char *output_filename;
static void static int is_underscoring (void)
gld_${EMULATION_NAME}_before_parse (void)
{ {
int u; int u = 0;
/* Now we check target's default for getting proper symbol_char. */ if (pep_leading_underscore != -1)
u = pep_leading_underscore; return pep_leading_underscore;
if (u == -1 if (!bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL); bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1) if (u == -1)
abort (); abort ();
pep_leading_underscore = u; pep_leading_underscore = (u != 0 ? 1 : 0);
return pep_leading_underscore;
}
static void
gld_${EMULATION_NAME}_before_parse (void)
{
is_underscoring ();
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`); ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
output_filename = "${EXECUTABLE_NAME:-a.exe}"; output_filename = "${EXECUTABLE_NAME:-a.exe}";
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
@ -297,16 +302,16 @@ typedef struct
#define GET_INIT_SYMBOL_NAME(IDX) \ #define GET_INIT_SYMBOL_NAME(IDX) \
(init[(IDX)].symbol \ (init[(IDX)].symbol \
+ ((init[(IDX)].is_c_symbol == FALSE || pep_leading_underscore == 1) ? 0 : 1)) + ((init[(IDX)].is_c_symbol == FALSE || (is_underscoring () == 1)) ? 0 : 1))
/* Decorates the C visible symbol by underscore, if target requires. */ /* Decorates the C visible symbol by underscore, if target requires. */
#define U(CSTR) \ #define U(CSTR) \
(pep_leading_underscore != 1 ? CSTR : "_" CSTR) ((is_underscoring () == 0) ? CSTR : "_" CSTR)
/* Get size of constant string for a possible underscore prefixed /* Get size of constant string for a possible underscore prefixed
C visible symbol. */ C visible symbol. */
#define U_SIZE(CSTR) \ #define U_SIZE(CSTR) \
(sizeof (CSTR) + pep_leading_underscore == 1 ? 0 : 1) (sizeof (CSTR) + (is_underscoring () == 0 ? 0 : 1))
#define D(field,symbol,def,usc) {&pep.field,sizeof(pep.field), def, symbol,0, usc} #define D(field,symbol,def,usc) {&pep.field,sizeof(pep.field), def, symbol,0, usc}
@ -411,18 +416,8 @@ gld_${EMULATION_NAME}_list_options (FILE *file)
static void static void
set_pep_name (char *name, bfd_vma val) set_pep_name (char *name, bfd_vma val)
{ {
int i, u; int i;
is_underscoring ();
/* Now we check target's default for getting proper symbol_char. */
u = pep_leading_underscore;
if (u == -1
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1)
abort ();
pep_leading_underscore = u;
/* Find the name and set it. */ /* Find the name and set it. */
for (i = 0; init[i].ptr; i++) for (i = 0; init[i].ptr; i++)
{ {
@ -443,7 +438,7 @@ set_entry_point (void)
{ {
const char *entry; const char *entry;
const char *initial_symbol_char; const char *initial_symbol_char;
int i, u = -1; int i;
static const struct static const struct
{ {
@ -482,15 +477,7 @@ set_entry_point (void)
} }
/* Now we check target's default for getting proper symbol_char. */ /* Now we check target's default for getting proper symbol_char. */
u = pep_leading_underscore; initial_symbol_char = (is_underscoring () != 0 ? "_" : "");
if (u == -1
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1)
abort ();
initial_symbol_char = (u == 1 ? "_" : "");
pep_leading_underscore = u;
if (*initial_symbol_char != '\0') if (*initial_symbol_char != '\0')
{ {
@ -616,6 +603,7 @@ set_pep_stack_heap (char *resname, char *comname)
static bfd_boolean static bfd_boolean
gld${EMULATION_NAME}_handle_option (int optc) gld${EMULATION_NAME}_handle_option (int optc)
{ {
is_underscoring ();
switch (optc) switch (optc)
{ {
default: default:
@ -840,16 +828,9 @@ gld_${EMULATION_NAME}_set_symbols (void)
{ {
/* Run through and invent symbols for all the /* Run through and invent symbols for all the
names and insert the defaults. */ names and insert the defaults. */
int j, u; int j;
/* Now we check target's default for getting proper symbol_char. */
u = pep_leading_underscore;
if (u == -1
&& !bfd_get_target_info ("${OUTPUT_FORMAT}", NULL, NULL, &u, NULL))
bfd_get_target_info ("${RELOCATEABLE_OUTPUT_FORMAT}", NULL, NULL, &u, NULL);
if (u == -1) is_underscoring ();
abort ();
pep_leading_underscore = u;
if (!init[IMAGEBASEOFF].inited) if (!init[IMAGEBASEOFF].inited)
{ {
@ -1191,6 +1172,7 @@ debug_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *sect, void *obj)
static void static void
gld_${EMULATION_NAME}_after_open (void) gld_${EMULATION_NAME}_after_open (void)
{ {
is_underscoring ();
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
if (pep_dll_extra_pe_debug) if (pep_dll_extra_pe_debug)
{ {
@ -1485,6 +1467,7 @@ gld_${EMULATION_NAME}_after_open (void)
static void static void
gld_${EMULATION_NAME}_before_allocation (void) gld_${EMULATION_NAME}_before_allocation (void)
{ {
is_underscoring ();
before_allocation_default (); before_allocation_default ();
} }
@ -1497,6 +1480,8 @@ saw_option (char *option)
{ {
int i; int i;
is_underscoring ();
for (i = 0; init[i].ptr; i++) for (i = 0; init[i].ptr; i++)
if (strcmp (GET_INIT_SYMBOL_NAME (i), option) == 0) if (strcmp (GET_INIT_SYMBOL_NAME (i), option) == 0)
return init[i].inited; return init[i].inited;
@ -1587,6 +1572,7 @@ gld_${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry ATTRIB
static bfd_boolean static bfd_boolean
gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED) gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUTE_UNUSED)
{ {
is_underscoring ();
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT
#ifdef TARGET_IS_i386pep #ifdef TARGET_IS_i386pep
pep_dll_id_target ("pei-x86-64"); pep_dll_id_target ("pei-x86-64");
@ -1600,6 +1586,7 @@ gld_${EMULATION_NAME}_recognized_file (lang_input_statement_type *entry ATTRIBUT
static void static void
gld_${EMULATION_NAME}_finish (void) gld_${EMULATION_NAME}_finish (void)
{ {
is_underscoring ();
finish_default (); finish_default ();
#ifdef DLL_SUPPORT #ifdef DLL_SUPPORT

View File

@ -261,7 +261,11 @@ static pe_details_type pe_detail_list[] =
#endif #endif
PE_ARCH_i386, PE_ARCH_i386,
bfd_arch_i386, bfd_arch_i386,
#ifdef pe_use_x86_64
FALSE,
#else
TRUE, TRUE,
#endif
autofilter_symbollist_i386 autofilter_symbollist_i386
}, },
{ {
@ -416,9 +420,11 @@ pe_dll_id_target (const char *target)
int u = pe_leading_underscore; /* Underscoring mode. -1 for use default. */ int u = pe_leading_underscore; /* Underscoring mode. -1 for use default. */
if (u == -1) if (u == -1)
bfd_get_target_info (target, NULL, NULL, &u, NULL); bfd_get_target_info (target, NULL, NULL, &u, NULL);
if (u != -1) if (u == -1)
pe_detail_list[i].underscored = (u != 0 ? TRUE : FALSE); abort ();
pe_detail_list[i].underscored = (u != 0 ? TRUE : FALSE);
pe_details = pe_detail_list + i; pe_details = pe_detail_list + i;
pe_leading_underscore = (u != 0 ? 1 : 0);
return; return;
} }
einfo (_("%XUnsupported PEI architecture: %s\n"), target); einfo (_("%XUnsupported PEI architecture: %s\n"), target);