sl@0: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // f32test\loader\t_ldrtst.h sl@0: // sl@0: // sl@0: sl@0: #ifndef __T_LDRTST_H__ sl@0: #define __T_LDRTST_H__ sl@0: sl@0: #define __INCLUDE_DEPENDENCY_GRAPH sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include "dlltree.h" sl@0: #include "dllt.h" sl@0: #include "exetifc.h" sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: GLREF_D RTest test; sl@0: sl@0: class TModuleList; sl@0: class TModuleSet sl@0: { sl@0: public: sl@0: TModuleSet(); sl@0: TModuleSet(const TModuleList&, TInt aMask, TInt aVal); sl@0: void Add(TInt aModule); sl@0: void Remove(TInt aModule); sl@0: void Remove(const TModuleList&); sl@0: void Display(const TDesC& aTitle) const; sl@0: inline TBool Present(TInt aModule) const sl@0: { return iBitMap[aModule>>3]&(1<<(aModule&7)); } sl@0: public: sl@0: TInt iCount; sl@0: TUint8 iBitMap[(KNumModules+7)/8]; sl@0: }; sl@0: sl@0: class TModuleList sl@0: { sl@0: public: sl@0: TModuleList(); sl@0: void SetCount(); sl@0: void Display(const TDesC& aTitle) const; sl@0: TBool IsPresent(TInt aModNum) const; sl@0: TInt Find(TInt aModNum) const; sl@0: void Add(const SDllInfo& a); sl@0: public: sl@0: TInt iCount; sl@0: SDllInfo iInfo[KNumModules]; sl@0: }; sl@0: sl@0: class LoaderTest sl@0: { sl@0: public: sl@0: static LoaderTest* New(); sl@0: void Close(); sl@0: void Init(); sl@0: public: sl@0: void TestOneByOne(); sl@0: void TestMultipleExeInstances(); sl@0: void TestOOM(); sl@0: void TestMultipleLoads(); sl@0: private: sl@0: TBool IsRomAddress(TLinAddr a); sl@0: TBool IsRamCodeAddress(TLinAddr a); sl@0: TBool CheckDataAddress(TLinAddr a, TInt aDllNum, TInt aExeNum); sl@0: TInt DetermineDllLoadResult(TInt aDllNum, TInt aExeNum); sl@0: TInt DetermineDllLoadResult(TInt aDllNum, TInt aExeNum1, TInt aExeNum2); sl@0: TInt DetermineLoadExe2Result(TInt aExeNum); sl@0: void DumpModuleList(const TModuleList& aList, TInt aExeNum); sl@0: void DumpModuleInfo(const SDllInfo& aInfo, TInt aExeNum); sl@0: void CheckModuleList(TInt aRoot, const TModuleList& aList); sl@0: public: sl@0: void TraceOn(); sl@0: void TraceOff(); sl@0: private: sl@0: LoaderTest(); sl@0: ~LoaderTest(); sl@0: public: sl@0: RFs iFs; sl@0: RLdrTest iDev; sl@0: TUint32 iMemModelAtt; sl@0: TInt iCmdLine[8]; sl@0: }; sl@0: sl@0: sl@0: const TInt KMaxHandlesPerDll=4; sl@0: const TInt KMaxHandles=KMaxHandlesPerDll*KNumModules; sl@0: sl@0: struct SModuleInstance sl@0: { sl@0: TInt iAccessCount; sl@0: TInt iModNum; sl@0: TLinAddr iEntryPointAddress; sl@0: TModuleHandle iModuleHandle; sl@0: TLinAddr iData; sl@0: TAny* iCodeSeg; sl@0: }; sl@0: sl@0: class CGlobalModuleList; sl@0: class CPerProcessInfo : public CBase sl@0: { sl@0: public: sl@0: static CPerProcessInfo* New(TInt aExeNum, CGlobalModuleList& aG); sl@0: virtual ~CPerProcessInfo(); sl@0: void GetModuleSet(TModuleSet& aSet); sl@0: void Check(); sl@0: void Unlink(const SDllInfo& a, TModuleList& aList); sl@0: TInt Load(TInt aDllNum); sl@0: TInt AddModules(TInt aDllNum, TModuleList* aCList, TModuleList* aIList); sl@0: TInt CloseHandle(TInt aHandle); sl@0: private: sl@0: CPerProcessInfo(); sl@0: TInt Init(); sl@0: public: sl@0: TInt iExeNum; sl@0: TRequestStatus iStatus; sl@0: RProcess iProcess; sl@0: RLoaderTest iSession; sl@0: RLdrTest iDev; sl@0: CGlobalModuleList* iGlobalList; sl@0: TInt iModuleNum[KMaxHandles]; sl@0: TInt iHandleCount[KNumModules]; sl@0: SModuleInstance* iModules[KNumModules]; sl@0: }; sl@0: sl@0: class CGlobalModuleList : public CBase sl@0: { sl@0: public: sl@0: static CGlobalModuleList* New(const LoaderTest&); sl@0: virtual ~CGlobalModuleList(); sl@0: void Close(SModuleInstance* a); sl@0: void Free(SModuleInstance* a); sl@0: SModuleInstance* GetMI(); sl@0: TAny* CodeSegFromHandle(TModuleHandle aModHandle); sl@0: void CheckAll(); sl@0: TInt Load(TInt aExeNum, TInt aDllNum); sl@0: TInt CloseHandle(TInt aExeNum, TInt aDllNum); sl@0: private: sl@0: CGlobalModuleList(); sl@0: void Init(); sl@0: public: sl@0: TInt iMaxModules; sl@0: TInt iNumExes; sl@0: TInt iFixedExes; sl@0: TInt iParam; sl@0: RLdrTest iDev; sl@0: TUint32 iMemModelAtt; sl@0: CPerProcessInfo* iPPInfo[KNumModules]; sl@0: RPointerArray iModules; sl@0: SModuleInstance* iModuleAlloc; sl@0: SModuleInstance* iFreeModules; sl@0: }; sl@0: sl@0: void GetNonZFileName(const TDesC& aOrigName, TDes& aNonZName); sl@0: sl@0: #endif