e32tools/elf2e32/source/filedump.cpp
changeset 666 76dc8e3e7f2e
parent 590 360bd6b35136
equal deleted inserted replaced
665:2068325a5906 666:76dc8e3e7f2e
    21 #include "filedump.h"
    21 #include "filedump.h"
    22 #include "e32imagefile.h"
    22 #include "e32imagefile.h"
    23 #include "h_utl.h"
    23 #include "h_utl.h"
    24 #include "deffile.h"
    24 #include "deffile.h"
    25 #include "errorhandler.h"
    25 #include "errorhandler.h"
    26 #include <stdio.h>
    26 #include <cstdio>
       
    27 #include <cassert>
    27 /**
    28 /**
    28 Constructor for class FileDump
    29 Constructor for class FileDump
    29 @param aParameterListInterface - Instance of class ParameterListInterface
    30 @param aParameterListInterface - Instance of class ParameterListInterface
    30 @internalComponent
    31 @internalComponent
    31 @released
    32 @released
    61 		if(!iParameterListInterface->E32ImageOutput())
    62 		if(!iParameterListInterface->E32ImageOutput())
    62 			throw ParameterParserError(NOREQUIREDOPTIONERROR,"--output");
    63 			throw ParameterParserError(NOREQUIREDOPTIONERROR,"--output");
    63 		if(!iParameterListInterface->DefInput())
    64 		if(!iParameterListInterface->DefInput())
    64 			throw ParameterParserError(NOREQUIREDOPTIONERROR,"--definput");
    65 			throw ParameterParserError(NOREQUIREDOPTIONERROR,"--definput");
    65 
    66 
    66 		GenerateAsmFile(iParameterListInterface->E32ImageOutput());
    67 		GenerateAsmFile();
    67 	}
    68 	}
    68 	else
    69 	else
    69 	{
    70 	{
    70 		if(!iParameterListInterface->E32Input())
    71 		if(!iParameterListInterface->E32Input())
    71 			throw ParameterParserError(NOREQUIREDOPTIONERROR,"--e32input");
    72 			throw ParameterParserError(NOREQUIREDOPTIONERROR,"--e32input");
    72 		if(iParameterListInterface->DumpOptions() & EDumpAsm )
    73 		if(iParameterListInterface->DumpOptions() & EDumpAsm )
    73 			throw InvalidArgumentError(INVALIDARGUMENTERROR,iParameterListInterface->FileDumpSubOptions() ,"--dump");
    74 			throw InvalidArgumentError(INVALIDARGUMENTERROR,iParameterListInterface->FileDumpSubOptions() ,"--dump");
    74 		DumpE32Image(iParameterListInterface->E32Input());
    75 		DumpE32Image();
    75 	}
    76 	}
    76 	return 0;
    77 	return 0;
    77 }
    78 }
    78 
    79 
    79 /**
    80 /**
    81 @param afileName - ASM File name
    82 @param afileName - ASM File name
    82 @return 0 on success, otherwise throw error 
    83 @return 0 on success, otherwise throw error 
    83 @internalComponent
    84 @internalComponent
    84 @released
    85 @released
    85 */
    86 */
    86 int FileDump::GenerateAsmFile(const char* afileName)//DumpAsm
    87 int FileDump::GenerateAsmFile() //DumpAsm
       
    88 {
       
    89 	EAsmDialect asmDialect = iParameterListInterface->AsmDialect();
       
    90 	switch(asmDialect)
       
    91 	{
       
    92 	case EGas:
       
    93 		return GenerateGasAsmFile();
       
    94 	case EArmas:
       
    95 		return GenerateArmasAsmFile();
       
    96 	default:
       
    97 		assert(false);
       
    98 	}
       
    99 	return 0;
       
   100 }
       
   101 int FileDump::GenerateArmasAsmFile()
    87 {
   102 {
    88 	DefFile *iDefFile = new DefFile();
   103 	DefFile *iDefFile = new DefFile();
    89 	SymbolList *aSymList;
   104 	SymbolList *aSymList;
    90 	aSymList = iDefFile->ReadDefFile(iParameterListInterface->DefInput());
   105 	aSymList = iDefFile->ReadDefFile(iParameterListInterface->DefInput());
       
   106 	char const *afileName = iParameterListInterface->E32ImageOutput(); 
    91 
   107 
    92 	FILE *fptr;
   108 	FILE *fptr;
    93 
   109 
    94 	if((fptr=fopen(afileName,"w"))==NULL)
   110 	if((fptr=fopen(afileName,"w"))==NULL)
    95 	{
   111 	{
   153 	}
   169 	}
   154 	return 0;
   170 	return 0;
   155 }
   171 }
   156 
   172 
   157 /**
   173 /**
       
   174 Function to generate a GNU as ASM File.
       
   175 @param afileName - ASM File name
       
   176 @return 0 on success, otherwise throw error 
       
   177 @internalComponent
       
   178 @released*/
       
   179 int FileDump::GenerateGasAsmFile()
       
   180 {
       
   181 	DefFile *iDefFile = new DefFile();
       
   182 	SymbolList *aSymList;
       
   183 	aSymList = iDefFile->ReadDefFile(iParameterListInterface->DefInput());
       
   184 	char const *afileName = iParameterListInterface->E32ImageOutput(); 
       
   185 	FILE *fptr;
       
   186 	if((fptr=fopen(afileName,"w"))==NULL)
       
   187 	{
       
   188 		throw FileError(FILEOPENERROR,(char*)afileName);
       
   189 	}
       
   190 	else
       
   191 	{
       
   192 		SymbolList::iterator aItr = aSymList->begin();
       
   193 		SymbolList::iterator last = aSymList->end();
       
   194 		Symbol *aSym;
       
   195 		while( aItr != last)
       
   196 		{
       
   197 			aSym = *aItr;
       
   198 			if(aSym->Absent())
       
   199 			{
       
   200 				aItr++;
       
   201 				continue;
       
   202 			}
       
   203 			fputs("\t.global ",fptr);
       
   204 			fputs(aSym->SymbolName(),fptr);
       
   205 			fputs("\n",fptr);
       
   206 			aItr++;
       
   207 		}
       
   208 		fclose(fptr);
       
   209 	}
       
   210 	return 0;
       
   211 }
       
   212 /**
   158 Function to Dump E32 Image.
   213 Function to Dump E32 Image.
   159 @param afileName - E32 Image File name
   214 @param afileName - E32 Image File name
   160 @return 1 on success, otherwise throw error 
   215 @return 1 on success, otherwise throw error 
   161 @internalComponent
   216 @internalComponent
   162 @released
   217 @released
   163 */
   218 */
   164 int FileDump::DumpE32Image(const char* afileName)
   219 int FileDump::DumpE32Image()
   165 {
   220 {
       
   221 	char const *afileName = iParameterListInterface->E32Input(); 
   166 	E32ImageFile *aE32Imagefile=new E32ImageFile();
   222 	E32ImageFile *aE32Imagefile=new E32ImageFile();
   167 	TInt result = aE32Imagefile->Open(afileName);
   223 	TInt result = aE32Imagefile->Open(afileName);
   168 	
   224 	
   169 	if (result > 0)
   225 	if (result > 0)
   170 		return 1;
   226 		return 1;