Solving incorrect handling when processing ExportName=SymbolName@Ordinal syntax.
authorjascui
Tue, 16 Nov 2010 15:54:07 +0800
changeset 682 2c32f186fa1f
parent 673 7ae5f757318b
child 683 8e0eb519ef53
Solving incorrect handling when processing ExportName=SymbolName@Ordinal syntax.
e32tools/elf2e32/source/deffile.cpp
e32tools/elf2e32/source/pl_elfproducer.cpp
--- a/e32tools/elf2e32/source/deffile.cpp	Tue Nov 02 16:54:53 2010 +0800
+++ b/e32tools/elf2e32/source/deffile.cpp	Tue Nov 16 15:54:07 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
--- a/e32tools/elf2e32/source/pl_elfproducer.cpp	Tue Nov 02 16:54:53 2010 +0800
+++ b/e32tools/elf2e32/source/pl_elfproducer.cpp	Tue Nov 16 15:54:07 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++;
 	}