[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:
// Implementation of the Class Symbol for the elf2e32 tool
// @internalComponent
// @released
//
//
#include "pl_symbol.h"
/**
This constructor sets the symbol members.
@internalComponent
@released
*/
Symbol::Symbol(char* aName, SymbolType aCodeDataType, char* aExportName, PLUINT32 aOrd, \
char* aComment , bool aR3Unused, bool aAbsent, PLUINT32 aSz) :\
iSymbolName(aName), iExportName(aExportName),iSymbolType(aCodeDataType),\
iOrdinalNumber(aOrd),iComment(aComment),iAbsent(aAbsent), iR3Unused(aR3Unused), \
iSize (aSz)
{
}
/**
This constructor sets the symbol members.
@internalComponent
@released
*/
Symbol::Symbol(Symbol& aSymbol, SymbolType aCodeDataType, bool aAbsent)
: iExportName(NULL), \
iSymbolType(aCodeDataType),iComment(NULL), iR3Unused(false), iAbsent(aAbsent)
{
iSymbolName = new char[strlen(aSymbol.SymbolName()) + 1];
strcpy(iSymbolName, aSymbol.SymbolName());
iOrdinalNumber = aSymbol.OrdNum();
}
/**
This copy constructor copies the symbol members from the input symbol.
@param aSymbol - The symbol from which the members are to be copied.
@internalComponent
@released
*/
Symbol::Symbol(Symbol& aSymbol)
{
memcpy(this, &aSymbol, sizeof(aSymbol));
iSymbolName = new char[strlen(aSymbol.SymbolName()) + 1];
strcpy(iSymbolName, aSymbol.SymbolName());
if(aSymbol.Comment())
{
iComment = new char[strlen(aSymbol.Comment()) + 1];
strcpy(iComment, aSymbol.Comment());
}
if(aSymbol.ExportName())
{
iExportName = new char[strlen(aSymbol.ExportName()) + 1];
strcpy(iExportName, aSymbol.ExportName());
}
}
/**
This constructor sets the symbol members.
@internalComponent
@released
*/
Symbol::Symbol(int symbolStatus,char *name,char *exportName,int ordinalNo,bool r3unused,bool absent,int symbolType,char *comment, PLUINT32 aSz)\
:iSize (aSz)
{
if(symbolStatus==0)
{
iSymbolStatus=Matching;
}
else if(symbolStatus==1)
{
iSymbolStatus=Missing;
}
else
{
iSymbolStatus=New;
}
iSymbolName=name;
iExportName=exportName;
iOrdinalNumber=ordinalNo;
iR3Unused=r3unused;
iAbsent=absent;
if(symbolType==0)
{
iSymbolType=SymbolTypeCode;
}
else if(symbolType==1)
{
iSymbolType=SymbolTypeData;
}
else
{
iSymbolType=SymbolTypeNotDefined;
}
iComment=comment;
}
/**
This destructor frees the symbol members.
@internalComponent
@released
*/
Symbol::~Symbol()
{
delete [] iSymbolName;
delete [] iExportName;
delete [] iComment;
}
/**
This function sets the symbol name.
@param aSymbolName - The symbol name
@internalComponent
@released
*/
void Symbol::SetSymbolName(char *aSymbolName)
{
iSymbolName = new char[strlen(aSymbolName)+1];
strcpy(iSymbolName, aSymbolName);
}
/**
This function compares the symbol for equality.
@param aSym - The symbol that is compared with this symbol
Return - It returns true if the 2 symbols are equal.
@internalComponent
@released
*/
bool Symbol::operator==(const Symbol* aSym) const {
if(strcmp(iSymbolName, aSym->iSymbolName))
return false;
if( iSymbolType != aSym->iSymbolType )
return false;
return true;
}
/**
This function returns the symbol name.
@internalComponent
@released
*/
const char* Symbol::SymbolName() const {
return iSymbolName;
}
/**
This function returns the aliased symbol name.
@internalComponent
@released
*/
const char* Symbol::ExportName() {
return iExportName;
}
/**
This function returns the ordinal number of the symbol.
@internalComponent
@released
*/
PLUINT32 Symbol::OrdNum() const {
return iOrdinalNumber;
}
/**
This function returns if the symbol is code or a data symbol.
@internalComponent
@released
*/
SymbolType Symbol::CodeDataType() {
return iSymbolType;
}
/**
This function returns if r3unused is true.
@internalComponent
@released
*/
bool Symbol::R3unused() {
return iR3Unused;
}
/**
This function returns if the symbol is marked absent in the def file.
@internalComponent
@released
*/
bool Symbol::Absent() {
return iAbsent;
}
/**
This function sets the symbol to be absent.
@param aAbsent - bool value
@internalComponent
@released
*/
void Symbol::SetAbsent(bool aAbsent) {
iAbsent = aAbsent;
}
/**
This function returns the comment against this def file.
@internalComponent
@released
*/
char* Symbol::Comment() {
return iComment;
}
/**
This function returns the symbol is a matching/missing/new symbol in the def file.
@internalComponent
@released
*/
int Symbol::GetSymbolStatus() {
return iSymbolStatus;
}
/**
This function sets the ordinal number for this symbol.
@internalComponent
@released
*/
void Symbol::SetOrdinal(PLUINT32 aOrdinalNum) {
iOrdinalNumber=aOrdinalNum;
}
/**
This function sets the status of the symbol i.e., whether it is
a matching/missing/new symbol.
@internalComponent
@released
*/
void Symbol::SetSymbolStatus(SymbolStatus aSymbolStatus) {
iSymbolStatus = aSymbolStatus;
}
/**
This function sets the symbol name.
@param aSymbolName - Symbol Name
@internalComponent
@released
*/
void Symbol::SymbolName(char *aSymbolName)
{
iSymbolName = aSymbolName;
}
/**
This function sets the export name of the symbol.
@param aComment - aExportName
@internalComponent
@released
*/
void Symbol::ExportName(char *aExportName)
{
iExportName = aExportName;
}
/**
This function sets the comment against the symbol.
@param aComment - aComment
@internalComponent
@released
*/
void Symbol::Comment(char *aComment)
{
iComment = aComment;
}
/**
This function sets the symbol type if it is Code or Data symbol.
@param aType - Symbol Type
@internalComponent
@released
*/
void Symbol::CodeDataType(SymbolType aType)
{
iSymbolType = aType;
}
/**
This function sets if R3Unused is true for this symbol.
@param aR3Unused - bool value
@internalComponent
@released
*/
void Symbol::R3Unused(bool aR3Unused)
{
iR3Unused = aR3Unused;
}
/**
This function sets if R3Unused is true for this symbol.
@param aSize - size of the symbol
@internalComponent
@released
*/
void Symbol::SetSymbolSize(PLUINT32 aSize){
iSize = aSize;
}
/**
This function gets the size of this symbol.
@internalComponent
@released
*/
PLUINT32 Symbol::SymbolSize(){
return iSize;
}