# HG changeset patch # User jascui # Date 1289894187 -28800 # Node ID 8e0eb519ef53fe16bf3536d33623e5926f342a08 # Parent 2c32f186fa1f5beed6cc140c8bca8bd4b9fae3d6# Parent 240a07ea3a138652e784101a7aececa8870fe6f1 Solve incorrect handling of ExportName=SymbolName@Ordinal syntax diff -r 240a07ea3a13 -r 8e0eb519ef53 e32tools/elf2e32/source/deffile.cpp --- a/e32tools/elf2e32/source/deffile.cpp Fri Nov 12 17:02:24 2010 +0800 +++ b/e32tools/elf2e32/source/deffile.cpp Tue Nov 16 15:56:27 2010 +0800 @@ -463,27 +463,27 @@ IsWord(iLine + iOffset, aCurrentPos); char *cmt = strchr(iLine + iOffset, ';'); - char *aAlias = strchr(iLine + iOffset, '='); + char *aExport = strchr(iLine + iOffset, '='); - if( aAlias && (!cmt || (aAlias < cmt)) ) + if( aExport && (!cmt || (aExport < cmt)) ) { - int aAliasPos = aAlias - (iLine+ iOffset); + int aExportPos = aExport - (iLine+ iOffset); //Check if alias name is also supplied, they should be separated - // by whitespace, i.e., SymbolName=AliasName is valid while, - // SymbolName =AliasName is invalid. - if( aAliasPos > aCurrentPos) + // by whitespace, i.e., ExportName=SymbolName is valid while, + // ExportName =SymbolName is invalid. + if( aExportPos > aCurrentPos) { char *aToken = (iLine + iOffset + aCurrentPos); throw DEFFileError(UNRECOGNIZEDTOKEN, iFileName, iLineNum, aToken); } - aSymbolName = new char[aAliasPos+1]; - strncpy(aSymbolName, iLine + iOffset, aAliasPos); - aSymbolName[aAliasPos] = '\0'; - char *aExportName = new char[aCurrentPos - aAliasPos + 1]; - strncpy(aExportName, aAlias +1, (aCurrentPos - aAliasPos)); - aExportName[(aCurrentPos - aAliasPos)] = '\0'; + char* aExportName = new char[aExportPos+1]; + strncpy(aExportName, iLine+iOffset, aExportPos); + aExportName[aExportPos] = '\0'; + aSymbolName = new char[aCurrentPos - aExportPos + 1]; + strncpy(aSymbolName, aExport +1, (aCurrentPos - aExportPos)); + aSymbolName[(aCurrentPos - aExportPos-1)] = '\0'; iSymbol->ExportName(aExportName); } else diff -r 240a07ea3a13 -r 8e0eb519ef53 e32tools/elf2e32/source/pl_elfproducer.cpp --- a/e32tools/elf2e32/source/pl_elfproducer.cpp Fri Nov 12 17:02:24 2010 +0800 +++ b/e32tools/elf2e32/source/pl_elfproducer.cpp Tue Nov 16 15:56:27 2010 +0800 @@ -172,7 +172,10 @@ while(aItr != aEnd) { String aSymName(""); aSym = *aItr; - aSymName = aSym->SymbolName(); + if(aSym->ExportName()) + aSymName = aSym->ExportName(); + else + aSymName = aSym->SymbolName(); //set symbol info.. iElfDynSym[aIdx].st_name = iDSOSymNameStrTbl.size(); @@ -183,7 +186,10 @@ //set version table info... iVersionTbl[aIdx] = DEFAULT_VERSION; - AddToHashTable(aSym->SymbolName(), aIdx); + if(aSym->ExportName()) + AddToHashTable(aSym->ExportName(), aIdx); + else + AddToHashTable(aSym->SymbolName(), aIdx); aItr++;aIdx++; }