Windows: Fix 64-bit DLL module definition file generation on VS 2015
With 64-bit Windows builds, there is no need to remove the leading underscore from all the symbols. This is because it does not have one in the .obj file unless it is really in the name. This did not cause any trouble until VS 2015 which has some system functions that have a leading underscore that end up in the .def file.
This commit is contained in:
parent
72797dec8f
commit
db7f069a4b
|
@ -173,7 +173,7 @@ public:
|
|||
*/
|
||||
|
||||
DumpSymbols(ObjectHeaderType* ih,
|
||||
FILE* fout) {
|
||||
FILE* fout, bool is64) {
|
||||
this->ObjectImageHeader = ih;
|
||||
this->SymbolTable = (SymbolTableType*)
|
||||
((DWORD_PTR)this->ObjectImageHeader
|
||||
|
@ -183,6 +183,7 @@ public:
|
|||
GetSectionHeaderOffset(this->ObjectImageHeader);
|
||||
this->ImportFlag = true;
|
||||
this->SymbolCount = this->ObjectImageHeader->NumberOfSymbols;
|
||||
this->Is64Bit = is64;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -287,7 +288,14 @@ public:
|
|||
symbol.erase(posAt);
|
||||
}
|
||||
}
|
||||
if (symbol[0] == '_') symbol.erase(0,1);
|
||||
// For 64 bit builds we don't need to remove _
|
||||
if(!this->Is64Bit)
|
||||
{
|
||||
if (symbol[0] == '_')
|
||||
{
|
||||
symbol.erase(0,1);
|
||||
}
|
||||
}
|
||||
if (this->ImportFlag) {
|
||||
this->ImportFlag = false;
|
||||
fprintf(this->FileOut,"EXPORTS \n");
|
||||
|
@ -355,6 +363,7 @@ private:
|
|||
PIMAGE_SECTION_HEADER SectionHeaders;
|
||||
ObjectHeaderType* ObjectImageHeader;
|
||||
SymbolTableType* SymbolTable;
|
||||
bool Is64Bit;
|
||||
};
|
||||
|
||||
bool
|
||||
|
@ -406,7 +415,8 @@ DumpFile(const char* filename, FILE *fout)
|
|||
* and IMAGE_FILE_HEADER.SizeOfOptionalHeader == 0;
|
||||
*/
|
||||
DumpSymbols<IMAGE_FILE_HEADER, IMAGE_SYMBOL>
|
||||
symbolDumper((PIMAGE_FILE_HEADER) lpFileBase, fout);
|
||||
symbolDumper((PIMAGE_FILE_HEADER) lpFileBase, fout,
|
||||
(dosHeader->e_magic == IMAGE_FILE_MACHINE_AMD64));
|
||||
symbolDumper.DumpObjFile();
|
||||
} else {
|
||||
// check for /bigobj format
|
||||
|
@ -414,7 +424,8 @@ DumpFile(const char* filename, FILE *fout)
|
|||
(cmANON_OBJECT_HEADER_BIGOBJ*) lpFileBase;
|
||||
if(h->Sig1 == 0x0 && h->Sig2 == 0xffff) {
|
||||
DumpSymbols<cmANON_OBJECT_HEADER_BIGOBJ, cmIMAGE_SYMBOL_EX>
|
||||
symbolDumper((cmANON_OBJECT_HEADER_BIGOBJ*) lpFileBase, fout);
|
||||
symbolDumper((cmANON_OBJECT_HEADER_BIGOBJ*) lpFileBase, fout,
|
||||
(dosHeader->e_magic == IMAGE_FILE_MACHINE_AMD64));
|
||||
symbolDumper.DumpObjFile();
|
||||
} else {
|
||||
printf("unrecognized file format in '%s'\n", filename);
|
||||
|
|
Loading…
Reference in New Issue