[SPEC2DEF]

Add support for adding aliases when exporting data by specifying the -withalias switch. This will cause MS LINK to generate _FooVar as an alias alias for _imp__FooVar. While this looks wrong and is not the way you usually handle data imports, this is what we have in the DDK for a number of data exports like KdDebuggerNotPresent, IoFileObjectType, ..., which we currently define in an incompatible way. Remove stdcall decorations on non-x86 builds

svn path=/trunk/; revision=63217
This commit is contained in:
Timo Kreuzer 2014-05-10 13:55:09 +00:00
parent 6c9afdb590
commit fda4b225f8

View file

@ -52,6 +52,7 @@ enum
FL_STUB = 2,
FL_NONAME = 4,
FL_ORDINAL = 8,
FL_DATA_ALIAS = 16
};
enum
@ -369,6 +370,15 @@ PrintName(FILE *fileDest, EXPORT *pexp, PSTRING pstr, int fDeco)
}
else
{
/* Does the string already have stdcall decoration? */
pcAt = ScanToken(pcName, '@');
if (pcAt && (pcAt < (pcName + nNameLength)) && pcName[0] == '_')
{
/* Skip leading underscore and remove trailing decoration */
pcName++;
nNameLength = pcAt - pcName;
}
/* Print the undecorated function name */
fprintf(fileDest, "%.*s", nNameLength, pcName);
}
@ -492,7 +502,9 @@ OutputLine_def(FILE *fileDest, EXPORT *pexp)
fprintf(fileDest, " PRIVATE");
}
if (pexp->nCallingConvention == CC_EXTERN)
/* Make this a data export, unless this is MSVC and -withalias was given */
if ((pexp->nCallingConvention == CC_EXTERN) &&
!(gbMSComp && (pexp->uFlags & FL_DATA_ALIAS)))
{
fprintf(fileDest, " DATA");
}
@ -645,6 +657,15 @@ ParseFile(char* pcStart, FILE *fileDest, PFNOUTLINE OutputLine)
{
exp.uFlags |= FL_STUB;
}
else if (CompareToken(pc, "-withalias"))
{
/* This flag is to create a nin _imp_ prefixed alias for a
data export, so that the hacked DDK declarations work */
if (exp.nCallingConvention != CC_EXTERN)
fprintf(stderr, "error: line %d -withalias on non-data export\n", nLine);
else
exp.uFlags |= FL_DATA_ALIAS;
}
else if (CompareToken(pc, "-norelay") ||
CompareToken(pc, "-register") ||
CompareToken(pc, "-ret64"))