diff -r 000000000000 -r a41df078684a kernel/eka/euser/epoc/win32/uc_utl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/eka/euser/epoc/win32/uc_utl.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,221 @@ +// Copyright (c) 1995-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: +// e32\euser\epoc\win32\uc_utl.cpp +// +// + +#include "u32std.h" +#include +#include +#include +#include +#include "uc_std.h" + +typedef void (*TBootEpoc)(TBool); + +#ifdef __LEAVE_EQUALS_THROW__ + +// Stub versions of TTrap exports to keep X86 and WINS versions of euser.def +// the same. + +class TTrap + { +public: + IMPORT_C TInt Trap(TInt& aResult); + IMPORT_C static void UnTrap(); + }; + +EXPORT_C TInt TTrap::Trap(TInt&) + { + return 0; + } + +EXPORT_C void TTrap::UnTrap() + { + } + +#endif + +EXPORT_C void EmptyFunction() + //Function with an empty body + { + } + +GLDEF_C void Panic(TCdtArchitecturePanic aPanic) +// +// Panic the process with USER as the category. +// + { + _LIT(KCategory,"USER-Arch"); + User::Panic(KCategory,aPanic); + } + + + + +EXPORT_C TInt User::IsRomAddress(TBool& aBool, TAny* aPtr) +// +// The FileServer loads ROM files as ReadOnly Memory Mapped Files +// We check the access rights of the given address for : +// Read access +// No write access +// +/** +Tests whether the specified address is in the ROM. + +@param aBool True, if the address at aPtr is within the ROM; false, + otherwise. +@param aPtr The address to be tested. + +@return Always KErrNone. +*/ + { + const TInt KRomMask = 0xFF; + const TInt KRomAccess = PAGE_READONLY; + + aBool=EFalse; + MEMORY_BASIC_INFORMATION mi; + + __LOCK_HOST; + if (VirtualQuery(aPtr, &mi, sizeof(mi)) != 0 && (mi.Protect & KRomMask) == KRomAccess) + aBool=ETrue; + return KErrNone; + } + + + + +EXPORT_C void BootEpoc(TBool aAutoRun) + { + HINSTANCE epoc = LoadLibraryA("ekern.exe"); + if (epoc) + { + TBootEpoc ep = (TBootEpoc)GetProcAddress(epoc, "_E32Startup"); + if (ep) + ep(aAutoRun); + } + ExitProcess(102); + } + +EXPORT_C void RFastLock::Wait() + { + if (InterlockedDecrement((LPLONG)&iCount) < -1) + RSemaphore::Wait(); + } + +EXPORT_C void RFastLock::Signal() + { + if (InterlockedIncrement((LPLONG)&iCount) < 0) + RSemaphore::Signal(); + } + +// Hash an 8 bit string at aPtr, length aLen bytes. +__NAKED__ TUint32 DefaultStringHash(const TUint8* /*aPtr*/, TInt /*aLen*/) + { + _asm push esi + _asm mov esi, [esp+8] + _asm mov ecx, [esp+12] + _asm xor eax, eax + _asm sub ecx, 4 + _asm jb lt4 + ge4: + _asm xor eax, [esi] + _asm add esi, 4 + _asm mov edx, 9E3779B9h + _asm mul edx + _asm sub ecx, 4 + _asm jae ge4 + lt4: + _asm add ecx, 4 + _asm jz done + _asm xor edx, edx + _asm cmp ecx, 2 + _asm jbe le2 + _asm mov dl, [esi+2] + _asm shl edx, 16 + le2: + _asm cmp ecx, 2 + _asm jb onemore + _asm mov dh, [esi+1] + onemore: + _asm mov dl, [esi] + _asm xor eax, edx + _asm mov edx, 9E3779B9h + _asm mul edx + done: + _asm pop esi + _asm ret + } + +// Hash a 16 bit string at aPtr, length aLen bytes. +__NAKED__ TUint32 DefaultWStringHash(const TUint16* /*aPtr*/, TInt /*aLen*/) + { + _asm push esi + _asm mov esi, [esp+8] + _asm mov ecx, [esp+12] + _asm xor eax, eax + _asm sub ecx, 8 + _asm jb lt8 + ge8: + _asm mov edx, [esi+4] + _asm xor eax, [esi] + _asm add esi, 8 + _asm rol edx, 8 + _asm xor eax, edx + _asm mov edx, 9E3779B9h + _asm mul edx + _asm sub ecx, 8 + _asm jae ge8 + lt8: + _asm add ecx, 8 + _asm jz done + _asm xor edx, edx + _asm cmp ecx, 4 + _asm jbe le4 + _asm mov dx, [esi+4] + _asm rol edx, 8 + _asm xor eax, edx + _asm xor edx, edx + le4: + _asm cmp ecx, 4 + _asm jb onemore + _asm mov dx, [esi+2] + _asm shl edx, 16 + onemore: + _asm mov dx, [esi] + _asm xor eax, edx + _asm mov edx, 9E3779B9h + _asm mul edx + done: + _asm pop esi + _asm ret + } + +/** +@publishedAll +@released + +Calculate a 32 bit hash from a 32 bit integer. + +@param aInt The integer to be hashed. +@return The calculated 32 bit hash value. +*/ +EXPORT_C __NAKED__ TUint32 DefaultHash::Integer(const TInt& /*aInt*/) + { + _asm mov edx, [esp+4] + _asm mov eax, 9E3779B9h + _asm mul dword ptr [edx] + _asm ret + } +