romtools 13.2.0.1
authorZheng Shen <zheng.shen@nokia.com>
Tue, 26 Oct 2010 11:12:31 +0800
changeset 654 7c11c3d8d025
parent 653 8ee61c1e0c5c
child 662 60be34e1b006
child 664 44b0e894b7ab
romtools 13.2.0.1
imgtools/buildrom/group/release.txt
imgtools/buildrom/tools/buildrom.pm
imgtools/imglib/boostlibrary/boost/version.hpp
imgtools/imglib/compress/byte_pair.h
imgtools/imglib/host/h_utl.cpp
imgtools/imglib/inc/fatdefines.h
imgtools/imglib/inc/h_utl.h
imgtools/romtools/group/readimage.vcproj
imgtools/romtools/group/release.txt
imgtools/romtools/group/rofsbuild.vcproj
imgtools/romtools/group/rombuild.vcproj
imgtools/romtools/group/romtools.sln
imgtools/romtools/maksym/maksymrofs.pl
imgtools/romtools/rofsbuild/fatimagegenerator.cpp
imgtools/romtools/rofsbuild/inc/logging/loggingexception.hpp
imgtools/romtools/rofsbuild/inc/logging/logparser.hpp
imgtools/romtools/rofsbuild/r_build.cpp
imgtools/romtools/rofsbuild/r_obey.cpp
imgtools/romtools/rofsbuild/r_obey.h
imgtools/romtools/rofsbuild/r_rofs.cpp
imgtools/romtools/rofsbuild/rofsbuild.cpp
imgtools/romtools/rofsbuild/rofsbuild.mmp
imgtools/romtools/rofsbuild/src/logging/loggingexception.cpp
imgtools/romtools/rofsbuild/src/logging/logparser.cpp
imgtools/romtools/rofsbuild/symbolgenerator.cpp
imgtools/romtools/rofsbuild/symbolgenerator.h
imgtools/romtools/rofsbuild/symbolprocessunit.cpp
imgtools/romtools/rofsbuild/symbolprocessunit.h
imgtools/romtools/rombuild/rombuild.cpp
imgtools/romtools/rombuild/symbolgenerator.cpp
imgtools/romtools/rombuild/symbolgenerator.h
sbsv1/abld/group/bld.inf
sbsv1/abld/platform/armv7smp.bsf
--- a/imgtools/buildrom/group/release.txt	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/buildrom/group/release.txt	Tue Oct 26 11:12:31 2010 +0800
@@ -1,3 +1,8 @@
+Version 3.31.0 (BUILDROM)
+===============
+Released by Lorence Wang, 20/10/2010
+	1) Volume Serial NO. for FAT image.
+
 Version 3.30.0 (BUILDROM)
 ===============
 Released by Lorence Wang, 12/10/2010
--- a/imgtools/buildrom/tools/buildrom.pm	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/buildrom/tools/buildrom.pm	Tue Oct 26 11:12:31 2010 +0800
@@ -67,7 +67,7 @@
 my $enforceFeatureManager = 0; # Flag to make Feature Manager mandatory if SYMBIAN_FEATURE_MANAGER macro is defined. 
 
 my $BuildromMajorVersion = 3 ;
-my $BuildromMinorVersion = 30;
+my $BuildromMinorVersion = 31;
 my $BuildromPatchVersion = 0;
 
 
@@ -3666,7 +3666,7 @@
 	{
 		return $line;
 	}
-  	elsif($line =~ /^\s*volume\s*=.*/i)
+  	elsif($line =~ /^\s*(volume|volumeid)\s*=.*/i)
   	{
   		return $line;		
   	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/imglib/boostlibrary/boost/version.hpp	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,35 @@
+//  Boost version.hpp configuration header file  ------------------------------//
+
+//  (C) Copyright John maddock 1999. Distributed under the Boost
+//  Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//  See http://www.boost.org/libs/config for documentation
+
+#ifndef BOOST_VERSION_HPP
+#define BOOST_VERSION_HPP
+
+//
+//  Caution, this is the only boost header that is guarenteed
+//  to change with every boost release, including this header
+//  will cause a recompile every time a new boost version is
+//  released.
+//
+//  BOOST_VERSION % 100 is the patch level
+//  BOOST_VERSION / 100 % 1000 is the minor version
+//  BOOST_VERSION / 100000 is the major version
+
+#define BOOST_VERSION 103900
+
+//
+//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
+//  but as a *string* in the form "x_y[_z]" where x is the major version
+//  number, y is the minor version number, and z is the patch level if not 0.
+//  This is used by <config/auto_link.hpp> to select which library version to link to.
+
+#define BOOST_LIB_VERSION "1_39"
+
+#endif
+
+
+
--- a/imgtools/imglib/compress/byte_pair.h	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/imglib/compress/byte_pair.h	Tue Oct 26 11:12:31 2010 +0800
@@ -19,9 +19,10 @@
 #define BYTE_PAIR_H
 
  
-#ifdef __VC32__
- #ifdef __MSVCDOTNET__
-  #include <strstream>
+#ifdef _MSC_VER 
+ #if (_MSC_VER > 1200)
+  #define __MSVCDOTNET__ 1
+  #include <sstream>
   #include <iomanip>
  #else //!__MSVCDOTNET__
   #include <strstrea.h>
--- a/imgtools/imglib/host/h_utl.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/imglib/host/h_utl.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -19,11 +19,7 @@
 
 #define __INCLUDE_CAPABILITY_NAMES__
 
-#if defined(_MSVCDOTNET__) || defined(__TOOLS2__)
 
-#else //!__MSVCDOTNET__
-#include <string.h>
-#endif //__MSVCDOTNET__
 
 #include <stdarg.h>
 #include <stdlib.h>
@@ -33,6 +29,12 @@
 
 #include "h_utl.h"
 
+#if defined(__MSVCDOTNET__)|| defined(__TOOLS2__)
+
+#else //!__MSVCDOTNET__
+#include <string.h>
+#endif //__MSVCDOTNET__
+
 #ifdef __LINUX__
  
  // Convert the supplied string to uppercase, in-place 
@@ -155,7 +157,7 @@
 TVersion::TVersion(TInt aMajor, TInt aMinor, TInt aBuild)
 	: iMajor((TInt8)aMajor), iMinor((TInt8)aMinor), iBuild((TInt16)aBuild)
 	{}
-#ifdef __TOOLS2__
+#if defined(__TOOLS2__ ) ||  defined(__MSVCDOTNET__ )
 istringstream &operator>>(istringstream &is, TVersion &aVersion)
 #else
 istrstream &operator>>(istrstream &is, TVersion &aVersion)
@@ -164,7 +166,7 @@
 // Input a TVersion with syntax: major[.minor][(build)]
 //	
 	{
-#ifdef __TOOLS2__
+#if defined(__TOOLS2__ ) ||  defined(__MSVCDOTNET__ )
 string tmp = is.str();
 const char *str=tmp.c_str();
 #else
@@ -192,7 +194,7 @@
 		{ 
 		cout << "\n Warning: major version must be in range 0 - 127 \n";
 		}
-	char* pMinor = strchr(str, '.');
+	char* pMinor = (char*)strchr(str, '.');
 	if (pMinor)
 		{
 		pMinor++; 
@@ -300,7 +302,7 @@
 	TInt sec=0;
 	TInt mill=0;
 	char ch;
-	#ifdef __TOOLS2__
+	#if defined(__TOOLS2__) || defined(__MSVCDOTNET__)
 	istringstream val(aString);
 	#else
 	istrstream val(aString,strlen(aString));
--- a/imgtools/imglib/inc/fatdefines.h	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/imglib/inc/fatdefines.h	Tue Oct 26 11:12:31 2010 +0800
@@ -16,6 +16,7 @@
 */
 #ifndef __FAT_DEFINES_HEADER__
 #define __FAT_DEFINES_HEADER__
+#include <time.h>
 #include <e32std.h>
 struct TFATBootSector {
 	TUint8 BS_jmpBoot[3];
@@ -130,8 +131,12 @@
     TUint16 iDriveSectorSize;
     TUint32 iDriveClusterSize;
     TUint8 iDriveNoOfFATs;    
+    TUint32 iVolumeId;
     ConfigurableFatAttributes():iImageSize(0),iDriveSectorSize(512),iDriveClusterSize(0),iDriveNoOfFATs(2){
         memcpy(iDriveVolumeLabel,"NO NAME    \0",12);
+				time_t rawtime;
+				time(&rawtime);
+				iVolumeId = (TUint32)rawtime;
     }
 };
 #endif
--- a/imgtools/imglib/inc/h_utl.h	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/imglib/inc/h_utl.h	Tue Oct 26 11:12:31 2010 +0800
@@ -21,10 +21,11 @@
 //
 #include <stdio.h>
 
-#ifdef __VC32__
- #ifdef __MSVCDOTNET__
+#ifdef _MSC_VER 
+ #if (_MSC_VER > 1200) //!__MSVCDOTNET__
+  #define __MSVCDOTNET__ 1
   #include <iostream>
-  #include <strstream>
+  #include <sstream>
   #include <fstream>
   using namespace std;
  #else //!__MSVCDOTNET__
@@ -151,7 +152,7 @@
 TAny *operator new(TUint aSize);
 void operator delete(TAny *aPtr);
 //
-#ifdef __TOOLS2__
+#if defined(__TOOLS2__) || defined(__MSVCDOTNET__)
 istringstream &operator>>(istringstream &is, TVersion &aVersion);
 #else
 istrstream &operator>>(istrstream &is, TVersion &aVersion);
@@ -173,12 +174,12 @@
 	{
 
 	T x;
-	#ifdef __TOOLS2__
+	#if defined(__TOOLS2__) || defined(__MSVCDOTNET__)
 	istringstream val(aStr);
 	#else
 	istrstream val((char*)aStr,strlen(aStr));
 	#endif
-	#if defined(__MSVCDOTNET__) || defined (__TOOLS2__) 
+	#if  defined (__TOOLS2__) || defined(__MSVCDOTNET__)
 		val >> setbase(0);
 	#endif //__MSVCDOTNET__                             
 	val >> x;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/group/readimage.vcproj	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,542 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="readimage"
+	ProjectGUID="{14ADB7DA-3076-4A77-868E-83E04E8D5A13}"
+	RootNamespace="readimage"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="\VCOutput\Bins"
+			IntermediateDirectory="\VCOutput\Int\$(ProjectName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="1"
+			UseOfATL="0"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../imglib/boostlibrary;../../imglib/boostlibrary/boost;../rofsbuild;../rombuild;../readimage/inc;../rofsbuild/inc;../../imglib/inc;../../sisutils/inc;../../imglib/compress;../../imglib/memmap/include;../../imglib/patchdataprocessor/include;../../imglib/uniconv/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;__MSVCDOTNET__;__TOOLS__;__VC32__;_STLP_DEBUG=1;__OPERATOR_NEW_DECLARED__;__SUPPORT_ELF_FILES__;snprintf=_snprintf;PATH_MAX=260"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="false"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				DisableSpecificWarnings="4819;4996;4244;4334;4290"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				IgnoreImportLibrary="false"
+				OutputFile="$(OutDir)\$(ProjectName)D.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../imglib/boostlibrary/binary/windows;../stlport_5-2-1_vc90_staticlib"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="\VCOutput\Bins"
+			IntermediateDirectory="\VCOutput\Int\$(ProjectName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="1"
+			UseOfATL="0"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories="../../imglib/boostlibrary;../../imglib/boostlibrary/boost;../rofsbuild;../rombuild;../readimage/inc;../rofsbuild/inc;../../imglib/inc;../../sisutils/inc;../../imglib/compress;../../imglib/memmap/include;../../imglib/patchdataprocessor/include;../../imglib/uniconv/include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;__MSVCDOTNET__;__TOOLS__;__VC32__;__OPERATOR_NEW_DECLARED__;__SUPPORT_ELF_FILES__;snprintf=_snprintf;PATH_MAX=260"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				TreatWChar_tAsBuiltInType="false"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4819;4996;4244;4334;4290"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../imglib/boostlibrary/binary/windows;../stlport_5-2-1_vc90_staticlib"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Sources"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\readimage\src\common.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\src\e32_image_reader.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\src\image_handler.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\src\image_reader.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\src\rofs_image_reader.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\src\rom_image_reader.cpp"
+				>
+			</File>
+			<Filter
+				Name="e32image"
+				>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\compress.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\decode.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\deflate.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\e32image.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\encode.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\inflate.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\panic.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="compress"
+				>
+				<File
+					RelativePath="..\..\imglib\compress\byte_pair.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\compress\pagedcompress.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="e32uid"
+				>
+				<File
+					RelativePath="..\..\imglib\e32uid\e32uid.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="imglib_host"
+				>
+				<File
+					RelativePath="..\..\imglib\host\h_file.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\h_mem.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\h_utl.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\utf16string.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="rofsbuild_cache"
+				>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cache.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cacheablelist.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cacheentry.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cacheexception.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cachegenerator.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cachemanager.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cachevalidator.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="memmap"
+				>
+				<File
+					RelativePath="..\..\imglib\memmap\source\memmap.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\memmap\source\memmaputils.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="patchdataprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\patchdataprocessor\source\patchdataprocessor.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="sisutils"
+				>
+				<File
+					RelativePath="..\..\sisutils\src\pkgfileparser.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\sisutils\src\pkglanguage.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\sisutils\src\sis2iby.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\sisutils\src\sisutils.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="rombuild"
+				>
+				<File
+					RelativePath="..\rombuild\r_global.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="rofsbuild"
+				>
+				<File
+					RelativePath="..\rofsbuild\r_build.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\r_coreimage.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="uniconv"
+				>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Headers"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\readimage\inc\common.h"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\inc\e32_image_reader.h"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\inc\image_handler.h"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\inc\image_reader.h"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\inc\rofs_image_reader.h"
+				>
+			</File>
+			<File
+				RelativePath="..\readimage\inc\rom_image_reader.h"
+				>
+			</File>
+			<Filter
+				Name="compress"
+				>
+				<File
+					RelativePath="..\..\imglib\compress\byte_pair.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="e32image"
+				>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\deflate.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\farray.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\huffman.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\panic.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="imglib_inc"
+				>
+				<File
+					RelativePath="..\..\imglib\inc\e32image.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\fatdefines.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\h_utl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\utf16string.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="cache"
+				>
+				<File
+					RelativePath="..\readimage\inc\cache\cache.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\readimage\inc\cache\cacheablelist.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\readimage\inc\cache\cacheentry.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\readimage\inc\cache\cacheexception.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\readimage\inc\cache\cachegenerator.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\readimage\inc\cache\cachemanager.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\readimage\inc\cache\cachevalidator.hpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="memmap"
+				>
+				<File
+					RelativePath="..\..\imglib\memmap\include\memmap.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\memmap\include\memmaputils.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="patchdataprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\patchdataprocessor\include\patchdataprocessor.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="sisutils"
+				>
+				<File
+					RelativePath="..\..\sisutils\inc\pkgfileparser.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\sisutils\inc\pkglanguage.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\sisutils\inc\sis2iby.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\sisutils\inc\sisutils.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="uniconv"
+				>
+				<File
+					RelativePath="..\..\imglib\uniconv\source\uniconv.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- a/imgtools/romtools/group/release.txt	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/group/release.txt	Tue Oct 26 11:12:31 2010 +0800
@@ -1,3 +1,25 @@
+Version 2.16.1 (ROFSBUILD)
+===============
+Released by Marvin Shi, 25/10/2010
+	1) ou1cimx1#627682  Rofsbuild hangs with "-loginput" option on linux
+	
+=======
+Version 2.16.0 (ROFSBUILD)
+===============
+Released by Marvin Shi and Jason Cui, 21/10/2010
+	1) Concurrent symbol generation.
+	
+Version 2.15.0 (ROFSBUILD)
+===============
+Released by Lorence Wang, 20/10/2010
+	1) Volume Serial NO. for FAT image.
+
+Version 2.18.4 (ROMBUILD)
+Version 2.14.2 (ROFSBUILD)
+===============
+Released by Ross Qin, 15/10/2010
+	1) ou1cimx1#616869 Copyright Info missing in symbolgenerator.*/Romtools source codes are not VC friendly
+
 Version 2.18.3 (ROMBUILD)
 Version 2.14.1 (ROFSBUILD)
 ===============
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/group/rofsbuild.vcproj	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="rofsbuild"
+	ProjectGUID="{A68ED0C5-60D6-4281-8226-8F9830A424CF}"
+	RootNamespace="rofsbuild"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="\VCOutput\Bins"
+			IntermediateDirectory="\VCOutput\Int\$(ProjectName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="1"
+			UseOfATL="0"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../imglib/boostlibrary;../../imglib/boostlibrary/boost;../rofsbuild;../rofsbuild/inc;../../imglib/inc;../../imglib/compress;../../imglib/memmap/include;../../imglib/patchdataprocessor/include;../../imglib/parameterfileprocessor/include;../../imglib/uniconv/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;__MSVCDOTNET__;__TOOLS__ ;__VC32__;_STLP_DEBUG=1;__OPERATOR_NEW_DECLARED__;"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="false"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				DisableSpecificWarnings="4819;4996;4244;4334;4290"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				IgnoreImportLibrary="false"
+				OutputFile="$(OutDir)\$(ProjectName)D.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../imglib/boostlibrary/binary/windows;../stlport_5-2-1_vc90_staticlib"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="\VCOutput\Bins"
+			IntermediateDirectory="\VCOutput\Int\$(ProjectName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="1"
+			UseOfATL="0"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories="../../imglib/boostlibrary;../../imglib/boostlibrary/boost;../rofsbuild;../rofsbuild/inc;../../imglib/inc;../../imglib/compress;../../imglib/memmap/include;../../imglib/patchdataprocessor/include;../../imglib/parameterfileprocessor/include;../../imglib/uniconv/include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;__MSVCDOTNET__;__TOOLS__ ;__VC32__;__OPERATOR_NEW_DECLARED__;"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				TreatWChar_tAsBuiltInType="false"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4819;4996;4244;4334;4290"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../imglib/boostlibrary/binary/windows;../stlport_5-2-1_vc90_staticlib"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Sources"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\rofsbuild\fatcluster.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\fatimagegenerator.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\fsnode.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_build.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_coreimage.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_driveimage.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_driveutl.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_obey.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_rofs.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_smrimage.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\rofsbuild.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\symbolgenerator.cpp"
+				>
+			</File>
+			<Filter
+				Name="e32image"
+				>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\compress.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\decode.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\deflate.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\e32image.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\encode.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\inflate.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\panic.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="compress"
+				>
+				<File
+					RelativePath="..\..\imglib\compress\byte_pair.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\compress\pagedcompress.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="e32uid"
+				>
+				<File
+					RelativePath="..\..\imglib\e32uid\e32uid.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="imglib_host"
+				>
+				<File
+					RelativePath="..\..\imglib\host\h_file.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\h_mem.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\h_utl.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\utf16string.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="cache"
+				>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cache.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cacheablelist.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cacheentry.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cacheexception.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cachegenerator.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cachemanager.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\src\cache\cachevalidator.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="memmap"
+				>
+				<File
+					RelativePath="..\..\imglib\memmap\source\memmap.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\memmap\source\memmaputils.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="patchdataprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\patchdataprocessor\source\patchdataprocessor.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="parameterfileprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\parameterfileprocessor\source\parameterfileprocessor.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="uniconv"
+				>
+				<File
+					RelativePath="..\..\imglib\uniconv\source\uniconv.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Headers"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\rofsbuild\fatcluster.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\fatimagegenerator.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\fsnode.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_coreimage.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_driveimage.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_driveutl.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_obey.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_rofs.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_romnode.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\r_smrimage.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rofsbuild\symbolgenerator.h"
+				>
+			</File>
+			<Filter
+				Name="compress"
+				>
+				<File
+					RelativePath="..\..\imglib\compress\byte_pair.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="e32image"
+				>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\deflate.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\farray.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\huffman.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\panic.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="imglib_inc"
+				>
+				<File
+					RelativePath="..\..\imglib\inc\e32image.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\fatdefines.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\h_utl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\utf16string.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="cache"
+				>
+				<File
+					RelativePath="..\rofsbuild\inc\cache\cache.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\inc\cache\cacheablelist.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\inc\cache\cacheentry.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\inc\cache\cacheexception.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\inc\cache\cachegenerator.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\inc\cache\cachemanager.hpp"
+					>
+				</File>
+				<File
+					RelativePath="..\rofsbuild\inc\cache\cachevalidator.hpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="memmap"
+				>
+				<File
+					RelativePath="..\..\imglib\memmap\include\memmap.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\memmap\include\memmaputils.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="patchdataprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\patchdataprocessor\include\patchdataprocessor.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="parameterfileprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\parameterfileprocessor\include\parameterfileprocessor.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="uniconv"
+				>
+				<File
+					RelativePath="..\..\imglib\uniconv\include\uniconv.hpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/group/rombuild.vcproj	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,474 @@
+<?xml version="1.0" encoding="gb2312"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="rombuild"
+	ProjectGUID="{77D9E2A3-AD01-4691-9137-8DA53692BE9D}"
+	RootNamespace="rombuild"
+	Keyword="Win32Proj"
+	TargetFrameworkVersion="196613"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="\VCOutput\Bins"
+			IntermediateDirectory="\VCOutput\Int\$(ProjectName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="1"
+			UseOfATL="0"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../imglib/boostlibrary;../../imglib/boostlibrary/boost;../rombuild;../../imglib/inc;../../imglib/compress;../../imglib/memmap/include;../../imglib/patchdataprocessor/include;../../imglib/parameterfileprocessor/include;../../imglib/uniconv/include"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;__MSVCDOTNET__;__TOOLS__ ;__VC32__;_STLP_DEBUG=1;__OPERATOR_NEW_DECLARED__;snprintf=_snprintf"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				TreatWChar_tAsBuiltInType="false"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				DisableSpecificWarnings="4819;4996;4244;4334"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				IgnoreImportLibrary="false"
+				OutputFile="$(OutDir)\$(ProjectName)D.exe"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories="../../imglib/boostlibrary/binary/windows;../stlport_5-2-1_vc90_staticlib"
+				IgnoreDefaultLibraryNames=""
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="\VCOutput\Bins"
+			IntermediateDirectory="\VCOutput\Int\$(ProjectName)\$(ConfigurationName)"
+			ConfigurationType="1"
+			UseOfMFC="1"
+			UseOfATL="0"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
+				AdditionalIncludeDirectories="../../imglib/boostlibrary;../../imglib/boostlibrary/boost;../rombuild;../../imglib/inc;../../imglib/compress;../../imglib/memmap/include;../../imglib/patchdataprocessor/include;../../imglib/parameterfileprocessor/include;../../imglib/uniconv/include"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;__MSVCDOTNET__;__TOOLS__ ;__VC32__;__OPERATOR_NEW_DECLARED__;snprintf=_snprintf"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				TreatWChar_tAsBuiltInType="false"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4819;4996;4244;4334"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="../../imglib/boostlibrary/binary/windows;../stlport_5-2-1_vc90_staticlib"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Sources"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\imglib\e32image\deflate\inflate.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_areaset.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_build.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_collapse.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_coreimage.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_coreimagereader.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_dir.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_global.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_header.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_obey.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_rom.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_srec.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\rombuild.cpp"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\symbolgenerator.cpp"
+				>
+			</File>
+			<Filter
+				Name="e32image"
+				>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\compress.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\decode.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\deflate.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\e32image.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\encode.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\panic.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="compress"
+				>
+				<File
+					RelativePath="..\..\imglib\compress\byte_pair.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\compress\pagedcompress.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="e32uid"
+				>
+				<File
+					RelativePath="..\..\imglib\e32uid\e32uid.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="imglib_host"
+				>
+				<File
+					RelativePath="..\..\imglib\host\h_file.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\h_mem.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\h_utl.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\host\utf16string.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="memmap"
+				>
+				<File
+					RelativePath="..\..\imglib\memmap\source\memmap.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\memmap\source\memmaputils.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="parameterfileprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\parameterfileprocessor\source\parameterfileprocessor.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="patchdataprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\patchdataprocessor\source\patchdataprocessor.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="uniconv"
+				>
+				<File
+					RelativePath="..\..\imglib\uniconv\source\uniconv.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Headers"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath="..\rombuild\r_areaset.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_coreimage.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_coreimagereader.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_dir.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_global.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_mromimage.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_obey.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\r_rom.h"
+				>
+			</File>
+			<File
+				RelativePath="..\rombuild\symbolgenerator.h"
+				>
+			</File>
+			<Filter
+				Name="compress"
+				>
+				<File
+					RelativePath="..\..\imglib\compress\byte_pair.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="e32image"
+				>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\deflate.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\farray.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\huffman.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\e32image\deflate\panic.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="imglib_inc"
+				>
+				<File
+					RelativePath="..\..\imglib\inc\e32image.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\h_utl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\inc\utf16string.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="memmap"
+				>
+				<File
+					RelativePath="..\..\imglib\memmap\include\memmap.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\imglib\memmap\include\memmaputils.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="patchdataprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\patchdataprocessor\include\patchdataprocessor.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="parameterfileprocessor"
+				>
+				<File
+					RelativePath="..\..\imglib\parameterfileprocessor\include\parameterfileprocessor.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="uniconv"
+				>
+				<File
+					RelativePath="..\..\imglib\uniconv\include\uniconv.hpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/group/romtools.sln	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,32 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rombuild", "rombuild.vcproj", "{77D9E2A3-AD01-4691-9137-8DA53692BE9D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rofsbuild", "rofsbuild.vcproj", "{A68ED0C5-60D6-4281-8226-8F9830A424CF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "readimage", "readimage.vcproj", "{14ADB7DA-3076-4A77-868E-83E04E8D5A13}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{77D9E2A3-AD01-4691-9137-8DA53692BE9D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{77D9E2A3-AD01-4691-9137-8DA53692BE9D}.Debug|Win32.Build.0 = Debug|Win32
+		{77D9E2A3-AD01-4691-9137-8DA53692BE9D}.Release|Win32.ActiveCfg = Release|Win32
+		{77D9E2A3-AD01-4691-9137-8DA53692BE9D}.Release|Win32.Build.0 = Release|Win32
+		{A68ED0C5-60D6-4281-8226-8F9830A424CF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A68ED0C5-60D6-4281-8226-8F9830A424CF}.Debug|Win32.Build.0 = Debug|Win32
+		{A68ED0C5-60D6-4281-8226-8F9830A424CF}.Release|Win32.ActiveCfg = Release|Win32
+		{A68ED0C5-60D6-4281-8226-8F9830A424CF}.Release|Win32.Build.0 = Release|Win32
+		{14ADB7DA-3076-4A77-868E-83E04E8D5A13}.Debug|Win32.ActiveCfg = Debug|Win32
+		{14ADB7DA-3076-4A77-868E-83E04E8D5A13}.Debug|Win32.Build.0 = Debug|Win32
+		{14ADB7DA-3076-4A77-868E-83E04E8D5A13}.Release|Win32.ActiveCfg = Release|Win32
+		{14ADB7DA-3076-4A77-868E-83E04E8D5A13}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
--- a/imgtools/romtools/maksym/maksymrofs.pl	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/maksym/maksymrofs.pl	Tue Oct 26 11:12:31 2010 +0800
@@ -15,371 +15,8 @@
 # Produces symbolic information given a ROFS log file and .map files for relevant binary files
 #
 
-require 5.003_07;
-no strict 'vars';
-use English;
-use FindBin;		# for FindBin::Bin
-
-# Version
-my $MajorVersion = 1;
-my $MinorVersion = 1;
-my $PatchVersion = 0;
-
-# Globals
-my $maksym = "";
-my $rofsbuild;
-my $debug = 0;
-
-&args;
-&main;
+shift @ARGV;
+my $logfile = shift @ARGV;
+my $command = "rofsbuild -loginput=$logfile";
+system ($command);
 exit 0;
-
-sub CompareAddrs()
-{
-    return -1 if ($a < $b);
-    return 1 if ($a > $b);
-    return 0;
-}
-
-#
-# main
-#
-sub main()
-{
-	open (ROFS, "<$rofsbuild") or die "ERROR: Can't open rofsbuild log file \"$rofsbuild\"\n";
-	if ($maksym ne "") 
-	{
-		open (SYM, ">$maksym") or die "ERROR: Can't open output file \"$maksym\"\n";
-   		print "Creating $maksym...\n"
-	}
-	
-	my $curretnLine;
-	while ($currentLine = <ROFS>) 	
-	{
-		# Check that the given log file is from a rofs image and set up the name for the symbol file
-		if ($currentLine =~ /^Creating Rofs image (\S*)/) 
-		{
-			if ($maksym eq "") 
-			{
-				# For backwards compatibility, replace trailing .img with .symbol
-				# if no trailing .img, just append .symbol anyway
-				$maksym = $1;
-				$maksym =~ s/(\.img)?$/.symbol/i;
-				close SYM;
-				open (SYM, ">$maksym") or die "ERROR: Can't open output file \"$maksym\"\n";
-				print "\nCreating $maksym...\n"
-			}
-			next;
-		}
-		
-		# found at end of file
-		if ($currentLine =~ /^Writing Rom image/) 
-		{
-			close SYM;
-			$maksym = "";
-			next;
-		}
-		
-		# Data file
-		if ($currentLine =~ /^File \'(.*)\' size: \S+\s*$/) 
-		{
-			my $file = $1;
-			$file =~ /([^\\]+)$/;
-			printf SYM "\nFrom    $file\n\n00000000    0000    $1\n";
-		}
-
-		# Executable file
-		elsif ($currentLine =~ /^Compressed executable File \'(.*)\' size: \S+\s*, mode:\S+\s*$/) 
-		{
-			ProcessCompressedLine($1);
-		}
-	}
-	close SYM;
-	close ROFS;
-}
-
-sub ProcessCompressedLine
-{
-	my ($file) = @_;
-
-	my $mapfile;
-	my $mapfile2;
-	print SYM "\nFrom    $file\n\n";
-
-	# Look in map file for symbols in .text and relocate them
-	$mapfile2 = $file.".map";			
-	$mapfile = $file;
-	$mapfile =~ s/\.\w+$/\.map/;			
-	if (!(open (MAP, "$mapfile2") || open (MAP, "$mapfile"))) 
-	{
-		print "$file\nWarning: Can't open \"$mapfile2\" or \"$mapfile\"\n";
-		# couldn't find map file so output in format that is used for non-binary files
-		my $BinSize = GetSizeFromBinFile($file);
-		$file =~ /([^\\]+)$/;
-		printf "00000000    %04x    $1\n", $BinSize;
-		printf SYM "00000000    %04x    $1\n", $BinSize;
-	} 
-	else 
-	{
-		my @maplines;
-		while ($_ = <MAP>) 
-		{
-			push @maplines, $_;
-		}
-		close MAP;
-		# See if we're dealing with the RVCT output
-		if ($file =~m/ARMV5/i) 
-		{
-			ProcessArmv5File($file, \@maplines);
-		} 
-		elsif( ($file =~ /GCCE/i) || ($file =~ /ARM4/i) )
-		{
-			ProcessGcceOrArm4File($file, \@maplines);
-		}
-		else
-		{
-			print "\nWarning: cannot determine linker type used to create $file\n";
-			$file =~ /([^\\]+)$/;
-			printf SYM "00000000    0000    $1\n";
-		}
-	}
-}
-
-sub ProcessArmv5File
-{
-	my ($file, $mapLines) = @_;
-	my @maplines = @$mapLines;
-	if ($maplines[0] !~ /^ARM Linker/) 
-	{
-		print "\nWarning: expecting $file to be generated by ARM linker\n";
-		# file not in format produced by ARMV5 linker so treat file as non-binary file
-		$file =~ /([^\\]+)$/;
-		printf SYM "00000000    0000    $1\n";
-	}
-	else
-	{
-		# scroll down to the global symbols
-		while ($_ = shift @maplines) 
-		{
-			if ($_ =~ /Global Symbols/) 
-			{
-				last;
-			}
-		}
-
-		my %syms;
-		my $baseOffset; # offset to subtract from each address so that the first entry has address 0x0
-
-		foreach (@maplines) 
-		{
-			# name address ignore size section
-			if (/^\s*(.+)\s*(0x\S+)\s+[^\d]*(\d+)\s+(.*)$/) 
-			{
-				my $sym = $1;
-				my $addr = hex($2);
-				my $size = sprintf("%04x",$3);
-				my $section = $4;
-				$size = sprintf("%04x", 8) if ($section =~ /\(StubCode\)/);
-				
-				# it is possible that there will be more than one entry in a log file for a
-				# particular address, this is because aliases are included.
-				# The following code checks that the correct function (i.e. the one with
-				# non-zero size) is being included in the symbol file.
-                                if($addr > 0) {
-                                    if( ! defined $baseOffset ) {
-                                        $baseOffset = $addr;
-                                    }
-                                    # no entry at this address so create one regardless of whether size is zero
-                                    # an entry at this address exists, replace if it is an alias
-                                    if( (! exists $syms{$addr-$baseOffset}) || !($size eq "0000")) {
-                                        $syms{$addr - $baseOffset} = "$size    $sym $section";
-                                    }
-                                }
-			}
-		}
-
-		# Write symbols in address order
-		my @addrs = sort CompareAddrs keys %syms;
-		for ($i = 0; $i < @addrs ; $i++) 
-		{
-			my $thisaddr = $addrs[$i];
-			printf SYM "%08x    %s\n",
-			$thisaddr, $syms{$thisaddr};
-		}
-	}
-}
-
-sub ProcessGcceOrArm4File
-{
-	my ($file, $mapLines) = @_;
-	my @maplines = @$mapLines;
-	my %syms;
-	my $stubhex=1;
-
-	# Find text section
-	while (($_ = shift @maplines) && !(/^\.text\s+/)) 
-	{
-	}
-
-	/^\.text\s+(\w+)\s+\w+/ or die "ERROR: Can't get .text section info for \"$file\"\n";
-
-	my $imgtext=hex($1);
-
-	# Slurp symbols 'til the end of the text section
-	foreach (@maplines) 
-	{
-
-		# blank line marks the end of the text section
-		last if (/^$/);
-
-		# .text <addr> <len>  <library(member)>
-		# .text$something
-		#       <addr> <len>  <library(member)>
-		#       <addr> <len>  LONG 0x0
-
-		if (/^\s(\.text)?\s+(0x\w+)\s+(0x\w+)\s+(.*)$/io) 
-		{
-			my $address = hex($2);
-			my $length = hex($3);
-			my $libraryfile = $4;
-			next if ($libraryfile =~ /^LONG 0x/);
-			
-			$syms{$address+$length} = ' ';	# impossible symbol as end marker
-
-			#set $stubhex value as $address if there is a match
-			if ($libraryfile =~ /.*lib\(.*d\d*s_?\d{5}.o\)$/io) 
-			{
-				$stubhex=$address;
-			}
-			next;
-		}
-
-		#  <addr>  <symbol name possibly including spaces>
-		if (/^\s+(\w+)\s\s+([a-zA-Z_].+)/o) 
-		{
-			my $addr = hex($1);
-			my $symbol = $2;
-			$symbol = "stub $symbol" if ($addr == $stubhex);
-			$syms{$addr} = $symbol;
-			next;
-		}
-	}				
-
-	# Write symbols in address order
-	@addrs = sort CompareAddrs keys %syms;
-	for ($i = 0; $i < @addrs - 1; $i++) 
-	{
-		my $symbol = $syms{$addrs[$i]};
-		next if ($symbol eq ' ');
-		printf SYM "%08x    %04x    %s\n",
-		$addrs[$i] - $imgtext, $addrs[$i+1]-$addrs[$i], $symbol;
-	}
-	# last address assumed to be imgtext+lentext
-
-	close MAP;
-}
-
-#
-# args - get command line args
-#
-sub args
-{
-	my $arg;
-	my @args;
-	my $flag;
-
-	&help if (!@ARGV);
-
-	while (@ARGV) 
-	{
-		$arg = shift @ARGV;
-
-		if ($arg=~/^[\-](\S*)$/) 
-		{
-			$flag=$1;
-
-			if ($flag=~/^[\?h]$/i) 
-			{
-				&help;
-			}
-			elsif ($flag=~/^d$/i) 
-			{
-				$debug = 1;
-			}
-		       	else 
-			{
-				print "\nERROR: Unknown flag \"-$flag\"\n";
-				&usage;
-				exit 1;
-			}
-		}
-		else 
-		{
-			push @args,$arg;
-		}
-	}
-
-	if (@args)
-	{
-		$rofsbuild = shift @args;
-		if (@args) 
-		{
-			$maksym = shift @args;
-			if (@args) 
-			{
-				print "\nERROR: Incorrect argument(s) \"@args\"\n";
-				&usage;
-				exit 1;
-			}
-		}
-	}
-}
-
-sub help ()
-{
-	my $build;
-
-	print "\nmaksymrofs - Produce symbolic information given a ROFS image V${MajorVersion}.${MinorVersion}.${PatchVersion}\n";
-	&usage;
-	exit 0;
-}
-
-sub usage ()
-{
-    print <<EOF
-
-Usage:
-  maksymrofs <logfile> [<outfile>]
-
-Where:
-  <logfile>   Log file from rofsbuild tool.
-  <outfile>   Output file. Defaults to imagename.symbol.
-EOF
-    ;
-    exit 0;
-}
-
-sub GetSizeFromBinFile ()
-{
-   my ($file) = @_;
-   my $tmpfile = "temp.info";
-   system("readimage $file -o $tmpfile");
-   return 0 if (!-e $tmpfile);
-   
-   open (TMP, "<$tmpfile");
-   my $line;
-   my $size = 0;
-   while ($line = <TMP>)
-   {
-      print $line;
-      if ($line =~ /^Code size\W+(\w+)$/)
-      {
-        $size = hex($1);
-        last;
-      }
-   }
-   close TMP;
-   unlink $tmpfile;
-   return $size;
-}
-
--- a/imgtools/romtools/rofsbuild/fatimagegenerator.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/fatimagegenerator.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -76,9 +76,7 @@
 	iFatHeader.BS_DrvNum = 0x80 ;
 	iFatHeader.BS_BootSig = 0x29 ;
 
-	time_t rawtime;
-	time(&rawtime);
-	*((TUint32*)iFatHeader.BS_VolID) = (TUint32)rawtime;
+	*((TUint32*)iFatHeader.BS_VolID) = aAttr.iVolumeId;
 	memcpy(iFatHeader.BS_VolLab,aAttr.iDriveVolumeLabel,sizeof(iFatHeader.BS_VolLab));
 	if(aAttr.iImageSize == 0){
 		if(aType == EFat32)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/inc/logging/loggingexception.hpp	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef ROM_TOOLS_ROFSBUILD_LOGGING_LOGGINGEXCEPTION_H_
+#define ROM_TOOLS_ROFSBUILD_LOGGING_LOGGINGEXCEPTION_H_
+
+
+/*
+ * @class LoggingException
+ */
+class LoggingException
+{
+public:
+	LoggingException(int ErrorCode);
+
+	int GetErrorCode(void);
+
+	const char* GetErrorMessage(void);
+
+	static int RESOURCE_ALLOCATION_FAILURE;
+	static int INVALID_LOG_FILENAME       ;
+
+	virtual ~LoggingException(void);
+protected:
+	int errcode;
+private:
+	LoggingException(void);
+
+	LoggingException& operator = (const LoggingException&);
+};
+
+
+#endif  /* defined ROM_TOOLS_ROFSBUILD_LOGGING_LOGGINGEXCEPTION_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/inc/logging/logparser.hpp	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef ROM_TOOLS_ROFSBUILD_LOGGING_LOGPARSER_H_
+#define ROM_TOOLS_ROFSBUILD_LOGGING_LOGPARSER_H_
+
+
+/**
+ * @class LogParser
+ */
+class LogParser
+{
+public:
+	static LogParser* GetInstance(void) throw (LoggingException);
+
+	void ParseSymbol(const char* LogFilename) throw (LoggingException);
+
+	void Cleanup(void);
+protected:
+	static LogParser* Only;
+private:
+	LogParser(void);
+
+	LogParser(const LogParser&);
+
+	LogParser& operator = (const LogParser&);
+};
+
+
+
+#endif  /* defined ROM_TOOLS_ROFSBUILD_LOGGING_LOGPARSER_H_ */
--- a/imgtools/romtools/rofsbuild/r_build.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/r_build.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -1071,9 +1071,9 @@
 					char * buffer = new char [size];
 #if defined(__LINUX__)
 					ostrstream os((char*)aDest, aMaxSize, (ios_base::openmode)(ios_base::out+ios_base::binary));
-#elif defined(__TOOLS2__) && defined (_STLP_THREADS)
+#elif ( defined(__TOOLS2__) || defined(__MSVCDOTNET__)) && defined (_STLP_THREADS)
 					ostrstream os((char*)buffer, size,(ios_base::out+ios_base::binary));
-#elif defined( __TOOLS2__)
+#elif ( defined(__TOOLS2__) || defined(__MSVCDOTNET__))
 					ostrstream os((char*)buffer, size,(ios_base::out+ios_base::binary));
 #else
 					ostrstream os( (char*)buffer, size, (ios_base::out+ios_base::binary));
@@ -1119,10 +1119,12 @@
 				}
 			}
 
-#if defined(__TOOLS2__) && defined (_STLP_THREADS)
+#if defined(__TOOLS2__) || defined(__MSVCDOTNET__) 
+	#ifdef _STLP_THREADS
 			ostrstream os((char*)aDest, aMaxSize,(ios_base::out+ios_base::binary));
-#elif __TOOLS2__
+	#else 
 			ostrstream os((char*)aDest, aMaxSize, (_Ios_Openmode)(ios_base::out+ios_base::binary));
+	#endif
 #else
 			ostrstream os((char*)aDest, aMaxSize, (ios_base::out+ios_base::binary));
 #endif
--- a/imgtools/romtools/rofsbuild/r_obey.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/r_obey.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -91,6 +91,7 @@
 	{_K("dataimagename"),1, 1,EKeywordDataImageName, "Data Drive image file name"},
 	{_K("dataimagefilesystem"),1, 1,EKeywordDataImageFileSystem, "Drive image file system format"},
 	{_K("dataimagesize"),1, 1,EKeywordDataImageSize, "Maximum size of Data Drive image"},
+	{_K("volumeid"),1, 1,EKeywordDataImageVolumeID, "Volume ID of Data Drive image"},
 	{_K("volume"),1, -1,EKeywordDataImageVolume, "Volume Label of Data Drive image"},
 	{_K("sectorsize"),1, 1,EKeywordDataImageSectorSize, "Sector size(in bytes) of Data Drive image"},
 	{_K("clustersize"),1, 1,EKeywordDataImageClusterSize, "Cluster size(in bytes) of Data Drive image"},
@@ -819,30 +820,33 @@
 
 			TUint position = volumeLabel.find(volumeLabelKeyword.c_str(),0,volumeLabelKeyword.size());
 			position += volumeLabelKeyword.size();
-			if (volumeLabel.find('=',position) != string::npos) {
-				position=volumeLabel.find('=',position);
-				++position;
+			while (iReader.IsGap(volumeLabel[position]))
+				position ++;
+			volumeLabel = volumeLabel.substr(position);
+				
+			if (volumeLabel.find('=',0) != string::npos) {
+				Print(EWarning,"Value for Volume Label includes illegel charactor. Default value is considered.\n");
+				break;
 			}								
 
-			position = volumeLabel.find_first_not_of(' ',position);
+			// Remove the new line character from the end
+			position = volumeLabel.find_first_of("\n");
 			if (position != string::npos) {
-				volumeLabel = volumeLabel.substr(position);
-
-				// Remove the new line character from the end
-				position = volumeLabel.find_first_of("\r\n");
-				if (position != string::npos)
-					volumeLabel = volumeLabel.substr(0,position);
-				size_t length = volumeLabel.length() ;
-				if(length > 11) 
-						length = 11 ;
-				memcpy(iConfigurableFatAttributes.iDriveVolumeLabel,volumeLabel.c_str(),length) ;
-				while(length != 11)
-					iConfigurableFatAttributes.iDriveVolumeLabel[length++] = ' ';
-				iConfigurableFatAttributes.iDriveVolumeLabel[length] = 0;
+				if (position != 0 && volumeLabel[position-1] == '\r')
+					position --;
+				volumeLabel = volumeLabel.substr(0,position);
 			}
-			else {
+			size_t length = volumeLabel.length();
+			if (length == 0) {
 				Print(EWarning,"Value for Volume Label is not provided. Default value is considered.\n");
+				break;
 			}
+			if(length > 11) 
+					length = 11 ;
+			memcpy(iConfigurableFatAttributes.iDriveVolumeLabel,volumeLabel.c_str(),length) ;
+			while(length != 11)
+				iConfigurableFatAttributes.iDriveVolumeLabel[length++] = ' ';
+			iConfigurableFatAttributes.iDriveVolumeLabel[length] = 0;
 			break;
 		}
 	case EKeywordDataImageSectorSize:
@@ -882,6 +886,21 @@
 				iConfigurableFatAttributes.iDriveNoOfFATs = noOfFats;			
 		}			
 		break;			
+	case EKeywordDataImageVolumeID:
+		{
+			static bool isSet = false;
+			if (isSet)
+				Print(EWarning,"Duplicate setting for volume ID will be ignored.\n");
+			const char* bigString = iReader.Word(1);
+			TUint32 volumeid = 0;
+			TInt res = Val(volumeid,bigString); 
+			if (res != KErrNone || volumeid == 0xFFFFFFFF)
+				Print(EWarning,"Invalid Volume ID specified. Default value is considered.\n");
+			else
+				iConfigurableFatAttributes.iVolumeId = volumeid;			
+			isSet = true;
+		}			
+		break;			
 	default:
 		// unexpected keyword iReader.Word(0), keep going.
 		break;
--- a/imgtools/romtools/rofsbuild/r_obey.h	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/r_obey.h	Tue Oct 26 11:12:31 2010 +0800
@@ -75,6 +75,7 @@
 	EKeywordDataImageName,    
 	EKeywordDataImageFileSystem, 
 	EKeywordDataImageSize,
+	EKeywordDataImageVolumeID,
 	EKeywordDataImageVolume,
 	EKeywordDataImageSectorSize,
 	EKeywordDataImageClusterSize,
@@ -158,12 +159,12 @@
 
 	void ProcessTime(TInt64& aTime);
 	static void TimeNow(TInt64& aTime);
+	inline static TBool IsGap(char ch) {
+		return (ch==' ' || ch=='=' || ch=='\t');
+	}
 private:
 	TInt ReadAndParseLine(); 
 	TInt Parse();
-	inline static TBool IsGap(char ch) {
-		return (ch==' ' || ch=='=' || ch=='\t');
-	}
 
 	static const ObeyFileKeyword iKeywords[];
 	static const FileAttributeKeyword iAttributeKeywords[];
--- a/imgtools/romtools/rofsbuild/r_rofs.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/r_rofs.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -356,7 +356,7 @@
             thrds.join_all();
             delete [] workers;
             if(iSymGen)
-                iSymGen->AddFile("",false);
+                iSymGen->SetFinished();
 
             TUint offset = aBaseOffset;
             TUint8* dest = aDestBase;
--- a/imgtools/romtools/rofsbuild/rofsbuild.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/rofsbuild.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -34,6 +34,8 @@
 #include "cache/cachevalidator.hpp"
 #include "cache/cacheablelist.hpp"
 #include "cache/cachemanager.hpp"
+#include "logging/loggingexception.hpp"
+#include "logging/logparser.hpp"
 #include <malloc.h>
  
 #ifndef WIN32
@@ -46,7 +48,7 @@
 #endif
 
 static const TInt RofsbuildMajorVersion=2;
-static const TInt RofsbuildMinorVersion=14;
+static const TInt RofsbuildMinorVersion=16;
 static const TInt RofsbuildPatchVersion=1;
 static TBool SizeSummary=EFalse;
 static TPrintType SizeWhere=EAlways;
@@ -78,6 +80,7 @@
 TBool gSmrImage = EFalse;
 string gSmrFileName = "";
 static string cmdlogfile = "";
+static string loginput = "";
 
 //Cache global variables
 bool gCache = false;
@@ -115,7 +118,8 @@
 	"        -argfile=<FileName>   specify argument-file name containing list of command-line arguments\n"
 "        -lowmem     use memory-mapped file for image build to reduce physical memory consumption\n"
 "        -k     to enable keepgoing when duplicate files exist in oby\n"
-"        -logfile=<fileName>           specify log file\n";
+"        -logfile=<fileName>           specify log file\n"
+"        -loginput=<log filename>      specify as input a log file and produce as output symbol file.\n";
 
 char ReallyHelpText[] =
 "Log Level:\n"
@@ -325,6 +329,9 @@
 			else if (strnicmp(argv[i], "-logfile=",9) ==0) {
 				cmdlogfile = argv[i] + 9;
 			}
+			else if (strnicmp(argv[i], "-loginput=", 10) == 0) {
+				loginput = argv[i] + 10;
+			}
 			else {
 #ifdef WIN32
 				Print (EWarning, "Unrecognised option %s\n",argv[i]);
@@ -348,7 +355,7 @@
 		return;
 
 	if((gDriveImage == EFalse) && (gSmrImage ==  EFalse) && 
-		(filename.empty() || (gUseCoreImage && gImageFilename.length() == 0))){
+		(filename.empty() || (gUseCoreImage && gImageFilename.length() == 0)) && (loginput.length() == 0)){
 			Print (EAlways, HelpText);
 			if (reallyHelp) {
 				ObeyFileReader::KeywordHelp();
@@ -487,6 +494,29 @@
 		gCPUNum = MAXIMUM_THREADS;
 	PrintVersion();
 	processCommandLine(argc, argv);
+	if(gThreadNum == 0) {
+		if(gCPUNum > 0) {
+			printf("WARNING: The number of processors (%d) is used as the number of concurrent jobs.\n", gCPUNum);
+			gThreadNum = gCPUNum;
+		}
+		else {
+			printf("WARNING: Can't automatically get the valid number of concurrent jobs and %d is used.\n", DEFAULT_THREADS);
+			gThreadNum = DEFAULT_THREADS;
+		}
+	}
+	if(loginput.length() >= 1)
+	{
+		try
+		{
+			LogParser::GetInstance()->ParseSymbol(loginput.c_str());
+		}
+		catch(LoggingException le)
+		{
+			printf("ERROR: %s\r\n", le.GetErrorMessage());
+			return 1;
+		}
+		return 0;
+	}
 	//if the user wants to clean up the cache, do it only.
 	if(gCleanCache){
 		try {
@@ -515,16 +545,6 @@
 	if ((!obeyFileName) && (!gDriveFilename.empty()) && (!gSmrFileName.empty())){
 		return KErrGeneral;
 	}
-	if(gThreadNum == 0) {
-		if(gCPUNum > 0) {
-			printf("WARNING: The number of processors (%d) is used as the number of concurrent jobs.\n", gCPUNum);
-			gThreadNum = gCPUNum;
-		}
-		else {
-			printf("WARNING: Can't automatically get the valid number of concurrent jobs and %d is used.\n", DEFAULT_THREADS);
-			gThreadNum = DEFAULT_THREADS;
-		}
-	}
 	// Process drive obey files.
 	if(gDriveImage) {  
 		char temp = 0;
@@ -582,8 +602,9 @@
 	}
 	// Process Rofs Obey files.
 	if(obeyFileName) {
-		if (cmdlogfile[cmdlogfile.size()-1] == '\\' || cmdlogfile[cmdlogfile.size()-1] == '/')
-			cmdlogfile += "ROFSBUILD.LOG";
+		if (cmdlogfile.empty() || cmdlogfile[cmdlogfile.size()-1] == '\\' || cmdlogfile[cmdlogfile.size()-1] == '/')
+			cmdlogfile += "ROFSBUILD.LOG" ;
+			
 	 	H.SetLogFile(cmdlogfile.c_str());
 		ObeyFileReader *reader = new ObeyFileReader(obeyFileName); 
 		if (!reader->Open())
--- a/imgtools/romtools/rofsbuild/rofsbuild.mmp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/rofsbuild.mmp	Tue Oct 26 11:12:31 2010 +0800
@@ -25,10 +25,13 @@
 SOURCE			 r_obey.cpp r_build.cpp r_rofs.cpp r_driveimage.cpp r_driveutl.cpp
 SOURCE			 rofsbuild.cpp r_coreimage.cpp r_smrimage.cpp symbolgenerator.cpp
 SOURCE			 fatcluster.cpp fsnode.cpp fatimagegenerator.cpp
+SOURCE			 symbolprocessunit.cpp
 SOURCEPATH	../../imglib/host
 SOURCE			h_utl.cpp h_file.cpp h_mem.cpp utf16string.cpp
 SOURCEPATH ../rofsbuild/src/cache
 SOURCE cachemanager.cpp cacheexception.cpp cache.cpp cacheablelist.cpp cachevalidator.cpp cachegenerator.cpp cacheentry.cpp
+SOURCEPATH ../rofsbuild/src/logging
+SOURCE loggingexception.cpp logparser.cpp
 
 // executable compression
 SOURCEPATH	../../imglib/e32uid
@@ -50,6 +53,7 @@
 USERINCLUDE   ../rofsbuild/inc
 USERINCLUDE   ../../imglib/boostlibrary/
 USERINCLUDE   ../../imglib/boostlibrary/boost
+USERINCLUDE   ../rofsbuild
 
 STATICLIBRARY 	patchdataprocessor parameterfileprocessor memmap
 STATICLIBRARY   boost_thread-1.39 boost_filesystem-1.39 boost_regex-1.39 boost_system-1.39 uniconv
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/src/logging/loggingexception.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "logging/loggingexception.hpp"
+
+
+int LoggingException::RESOURCE_ALLOCATION_FAILURE = 1;
+int LoggingException::INVALID_LOG_FILENAME        = 2;
+
+
+LoggingException::LoggingException(int ErrorCode)
+{
+	this->errcode = ErrorCode;
+
+	return;
+}
+
+
+int LoggingException::GetErrorCode(void)
+{
+	return this->errcode;
+}
+
+
+const char* LoggingException::GetErrorMessage(void)
+{
+	if(this->errcode == LoggingException::RESOURCE_ALLOCATION_FAILURE)
+		return "Not enough system resources to initialize logging module.";
+	else if(this->errcode == LoggingException::INVALID_LOG_FILENAME)
+		return "Invalid log filename as input.";
+//	else if(this->errcode == CacheException::CACHE_INVALID)
+//		return "Cache is invalid.";
+//	else if(this->errcode == CacheException::CACHE_IS_EMPTY)
+//		return "Cache is empty.";
+//	else if(this->errcode == CacheException::HARDDRIVE_FAILURE)
+//		return "A hard drive failure occurred in Cache operations.";
+
+	return "Undefined error type.";
+}
+
+
+LoggingException::~LoggingException(void)
+{
+	return;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/src/logging/logparser.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include <new>
+#include <iostream>
+#include <fstream>
+#include <string>
+using namespace std;
+
+#include "logging/loggingexception.hpp"
+#include "logging/logparser.hpp"
+#include "symbolgenerator.h"
+
+
+LogParser* LogParser::Only = (LogParser*)0;
+
+
+LogParser* LogParser::GetInstance(void) throw (LoggingException)
+{
+	if(! LogParser::Only)
+	{
+		LogParser::Only = new (std::nothrow) LogParser();
+		if(! LogParser::Only)
+			throw LoggingException(LoggingException::RESOURCE_ALLOCATION_FAILURE);
+	}
+
+	return LogParser::Only;
+}
+
+
+void LogParser::ParseSymbol(const char* LogFilename) throw (LoggingException)
+{
+	string linebuf;
+	SymbolGenerator* symgen = SymbolGenerator::GetInstance();
+	symgen->SetSymbolFileName(string(LogFilename));
+
+	ifstream logfd(LogFilename);
+	if(logfd.is_open())
+	{
+		while(! logfd.eof())
+		{
+			getline(logfd, linebuf);
+			if(linebuf.compare(0,4,"File") == 0)
+			{
+				if(linebuf.find("size:", 4) != string::npos)
+				{
+					size_t startpos = linebuf.find('\'') ;
+					size_t endpos   = linebuf.rfind('\'');
+					if((startpos!=string::npos) && (endpos!=string::npos))
+					{
+						symgen->AddFile(linebuf.substr(startpos+1,endpos-startpos-1), false);
+					}
+				}
+			}
+			else if(linebuf.compare(0,26,"Compressed executable File") == 0)
+			{
+				if(linebuf.find("size:", 26) != string::npos)
+				{
+					size_t startpos = linebuf.find('\'') ;
+					size_t endpos   = linebuf.rfind('\'');
+					if((startpos!=string::npos) && (endpos!=string::npos))
+					{
+						symgen->AddFile(linebuf.substr(startpos+1,endpos-startpos-1), true);
+					}
+				}
+			}
+		}
+		symgen->SetFinished();
+		symgen->Release();
+	}
+	else
+	{
+		throw LoggingException(LoggingException::INVALID_LOG_FILENAME);
+	}
+
+	return;
+}
+
+
+void LogParser::Cleanup(void)
+{
+	return;
+}
+
+
+LogParser::LogParser(void)
+{
+	return;
+}
--- a/imgtools/romtools/rofsbuild/symbolgenerator.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/symbolgenerator.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -1,3 +1,21 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <vector>
 #include <boost/regex.hpp>
 #define MAX_LINE 65535
 #include "symbolgenerator.h"
@@ -8,6 +26,7 @@
 #else
 #define PATH_SEPARATOR '\\'
 #endif
+extern TInt gThreadNum;
 
 boost::mutex SymbolGenerator::iMutexSingleton;
 SymbolGenerator* SymbolGenerator::iInst = NULL;
@@ -20,6 +39,9 @@
     return iInst;
 }
 void SymbolGenerator::Release() {
+    if(iInst != NULL) {
+        iInst->join();
+    }
     iMutexSingleton.lock();
     if(iInst != NULL) {
         delete iInst;
@@ -40,216 +62,71 @@
     iMutex.unlock();
     iCond.notify_all();
 }
-void SymbolGenerator::ProcessExecutable( const string& fileName ){
-    char str[MAX_LINE];
-    string outString;
-    outString = "\nFrom    ";
-    outString += fileName + "\n\n";
-    iSymFile.write(outString.c_str(),outString.length());
-    string mapFile2 = fileName+".map";
-    size_t dot = fileName.rfind('.');
-    string mapFile = fileName.substr(0,dot)+".map";
-    ifstream fMap;
-    fMap.open(mapFile2.c_str());
-    if(!fMap.is_open()) {
-        fMap.open(mapFile.c_str());
-    }
+void SymbolGenerator::SetFinished() 
+{ 
 
-    if(!fMap.is_open()) {
-        printf("%s\nWarning: Can't open \"%s\" or \"%s\"\n",fileName.c_str(),mapFile2.c_str(),mapFile.c_str());
-        int binSize = GetSizeFromBinFile(fileName);
-        memset(str,0,sizeof(str));
-        sprintf(str,"%04x", binSize);
-        outString = "00000000    ";
-        outString += str;
-        outString += "    ";
-        outString += fileName.substr(fileName.rfind(PATH_SEPARATOR)+1)+"\n";
-        iSymFile.write(outString.c_str(),outString.length());
+	iFinished = true; 
+	iCond.notify_all();
     }
-    else {
-		if(!fMap.good()) fMap.clear();
-        boost::regex regARMV5("ARMV5", boost::regex::icase);
-        boost::regex regGCCEoARMV4("(GCCE|ARMV4)", boost::regex::icase);
-        boost::cmatch what;
-        if(regex_search(fileName, what, regARMV5)) {
-            ProcessArmv5File(fileName, fMap);
-        }
-        else if(regex_search(fileName, what, regGCCEoARMV4)) {
-            ProcessGcceOrArm4File(fileName, fMap);
-        }
-        else {
-            printf("\nWarning: cannot determine linker type used to create %s\n",fileName.c_str());
-            outString = "00000000    0000    ";
-            outString += fileName.substr(fileName.rfind(PATH_SEPARATOR)+1)+"\n";
-            iSymFile.write(outString.c_str(),outString.length());
+TPlacedEntry SymbolGenerator::GetNextPlacedEntry()
+{
+	TPlacedEntry pe("", false);
+	if(1)
+	{
+		boost::mutex::scoped_lock lock(iMutex);
+		while(!iFinished && iQueueFiles.empty())
+			iCond.wait(lock);
+		if(!iQueueFiles.empty())
+		{
+			pe = iQueueFiles.front();
+			iQueueFiles.pop();
         }
     }
-}
-void SymbolGenerator::ProcessDatafile( const string& fileName ){
-    string line = "\nFrom    "+fileName+"\n\n00000000    0000    "+fileName.substr(fileName.rfind(PATH_SEPARATOR)+1)+"\n";
-    iSymFile.write(line.c_str(),line.length());
+	return pe;
 }
-void SymbolGenerator::ProcessArmv5File( const string& fileName, ifstream& aMap ){
-    aMap.seekg (0, ios::beg);
-    char str[MAX_LINE];
-    string outString;
-    aMap.getline(str,MAX_LINE);
-    boost::cmatch what;
-    boost::regex reg("^ARM Linker");
-    if(!regex_search(str, what, reg)) {
-        printf("\nWarning: expecting %s to be generated by ARM linker\n", fileName.c_str());
-        outString = "00000000    0000    "+fileName.substr(fileName.rfind(PATH_SEPARATOR)+1)+"\n";
-        iSymFile.write(outString.c_str(),outString.length());
-    }
-    reg.assign("Global Symbols");
-    while(aMap.getline(str,MAX_LINE)) {
-        if(regex_search(str, what, reg)) {
-            break;
-        }
+void SymbolGenerator::thrd_func(){
+    	boost::thread_group threads;
+	SymbolWorker worker;
+    	for(int i=0; i < gThreadNum; i++)
+    	{
+    		threads.create_thread(worker);
     }
-
-    reg.assign("^\\s*(.+)\\s*0x(\\S+)\\s+[^\\d]*(\\d+)\\s+(.*)$");
-    string sSym,sTmp,sSection;
-    unsigned int addr,size,baseOffset = 0;
-    map<unsigned int,string> syms;
-    char symString[MAX_LINE];
-    while(aMap.getline(str,MAX_LINE)) {
-        if(regex_search(str, what, reg)) {
-            sSym.assign(what[1].first,what[1].second-what[1].first);
-            sTmp.assign(what[2].first,what[2].second-what[2].first);
-            addr = strtol(sTmp.c_str(), NULL, 16);
-            sTmp.assign(what[3].first,what[3].second-what[3].first);
-            size = strtol(sTmp.c_str(), NULL, 10);
-            sSection.assign(what[4].first,what[4].second-what[4].first);
-            if(sSection.find("(StubCode)") != string::npos)
-                size = 8;
-            if(addr > 0) {
-                memset(symString,0,sizeof(symString));
-                sprintf(symString,"%04x    ",size);
-                outString = symString;
-                outString += sSym+" ";
-                outString += sSection;
-                if(baseOffset == 0) 
-                    baseOffset = addr;
-                unsigned int k = addr - baseOffset;
-                if( (syms.find(k) == syms.end()) || size != 0) 
-                    syms[k] = outString;
+    	threads.join_all();
+        }
+SymbolGenerator::SymbolGenerator() : boost::thread(thrd_func),iFinished(false) {
+    }
+SymbolGenerator::~SymbolGenerator(){
+    if(joinable())
+        join();
+    iSymFile.flush();
+    iSymFile.close();
             }
-            // end of addr>0
-        }
+SymbolWorker::SymbolWorker()
+{
         // end of regex_search
     }
-
-    map<unsigned int,string>::iterator it;
-    for(it = syms.begin(); it != syms.end(); it++) {
-        memset(str,0,sizeof(str));
-        sprintf(str,"%08x",it->first);
-        outString = str;
-        outString += "    ";
-        outString += it->second+"\n";
-        iSymFile.write(outString.c_str(),outString.length());
-    }
-}
-void SymbolGenerator::ProcessGcceOrArm4File( const string& fileName, ifstream& aMap ){
-    aMap.seekg (0, ios_base::beg);
-    char str[MAX_LINE];
-    aMap.getline(str,MAX_LINE);
-    boost::cmatch what;
-    boost::regex reg("^\\.text\\s+");
-    while(aMap.getline(str,MAX_LINE)) {
-        if(regex_search(str, what, reg)) {
-            break;
-        }
-    }
-
-    reg.assign("^\\.text\\s+(\\w+)\\s+\\w+");
-    if(!regex_search(str, what, reg)) {
-        printf("ERROR: Can't get .text section info for \"%s\"\n",fileName.c_str());
+SymbolWorker::~SymbolWorker()
+{
     }
-    else {
-        string sTmp, sLibFile;
-        sTmp.assign(what[1].first,what[1].second-what[1].first);
-        unsigned int imgText = strtol(sTmp.c_str(), NULL, 16);
-
-        reg.assign("^LONG 0x.*", boost::regex::icase);
-        boost::cmatch what1;
-        boost::regex reg1("^\\s(\\.text)?\\s+(0x\\w+)\\s+(0x\\w+)\\s+(.*)$", boost::regex::icase);
-        boost::regex reg2("^\\s+(\\w+)\\s\\s+([a-zA-Z_].+)", boost::regex::icase);
-        boost::regex reg3(".*lib\\(.*d\\d*s_?\\d{5}.o\\)$", boost::regex::icase);
-
-        map<unsigned int,string> syms;
-        unsigned int addr, len, stubhex;
+void SymbolWorker::operator()()
+{
+	SymbolProcessUnit* aSymbolProcessUnit = new CommenSymbolProcessUnit();
+	SymbolGenerator* symbolgenerator = SymbolGenerator::GetInstance();
 
-        while(aMap.getline(str,MAX_LINE)) {
-            if(strlen(str) == 0)
+	while(1)
+	{
+		if(symbolgenerator->HasFinished() && symbolgenerator->IsEmpty())
+		{
+
                 break;
-            else if(regex_search(str, what, reg1)) {
-                sLibFile.assign(what[4].first,what[4].second-what[4].first);
-                if(!regex_search(sLibFile, what1, reg)) {
-                    sTmp.assign(what[2].first,what[2].second-what[2].first);
-                    addr = strtol(sTmp.c_str(), NULL, 16);
-                    sTmp.assign(what[3].first,what[3].second-what[3].first);
-                    len = strtol(sTmp.c_str(), NULL, 16);
-                    syms[addr+len] = "";
-                    if(regex_search(sLibFile, what, reg3)) {
-                        stubhex = addr;
                     }
-                }
-            }
-            else if(regex_search(str, what, reg2)) {
-                sTmp.assign(what[1].first,what[1].second-what[1].first);
-                addr = strtol(sTmp.c_str(), NULL, 16);
-                sTmp.assign(what[2].first,what[2].second-what[2].first);
-                syms[addr] = (addr == stubhex)? ("stub "+sTmp) : sTmp;
-            }
-        }
+
+
+
 
-        map<unsigned int,string>::iterator it = syms.begin();
-        map<unsigned int,string>::iterator itp = it++;
-        string outString;
-        for(; it != syms.end(); itp = it++) {
-            if(itp->second != "") {
-                memset(str,0,sizeof(str));
-                sprintf(str,"%08x    %04x    ",(itp->first-imgText), (it->first-itp->first));
-                outString = str;
-                outString += it->second+"\n";
-                iSymFile.write(outString.c_str(),outString.length());
-            }
-        }
-    }
-}
-int SymbolGenerator::GetSizeFromBinFile( const string& fileName ){
-    TInt ret = 0;
-    ifstream aIf(fileName.c_str(), ios_base::binary);
-    if( !aIf.is_open() ) {
-        printf("Warning: Cannot open file \n");
-    }
-    else {
-        E32ImageFile e32Image;
-        TUint32 aSz;
+		TPlacedEntry pe = symbolgenerator->GetNextPlacedEntry();
 
-        aIf.seekg(0,ios_base::end);
-        aSz = aIf.tellg();
-
-        e32Image.Adjust(aSz);
-        e32Image.iFileSize = aSz;
-
-        aIf.seekg(0,ios_base::beg);
-        aIf >> e32Image;
-        ret = e32Image.iOrigHdr->iCodeSize;
-    }
-    return ret;
-}
-void SymbolGenerator::thrd_func(){
-    SymbolGenerator* me = GetInstance();
-
-    TPlacedEntry pe("",false);
-    while(1) {
-        if(1) {
             //scope the code block with if(1) for lock
-            boost::mutex::scoped_lock lock(me->iMutex);
-            while(me->iQueueFiles.empty())
-                me->iCond.wait(lock);
             /*
             if(me->iQueueFiles.empty()) {
                 boost::this_thread::sleep(boost::posix_time::milliseconds(10));
@@ -257,23 +134,17 @@
             }
             */
 
-            pe = me->iQueueFiles.front();
-            me->iQueueFiles.pop();
-        }
 
         if(pe.iFileName == "")
-            break;
+			continue;
         else if(pe.iExecutable) 
-            me->ProcessExecutable(pe.iFileName);
+			aSymbolProcessUnit->ProcessExecutableFile(pe.iFileName);
         else
-            me->ProcessDatafile(pe.iFileName);
-    }
+			aSymbolProcessUnit->ProcessDataFile(pe.iFileName);
+		symbolgenerator->LockOutput();
+		aSymbolProcessUnit->FlushStdOut(cout);
+		aSymbolProcessUnit->FlushSymbolContent(symbolgenerator->GetOutputFileStream());
+		symbolgenerator->UnlockOutput();
 }
-SymbolGenerator::SymbolGenerator() : boost::thread(thrd_func) {
+	delete aSymbolProcessUnit;
 }
-SymbolGenerator::~SymbolGenerator(){
-    if(joinable())
-        join();
-    iSymFile.flush();
-    iSymFile.close();
-}
--- a/imgtools/romtools/rofsbuild/symbolgenerator.h	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rofsbuild/symbolgenerator.h	Tue Oct 26 11:12:31 2010 +0800
@@ -1,3 +1,20 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
 #ifndef __SYMBOLGENERATOR_H__
 #define __SYMBOLGENERATOR_H__
 #include <queue>
@@ -6,6 +23,7 @@
 using namespace std;
 #include <boost/thread/thread.hpp>
 #include <boost/thread/condition.hpp>
+#include "symbolprocessunit.h"
 
 
 struct TPlacedEntry{
@@ -22,22 +40,33 @@
         static void Release();
         void SetSymbolFileName( const string& fileName );
         void AddFile( const string& fileName, bool isExecutable );
+        bool HasFinished()	{ return iFinished; }
+        void SetFinished();
+        bool IsEmpty() { return iQueueFiles.empty(); }
+        void LockOutput() { iOutputMutex.lock(); }
+        void UnlockOutput() { iOutputMutex.unlock(); }
+        TPlacedEntry GetNextPlacedEntry();
+        ofstream& GetOutputFileStream() { return iSymFile; };
     private:
         SymbolGenerator();
         ~SymbolGenerator();
-        void ProcessExecutable( const string& fileName );
-        void ProcessDatafile( const string& fileName );
-        void ProcessArmv5File( const string& fileName, ifstream& aMap );
-        void ProcessGcceOrArm4File( const string& fileName, ifstream& aMap );
-        int GetSizeFromBinFile( const string& fileName );
         static void thrd_func();
 
         queue<TPlacedEntry> iQueueFiles;
         boost::mutex iMutex;
+        boost::mutex iOutputMutex;
         static boost::mutex iMutexSingleton;
         static SymbolGenerator* iInst;
         boost::condition_variable iCond;
+        bool iFinished;
 
         ofstream iSymFile;
 };
+class SymbolWorker{
+public:
+	SymbolWorker();
+	~SymbolWorker();
+	void operator()();
+private:
+};
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/symbolprocessunit.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include <boost/regex.hpp>
+#include "symbolprocessunit.h"
+#include "e32image.h"
+#define MAX_LINE 65535
+
+#if defined(__LINUX__)
+#define PATH_SEPARATOR '/'
+#else
+#define PATH_SEPARATOR '\\'
+#endif
+
+void CommenSymbolProcessUnit::ProcessExecutableFile(const string& aFile)
+{
+	ResetContentLog();
+	char str[MAX_LINE];
+	string outString;
+	outString = "\nFrom    ";
+	outString += aFile + "\n\n";
+	iSymbolContentLog.push_back(outString);
+	string mapFile2 = aFile+".map";
+	size_t dot = aFile.rfind('.');
+	string mapFile = aFile.substr(0,dot)+".map";
+	ifstream fMap;
+	fMap.open(mapFile2.c_str());
+	if(!fMap.is_open()) {
+		fMap.open(mapFile.c_str());
+	}
+
+	if(!fMap.is_open()) {
+		sprintf(str, "%s\nWarning: Can't open \"%s\" or \"%s\"\n",aFile.c_str(),mapFile2.c_str(),mapFile.c_str());
+		iStdoutLog.push_back(str);
+	    int binSize = GetSizeFromBinFile(aFile);
+	    memset(str,0,sizeof(str));
+	    sprintf(str,"%04x", binSize);
+	    outString = "00000000    ";
+	    outString += str;
+	    outString += "    ";
+	    outString += aFile.substr(aFile.rfind(PATH_SEPARATOR)+1)+"\n";
+	    iSymbolContentLog.push_back(outString);
+	}
+	else {
+		if(!fMap.good()) fMap.clear();
+	    boost::regex regARMV5("ARMV5", boost::regex::icase);
+	    boost::regex regGCCEoARMV4("(GCCE|ARMV4)", boost::regex::icase);
+	    boost::cmatch what;
+	    if(regex_search(aFile, what, regARMV5)) {
+	        ProcessArmv5File(aFile, fMap);
+	    }
+	    else if(regex_search(aFile, what, regGCCEoARMV4)) {
+	        ProcessGcceOrArm4File(aFile, fMap);
+	    }
+	    else {
+	        sprintf(str, "\nWarning: cannot determine linker type used to create %s\n",aFile.c_str());
+	        iStdoutLog.push_back(str);
+	        outString = "00000000    0000    ";
+	        outString += aFile.substr(aFile.rfind(PATH_SEPARATOR)+1)+"\n";
+	        iSymbolContentLog.push_back(outString);
+	        }
+	    }
+}
+void CommenSymbolProcessUnit::ProcessDataFile(const string& aFile)
+{
+	ResetContentLog();
+	string line = "\nFrom    "+aFile+"\n\n00000000    0000    "+aFile.substr(aFile.rfind(PATH_SEPARATOR)+1)+"\n";
+	iSymbolContentLog.push_back(line);
+}
+void CommenSymbolProcessUnit::FlushStdOut(ostream& aOut)
+{
+	for(int i = 0; i < (int) iStdoutLog.size(); i++)
+	{
+		aOut << iStdoutLog[i];
+	}
+}
+void CommenSymbolProcessUnit::FlushSymbolContent(ostream &aOut)
+{
+	for(int i = 0; i < (int) iSymbolContentLog.size(); i++)
+	{
+		aOut << iSymbolContentLog[i];
+	}
+}
+void CommenSymbolProcessUnit::ResetContentLog()
+{
+	iStdoutLog.clear();
+	iSymbolContentLog.clear();
+}
+void CommenSymbolProcessUnit::ProcessArmv5File( const string& fileName, ifstream& aMap ){
+    aMap.seekg (0, ios::beg);
+    char str[MAX_LINE];
+    char outbuffer[MAX_LINE];
+    string outString;
+    aMap.getline(str,MAX_LINE);
+    boost::cmatch what;
+    boost::regex reg("^ARM Linker");
+    if(!regex_search(str, what, reg)) {
+        sprintf(outbuffer, "\nWarning: expecting %s to be generated by ARM linker\n", fileName.c_str());
+        iStdoutLog.push_back(outbuffer);
+        outString = "00000000    0000    "+fileName.substr(fileName.rfind(PATH_SEPARATOR)+1)+"\n";
+        iSymbolContentLog.push_back(outString);
+    }
+    reg.assign("Global Symbols");
+    while(aMap.getline(str,MAX_LINE)) {
+        if(regex_search(str, what, reg)) {
+            break;
+        }
+    }
+
+    reg.assign("^\\s*(.+)\\s*0x(\\S+)\\s+[^\\d]*(\\d+)\\s+(.*)$");
+    string sSym,sTmp,sSection;
+    unsigned int addr,size,baseOffset = 0;
+    map<unsigned int,string> syms;
+    char symString[MAX_LINE];
+    while(aMap.getline(str,MAX_LINE)) {
+        if(regex_search(str, what, reg)) {
+            sSym.assign(what[1].first,what[1].second-what[1].first);
+            sTmp.assign(what[2].first,what[2].second-what[2].first);
+            addr = strtol(sTmp.c_str(), NULL, 16);
+            sTmp.assign(what[3].first,what[3].second-what[3].first);
+            size = strtol(sTmp.c_str(), NULL, 10);
+            sSection.assign(what[4].first,what[4].second-what[4].first);
+            if(sSection.find("(StubCode)") != string::npos)
+                size = 8;
+            if(addr > 0) {
+                memset(symString,0,sizeof(symString));
+                sprintf(symString,"%04x    ",size);
+                outString = symString;
+                outString += sSym+" ";
+                outString += sSection;
+                if(baseOffset == 0)
+                    baseOffset = addr;
+                unsigned int k = addr - baseOffset;
+                if( (syms.find(k) == syms.end()) || size != 0)
+                    syms[k] = outString;
+            }
+            // end of addr>0
+        }
+        // end of regex_search
+    }
+
+    map<unsigned int,string>::iterator it;
+    for(it = syms.begin(); it != syms.end(); it++) {
+        memset(str,0,sizeof(str));
+        sprintf(str,"%08x",it->first);
+        outString = str;
+        outString += "    ";
+        outString += it->second+"\n";
+        iSymbolContentLog.push_back(outString);
+    }
+}
+void CommenSymbolProcessUnit::ProcessGcceOrArm4File( const string& fileName, ifstream& aMap ){
+    aMap.seekg (0, ios_base::beg);
+    char str[MAX_LINE];
+    char outbuffer[MAX_LINE];
+    aMap.getline(str,MAX_LINE);
+    boost::cmatch what;
+    boost::regex reg("^\\.text\\s+");
+    while(aMap.getline(str,MAX_LINE)) {
+        if(regex_search(str, what, reg)) {
+            break;
+        }
+    }
+
+    reg.assign("^\\.text\\s+(\\w+)\\s+\\w+");
+    if(!regex_search(str, what, reg)) {
+        sprintf(outbuffer, "ERROR: Can't get .text section info for \"%s\"\n",fileName.c_str());
+        iStdoutLog.push_back(outbuffer);
+    }
+    else {
+        string sTmp, sLibFile;
+        sTmp.assign(what[1].first,what[1].second-what[1].first);
+        unsigned int imgText = strtol(sTmp.c_str(), NULL, 16);
+
+        reg.assign("^LONG 0x.*", boost::regex::icase);
+        boost::cmatch what1;
+        boost::regex reg1("^\\s(\\.text)?\\s+(0x\\w+)\\s+(0x\\w+)\\s+(.*)$", boost::regex::icase);
+        boost::regex reg2("^\\s+(\\w+)\\s\\s+([a-zA-Z_].+)", boost::regex::icase);
+        boost::regex reg3(".*lib\\(.*d\\d*s_?\\d{5}.o\\)$", boost::regex::icase);
+
+        map<unsigned int,string> syms;
+        unsigned int addr, len, stubhex;
+
+        while(aMap.getline(str,MAX_LINE)) {
+            if(strlen(str) == 0)
+                break;
+            else if(regex_search(str, what, reg1)) {
+                sLibFile.assign(what[4].first,what[4].second-what[4].first);
+                if(!regex_search(sLibFile, what1, reg)) {
+                    sTmp.assign(what[2].first,what[2].second-what[2].first);
+                    addr = strtol(sTmp.c_str(), NULL, 16);
+                    sTmp.assign(what[3].first,what[3].second-what[3].first);
+                    len = strtol(sTmp.c_str(), NULL, 16);
+                    syms[addr+len] = "";
+                    if(regex_search(sLibFile, what, reg3)) {
+                        stubhex = addr;
+                    }
+                }
+            }
+            else if(regex_search(str, what, reg2)) {
+                sTmp.assign(what[1].first,what[1].second-what[1].first);
+                addr = strtol(sTmp.c_str(), NULL, 16);
+                sTmp.assign(what[2].first,what[2].second-what[2].first);
+                syms[addr] = (addr == stubhex)? ("stub "+sTmp) : sTmp;
+            }
+        }
+
+        map<unsigned int,string>::iterator it = syms.begin();
+        map<unsigned int,string>::iterator itp = it++;
+        string outString;
+        for(; it != syms.end(); itp = it++) {
+            if(itp->second != "") {
+                memset(str,0,sizeof(str));
+                sprintf(str,"%08x    %04x    ",(itp->first-imgText), (it->first-itp->first));
+                outString = str;
+                outString += it->second+"\n";
+                iSymbolContentLog.push_back(outString);
+            }
+        }
+    }
+}
+int CommenSymbolProcessUnit::GetSizeFromBinFile( const string& fileName ){
+    TInt ret = 0;
+    char outbuffer[MAX_LINE];
+    ifstream aIf(fileName.c_str(), ios_base::binary);
+    if( !aIf.is_open() ) {
+        printf(outbuffer, "Warning: Cannot open file \n");
+        iStdoutLog.push_back(outbuffer);
+    }
+    else {
+        E32ImageFile e32Image;
+        TUint32 aSz;
+
+        aIf.seekg(0,ios_base::end);
+        aSz = aIf.tellg();
+
+        e32Image.Adjust(aSz);
+        e32Image.iFileSize = aSz;
+
+        aIf.seekg(0,ios_base::beg);
+        aIf >> e32Image;
+        ret = e32Image.iOrigHdr->iCodeSize;
+    }
+    return ret;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imgtools/romtools/rofsbuild/symbolprocessunit.h	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __SYMBOLPROCESSUNIT_H__
+#define __SYMBOLPROCESSUNIT_H__
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+using namespace std;
+
+
+typedef vector<string> stringlist;
+
+class SymbolProcessUnit
+{
+public:
+	virtual void ProcessExecutableFile(const string& aFile) = 0;
+	virtual void ProcessDataFile(const string& afile) = 0;
+	virtual void FlushStdOut(ostream& aOut) = 0;
+	virtual void FlushSymbolContent(ostream &aOut) = 0;
+	virtual void ResetContentLog() = 0;
+	virtual ~SymbolProcessUnit() {}
+};
+
+class CommenSymbolProcessUnit : public SymbolProcessUnit
+{
+public:
+	virtual void ProcessExecutableFile(const string& aFile);
+	virtual void ProcessDataFile(const string& afile);
+	virtual void FlushStdOut(ostream& aOut);
+	virtual void FlushSymbolContent(ostream &aOut);
+	virtual void ResetContentLog();
+private:
+	void ProcessArmv5File( const string& fileName, ifstream& aMap );
+	void ProcessGcceOrArm4File( const string& fileName, ifstream& aMap );
+	int GetSizeFromBinFile( const string& fileName );
+private:
+	stringlist iStdoutLog;
+	stringlist iSymbolContentLog;
+};
+#endif
--- a/imgtools/romtools/rombuild/rombuild.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rombuild/rombuild.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -33,7 +33,7 @@
 
 static const TInt RombuildMajorVersion=2;
 static const TInt RombuildMinorVersion=18;
-static const TInt RombuildPatchVersion=3;
+static const TInt RombuildPatchVersion=4;
 static TBool SizeSummary=EFalse;
 static TPrintType SizeWhere=EAlways;
 static string compareROMName = "";
--- a/imgtools/romtools/rombuild/symbolgenerator.cpp	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rombuild/symbolgenerator.cpp	Tue Oct 26 11:12:31 2010 +0800
@@ -1,3 +1,20 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
 #include <e32rom.h>
 #include <algorithm>
 #include "symbolgenerator.h"
--- a/imgtools/romtools/rombuild/symbolgenerator.h	Mon Oct 25 11:53:21 2010 +0800
+++ b/imgtools/romtools/rombuild/symbolgenerator.h	Tue Oct 26 11:12:31 2010 +0800
@@ -1,3 +1,20 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
 #ifndef __SYMBOLSCREATER_H__
 #define __SYMBOLSCREATER_H__
 #include <queue>
--- a/sbsv1/abld/group/bld.inf	Mon Oct 25 11:53:21 2010 +0800
+++ b/sbsv1/abld/group/bld.inf	Tue Oct 26 11:12:31 2010 +0800
@@ -65,6 +65,7 @@
 ../platform/gccev6.bsf        /epoc32/tools/gccev6.bsf 
 ../platform/armv6_abiv1.bsf        /epoc32/tools/armv6_abiv1.bsf 
 ../platform/armv7.bsf        /epoc32/tools/armv7.bsf  
+../platform/armv7smp.bsf        /epoc32/tools/armv7smp.bsf  
 
 #ifdef SBSV2
 #ifndef TOOLS2_LINUX
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv1/abld/platform/armv7smp.bsf	Tue Oct 26 11:12:31 2010 +0800
@@ -0,0 +1,27 @@
+#<bsf>#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# This BSF file is to support building for ARMV6 architecture. The options specified here are same as for ARMV5 except 
+# the --cpu 6 option in INVARIANT_OPTIONS. This specifies to compiler to compile for generic ARMV6. If any other 
+# specific options are required such as --cpu ARM1136J-S, etc, then it can be done via a different BSF file
+# NOTE: The options specified here for the compiler disable the unaligned memory access.
+
+CUSTOMIZES ARMV5
+
+INVARIANT_OPTIONS --cpu=7-A $(ENUM_OPTION) $(OWN_LIBRARY_OPTION) $(FPMODE_OPTION) $(EXPORT_VTBL_OPTION) $(VFE_OPTION) $(AAPCS_OPTION) $(NO_UNALIGNED_ACCESS)
+
+# On ARMV7 we use DWARF 3 instead of DWARF 2.
+DEBUG_FORMAT $(DEBUG_FORMAT_DWARF3)
+
+SMP