* peicode.h (pe_ILF_build_a_bfd): Strip only one prefix
character in IMPORT_NAME_UNDECORATE and IMPORT_NAME_NOPREFIX cases. Add comment.
This commit is contained in:
parent
d8d7c45959
commit
cabd4ccc81
|
@ -1,3 +1,10 @@
|
||||||
|
2005-03-19 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
Ross Ridge <rridge@csclub.uwaterloo.ca>
|
||||||
|
|
||||||
|
* peicode.h (pe_ILF_build_a_bfd): Strip only one prefix
|
||||||
|
character in IMPORT_NAME_UNDECORATE and IMPORT_NAME_NOPREFIX
|
||||||
|
cases. Add comment.
|
||||||
|
|
||||||
2005-03-18 H.J. Lu <hongjiu.lu@intel.com>
|
2005-03-18 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* elflink.c (elf_mark_used_section): Remove check for special
|
* elflink.c (elf_mark_used_section): Remove check for special
|
||||||
|
|
|
@ -875,39 +875,18 @@ pe_ILF_build_a_bfd (bfd * abfd,
|
||||||
/* If necessary, trim the import symbol name. */
|
/* If necessary, trim the import symbol name. */
|
||||||
symbol = symbol_name;
|
symbol = symbol_name;
|
||||||
|
|
||||||
|
/* As used by MS compiler, '_', '@', and '?' are alternative
|
||||||
|
forms of USER_LABEL_PREFIX, with '?' for c++ mangled names,
|
||||||
|
'@' used for fastcall (in C), '_' everywhere else. Only one
|
||||||
|
of these is used for a symbol. We strip this leading char for
|
||||||
|
IMPORT_NAME_NOPREFIX and IMPORT_NAME_UNDECORATE as per the
|
||||||
|
PE COFF 6.0 spec (section 8.3, Import Name Type). */
|
||||||
|
|
||||||
if (import_name_type != IMPORT_NAME)
|
if (import_name_type != IMPORT_NAME)
|
||||||
{
|
{
|
||||||
bfd_boolean skipped_leading_underscore = FALSE;
|
char c = symbol[0];
|
||||||
bfd_boolean skipped_leading_at = FALSE;
|
if (c == '_' || c == '@' || c == '?')
|
||||||
bfd_boolean skipped_leading_question_mark = FALSE;
|
symbol++;
|
||||||
bfd_boolean check_again;
|
|
||||||
|
|
||||||
/* Skip any prefix in symbol_name. */
|
|
||||||
-- symbol;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
check_again = FALSE;
|
|
||||||
++ symbol;
|
|
||||||
|
|
||||||
switch (*symbol)
|
|
||||||
{
|
|
||||||
case '@':
|
|
||||||
if (! skipped_leading_at)
|
|
||||||
check_again = skipped_leading_at = TRUE;
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
if (! skipped_leading_question_mark)
|
|
||||||
check_again = skipped_leading_question_mark = TRUE;
|
|
||||||
break;
|
|
||||||
case '_':
|
|
||||||
if (! skipped_leading_underscore)
|
|
||||||
check_again = skipped_leading_underscore = TRUE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (check_again);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen (symbol);
|
len = strlen (symbol);
|
||||||
|
|
Loading…
Reference in New Issue