diff -r 000000000000 -r a41df078684a kernel/eka/memmodel/epoc/pprocess.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/eka/memmodel/epoc/pprocess.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,63 @@ +// 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\memmodel\epoc\pprocess.cpp +// +// + +#include "plat_priv.h" +#include + +#ifdef KDLL +GLREF_C void DumpCodeSegCreateInfo(TCodeSegCreateInfo& a); +#endif + +TInt DEpocProcess::AttachExistingCodeSeg(TProcessCreateInfo& aInfo) + { + CHECK_PAGING_SAFE; + __KTRACE_OPT(KDLL,Kern::Printf("DEpocProcess %O AttachExistingCodeSeg",this)); + __KTRACE_OPT(KDLL,DumpCodeSegCreateInfo(aInfo)); + DEpocCodeSeg& s=*(DEpocCodeSeg*)iTempCodeSeg; + if (s.iAttachProcess && s.iAttachProcess!=this) + return KErrAlreadyExists; + TInt r=CreateDataBssStackArea(aInfo); + if (r==KErrNone) + { + TLinAddr dra; + if (s.iXIP) + { + const TRomImageHeader& rih=s.RomInfo(); + aInfo.iExportDir=rih.iExportDir; + aInfo.iCodeLoadAddress=rih.iCodeAddress; + aInfo.iCodeRunAddress=rih.iCodeAddress; + aInfo.iDataLoadAddress=rih.iDataAddress; + dra=aInfo.iDataRunAddress=rih.iDataBssLinearBase; + } + else + { + SRamCodeInfo& ri=s.RamInfo(); + aInfo.iExportDir=ri.iExportDir; + aInfo.iCodeLoadAddress=ri.iCodeLoadAddr; + aInfo.iCodeRunAddress=ri.iCodeRunAddr; + aInfo.iDataLoadAddress=ri.iDataLoadAddr; + dra=aInfo.iDataRunAddress=ri.iDataRunAddr; + } + if (aInfo.iTotalDataSize && iDataBssRunAddress!=dra) + return KErrNotSupported; + } + aInfo.iEntryPtVeneer=s.iEntryPtVeneer; + aInfo.iFileEntryPoint=s.iFileEntryPoint; + __KTRACE_OPT(KDLL,DumpCodeSegCreateInfo(aInfo)); + __KTRACE_OPT(KDLL,Kern::Printf("DEpocProcess::AttachExistingCodeSeg returns %d",r)); + return r; + }