Merge topic 'fix_64bit_autodef'

db7f069a Windows: Fix 64-bit DLL module definition file generation on VS 2015
This commit is contained in:
Brad King 2015-09-14 09:21:00 -04:00 committed by CMake Topic Stage
commit 6dad4c25b0

View File

@ -173,7 +173,7 @@ public:
*/ */
DumpSymbols(ObjectHeaderType* ih, DumpSymbols(ObjectHeaderType* ih,
FILE* fout) { FILE* fout, bool is64) {
this->ObjectImageHeader = ih; this->ObjectImageHeader = ih;
this->SymbolTable = (SymbolTableType*) this->SymbolTable = (SymbolTableType*)
((DWORD_PTR)this->ObjectImageHeader ((DWORD_PTR)this->ObjectImageHeader
@ -183,6 +183,7 @@ public:
GetSectionHeaderOffset(this->ObjectImageHeader); GetSectionHeaderOffset(this->ObjectImageHeader);
this->ImportFlag = true; this->ImportFlag = true;
this->SymbolCount = this->ObjectImageHeader->NumberOfSymbols; this->SymbolCount = this->ObjectImageHeader->NumberOfSymbols;
this->Is64Bit = is64;
} }
/* /*
@ -287,7 +288,14 @@ public:
symbol.erase(posAt); 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) { if (this->ImportFlag) {
this->ImportFlag = false; this->ImportFlag = false;
fprintf(this->FileOut,"EXPORTS \n"); fprintf(this->FileOut,"EXPORTS \n");
@ -355,6 +363,7 @@ private:
PIMAGE_SECTION_HEADER SectionHeaders; PIMAGE_SECTION_HEADER SectionHeaders;
ObjectHeaderType* ObjectImageHeader; ObjectHeaderType* ObjectImageHeader;
SymbolTableType* SymbolTable; SymbolTableType* SymbolTable;
bool Is64Bit;
}; };
bool bool
@ -406,7 +415,8 @@ DumpFile(const char* filename, FILE *fout)
* and IMAGE_FILE_HEADER.SizeOfOptionalHeader == 0; * and IMAGE_FILE_HEADER.SizeOfOptionalHeader == 0;
*/ */
DumpSymbols<IMAGE_FILE_HEADER, IMAGE_SYMBOL> 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(); symbolDumper.DumpObjFile();
} else { } else {
// check for /bigobj format // check for /bigobj format
@ -414,7 +424,8 @@ DumpFile(const char* filename, FILE *fout)
(cmANON_OBJECT_HEADER_BIGOBJ*) lpFileBase; (cmANON_OBJECT_HEADER_BIGOBJ*) lpFileBase;
if(h->Sig1 == 0x0 && h->Sig2 == 0xffff) { if(h->Sig1 == 0x0 && h->Sig2 == 0xffff) {
DumpSymbols<cmANON_OBJECT_HEADER_BIGOBJ, cmIMAGE_SYMBOL_EX> 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(); symbolDumper.DumpObjFile();
} else { } else {
printf("unrecognized file format in '%s'\n", filename); printf("unrecognized file format in '%s'\n", filename);