--- /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 <e32panic.h>
+
+#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
+ }
+}