diff -r 10771bc49d01 -r 32228a6e07c0 e32tools/e32lib/e32image/tr_main.cpp --- a/e32tools/e32lib/e32image/tr_main.cpp Thu Nov 04 09:07:09 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,997 +0,0 @@ -// Copyright (c) 1996-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: -// e32tools/e32image/tr_main.cpp -// Translate X->E32Image top level -// -// - -#ifndef __LINUX__ - #include -#endif -#include - -#ifdef __VC32__ - #ifdef __MSVCDOTNET__ - #include - #include - #else //!__MSVCDOTNET__ - #include - #include - #endif //__MSVCDOTNET__ -#else // !__VC32__*/ -#ifdef __TOOLS2__ - #include - #include - #else - #include - #include -#endif // __VC32__ -#endif - -#include - -#ifdef __SUPPORT_PE_FILES__ -#include "pe_file.h" -#endif -#ifdef __SUPPORT_ELF_FILES__ -#include "elftran.h" -#endif - -#include -#include -#include - -extern int gAlignConstSection; -extern TUint gConstSectionAddressMask; - -int gVerbose=0; -char *gFile1=NULL; -char *gFile2=NULL; -unsigned int gStack=0; -unsigned int gHeapMin=0; -unsigned int gHeapMax=0; -TUid gUid1=KNullUid; -TUid gUid2=KNullUid; -TUid gUid3=KNullUid; -unsigned int gSecureId=0; -unsigned int gVendorId=0; -unsigned int gVersionWord=0x00010000u; -int gCallEntryPoints=TRUE; -int gFixedAddress=FALSE; -int gPriority=EPriorityForeground; -SCapabilitySet gCapability={0}; -int gAllowDllData=FALSE; -// fix warning for Linux warning: 0 instead of NULL -TUint gDataBase=0; -int gCompress=TRUE; -unsigned int gFPU=0; - -int gCodePaged=FALSE; -int gCodeUnpaged=FALSE; -int gCodeDefaultPaged=FALSE; - -int gDataPaged=FALSE; -int gDataUnpaged=FALSE; -int gDataDefaultPaged=FALSE; - -int gDebuggable=FALSE; -int gSmpSafe=FALSE; - -int gSetStack=FALSE; -int gSetHeap=FALSE; -int gSetUid1=FALSE; -int gSetUid2=FALSE; -int gSetUid3=FALSE; -int gSetCallEntryPoints=FALSE; -int gSetFixedAddress=FALSE; -int gSetPriority=FALSE; -int gSetCapability=FALSE; -int gSetCompress=FALSE; -int gSetVersion=FALSE; -int gSetSecureId=FALSE; -int gSetVendorId=FALSE; -int gSetFPU=FALSE; - -int gSetCodePaged=FALSE; -int gSetDataPaged=FALSE; - -int gSetSymLkup=FALSE; -int gSetDebuggable=FALSE; -int gSetSmpSafe=FALSE; - -enum CompressionMethods -{ - ENoCompression = 0, - EDeflate = 1, - EBytePair = 2, -}; - -int gCompressionMethod = EDeflate; -int gSuppressComprMethod = FALSE; - -#ifdef __SUPPORT_PE_FILES__ -char* gX86imp=NULL; -int gX86num_imp_dlls=0; -int gX86imp_size=0; -int gX86num_imports=0; -#endif - -TBool gLittleEndian=ETrue; - -class E32ImageFileRef - { -public: - E32ImageFileRef() {iPtr = E32ImageFile::New();} - ~E32ImageFileRef() {delete iPtr;} - class E32ImageFile& Ref() {return *iPtr;} -private: - E32ImageFileRef(const E32ImageFileRef&); - E32ImageFileRef& operator=(const E32ImageFileRef&); -private: - E32ImageFile* iPtr; - }; - -int setPagedFlags(E32ImageFile& f) - { - unsigned check1 = gCodePaged + gCodeUnpaged + gCodeDefaultPaged; - unsigned check2 = gDataPaged + gDataUnpaged + gDataDefaultPaged; - - if (check1 > 1 || check2 > 1) - { - Print(EError, "Conflicting paging options.\n"); - return KErrArgument; - } - - if (gCodePaged) - { - f.iHdr->iFlags |= KImageCodePaged; - f.iHdr->iFlags &= ~KImageCodeUnpaged; - } - else if (gCodeUnpaged) - { - f.iHdr->iFlags |= KImageCodeUnpaged; - f.iHdr->iFlags &= ~KImageCodePaged; - } - else if (gCodeDefaultPaged) - { - f.iHdr->iFlags &= ~KImageCodePaged; - f.iHdr->iFlags &= ~KImageCodeUnpaged; - } - - if (gDataPaged) - { - f.iHdr->iFlags |= KImageDataPaged; - f.iHdr->iFlags &= ~KImageDataUnpaged; - } - else if (gDataUnpaged) - { - f.iHdr->iFlags |= KImageDataUnpaged; - f.iHdr->iFlags &= ~KImageDataPaged; - } - else if (gDataDefaultPaged) - { - f.iHdr->iFlags &= ~KImageDataPaged; - f.iHdr->iFlags &= ~KImageDataUnpaged; - } - - return KErrNone; - } - -void setDebuggableFlags(E32ImageFile& f) - { - if (gDebuggable) - { - f.iHdr->iFlags |= KImageDebuggable; - } - else - { - f.iHdr->iFlags &= ~KImageDebuggable; - } - } - -void setSmpSafeFlags(E32ImageFile& f) - { - if (gSmpSafe) - { - f.iHdr->iFlags |= KImageSMPSafe; - } - else - { - f.iHdr->iFlags &= ~KImageSMPSafe; - } - } - -int dotran(const char* ifilename, const char* ofilename) - { - E32ImageFileRef fRef; - E32ImageFile& f = fRef.Ref(); - int r=f.Translate(ifilename, gDataBase, gAllowDllData, gSetSymLkup); - if (r!=KErrNone) - return r; - if (gSetStack) - f.SetStackSize(gStack); - if (gSetHeap) - { - f.SetHeapSizeMin(gHeapMin); - f.SetHeapSizeMax(gHeapMax); - } - if (!gSetUid1) - gUid1=TUid::Uid(f.iHdr->iUid1); - if (!gSetUid2) - gUid2=TUid::Uid(f.iHdr->iUid2); - if (!gSetUid3) - gUid3=TUid::Uid(f.iHdr->iUid3); - if (!gSetSecureId) - gSecureId = f.iHdr->iUid3; - if (!gSetVendorId) - gVendorId = 0; - f.SetUids(gUid1, gUid2, gUid3); - f.SetSecureId(gSecureId); - f.SetVendorId(gVendorId); - if (gSetCallEntryPoints) - f.SetCallEntryPoints(gCallEntryPoints); - if (gSetCapability) - f.SetCapability(gCapability); - if (gSetPriority) - { - if (f.iHdr->iFlags&KImageDll) - Print(EWarning,"Cannot set priority of a DLL.\n"); - else - f.SetPriority((TProcessPriority)gPriority); - } - if (gSetFixedAddress) - { - if (f.iHdr->iFlags&KImageDll) - Print(EWarning,"Cannot set fixed address for DLL.\n"); - else - f.SetFixedAddress(gFixedAddress); - } - if (gSetVersion) - f.iHdr->iModuleVersion = gVersionWord; - - if(gCompress) - { - switch(gCompressionMethod) - { - case ENoCompression: - f.iHdr->iCompressionType = KFormatNotCompressed; - break; - - case EDeflate: - f.iHdr->iCompressionType = KUidCompressionDeflate; - - break; - - case EBytePair: - f.iHdr->iCompressionType = KUidCompressionBytePair; - - break; - - default: - Print(EError, "Unknown compression method:%d", gCompressionMethod); - return 1; - - } // End of switch() - - } - else - { - f.iHdr->iCompressionType = KFormatNotCompressed; - } - - - if (gSetFPU) - f.SetFPU(gFPU); - - r = setPagedFlags(f); - if (r != KErrNone) - { - return r; - } - - setDebuggableFlags(f); - - setSmpSafeFlags(f); - - f.CreateExportBitMap(); - f.AddExportDescription(); - f.UpdateHeaderCrc(); - r = f.Validate(); - if (r!=KErrNone) - return r; - - ofstream ofile(ofilename, ios::binary); - if (!ofile) - { - Print(EError,"Cannot open %s for output.\n",ofilename); - return 1; - } - ofile << f; - ofile.close(); - if (gVerbose) - f.Dump((TText*)ofilename,gVerbose); - return KErrNone; - } - - -int dodump(const char* ifilename) - { - E32ImageFile f; - TInt r = f.Open(ifilename); - if (r>0) - return 1; - else if (r==KErrCorrupt || r==KErrNotSupported) - { - Print(EError,"%s is not a valid E32Image file.\n",ifilename); - return 1; - } - else if (r!=0) - { - Print(EError,"Error %d reading %s.\n",r,ifilename); - return 1; - } - f.Dump((TText*)ifilename, gVerbose ? gVerbose : E32ImageFile::EDumpDefaults); - return KErrNone; - } - -int doalter(const char* ifilename) - { - E32ImageFile f; - TInt r = f.Open(ifilename); - if (r>0) - return 1; - else if (r==KErrCorrupt || r==KErrNotSupported) - { - Print(EError,"%s is not a valid E32Image file.\n",ifilename); - return 1; - } - else if (r!=0) - { - Print(EError,"Error %d reading %s.\n",r,ifilename); - return 1; - } - - TUint hdrfmt = f.iHdr->HeaderFormat(); - if (hdrfmt != KImageHdrFmt_V) - { - Print(EError,"Can't modify old format binaries\n"); - return 1; - } - - if (gDataBase) - { - Print(EWarning, "Ignoring -datalinkaddress Switch"); - } - if (gSetStack) - f.SetStackSize(gStack); - if (gSetHeap) - { - f.SetHeapSizeMin(gHeapMin); - f.SetHeapSizeMax(gHeapMax); - } - if (!gSetUid1) - gUid1=TUid::Uid(f.iHdr->iUid1); - if (!gSetUid2) - gUid2=TUid::Uid(f.iHdr->iUid2); - if (!gSetUid3) - gUid3=TUid::Uid(f.iHdr->iUid3); - f.SetUids(gUid1, gUid2, gUid3); - if (gSetSecureId) - f.SetSecureId(gSecureId); - if (gSetVendorId) - f.SetVendorId(gVendorId); - if (gSetCallEntryPoints) - f.SetCallEntryPoints(gCallEntryPoints); - if (gSetCapability) - f.SetCapability(gCapability); - if (gSetPriority) - { - if (f.iHdr->iFlags&KImageDll) - Print(EWarning,"Cannot set priority of a DLL.\n"); - else - f.SetPriority((TProcessPriority)gPriority); - } - if (gSetFixedAddress) - { - if (f.iHdr->iFlags&KImageDll) - Print(EWarning,"Cannot set fixed address for DLL.\n"); - else - f.SetFixedAddress(gFixedAddress); - } - if (gSetVersion) - f.iHdr->iModuleVersion = gVersionWord; - - if(gCompress) - { - switch(gCompressionMethod) - { - case ENoCompression: - f.iHdr->iCompressionType = KFormatNotCompressed; - break; - - case EDeflate: - f.iHdr->iCompressionType = KUidCompressionDeflate; - - break; - - case EBytePair: - f.iHdr->iCompressionType = KUidCompressionBytePair; - - break; - - default: - Print(EError, "Unknown compression method:%d", gCompressionMethod); - return 1; - - } // End of switch() - } - else - f.iHdr->iCompressionType = KFormatNotCompressed; - - if (gSetFPU) - f.SetFPU(gFPU); - - r = setPagedFlags(f); - if (r != KErrNone) - { - return r; - } - - setDebuggableFlags(f); - - setSmpSafeFlags(f); - - f.UpdateHeaderCrc(); - r = f.Validate(); - if (r!=KErrNone) - return r; - - ofstream ofile(ifilename, ios::binary); - if (!ofile) - { - Print(EError,"Cannot open %s for output.\n",ifilename); - return 1; - } - ofile << f; - ofile.close(); - if (gVerbose) - f.Dump((TText *)ifilename,gVerbose); - return KErrNone; - } - -int helpme(char *aStr) - { - Print(EAlways,"Syntax: %s [options] inputfile outputfile\n",aStr); - Print(EAlways," %s [options] e32imagefile\n",aStr); - Print(EAlways,"option: [-v] [[-no]call[entrypoint]] [-priority ]\n"); - Print(EAlways," [-stack ] [-heap ] [-uid ]\n"); - Print(EAlways," [-allowdlldata] [-datalinkaddress ] [-fixed] [-moving]\n"); - Print(EAlways," [-align-const-section] [-const-section-address-mask ]\n"); - Print(EAlways," [-[no]compress] [-compressionmethod none|deflate|bytepair]\n"); - Print(EAlways," [-capability \"\"] [-version M.m] [-vid ]\n"); - Print(EAlways," [-fpu ]\n"); - Print(EAlways," [-codepaging ]\n"); - Print(EAlways," [-datapaging ]\n"); - Print(EAlways," [-debuggable]\n"); - Print(EAlways," [-smpsafe]\n"); - Print(EAlways," [-sym_name_lkup]\n"); - Print(EAlways," [-dump [h][s][c][d][e][i]]\n"); - Print(EAlways,"flags for dump: h Header\n"); - Print(EAlways," s Security info\n"); - Print(EAlways," c Code section\n"); - Print(EAlways," d Data section\n"); - Print(EAlways," e Export info\n"); - Print(EAlways," i Import table\n"); - return KErrArgument; - } - -int isNumber(char *aStr) - { - return (aStr[0]>='0') && (aStr[0]<='9'); - } - -int getUIntArg(unsigned int &aVal, int argc, char *argv[], int i) - { - if (i>=argc) - return KErrArgument; - if (!isNumber(argv[i])) - return KErrArgument; -#ifdef __LINUX__ - int n; - sscanf(argv[i], "%i", &n); - aVal = n; -#else -#ifdef __TOOLS2__ -istringstream s(argv[i]/*, strlen(argv[i])*/); -#else -istrstream s(argv[i], strlen(argv[i])); -#endif - -#if defined(__MSVCDOTNET__) || defined(__TOOLS2__) - s >> setbase(0); -#endif //__MSVCDOTNET__ - - s >> aVal; -#endif // __LINUX__ - return KErrNone; - } - -int getCapabilitiesArg(SCapabilitySet& aVal, int argc, char *argv[], int i) - { - memset(&aVal,0,sizeof(aVal)); - if (i>=argc) - return KErrArgument; - if (isNumber(argv[i])) - return getUIntArg(*(TUint*)&aVal[0], argc, argv, i); - return ParseCapabilitiesArg(aVal,argv[i]); - } - -int getPriorityArg(int &aVal, int argc, char *argv[], int i) - { - - if (i>=argc) - return KErrArgument; - if (isNumber(argv[i])) - { -#ifdef __LINUX__ - int n; - sscanf(argv[i], "%i", &n); - aVal = n; -#else -#ifdef __TOOLS2__ -istringstream s(argv[i]); -#else -istrstream s(argv[i], strlen(argv[i])); -#endif - -#if defined(__MSVCDOTNET__) || defined(__TOOLS2__) - s >> setbase(0); -#endif //__MSVCDOTNET__ - - s>>aVal; -#endif // __LINUX__ - } - else - { - if (stricmp(argv[i], "low")==0) - aVal=EPriorityLow; - else if (strnicmp(argv[i], "background",4)==0) - aVal=EPriorityBackground; - else if (strnicmp(argv[i], "foreground",4)==0) - aVal=EPriorityForeground; - else if (stricmp(argv[i], "high")==0) - aVal=EPriorityHigh; - else if (strnicmp(argv[i], "windowserver",3)==0) - aVal=EPriorityWindowServer; - else if (strnicmp(argv[i], "fileserver",4)==0) - aVal=EPriorityFileServer; - else if (strnicmp(argv[i], "realtime",4)==0) - aVal=EPriorityRealTimeServer; - else if (strnicmp(argv[i], "supervisor",3)==0) - aVal=EPrioritySupervisor; - else - { - Print(EError, "Unrecognised priority\n"); - return KErrArgument; - } - } - if (aValEPrioritySupervisor) - { - Print(EError, "Priority out of range\n"); - return KErrArgument; - } - return KErrNone; - } - -int getVersionArg(unsigned int& aVal, const char* aArg) - { - const char* s = aArg; - unsigned int major = 0; - unsigned int minor = 0; - for (; major<=6553 && *s>='0' && *s<='9'; ++s) - major = major*10 + (*s - '0'); - if (*s == '.') - { - for (++s; minor<=6553 && *s>='0' && *s<='9'; ++s) - minor = minor*10 + (*s - '0'); - if (*s==0 && major<32768 && minor<32768) - { - aVal = (major << 16) | minor; - return KErrNone; - } - } - Print(EError, "Bad argument to -version\n"); - return KErrArgument; - } - -int getFPUArg(unsigned int &aVal, int argc, char *argv[], int i) - { - if (i>=argc) - return KErrArgument; - else if (strnicmp(argv[i], "softvfp", 7)==0) - aVal = 0; - else if (strnicmp(argv[i], "vfpv2", 5)==0) - aVal = 1; - else - { - Print(EError, "Bad argument to -fpu\n"); - return KErrArgument; - } - - return KErrNone; - } - -int getCompressionMethod(int &aVal, int argc, char *argv[], int i) -{ - if( i >= argc || argv[i] == NULL) - { - Print(EError, "Missing argument to -compressionmethod\n"); - return KErrArgument; - } - else if (strnicmp(argv[i], "none", 2) == 0) - { - aVal = ENoCompression; - } - else if (strnicmp(argv[i], "deflate", 7) == 0) - { - aVal = EDeflate; - } - else if (strnicmp(argv[i], "bytepair", 8) == 0) - { - aVal = EBytePair; - } - else - { - Print(EError, "Bad argument '%s' to -compressionmethod\n", argv[i]); - return KErrArgument; - } - - return KErrNone; - -} - - -int processCL(int argc, char *argv[]) - { - - int r=KErrNone; - int i=1; - while (i=argc) - return KErrArgument; - char* s=argv[i]; - while(char c = *(s++)) - { - if(c<'a') - c += 'a'-'A'; - switch(c) - { - case 'h': gVerbose |= E32ImageFile::EDumpHeader; break; - case 's': gVerbose |= E32ImageFile::EDumpSecurityInfo; break; - case 'c': gVerbose |= E32ImageFile::EDumpCode; break; - case 'd': gVerbose |= E32ImageFile::EDumpData; break; - case 'e': gVerbose |= E32ImageFile::EDumpExports; break; - case 'i': gVerbose |= E32ImageFile::EDumpImports; break; - default: return KErrArgument; - } - } - } - else if (stricmp("-stack", argv[i])==0) - { - i++; - gSetStack=TRUE; - r=getUIntArg(gStack, argc, argv, i); - } - else if (stricmp("-uid1", argv[i])==0) - { - i++; - gSetUid1=TRUE; - unsigned int id; - r=getUIntArg(id, argc, argv, i); - gUid1=TUid::Uid(id); - } - else if (stricmp("-uid2", argv[i])==0) - { - i++; - gSetUid2=TRUE; - unsigned int id; - r=getUIntArg(id, argc, argv, i); - gUid2=TUid::Uid(id); - } - else if (stricmp("-uid3", argv[i])==0) - { - i++; - gSetUid3=TRUE; - unsigned int id; - r=getUIntArg(id, argc, argv, i); - gUid3=TUid::Uid(id); - } - else if (stricmp("-version", argv[i])==0) - { - i++; - r=getVersionArg(gVersionWord, argv[i]); - gSetVersion=TRUE; - } - else if (stricmp("-sid", argv[i])==0) - { - i++; - r=getUIntArg(gSecureId, argc, argv, i); - gSetSecureId=TRUE; - } - else if (stricmp("-vid", argv[i])==0) - { - i++; - r=getUIntArg(gVendorId, argc, argv, i); - gSetVendorId=TRUE; - } - else if (strnicmp("-nocall", argv[i], 7)==0) - { - gSetCallEntryPoints=TRUE; - gCallEntryPoints=FALSE; - } - else if (strnicmp("-call", argv[i], 5)==0) - { - gSetCallEntryPoints=TRUE; - gCallEntryPoints=TRUE; - } - else if (strnicmp("-fixed", argv[i], 3)==0) - { - gSetFixedAddress=TRUE; - gFixedAddress=TRUE; - } - else if (strnicmp("-moving", argv[i], 3)==0) - { - gSetFixedAddress=TRUE; - gFixedAddress=FALSE; - } - else if (strnicmp("-priority", argv[i], 4)==0) - { - i++; - gSetPriority=TRUE; - r=getPriorityArg(gPriority,argc,argv,i); - } - else if (strnicmp("-capability", argv[i], 10)==0) - { - i++; - gSetCapability=TRUE; - r=getCapabilitiesArg(gCapability, argc, argv, i); - } - else if (strnicmp("-heap", argv[i], 4)==0) - { - i++; - gSetHeap=TRUE; - r=getUIntArg(gHeapMin, argc, argv, i); - if (r==KErrNone) - r=getUIntArg(gHeapMax, argc, argv, ++i); - } - else if (strnicmp("-allow", argv[i], 6)==0) // Note, toolchain passes 'allow' for 'allowdlldata' - { - gAllowDllData=TRUE; - } - else if( strnicmp("-compressionmethod", argv[i], 18) == 0) - { - if(!gSuppressComprMethod) - { - gCompress = TRUE; - gSetCompress = TRUE; - r = getCompressionMethod(gCompressionMethod, argc, argv, ++i); - } - else - { - ++i; // Skip the compression method because compessionmethod suppressed. - } - } - else if (strnicmp("-compress", argv[i], 9)==0) - { - gCompress=TRUE; - gSetCompress=TRUE; - gSuppressComprMethod=FALSE; - } - else if (strnicmp("-nocompress", argv[i], 11)==0) - { - gCompress=FALSE; - gSetCompress=TRUE; - gSuppressComprMethod = TRUE; - gCompressionMethod = ENoCompression; - } - else if (strnicmp("-datalinkaddress", argv[i], 16)==0) - { - i++; - r=getUIntArg(gDataBase, argc, argv, i); - } - else if (strnicmp("-align-const-section", argv[i], 20)==0) - { - gAlignConstSection=TRUE; - } - else if (strnicmp("-const-section-address-mask", argv[i], 27)==0) - { - i++; - r=getUIntArg(gConstSectionAddressMask, argc, argv, i); - } - else if (strnicmp("-fpu", argv[i], 4)==0) - { - i++; - r=getFPUArg(gFPU, argc, argv, i); - gSetFPU=TRUE; - } - else if (strnicmp("-paged", argv[i], 6) == 0) - { - gCodePaged=TRUE; - gSetCodePaged=TRUE; - } - else if (strnicmp("-unpaged", argv[i], 8) == 0) - { - gCodeUnpaged=TRUE; - gSetCodePaged=TRUE; - } - else if (strnicmp("-defaultpaged", argv[i], 13) == 0) - { - gCodeDefaultPaged=TRUE; - gSetCodePaged=TRUE; - } - else if (strnicmp("-codepaging", argv[i], 11)==0) - { - i++; - - if (i>=argc) - { - r = KErrArgument; - } - else if ( strnicmp(argv[i], "paged", 5) == 0 ) - { - gCodePaged=TRUE; - } - else if ( strnicmp(argv[i], "unpaged", 7) == 0 ) - { - gCodeUnpaged=TRUE; - } - else if ( strnicmp(argv[i], "default", 7) == 0 ) - { - gCodeDefaultPaged=TRUE; - } - else - { - Print(EError, "Bad argument to -codepaging\n"); - r = KErrArgument; - } - - gSetCodePaged=TRUE; - } - else if (strnicmp("-datapaging", argv[i], 11)==0) - { - i++; - - if (i>=argc) - { - r = KErrArgument; - } - else if ( strnicmp(argv[i], "paged", 5) == 0 ) - { - gDataPaged=TRUE; - } - else if ( strnicmp(argv[i], "unpaged", 7) == 0 ) - { - gDataUnpaged=TRUE; - } - else if ( strnicmp(argv[i], "default", 7) == 0 ) - { - gDataDefaultPaged=TRUE; - } - else - { - Print(EError, "Bad argument to -datapaging\n"); - r = KErrArgument; - } - - gSetDataPaged=TRUE; - } - else if (strnicmp("-sym_name_lkup", argv[i], 14) == 0) - { - gSetSymLkup=TRUE; - } - else if (strnicmp("-debuggable", argv[i], 11) == 0) - { - gDebuggable=TRUE; - gSetDebuggable=TRUE; - } - else if (strnicmp("-smpsafe", argv[i], 8) == 0) - { - gSmpSafe=TRUE; - gSetSmpSafe=TRUE; - } -#ifdef __SUPPORT_PE_FILES__ - else if (strnicmp("-x86imp=", argv[i], 8)==0) - { - const char* x86impfile=argv[i]+8; -// printf("%s\n",x86impfile); - FILE* f=fopen(x86impfile,"rb"); - if (!f) - r=KErrArgument; - else - { - fseek(f,0,SEEK_END); - long size=ftell(f); - fseek(f,0,SEEK_SET); - if (size>4) - { - gX86imp=new char[size]; - fread(gX86imp,1,size,f); - } - fclose(f); - r=KErrNone; - if (gX86imp) - { - gX86imp_size=ALIGN4(size); - // printf("size %d\n",size); - int i; - int* p=(int*)gX86imp; - gX86num_imp_dlls=*p++; - for (i=0; i