[GCCE] We need a way for the HAL config extension to parameterise the HAL config file (.hcf) that will be used, depending upon
the toolchain we are building with. E.g. if we are building BeagleBoard with RVCT we can configure hardware floating point
because we have ARM's vfp math libraries; if we are building it with GCC, we lack this library support.
// Copyright (c) 2004-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:
// Error Handler Operations for elf2e32 tool
// @internalComponent
// @released
//
//
#ifdef _MSC_VER
#pragma warning(disable: 4514) // unreferenced inline function has been removed
#pragma warning(disable: 4702) // unreachable code
#pragma warning(disable: 4710) // function not inlined
#endif
#include "errorhandler.h"
#include "messagehandler.h"
#include <iostream>
#include <stdio.h>
using std::cerr;
using std::endl;
char *errMssgPrefix="elf2e32 : Error: E";
char *colonSpace=": ";
/**
ErrorHandler constructor for doing common thing required for derived class functions.
@param aMessageIndex - Message Index
@internalComponent
@released
*/
ErrorHandler::ErrorHandler(int aMessageIndex)
{
char mssgNo[MAXMSSGNOLENGTH];
int mssgIndex;
iMessageIndex=aMessageIndex;
iMessage=errMssgPrefix;
mssgIndex=BASEMSSGNO+iMessageIndex;
sprintf(mssgNo,"%d",mssgIndex);
iMessage+=mssgNo;
iMessage+=colonSpace;
};
/**
ErrorHandler destructor.
@internalComponent
@released
*/
ErrorHandler::~ErrorHandler()
{
MessageHandler::CleanUp();
}
/**
FileError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@param aName - File name
@internalComponent
@released
*/
FileError:: FileError(int aMessageIndex, char * aName) : ErrorHandler(aMessageIndex), iName(aName)
{
}
/**
FileError destructor.
@internalComponent
@released
*/
FileError:: ~FileError()
{
}
/**
Function to report File Errors.
@internalComponent
@released
*/
void FileError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete[] tempMssg;
}
}
/**
ELFFormatError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@param aName - ELF File name
@internalComponent
@released
*/
ELFFormatError::ELFFormatError(int aMessageIndex, char * aName) : ErrorHandler(aMessageIndex), iName(aName)
{
}
/**
ELFFormatError destructor.
@internalComponent
@released
*/
ELFFormatError::~ELFFormatError()
{
}
/**
Function to report ELF Format Errors.
@internalComponent
@released
*/
void ELFFormatError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
DEFFileError constructor for initializing message index, argument name and line number and token.
@param aMessageIndex - Message Index
@param aName - DEF File name
@param aLineNo - DEF File line number
@param aToken - Token in export entry
@internalComponent
@released
*/
DEFFileError::DEFFileError(int aMessageIndex, char * aName, int aLineNo,char * aToken) : ErrorHandler(aMessageIndex), iName(aName), iLineNo(aLineNo)
{
iToken=aToken;
if(iToken[iToken.size()-1]=='\r')
iToken[iToken.size()-1]='\0';
}
/**
DEFFileError destructor.
@internalComponent
@released
*/
DEFFileError::~DEFFileError()
{
}
/**
Function to report DEF File Errors.
@internalComponent
@released
*/
void DEFFileError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+5+strlen(iName.c_str())+strlen(iToken.c_str())];
sprintf(tempMssg,errMessage,iName.c_str(),iLineNo,iToken.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
ParameterParserError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@Param aName - Argument name
@internalComponent
@released
*/
ParameterParserError::ParameterParserError(int aMessageIndex, char * aName) : ErrorHandler(aMessageIndex), iName(aName)
{
}
/**
ParameterParserError destructor.
@internalComponent
@released
*/
ParameterParserError::~ParameterParserError()
{
}
/**
Function to report Parameter Parser Error.
@internalComponent
@released
*/
void ParameterParserError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
InvalidArgumentError constructor for initializing message index, argument value and option.
@param aMessageIndex - Message Index
@param aValue - Argument value
@param aOption - Argument option
@internalComponent
@released
*/
InvalidArgumentError::InvalidArgumentError(int aMessageIndex, const char * aValue, char * aOption) : ErrorHandler(aMessageIndex), iValue(aValue), iOption(aOption)
{
}
/**
InvalidArgumentError destructor.
@internalComponent
@released
*/
InvalidArgumentError::~InvalidArgumentError()
{
}
/**
Function to report Invalid Argument Error.
@internalComponent
@released
*/
void InvalidArgumentError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iValue.c_str())+strlen(iOption.c_str())];
sprintf(tempMssg,errMessage,iValue.c_str(),iOption.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
E32ImageCompressionError constructor for initializing message index.
@param aMessageIndex - Message Index
@internalComponent
@released
*/
E32ImageCompressionError::E32ImageCompressionError(int aMessageIndex) : ErrorHandler(aMessageIndex)
{
}
/**
E32ImageCompressionError destructor.
@internalComponent
@released
*/
E32ImageCompressionError::~E32ImageCompressionError()
{
}
/**
Function to report E32 Image Compression Error.
@internalComponent
@released
*/
void E32ImageCompressionError::Report()
{
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
iMessage+=errMessage;
MessageHandler::GetInstance()->Output(iMessage.c_str());
}
}
/**
CapabilityError constructor for initializing message index.
@param aMessageIndex - Message Index
@internalComponent
@released
*/
CapabilityError::CapabilityError(int aMessageIndex) : ErrorHandler(aMessageIndex)
{
}
/**
CapabilityError destructor.
@internalComponent
@released
*/
CapabilityError::~CapabilityError()
{
}
/**
Function to report Capability Error.
@internalComponent
@released
*/
void CapabilityError::Report()
{
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
iMessage+=errMessage;
MessageHandler::GetInstance()->Output(iMessage.c_str());
}
}
/**
UnrecognisedCapabilityError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@param aName - Capability
@internalComponent
@released
*/
UnrecognisedCapabilityError::UnrecognisedCapabilityError(int aMessageIndex, char * aName) : CapabilityError(aMessageIndex), iName(aName)
{
}
/**
UnrecognisedCapabilityError destructor.
@internalComponent
@released
*/
UnrecognisedCapabilityError::~UnrecognisedCapabilityError()
{
}
/**
Function to report Unrecognised Capability Error.
@internalComponent
@released
*/
void UnrecognisedCapabilityError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
ELFFileError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@param aName - ELF File name
@internalComponent
@released
*/
ELFFileError::ELFFileError(int aMessageIndex, const char * aName) : ErrorHandler(aMessageIndex), iName(aName)
{
}
/**
ELFFileError destructor.
@internalComponent
@released
*/
ELFFileError::~ELFFileError()
{
}
/**
Function to report ELF File Error.
@internalComponent
@released
*/
void ELFFileError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
UndefinedSymbolError constructor for initializing message index, argument name and symbol name.
@param aMessageIndex - Message Index
@param aName - File Name
@param aSymbolName - Symbol Name
@internalComponent
@released
*/
UndefinedSymbolError::UndefinedSymbolError(int aMessageIndex, char * aName, char *aSymbolName) : ELFFileError(aMessageIndex,aName), iSymbolName(aSymbolName)
{
}
/**
UndefinedSymbolError destructor.
@internalComponent
@released
*/
UndefinedSymbolError::~UndefinedSymbolError()
{
}
/**
Function to report Undefined Symbol Error.
@internalComponent
@released
*/
void UndefinedSymbolError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iSymbolName.c_str())+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iSymbolName.c_str(),iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
SymbolMissingFromElfError constructor for initializing message index, symbol name list and argument name.
@param aMessageIndex - Message Index
@param aSymbolList - List of symbols
@param aName - File Name
@internalComponent
@released
*/
SymbolMissingFromElfError::SymbolMissingFromElfError(int aMessageIndex, list<String> &aSymbolList, const char * aName) : ELFFileError(aMessageIndex,aName)
{
std::list<String>::iterator aItr = aSymbolList.begin();
std::list<String>::iterator last = aSymbolList.end();
while(aItr != last)
{
iSymbolNames+=*aItr;
aItr++;
if(aItr != last)
{
iSymbolNames+=",";
}
}
}
/**
SymbolMissingFromElfError destructor.
@internalComponent
@released
*/
SymbolMissingFromElfError::~SymbolMissingFromElfError()
{
}
/**
Function to report Symbol Missing From Elf Error.
@internalComponent
@released
*/
void SymbolMissingFromElfError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iSymbolNames.c_str())+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iSymbolNames.c_str(),iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
MemoryAllocationError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@param aName - File Name
@internalComponent
@released
*/
MemoryAllocationError::MemoryAllocationError(int aMessageIndex, char * aName) : ErrorHandler(aMessageIndex), iName(aName)
{
}
/**
MemoryAllocationError destructor.
@internalComponent
@released
*/
MemoryAllocationError::~MemoryAllocationError()
{
}
/**
Function to report Memory Allocation Error.
@internalComponent
@released
*/
void MemoryAllocationError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
E32ImageError constructor for initializing message index.
@param aMessageIndex - Message Index
@internalComponent
@released
*/
E32ImageError::E32ImageError(int aMessageIndex) : ErrorHandler(aMessageIndex)
{
}
/**
E32ImageError destructor.
@internalComponent
@released
*/
E32ImageError::~E32ImageError()
{
}
/**
Function to report E32 Image Error.
@internalComponent
@released
*/
void E32ImageError::Report()
{
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
iMessage+=errMessage;
MessageHandler::GetInstance()->Output(iMessage.c_str());
}
}
/**
InvalidInvocationError constructor for initializing message index.
@param aMessageIndex - Message Index
@internalComponent
@released
*/
InvalidInvocationError::InvalidInvocationError(int aMessageIndex) : ErrorHandler(aMessageIndex)
{
}
/**
InvalidInvocationError destructor.
@internalComponent
@released
*/
InvalidInvocationError::~InvalidInvocationError()
{
}
/**
Function to report Invalid Invocation Error.
@internalComponent
@released
*/
void InvalidInvocationError::Report()
{
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
iMessage+=errMessage;
MessageHandler::GetInstance()->Output(iMessage.c_str());
}
}
/**
TargetTypeError constructor for initializing message index.
@param aMessageIndex - Message Index
@internalComponent
@released
*/
TargetTypeError::TargetTypeError(int aMessageIndex) : ErrorHandler(aMessageIndex)
{
}
/**
TargetTypeError destructor.
@internalComponent
@released
*/
TargetTypeError::~TargetTypeError()
{
}
/**
Function to report Target Type Error.
@internalComponent
@released
*/
void TargetTypeError::Report()
{
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
iMessage+=errMessage;
MessageHandler::GetInstance()->Output(iMessage.c_str());
}
}
/**
UnsupportedTargetTypeError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@param aName - Target type name
@internalComponent
@released
*/
UnsupportedTargetTypeError::UnsupportedTargetTypeError(int aMessageIndex, char * aName) : TargetTypeError(aMessageIndex), iName(aName)
{
}
/**
UnsupportedTargetTypeError destructor.
@internalComponent
@released
*/
UnsupportedTargetTypeError::~UnsupportedTargetTypeError()
{
}
/**
Function to report Unsupported Target Type Error.
@internalComponent
@released
*/
void UnsupportedTargetTypeError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
MessageError constructor for initializing message index and index value.
@param aMessageIndex - Message Index
@param aIndexValue - Value of Index
@internalComponent
@released
*/
MessageError::MessageError(int aMessageIndex, int aIndexValue) : ErrorHandler(aMessageIndex), iIndexValue(aIndexValue)
{
}
/**
MessageError destructor.
@internalComponent
@released
*/
MessageError::~MessageError()
{
}
/**
Function to report Message Errors.
@internalComponent
@released
*/
void MessageError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+5];
sprintf(tempMssg,errMessage,iIndexValue);
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
NoMessageFileError constructor for initializing message index.
@param aMessageIndex - Message Index
@internalComponent
@released
*/
NoMessageFileError::NoMessageFileError(int aMessageIndex) : ErrorHandler(aMessageIndex)
{
}
/**
NoMessageFileError destructor.
@internalComponent
@released
*/
NoMessageFileError::~NoMessageFileError()
{
}
/**
Function to report No Message File Error.
@internalComponent
@released
*/
void NoMessageFileError::Report()
{
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
iMessage+=errMessage;
MessageHandler::GetInstance()->Output(iMessage.c_str());
}
}
/**
SysDefMismatchError constructor for initializing message index, symbol name list and argument name.
@param aMessageIndex - Message Index
@param aSymbolList - list of symbols
@param aName - sysdef
@internalComponent
@released
*/
SysDefMismatchError::SysDefMismatchError(int aMessageIndex, list<String> &aSymbolList, const char * aName) : ErrorHandler(aMessageIndex), iName(aName)
{
std::list<String>::iterator aItr = aSymbolList.begin();
std::list<String>::iterator last = aSymbolList.end();
while(aItr != last)
{
iSymbolNames+=*aItr;
aItr++;
if(aItr != last)
{
iSymbolNames+=",";
}
}
}
/**
SysDefMismatchError destructor.
@internalComponent
@released
*/
SysDefMismatchError::~SysDefMismatchError()
{
}
/**
Function to report SysDef Mismatch Error.
@internalComponent
@released
*/
void SysDefMismatchError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iSymbolNames.c_str())+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iSymbolNames.c_str(),iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
InvalidE32ImageError constructor for initializing message index and argument name.
@param aMessageIndex - Message Index
@param aName - E32Image File name
@internalComponent
@released
*/
InvalidE32ImageError::InvalidE32ImageError(int aMessageIndex, char * aName) : ErrorHandler(aMessageIndex), iName(aName)
{
}
/**
InvalidE32ImageError destructor.
@internalComponent
@released
*/
InvalidE32ImageError::~InvalidE32ImageError()
{
}
/**
Function to report Invalid E32 Image Error.
@internalComponent
@released
*/
void InvalidE32ImageError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}
/**
ImportRelocationError constructor for initializing message index, argument name and symbol name.
@param aMessageIndex - Message Index
@param aName - File Name
@param aSymbolName - Symbol Name
@internalComponent
@released
*/
ImportRelocationError::ImportRelocationError(int aMessageIndex, char * aName, char *aSymbolName) : ELFFileError(aMessageIndex,aName), iSymbolName(aSymbolName)
{
}
/**
ImportRelocationError destructor.
@internalComponent
@released
*/
ImportRelocationError::~ImportRelocationError()
{
}
/**
Function to report Import Relocations references to Data Segment Error
@internalComponent
@released
*/
void ImportRelocationError::Report()
{
char *tempMssg;
char *errMessage;
errMessage=MessageHandler::GetInstance()->GetMessageString(iMessageIndex);
if(errMessage)
{
tempMssg = new char[strlen(errMessage)+strlen(iSymbolName.c_str())+strlen(iName.c_str())];
sprintf(tempMssg,errMessage,iSymbolName.c_str(),iName.c_str());
iMessage+=tempMssg;
MessageHandler::GetInstance()->Output(iMessage.c_str());
delete tempMssg;
}
}