kerneltest/f32test/loader/t_ldrtst.h
changeset 0 a41df078684a
child 6 0173bcd7697c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/loader/t_ldrtst.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,171 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// f32test\loader\t_ldrtst.h
+// 
+//
+
+#ifndef __T_LDRTST_H__
+#define __T_LDRTST_H__
+
+#define __INCLUDE_DEPENDENCY_GRAPH
+
+#include <e32svr.h>
+#include <e32test.h>
+#include "dlltree.h"
+#include "dllt.h"
+#include "exetifc.h"
+#include <d_ldrtst.h>
+#include <f32file.h>
+#include <f32dbg.h>
+#include <e32rom.h>
+
+GLREF_D RTest test;
+
+class TModuleList;
+class TModuleSet
+	{
+public:
+	TModuleSet();
+	TModuleSet(const TModuleList&, TInt aMask, TInt aVal);
+	void Add(TInt aModule);
+	void Remove(TInt aModule);
+	void Remove(const TModuleList&);
+	void Display(const TDesC& aTitle) const;
+	inline TBool Present(TInt aModule) const
+		{ return iBitMap[aModule>>3]&(1<<(aModule&7)); }
+public:
+	TInt iCount;
+	TUint8 iBitMap[(KNumModules+7)/8];
+	};
+
+class TModuleList
+	{
+public:
+	TModuleList();
+	void SetCount();
+	void Display(const TDesC& aTitle) const;
+	TBool IsPresent(TInt aModNum) const;
+	TInt Find(TInt aModNum) const;
+	void Add(const SDllInfo& a);
+public:
+	TInt iCount;
+	SDllInfo iInfo[KNumModules];
+	};
+
+class LoaderTest
+	{
+public:
+	static LoaderTest* New();
+	void Close();
+	void Init();
+public:
+	void TestOneByOne();
+	void TestMultipleExeInstances();
+	void TestOOM();
+	void TestMultipleLoads();
+private:
+	TBool IsRomAddress(TLinAddr a);
+	TBool IsRamCodeAddress(TLinAddr a);
+	TBool CheckDataAddress(TLinAddr a, TInt aDllNum, TInt aExeNum);
+	TInt DetermineDllLoadResult(TInt aDllNum, TInt aExeNum);
+	TInt DetermineDllLoadResult(TInt aDllNum, TInt aExeNum1, TInt aExeNum2);
+	TInt DetermineLoadExe2Result(TInt aExeNum);
+	void DumpModuleList(const TModuleList& aList, TInt aExeNum);
+	void DumpModuleInfo(const SDllInfo& aInfo, TInt aExeNum);
+	void CheckModuleList(TInt aRoot, const TModuleList& aList);
+public:
+	void TraceOn();
+	void TraceOff();
+private:
+	LoaderTest();
+	~LoaderTest();
+public:
+	RFs iFs;
+	RLdrTest iDev;
+	TUint32 iMemModelAtt;
+	TInt iCmdLine[8];
+	};
+
+
+const TInt KMaxHandlesPerDll=4;
+const TInt KMaxHandles=KMaxHandlesPerDll*KNumModules;
+
+struct SModuleInstance
+	{
+	TInt iAccessCount;
+	TInt iModNum;
+	TLinAddr iEntryPointAddress;
+	TModuleHandle iModuleHandle;
+	TLinAddr iData;
+	TAny* iCodeSeg;
+	};
+
+class CGlobalModuleList;
+class CPerProcessInfo : public CBase
+	{
+public:
+	static CPerProcessInfo* New(TInt aExeNum, CGlobalModuleList& aG);
+	virtual ~CPerProcessInfo();
+	void GetModuleSet(TModuleSet& aSet);
+	void Check();
+	void Unlink(const SDllInfo& a, TModuleList& aList);
+	TInt Load(TInt aDllNum);
+	TInt AddModules(TInt aDllNum, TModuleList* aCList, TModuleList* aIList);
+	TInt CloseHandle(TInt aHandle);
+private:
+	CPerProcessInfo();
+	TInt Init();
+public:
+	TInt iExeNum;
+	TRequestStatus iStatus;
+	RProcess iProcess;
+	RLoaderTest iSession;
+	RLdrTest iDev;
+	CGlobalModuleList* iGlobalList;
+	TInt iModuleNum[KMaxHandles];
+	TInt iHandleCount[KNumModules];
+	SModuleInstance* iModules[KNumModules];
+	};
+
+class CGlobalModuleList : public CBase
+	{
+public:
+	static CGlobalModuleList* New(const LoaderTest&);
+	virtual ~CGlobalModuleList();
+	void Close(SModuleInstance* a);
+	void Free(SModuleInstance* a);
+	SModuleInstance* GetMI();
+	TAny* CodeSegFromHandle(TModuleHandle aModHandle);
+	void CheckAll();
+	TInt Load(TInt aExeNum, TInt aDllNum);
+	TInt CloseHandle(TInt aExeNum, TInt aDllNum);
+private:
+	CGlobalModuleList();
+	void Init();
+public:
+	TInt iMaxModules;
+	TInt iNumExes;
+	TInt iFixedExes;
+	TInt iParam;
+	RLdrTest iDev;
+	TUint32 iMemModelAtt;
+	CPerProcessInfo* iPPInfo[KNumModules];
+	RPointerArray<SModuleInstance> iModules;
+	SModuleInstance* iModuleAlloc;
+	SModuleInstance* iFreeModules;
+	};
+
+void GetNonZFileName(const TDesC& aOrigName, TDes& aNonZName);
+
+#endif