Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// Copyright (c) 1998-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:
// e32test\system\t_xprot.cpp
//
//
#include <e32test.h>
#include "execinfo.h"
#include <u32arm.h>
const TInt KSupervisorAddress=0x80000000;
const TInt KGarbageAddress=0xeeddbbcc;
TInt Handles[MAX_HANDLE];
TInt DataArea[1024];
TBuf8<1024> Buf8;
TBuf<1024> Buf;
TPtrC8 PtrC8(Buf8.Ptr(),10);
TPtrC8 PtrC(Buf.Ptr(),10);
TPtrC8 Ptr8(Buf8.Ptr(),10,1024);
TPtrC8 Ptr(Buf.Ptr(),10,1024);
TPtrC8 Ptr8N(NULL,10,1024);
TPtrC8 PtrN(NULL,10,1024);
TPtrC8 Ptr8I((TUint8*)KGarbageAddress,10,1024);
TPtrC8 PtrI((TText*)KGarbageAddress,10,1024);
TPtrC8 Ptr8S((TUint8*)KSupervisorAddress,10,1024);
TPtrC8 PtrS((TText*)KSupervisorAddress,10,1024);
TInt MessageHandle;
TInt Args[4];
TInt GetHandle(TInt& aState, TInt aHandleType)
{
TInt r;
TInt t=aHandleType?aHandleType-1:ELibrary;
switch(aState)
{
case 0: r=0; break;
case 1: r=0xdeaddead; break;
case 2: r=Handles[EThread]; break;
case 3: r=Handles[t]; break;
case 4: aState=0; return 0;
}
++aState;
return r;
}
TInt GetAnyInt(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=1; break;
case 2: r=2; break;
case 3: r=-1; break;
case 4: r=299792458; break;
case 5: aState=0; return 0;
}
++aState;
return r;
}
TInt GetAnyPtr(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=KSupervisorAddress; break;
case 3: r=(TInt)DataArea; break;
case 4: aState=0; return 0;
}
++aState;
return r;
}
TInt GetIntPtr(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=((TInt)DataArea)+1; break;
case 3: r=KSupervisorAddress; break;
case 4: r=(TInt)DataArea; break;
case 5: aState=0; return 0;
}
++aState;
return r;
}
TInt GetDes8(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=KSupervisorAddress; break;
case 3: r=(TInt)&Ptr8N; break;
case 4: r=(TInt)&Ptr8I; break;
case 5: r=(TInt)&Ptr8S; break;
case 6: r=(TInt)&Ptr8; break;
case 7: aState=0; return 0;
}
++aState;
return r;
}
TInt GetWDes8(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=KSupervisorAddress; break;
case 3: r=(TInt)&Ptr8N; break;
case 4: r=(TInt)&Ptr8I; break;
case 5: r=(TInt)&Ptr8S; break;
case 6: r=(TInt)&PtrC8; break;
case 7: r=(TInt)&Ptr8; break;
case 8: aState=0; return 0;
}
++aState;
return r;
}
TInt GetDes(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=KSupervisorAddress; break;
case 3: r=(TInt)&PtrN; break;
case 4: r=(TInt)&PtrI; break;
case 5: r=(TInt)&PtrS; break;
case 6: r=(TInt)&Ptr; break;
case 7: aState=0; return 0;
}
++aState;
return r;
}
TInt GetWDes(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=KSupervisorAddress; break;
case 3: r=(TInt)&PtrN; break;
case 4: r=(TInt)&PtrI; break;
case 5: r=(TInt)&PtrS; break;
case 6: r=(TInt)&PtrC; break;
case 7: r=(TInt)&Ptr; break;
case 8: aState=0; return 0;
}
++aState;
return r;
}
TInt GetBool(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=1; break;
case 2: r=299792458; break;
case 3: aState=0; return 0;
}
++aState;
return r;
}
TInt GetObjectType(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=EThread; break;
case 1: r=ELibrary; break;
case 2: r=ENumObjectType; break;
case 3: r=20000; break;
case 4: aState=0; return 0;
}
++aState;
return r;
}
TInt GetDevUnit(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=1; break;
case 2: r=20000; break;
case 3: aState=0; return 0;
}
++aState;
return r;
}
TInt GetMsgHandle(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=(TInt)DataArea; break;
case 3: r=KSupervisorAddress; break;
case 4: r=MessageHandle; break;
case 5: aState=0; return 0;
}
++aState;
return r;
}
TInt GetModuleHandle(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=ModuleHandle; break;
case 3: aState=0; return 0;
}
++aState;
return r;
}
TInt GetSessionHandlePtr(TInt& aState)
{
TInt r;
switch(aState)
{
case 0: r=0; break;
case 1: r=KGarbageAddress; break;
case 2: r=KSupervisorAddress; break;
case 3: r=(TInt)&Handles[ESession]; break;
case 4: aState=0; return 0;
}
++aState;
return r;
}
TInt GetArgument(TInt& aState, TInt aArgType)
{
if (aArgType==NO_PAR)
return 0;
if (aArgType<MAX_HANDLE)
return GetHandle(aState,aArgType);
switch (aArgType)
{
case ANY_INT: return GetAnyInt(aState);
case ANY_PTR: return GetAnyPtr(aState);
case INT_PTR: return GetIntPtr(aState);
case DES8: return GetDes8(aState);
case WDES8: return GetWDes8(aState);
case DES: return GetDes(aState);
case WDES: return GetWDes(aState);
case BOOL: return GetBool(aState);
case OBJECT_TYPE: return GetObjectType(aState);
case DEV_UNIT: return GetDevUnit(aState);
case MSG_HANDLE: return GetMsgHandle(aState);
case MODULE_HANDLE: return GetModuleHandle(aState);
case SESSION_HANDLE_PTR: return GetSessionHandlePtr(aState);
}
User::Panic(_L("UNKNOWN ARG TYPE"),aArgType);
}
#define FAST_EXEC(n) asm("swi %a0" : : "i" (n|EXECUTIVE_FAST))
__NAKED__ void DoFastExecCall(TInt /*aExecNum*/)
{
asm("ldr r1, __Args ");
asm("mov ip, lr ");
asm("ldmfd r1, {r0-r3} ");
asm("add pc, pc, r0, lsl #2 ");
asm("nop )";
FAST_EXEC(EFastExecWaitForAnyRequest);
FAST_EXEC(EFastExecLanguage);
FAST_EXEC(EFastExecHeap);
FAST_EXEC(EFastExecHeapSwitch);
FAST_EXEC(EFastExecPushTrapFrame);
FAST_EXEC(EFastExecPopTrapFrame);
FAST_EXEC(EFastExecActiveScheduler);
FAST_EXEC(EFastExecSetActiveScheduler);
FAST_EXEC(EFastExecLockPeriod);
FAST_EXEC(EFastExecTrapHandler);
FAST_EXEC(EFastExecSetTrapHandler);
FAST_EXEC(EFastExecLockedInc);
FAST_EXEC(EFastExecLockedDec);
FAST_EXEC(EFastExecDebugMask);
FAST_EXEC(EFastExecSetDebugMask);
FAST_EXEC(EFastExecFastCounter);
FAST_EXEC(EFastExecGetLocaleCharSet);
FAST_EXEC(EFastExecLockRamDrive);
FAST_EXEC(EFastExecUnlockRamDrive);
FAST_EXEC(EFastExecRomHeaderAddress);
FAST_EXEC(EFastExecRomRootDirAddress);
FAST_EXEC(EFastExecJustInTime);
FAST_EXEC(EFastExecSetJustInTime);
FAST_EXEC(EFastExecBlockThreads);
FAST_EXEC(EFastExecKernelStartup);
FAST_EXEC(EFastExecFatUtilityFunctions);
FAST_EXEC(EFastExecSafeInc);
FAST_EXEC(EFastExecSafeDec);
asm("__Args: ");
asm(".word Args ");
}
#define SLOW_EXEC(n) asm("swi %a0" : : "i" (n))
__NAKED__ void DoSlowExecCall(TInt /*aExecNum*/)
{
asm("ldr r1, __Args ");
asm("mov ip, lr ");
asm("ldmfd r1, {r0-r3} ");
asm("add pc, pc, r0, lsl #2 ");
asm("nop )";
SLOW_EXEC(EExecObjectNext);
SLOW_EXEC(EExecChunkBase);
SLOW_EXEC(EExecChunkSize);
SLOW_EXEC(EExecChunkMaxSize);
SLOW_EXEC(EExecHandleAttributes);
SLOW_EXEC(EExecTickCount);
SLOW_EXEC(EExecLogicalDeviceGetCaps);
SLOW_EXEC(EExecLogicalDeviceQueryVersionSupported);
SLOW_EXEC(EExecLogicalDeviceIsAvailable);
SLOW_EXEC(EExecDllGlobalAlloc);
SLOW_EXEC(EExecChangeLocale);
SLOW_EXEC(EExecChannelRequest);
SLOW_EXEC(EExecMathRandom);
SLOW_EXEC(EExecChannelControl);
SLOW_EXEC(EExecResetMachine);
SLOW_EXEC(EExecLibraryLookup);
SLOW_EXEC(EExecLibraryEntryPoint);
SLOW_EXEC(EExecLibraryDllRefTable);
SLOW_EXEC(EExecStaticCallList);
SLOW_EXEC(EExecDynamicCallList);
SLOW_EXEC(EExecLibraryCallList);
SLOW_EXEC(EExecLibraryFileName);
SLOW_EXEC(EExecExecuteInSupervisorMode);
SLOW_EXEC(EExecMutexCount);
SLOW_EXEC(EExecMutexWait);
SLOW_EXEC(EExecMutexSignal);
SLOW_EXEC(EExecProcessId);
SLOW_EXEC(EExecDllFileName);
SLOW_EXEC(EExecProcessResume);
SLOW_EXEC(EExecProcessFileName);
SLOW_EXEC(EExecProcessCommandLine);
SLOW_EXEC(EExecProcessExitType);
SLOW_EXEC(EExecProcessExitReason);
SLOW_EXEC(EExecProcessExitCategory);
SLOW_EXEC(EExecProcessPriority);
SLOW_EXEC(EExecProcessSetPriority);
SLOW_EXEC(EExecProcessFlags);
SLOW_EXEC(EExecProcessSetFlags);
SLOW_EXEC(EExecProcessSetOwner);
SLOW_EXEC(EExecDllInitialiseData);
SLOW_EXEC(EExecSemaphoreCount);
SLOW_EXEC(EExecSemaphoreWait);
SLOW_EXEC(EExecSemaphoreSignal1);
SLOW_EXEC(EExecSemaphoreSignalN);
SLOW_EXEC(EExecDllFreeData);
SLOW_EXEC(EExecServerReceive);
SLOW_EXEC(EExecServerCancel);
SLOW_EXEC(EExecSetSessionPtr);
SLOW_EXEC(EExecSessionSend);
SLOW_EXEC(EExecThreadId);
SLOW_EXEC(EExecSessionShare);
SLOW_EXEC(EExecThreadResume);
SLOW_EXEC(EExecThreadSuspend);
SLOW_EXEC(EExecThreadPriority);
SLOW_EXEC(EExecThreadSetPriority);
SLOW_EXEC(EExecThreadProcessPriority);
SLOW_EXEC(EExecThreadSetProcessPriority);
SLOW_EXEC(EExecThreadFlags);
SLOW_EXEC(EExecThreadSetFlags);
SLOW_EXEC(EExecThreadRequestCount);
SLOW_EXEC(EExecThreadExitType);
SLOW_EXEC(EExecThreadExitReason);
SLOW_EXEC(EExecThreadExitCategory);
SLOW_EXEC(EExecThreadGetDesLength);
SLOW_EXEC(EExecThreadGetDesMaxLength);
SLOW_EXEC(EExecThreadRead8);
SLOW_EXEC(EExecThreadRead16);
SLOW_EXEC(EExecThreadWrite8);
SLOW_EXEC(EExecThreadWrite16);
SLOW_EXEC(EExecTimerCancel);
SLOW_EXEC(EExecTimerAfter);
SLOW_EXEC(EExecTimerAt);
SLOW_EXEC(EExecTimerLock);
SLOW_EXEC(EExecChangeNotifierLogon);
SLOW_EXEC(EExecChangeNotifierLogoff);
SLOW_EXEC(EExecRequestSignal);
SLOW_EXEC(EExecMatch8);
SLOW_EXEC(EExecMatch16);
SLOW_EXEC(EExecFind8);
SLOW_EXEC(EExecFind16);
SLOW_EXEC(EExecLocateF8);
SLOW_EXEC(EExecLocateF16);
SLOW_EXEC(EExecHandleName);
SLOW_EXEC(EExecHandleFullName);
SLOW_EXEC(EExecHandleInfo);
SLOW_EXEC(EExecHandleCount);
SLOW_EXEC(EExecAfter);
SLOW_EXEC(EExecAt);
SLOW_EXEC(EExecDayName);
SLOW_EXEC(EExecDayNameAbb);
SLOW_EXEC(EExecMonthName);
SLOW_EXEC(EExecMonthNameAbb);
SLOW_EXEC(EExecSuffix);
SLOW_EXEC(EExecAmPmName);
SLOW_EXEC(EExecCurrencySymbol);
SLOW_EXEC(EExecLocale);
SLOW_EXEC(EExecLocaleSet);
SLOW_EXEC(EExecLocaleMessageText);
SLOW_EXEC(EExecMessageComplete);
SLOW_EXEC(EExecTimeNow);
SLOW_EXEC(EExecSetHomeTime);
SLOW_EXEC(EExecSetMachineConfiguration);
SLOW_EXEC(EExecCaptureEventHook);
SLOW_EXEC(EExecReleaseEventHook);
SLOW_EXEC(EExecRequestEvent);
SLOW_EXEC(EExecRequestEventCancel);
SLOW_EXEC(EExecAddEvent);
SLOW_EXEC(EExecSessionSendSync);
SLOW_EXEC(EExecDllGlobalAllocated);
SLOW_EXEC(EExecDllGlobalRead);
SLOW_EXEC(EExecDllGlobalWrite);
SLOW_EXEC(EExecDllTls);
SLOW_EXEC(EExecHalFunction);
SLOW_EXEC(EExecSessionAttach);
SLOW_EXEC(EExecWsRegisterThread);
SLOW_EXEC(EExecFsRegisterThread);
SLOW_EXEC(EExecProcessCommandLineLength);
SLOW_EXEC(EExecTimerInactivity);
SLOW_EXEC(EExecUserInactivityTime);
SLOW_EXEC(EExecShortDateFormatSpec);
SLOW_EXEC(EExecLongDateFormatSpec);
SLOW_EXEC(EExecTimeFormatSpec);
SLOW_EXEC(EExecResetInactivityTime);
SLOW_EXEC(EExecDebugFunction);
SLOW_EXEC(EExecBreakPoint);
SLOW_EXEC(EExecProfileStart);
SLOW_EXEC(EExecProfileEnd);
SLOW_EXEC(EExecPasswordIsEnabled);
SLOW_EXEC(EExecPasswordIsValid);
SLOW_EXEC(EExecExceptionHandler);
SLOW_EXEC(EExecSetExceptionHandler);
SLOW_EXEC(EExecModifyExceptionMask);
SLOW_EXEC(EExecRaiseException);
SLOW_EXEC(EExecIsExceptionHandled);
SLOW_EXEC(EExecThreadGetRamSizes);
SLOW_EXEC(EExecProcessGetRamSizes);
SLOW_EXEC(EExecLibraryGetRamSizes);
SLOW_EXEC(EExecMachineConfiguration);
SLOW_EXEC(EExecWasChunkSetHeapInfo);
SLOW_EXEC(EExecLibraryType);
SLOW_EXEC(EExecProcessType);
SLOW_EXEC(EExecPasswordSetEnabled);
SLOW_EXEC(EExecPasswordSet);
SLOW_EXEC(EExecSetCurrencySymbol);
SLOW_EXEC(EExecProcessSetType);
SLOW_EXEC(EExecChunkBottom);
SLOW_EXEC(EExecChunkTop);
SLOW_EXEC(EExecThreadContext);
SLOW_EXEC(EExecDllDataInfo);
SLOW_EXEC(EExecThreadCreate);
SLOW_EXEC(EExecProcessCreate);
SLOW_EXEC(EExecProcessLoaded);
SLOW_EXEC(EExecFindHandleOpen);
SLOW_EXEC(EExecHandleClose);
SLOW_EXEC(EExecChunkCreate);
SLOW_EXEC(EExecChunkAdjust);
SLOW_EXEC(EExecOpenNamedObject);
SLOW_EXEC(EExecHandleDuplicate);
SLOW_EXEC(EExecMutexCreate);
SLOW_EXEC(EExecSemaphoreCreate);
SLOW_EXEC(EExecThreadOpenById);
SLOW_EXEC(EExecProcessOpenById);
SLOW_EXEC(EExecThreadKill);
SLOW_EXEC(EExecThreadLogon);
SLOW_EXEC(EExecThreadLogonCancel);
SLOW_EXEC(EExecDllSetTls);
SLOW_EXEC(EExecDllFreeTls);
SLOW_EXEC(EExecThreadRename);
SLOW_EXEC(EExecProcessRename);
SLOW_EXEC(EExecProcessKill);
SLOW_EXEC(EExecProcessOwner);
SLOW_EXEC(EExecProcessLogon);
SLOW_EXEC(EExecProcessLogonCancel);
SLOW_EXEC(EExecThreadSetInitialParameter);
SLOW_EXEC(EExecThreadProcess);
SLOW_EXEC(EExecThreadGetHeap);
SLOW_EXEC(EExecServerCreate);
SLOW_EXEC(EExecSessionCreate);
SLOW_EXEC(EExecLibraryLoadExact);
SLOW_EXEC(EExecLibraryLoaded);
SLOW_EXEC(EExecDeviceLoad);
SLOW_EXEC(EExecDeviceFree);
SLOW_EXEC(EExecChannelCreate);
SLOW_EXEC(EExecTimerCreate);
SLOW_EXEC(EExecDllAddDependency);
SLOW_EXEC(EExecTimerHighRes);
SLOW_EXEC(EExecAfterHighRes);
SLOW_EXEC(EExecChangeNotifierCreate);
SLOW_EXEC(EExecUndertakerCreate);
SLOW_EXEC(EExecUndertakerLogon);
SLOW_EXEC(EExecUndertakerLogonCancel);
SLOW_EXEC(EExecKernelHeapDebug);
SLOW_EXEC(EExecThreadGetCpuTime);
}
void TestExec(const SExecInfo& aInfo, TBool aFast)
{
TInt xn=aInfo.iExecNum;
TInt np=aInfo.iNumParams;
if (np==0)
return; // no parameters
if (!aFast)
{
// don't do some slow execs
switch (xn)
{
// loader group (could be restricted to F32)
case EExecProcessCreate:
case EExecProcessLoaded:
case EExecLibraryLoadExact:
case EExecLibraryLoaded:
case EExecDllAddDependency:
return;
// descriptor processing (could be moved user side)
case EExecMatch8:
case EExecMatch16:
case EExecLocateF8:
case EExecLocateF16:
case EExecFind8:
case EExecFind16:
return;
// we don't want to do this
case EExecResetMachine:
return;
}
}
TInt state[4];
Mem::FillZ(state,sizeof(state));
}