diff -r 000000000000 -r 96e5fb8b040d kernel/eka/compsupp/symaehabi/callfirstprocessfn.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/eka/compsupp/symaehabi/callfirstprocessfn.cpp Thu Dec 17 09:24:54 2009 +0200 @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2004-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: +* e32\compsupp\symaehabi\callfirstprocessfn.cpp +* +*/ + + +#include "unwind_env.h" +#include "unwinder.h" +#include "symbian_support.h" +#include + +#ifdef __LEAVE_EQUALS_THROW__ +_LIT(KLitUser,"USER"); +#endif + +TInt E32Main(); + +#ifdef __KERNEL_MODE__ +#error This file should not be compiled in kernel mode +#endif + +extern "C" { + +void __cpp_initialize__aeabi_(); +void __DLL_Export_Table__(); + +TInt CallThrdProcEntry(TInt (*aFn)(void*), void* aPtr, TInt aNotFirst) + { + TCppRTExceptionsGlobals aExceptionGlobals; + + if (!aNotFirst) + { + // Init statics for implicitly linked DLLs + User::InitProcess(); + + // Init statics for EXE + //pick up export table if we're an exexp + __DLL_Export_Table__(); + __cpp_initialize__aeabi_(); + } +#ifdef __LEAVE_EQUALS_THROW__ + TInt r = KErrNone; + + try { + r = aNotFirst ? (*aFn)(aPtr) : E32Main(); + } + catch (XLeaveException&) + { + User::Panic(KLitUser, EUserLeaveWithoutTrap); + } + + return r; +#else + return aNotFirst ? (*aFn)(aPtr) : E32Main(); +#endif + } +}