--- a/analyzetool/commandlineengine/src/CATParseBinaryFile.cpp Wed Sep 15 13:53:27 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,734 +0,0 @@
-/*
-* Copyright (c) 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: Definitions for the class CATParseTraceFile.
-*
-*/
-
-
-#include "../inc/ATCommonDefines.h"
-#include "../inc/CATParseBinaryFile.h"
-#include "../inc/catdatasaver.h"
-#include "../inc/CATDatParser.h"
-#include "../inc/CATProcessData.h"
-
-#include <time.h>
-
-
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::CATParseTraceFile
-// Constructor.
-// -----------------------------------------------------------------------------
-CATParseBinaryFile::CATParseBinaryFile()
-{
- LOG_FUNC_ENTRY("CATParseTraceFile::CATParseTraceFile");
- m_DataSaver.SetPrintFlag( false );
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::StartParse
-// Main function to start trace parsing.
-// -----------------------------------------------------------------------------
-bool CATParseBinaryFile::StartParse( const char* pFileName, const char* pOutputFileName )
-{
- LOG_FUNC_ENTRY("CATParseTraceFile::StartParse");
-
- // Return value, will be changed to true if process start found.
- bool bRet = false;
-
- // Check pointers
- if ( pFileName == NULL )
- return bRet;
-
-
- if ( ! FileExists( pFileName ) )
- {
- cout << AT_MSG << "Error, input file \""
- << pFileName
- << "\" does not exist." << endl;
- return bRet;
- }
-
- // Open input and output file
- ifstream in( pFileName, ios::binary );
- ofstream sDataToParse( pOutputFileName );
-
- // Check file opened ok
- if ( !in.good() )
- return false;
-
- // Get stream size
- size_t streamPos = in.tellg();
- in.seekg( 0, ios::end);
- size_t streamEnd = in.tellg();
- in.seekg( 0, ios::beg );
-
- //Origianl characters (not filtered).
-
- unsigned char cDataFromFile[MAX_LINE_LENGTH];
-
- bool bProcessEndReached = false;
- bool bError = false;
-
- char messageType = 0;
- unsigned __int64 messageTime = 0;
-
- unsigned long iProcessId(0);
- int iAddressCount(0);
- string sTemp;
-
- //first parse version info
- GetString( cDataFromFile, in, streamPos, streamEnd );
- //todo check if version is correct
-
- while( !bError && !bProcessEndReached )
- {
- // get time
- if( !GetNum64( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- messageTime = StringToNum64( cDataFromFile );
-
- // get message type
- if( !GetNum8( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- messageType = (int)cDataFromFile[0];
-
- switch (messageType)
- {
- case EProcessStart:
- {
- //temp string to store data until we get to processID
- sTemp.clear();
-
- //PCS MemoryLeaker.exe[edf5a8b2]0001 17b 48939b0f5c04f 1 3 1.10.0 1.7.5
- sTemp.append( LABEL_PROCESS_START );
- sTemp.append( " " );
-
- // get process name
- if( !GetString( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
-
- sTemp.append( (char *)cDataFromFile );
- sTemp.append( " " );
-
- //get process id
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- iProcessId = StringToNum32(cDataFromFile);
-
- // write stored data
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << std::hex << iProcessId;
- sDataToParse << " ";
- sDataToParse << sTemp;
- sDataToParse << std::hex << iProcessId;
- sDataToParse << " ";
-
- //write time
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
-
- //get udeb/urel
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::dec << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- //add trace version - TODO check
- sDataToParse << std::dec << 3;
- sDataToParse << " ";
-
- // get atool version
- if( !GetString( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << (char *)cDataFromFile;
- sDataToParse << " ";
-
- // get api version
- if( !GetString( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << (char *)cDataFromFile;
- sDataToParse << "\n";
-
- //process start found
- bRet = true;
-
- }
- break;
-
- case EProcessEnd:
- {
- sDataToParse << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- //PCE
- sDataToParse << LABEL_PROCESS_END ;
- sDataToParse << "\n";
- bProcessEndReached = true;
- }
- break;
-
- case EDllLoad:
- {
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- //DLL AToolMemoryLeakerDll3.dll 3ff80000 3ff92000
- sDataToParse << LABEL_DLL_LOAD ;
- sDataToParse << " ";
-
- // get dll name
- if( !GetString( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << (char *)cDataFromFile;
- sDataToParse << " ";
-
- // get start address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get end address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << "\n";
- }
- break;
-
- case EDllUnload:
- {
- sDataToParse << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- //DLU AToolMemoryLeakerDll3.dll 3ff80000 3ff92000
- sDataToParse << LABEL_DLL_UNLOAD ;
- sDataToParse << " ";
-
- // get dll name
- if( !GetString( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << (char *)cDataFromFile;
- sDataToParse << " ";
-
- // get start address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get end address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << "\n";
- }
- break;
-
- case EAllocH:
- {
- sDataToParse << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- //ALH 5a7a6734 5c 17c 11 6003ded4 60010df2 40001bff 40001c39 ...
- // no fragments in log file
- sDataToParse << ALLOCH_ID ;
- sDataToParse << " ";
-
- // get mam address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get size of allocation
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get thread id
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get address count
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- int iAddressCount = StringToNum32(cDataFromFile);
- sDataToParse << std::hex << iAddressCount;
-
- // get callstack
- for(int i=0; i<iAddressCount; i++)
- {
- sDataToParse << " ";
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- }
- sDataToParse << "\n";
- }
- break;
-
- case EFreeH:
- {
- sDataToParse << std::hex <<messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- //FRH 5a7a679c 17c 0 (6003ded4 60010df2 40001bff 40001c39 ...)
- // no fragments in log file
- sDataToParse << FREEH_ID ;
- sDataToParse << " ";
-
- // get mem address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get thread id
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get address count
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- iAddressCount = StringToNum32(cDataFromFile);
- sDataToParse << std::hex << iAddressCount;
-
- // get callstack
- for(int i=0; i<iAddressCount; i++)
- {
- sDataToParse << " ";
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- }
- sDataToParse << "\n";
-
- break;
-
- case EReallocH:
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- // RAH 0 5a7a6f30 30 17c 17 6003e02b 60010ef8 600083e5 ...
- // no fragments in log file
- sDataToParse << REALLOCH_ID ;
- sDataToParse << " ";
-
- // get freed mem address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get allocated mem address
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get size of allocation
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get thread id
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << " ";
-
- // get address count
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- iAddressCount = StringToNum32(cDataFromFile);
- sDataToParse << std::hex << iAddressCount;
-
- // get callstack
- for(int i=0; i<iAddressCount; i++)
- {
- sDataToParse << " ";
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- }
- sDataToParse << "\n";
- }
- break;
-
- case EHandleLeak:
- {
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- //HDL handleLeakCount
- sDataToParse << LABEL_HANDLE_LEAK ;
- sDataToParse << " ";
-
- //get handle leak count
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << "\n";
- }
- break;
-
- case EThreadStart:
- {
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- // TDS 17c
- sDataToParse << LABEL_THREAD_START;
- sDataToParse << " ";
-
- // get thread ID
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << "\n";
- }
- break;
-
- case EThreadEnd:
- {
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
- sDataToParse << iProcessId;
- sDataToParse << " ";
- // TDE 17c
- sDataToParse << LABEL_THREAD_END;
- sDataToParse << " ";
-
- // get thread ID
- if( !GetNum32( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << std::hex << StringToNum32(cDataFromFile);
- sDataToParse << "\n";
- }
- break;
-
- case EDeviceInfo:
- {
- // DEVINFO swVersion romChecksum //both are descriptors
- sDataToParse << std::hex << messageTime;
- sDataToParse << " ";
- sDataToParse << MAIN_ID;
- sDataToParse << " ";
-
- sDataToParse << LABEL_DEVICE_INFO;
- sDataToParse << " ";
-
- // get swVersion
- if( !GetString( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
- sDataToParse << (char *)cDataFromFile;
- sDataToParse << " ";
-
- // todo check
- // get romChecksum
- if( !GetString( cDataFromFile, in, streamPos, streamEnd ) )
- {
- bError = true;
- break;
- }
-
- sDataToParse << (char *)cDataFromFile;
- sDataToParse << "\n";
- }
- break;
-
- case EError:
- //currently not used
- break;
- case ETestStart:
- case ETestEnd:
- // currently can not occure in bin log file, this is added from carbide in traces
- break;
- default:
- bError = true;
- break;
- }
- }
-
- // Close file.
- in.close();
-
- sDataToParse.close();
- return !bError;
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::GetDataSaver
-// Gets data saver object.
-// -----------------------------------------------------------------------------
-CATDataSaver* CATParseBinaryFile::GetDataSaver(void)
-{
- LOG_LOW_FUNC_ENTRY("CATParseTraceFile::GetDataSaver");
- return &m_DataSaver;
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::StringToNum64
-// Gets 64bit number from input string
-// -----------------------------------------------------------------------------
-unsigned __int64 CATParseBinaryFile::StringToNum64( unsigned char* cVal )
-{
- unsigned __int64 iRetVal(0);
-
- for(int i=7; i>=0; i--)
- iRetVal = ( iRetVal << 8 ) + cVal[i];
-
- return iRetVal;
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::StringToNum32
-// Gets 32bit number from input string
-// -----------------------------------------------------------------------------
-unsigned long CATParseBinaryFile::StringToNum32( unsigned char* cVal )
-{
- unsigned long iRetVal(0);
-
- for(int i=4; i>=0; i--)
- iRetVal = ( iRetVal << 8 ) + cVal[i];
-
- return iRetVal;
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::GetString
-// Get next string from file
-// -----------------------------------------------------------------------------
-bool CATParseBinaryFile::GetString( unsigned char* pData, ifstream &pIn, size_t &pStreamPos, size_t pStreamEnd )
-{
- int numOfRead = 1;
- if(pStreamPos + numOfRead <= pStreamEnd)
- {
- pIn.read((char*)pData, numOfRead);
- pStreamPos = pIn.tellg();
- }
- else
- {
- return false;
- }
-
- numOfRead = (int)pData[0] >> 2;
- if(pStreamPos + numOfRead <= pStreamEnd)
- {
- pIn.read((char*)pData, numOfRead);
- pStreamPos = pIn.tellg();
- pData[numOfRead] = 0;
- }
- else
- {
- return false;
- }
-
- return true;
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::GetNum8
-// Get next 8bit number from file
-// -----------------------------------------------------------------------------
-bool CATParseBinaryFile::GetNum8( unsigned char* pData, ifstream &pIn, size_t &pStreamPos, size_t pStreamEnd )
-{
- int numOfRead = 1;
- if(pStreamPos + numOfRead <= pStreamEnd)
- {
- pIn.read((char*)pData, numOfRead);
- pStreamPos = pIn.tellg();
- }
- else
- {
- return false;
- }
-
- return true;
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::GetNum32
-// Get next 32bit number from file
-// -----------------------------------------------------------------------------
-bool CATParseBinaryFile::GetNum32( unsigned char* pData, ifstream &pIn, size_t &pStreamPos, size_t pStreamEnd )
-{
- int numOfRead = 4;
- if(pStreamPos + numOfRead <= pStreamEnd)
- {
- pIn.read((char*)pData, numOfRead);
- pStreamPos = pIn.tellg();
- }
- else
- {
- return false;
- }
-
- return true;
-}
-
-// -----------------------------------------------------------------------------
-// CATParseBinaryFile::GetNum64
-// Get next 64bit number from file
-// -----------------------------------------------------------------------------
-bool CATParseBinaryFile::GetNum64( unsigned char* pData, ifstream &pIn, size_t &pStreamPos, size_t pStreamEnd )
-{
- int numOfRead = 8;
- if(pStreamPos + numOfRead <= pStreamEnd)
- {
- pIn.read((char*)pData, numOfRead);
- pStreamPos = pIn.tellg();
- }
- else
- {
- return false;
- }
-
- return true;
-}
-
-//EOF