kernel/eka/compsupp/symaehabi/callfirstprocessfn.cpp
changeset 0 a41df078684a
child 266 0008ccd16016
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/compsupp/symaehabi/callfirstprocessfn.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,68 @@
+// 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 the License "ARM EABI LICENCE.txt"
+// which accompanies this distribution, and is available
+// in kernel/eka/compsupp.
+//
+// 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
+	}
+}