mirror of
https://github.com/reactos/reactos.git
synced 2025-07-27 07:41:51 +00:00
[SPEC2DEF]
Fix creation of stubs for c++ mangled names svn path=/trunk/; revision=52765
This commit is contained in:
parent
c5dc599680
commit
59f0449d2a
1 changed files with 20 additions and 2 deletions
|
@ -19,6 +19,7 @@ typedef struct
|
||||||
int nArgCount;
|
int nArgCount;
|
||||||
int anArgs[30];
|
int anArgs[30];
|
||||||
unsigned int uFlags;
|
unsigned int uFlags;
|
||||||
|
int nNumber;
|
||||||
} EXPORT;
|
} EXPORT;
|
||||||
|
|
||||||
enum _ARCH
|
enum _ARCH
|
||||||
|
@ -168,7 +169,15 @@ OutputLine_stub(FILE *file, EXPORT *pexp)
|
||||||
fprintf(file, "__stdcall ");
|
fprintf(file, "__stdcall ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for C++ */
|
||||||
|
if (pexp->pcName[0] == '?')
|
||||||
|
{
|
||||||
|
fprintf(file, "stub_function%d(", pexp->nNumber);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
fprintf(file, "%.*s(", pexp->nNameLength, pexp->pcName);
|
fprintf(file, "%.*s(", pexp->nNameLength, pexp->pcName);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < pexp->nArgCount; i++)
|
for (i = 0; i < pexp->nArgCount; i++)
|
||||||
{
|
{
|
||||||
|
@ -334,6 +343,13 @@ OutputLine_def(FILE *fileDest, EXPORT *pexp)
|
||||||
fprintf(fileDest, "=");
|
fprintf(fileDest, "=");
|
||||||
PrintName(fileDest, pexp, "", 1, fDeco && !gbMSComp);
|
PrintName(fileDest, pexp, "", 1, fDeco && !gbMSComp);
|
||||||
}
|
}
|
||||||
|
else if (((pexp->uFlags & FL_STUB) || (pexp->nCallingConvention == CC_STUB)) &&
|
||||||
|
(pexp->pcName[0] == '?'))
|
||||||
|
{
|
||||||
|
/* C++ stubs are forwarded to C stubs */
|
||||||
|
fprintf(fileDest, "=");
|
||||||
|
fprintf(fileDest, "stub_function%d(", pexp->nNumber);
|
||||||
|
}
|
||||||
else if ((giArch == ARCH_X86) && gbKillAt && !gbMSComp &&
|
else if ((giArch == ARCH_X86) && gbKillAt && !gbMSComp &&
|
||||||
(pexp->nCallingConvention == CC_STDCALL ||
|
(pexp->nCallingConvention == CC_STDCALL ||
|
||||||
pexp->nCallingConvention == CC_FASTCALL))
|
pexp->nCallingConvention == CC_FASTCALL))
|
||||||
|
@ -379,12 +395,14 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
|
||||||
|
|
||||||
/* Loop all lines */
|
/* Loop all lines */
|
||||||
nLine = 1;
|
nLine = 1;
|
||||||
|
exp.nNumber = 0;
|
||||||
for (pcLine = pcStart; *pcLine; pcLine = NextLine(pcLine), nLine++)
|
for (pcLine = pcStart; *pcLine; pcLine = NextLine(pcLine), nLine++)
|
||||||
{
|
{
|
||||||
pc = pcLine;
|
pc = pcLine;
|
||||||
|
|
||||||
exp.nArgCount = 0;
|
exp.nArgCount = 0;
|
||||||
exp.uFlags = 0;
|
exp.uFlags = 0;
|
||||||
|
exp.nNumber++;
|
||||||
|
|
||||||
//fprintf(stderr, "info: line %d, token:'%d, %.20s'\n",
|
//fprintf(stderr, "info: line %d, token:'%d, %.20s'\n",
|
||||||
// nLine, TokenLength(pcLine), pcLine);
|
// nLine, TokenLength(pcLine), pcLine);
|
||||||
|
@ -591,7 +609,7 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
|
||||||
/* Check for c++ mangled name */
|
/* Check for c++ mangled name */
|
||||||
if (pc[0] == '?')
|
if (pc[0] == '?')
|
||||||
{
|
{
|
||||||
printf("Found c++ mangled name...\n");
|
//printf("Found c++ mangled name...\n");
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue