--- a/halservices/hal/src/hal_gcc_shim.cia Wed Jun 09 11:10:19 2010 +0300
+++ b/halservices/hal/src/hal_gcc_shim.cia Mon Jun 21 17:12:14 2010 +0300
@@ -1,4 +1,18 @@
+// Copyright (c) 2010 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:
+// hal/src/hal_gcc_shim.cia
+//
// HAL_GCC_SHIM.CIA - generated by GENSHIMSRC.BAT
//
--- a/kernel/eka/bmarm/ekernsmp.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bmarm/ekernsmp.def Mon Jun 21 17:12:14 2010 +0300
@@ -1055,4 +1055,5 @@
SetIdleHandler__3ArmPFPvUlPVv_vPv @ 1054 NONAME R3UNUSED ABSENT ; Arm::SetIdleHandler(void (*)(void *, unsigned long, void volatile *), void *)
FreeRamZone__4EpocUi @ 1055 NONAME R3UNUSED ABSENT ; Epoc::FreeRamZone(unsigned int)
SelectiveAlloc__16TBitMapAllocatorii @ 1056 NONAME R3UNUSED ; TBitMapAllocator::SelectiveAlloc(int, int)
+ SetKeyOffset__10RArrayBasei @ 1057 NONAME R3UNUSED ; RArrayBase::SetKeyOffset(int)
--- a/kernel/eka/bmarm/ekernu.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bmarm/ekernu.def Mon Jun 21 17:12:14 2010 +0300
@@ -1052,4 +1052,4 @@
SetIdleHandler__3ArmPFPvUl_vPv @ 1051 NONAME R3UNUSED ABSENT ; Arm::SetIdleHandler(void (*)(void *, unsigned long), void *)
FreeRamZone__4EpocUi @ 1052 NONAME R3UNUSED ABSENT ; Epoc::FreeRamZone(unsigned int)
SelectiveAlloc__16TBitMapAllocatorii @ 1053 NONAME R3UNUSED ; TBitMapAllocator::SelectiveAlloc(int, int)
-
+ SetKeyOffset__10RArrayBasei @ 1054 NONAME R3UNUSED ; RArrayBase::SetKeyOffset(int)
--- a/kernel/eka/bmarm/euseru.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bmarm/euseru.def Mon Jun 21 17:12:14 2010 +0300
@@ -2234,5 +2234,38 @@
RandomL__4MathR5TDes8 @ 2233 NONAME R3UNUSED ; Math::RandomL(TDes8 &)
RandomL__4Math @ 2234 NONAME R3UNUSED ; Math::RandomL(void)
Random__4MathR5TDes8 @ 2235 NONAME R3UNUSED ; Math::Random(TDes8 &)
-
-
+ Append2__6TDes16G5TChar @ 2236 NONAME R3UNUSED ABSENT ; TDes16::Append2(TChar)
+ AppendFill2__6TDes16G5TChari @ 2237 NONAME R3UNUSED ABSENT ; TDes16::AppendFill2(TChar, int)
+ AppendJustify2__6TDes16PCUsi6TAlignG5TChar @ 2238 NONAME ABSENT ; TDes16::AppendJustify2(unsigned short const *, int, TAlign, TChar)
+ AppendJustify2__6TDes16PCUsii6TAlignG5TChar @ 2239 NONAME ABSENT ; TDes16::AppendJustify2(unsigned short const *, int, int, TAlign, TChar)
+ AppendJustify2__6TDes16RC7TDesC16i6TAlignG5TChar @ 2240 NONAME ABSENT ; TDes16::AppendJustify2(TDesC16 const &, int, TAlign, TChar)
+ AppendJustify2__6TDes16RC7TDesC16ii6TAlignG5TChar @ 2241 NONAME ABSENT ; TDes16::AppendJustify2(TDesC16 const &, int, int, TAlign, TChar)
+ Capitalize2__6TDes16 @ 2242 NONAME R3UNUSED ABSENT ; TDes16::Capitalize2(void)
+ Collate2__6TDes16 @ 2243 NONAME R3UNUSED ABSENT ; TDes16::Collate2(void)
+ CopyC2__6TDes16RC7TDesC16 @ 2244 NONAME R3UNUSED ABSENT ; TDes16::CopyC2(TDesC16 const &)
+ CopyCP2__6TDes16RC7TDesC16 @ 2245 NONAME R3UNUSED ABSENT ; TDes16::CopyCP2(TDesC16 const &)
+ CopyF2__6TDes16RC7TDesC16 @ 2246 NONAME R3UNUSED ABSENT ; TDes16::CopyF2(TDesC16 const &)
+ CopyLC2__6TDes16RC7TDesC16 @ 2247 NONAME R3UNUSED ABSENT ; TDes16::CopyLC2(TDesC16 const &)
+ CopyUC2__6TDes16RC7TDesC16 @ 2248 NONAME R3UNUSED ABSENT ; TDes16::CopyUC2(TDesC16 const &)
+ Fill2__6TDes16G5TChar @ 2249 NONAME R3UNUSED ABSENT ; TDes16::Fill2(TChar)
+ Fill2__6TDes16G5TChari @ 2250 NONAME R3UNUSED ABSENT ; TDes16::Fill2(TChar, int)
+ FindCorruptSurrogate__C7TDesC16 @ 2251 NONAME R3UNUSED ABSENT ; TDesC16::FindCorruptSurrogate(void) const
+ Fold2__6TDes16 @ 2252 NONAME R3UNUSED ABSENT ; TDes16::Fold2(void)
+ Justify2__6TDes16RC7TDesC16i6TAlignG5TChar @ 2253 NONAME ABSENT ; TDes16::Justify2(TDesC16 const &, int, TAlign, TChar)
+ Locate2__C7TDesC16G5TChar @ 2254 NONAME R3UNUSED ABSENT ; TDesC16::Locate2(TChar) const
+ LocateF2__C7TDesC16G5TChar @ 2255 NONAME R3UNUSED ABSENT ; TDesC16::LocateF2(TChar) const
+ LocateReverse2__C7TDesC16G5TChar @ 2256 NONAME R3UNUSED ABSENT ; TDesC16::LocateReverse2(TChar) const
+ LocateReverseF2__C7TDesC16G5TChar @ 2257 NONAME R3UNUSED ABSENT ; TDesC16::LocateReverseF2(TChar) const
+ LowerCase2__6TDes16 @ 2258 NONAME R3UNUSED ABSENT ; TDes16::LowerCase2(void)
+ Match2__C7TDesC16RC7TDesC16 @ 2259 NONAME R3UNUSED ABSENT ; TDesC16::Match2(TDesC16 const &) const
+ UpperCase2__6TDes16 @ 2260 NONAME R3UNUSED ABSENT ; TDes16::UpperCase2(void)
+ AgainHighRes__6RTimerR14TRequestStatusG27TTimeIntervalMicroSeconds32 @ 2261 NONAME R3UNUSED ABSENT ; RTimer::AgainHighRes(TRequestStatus &, TTimeIntervalMicroSeconds32)
+ Align__C10RAllocatorPv @ 2262 NONAME R3UNUSED ABSENT ; RAllocator::Align(void *) const
+ Align__C10RAllocatori @ 2263 NONAME R3UNUSED ABSENT ; RAllocator::Align(int) const
+ Base__C10RAllocator @ 2264 NONAME R3UNUSED ABSENT ; RAllocator::Base(void) const
+ MaxLength__C10RAllocator @ 2265 NONAME R3UNUSED ABSENT ; RAllocator::MaxLength(void) const
+ Size__C10RAllocator @ 2266 NONAME R3UNUSED ABSENT ; RAllocator::Size(void) const
+ __DbgGetAllocFail__10RAllocator @ 2267 NONAME R3UNUSED ABSENT ; RAllocator::__DbgGetAllocFail(void)
+ __DbgGetAllocFail__4Useri @ 2268 NONAME R3UNUSED ABSENT ; User::__DbgGetAllocFail(int)
+ SetKeyOffset__10RArrayBasei @ 2269 NONAME R3UNUSED ; RArrayBase::SetKeyOffset(int)
+
--- a/kernel/eka/bwins/ekernu.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bwins/ekernu.def Mon Jun 21 17:12:14 2010 +0300
@@ -935,4 +935,5 @@
?Retire@KernCoreStats@@SAHHH@Z @ 934 NONAME ABSENT ; public: static int KernCoreStats::Retire(int, int)
?Stats@KernCoreStats@@SAHPAX@Z @ 935 NONAME ABSENT ; public: static int KernCoreStats::Stats(void *)
?SelectiveAlloc@TBitMapAllocator@@QAEIHH@Z @ 936 NONAME ; public: unsigned int __thiscall TBitMapAllocator::SelectiveAlloc(int,int)
+ ?SetKeyOffset@RArrayBase@@IAEXH@Z @ 937 NONAME ; void RArrayBase::SetKeyOffset(int)
--- a/kernel/eka/bwins/euseru.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bwins/euseru.def Mon Jun 21 17:12:14 2010 +0300
@@ -2181,6 +2181,39 @@
?SetReadOnly@TChunkCreateInfo@@QAEXXZ @ 2180 NONAME ; public: void __thiscall TChunkCreateInfo::SetReadOnly(void)
?RandomL@Math@@SAXAAVTDes8@@@Z @ 2181 NONAME ; void Math::RandomL(class TDes8 &)
?Random@Math@@SAXAAVTDes8@@@Z @ 2182 NONAME ; void Math::Random(class TDes8 &)
- ?RandomL@Math@@SAKXZ @ 2183 NONAME ; unsigned long Math::RandomL(void)
+ ?RandomL@Math@@SAKXZ @ 2183 NONAME ; unsigned long Math::RandomL(void)
+ ?Append2@TDes16@@QAEXVTChar@@@Z @ 2184 NONAME ABSENT ; void TDes16::Append2(class TChar)
+ ?CopyC2@TDes16@@QAEXABVTDesC16@@@Z @ 2185 NONAME ABSENT ; void TDes16::CopyC2(class TDesC16 const &)
+ ?Collate2@TDes16@@QAEXXZ @ 2186 NONAME ABSENT ; void TDes16::Collate2(void)
+ ?CopyF2@TDes16@@QAEXABVTDesC16@@@Z @ 2187 NONAME ABSENT ; void TDes16::CopyF2(class TDesC16 const &)
+ ?Fill2@TDes16@@QAEXVTChar@@@Z @ 2188 NONAME ABSENT ; void TDes16::Fill2(class TChar)
+ ?Locate2@TDesC16@@QBEHVTChar@@@Z @ 2189 NONAME ABSENT ; int TDesC16::Locate2(class TChar) const
+ ?AppendFill2@TDes16@@QAEXVTChar@@H@Z @ 2190 NONAME ABSENT ; void TDes16::AppendFill2(class TChar, int)
+ ?AppendJustify2@TDes16@@QAEXABVTDesC16@@HHW4TAlign@@VTChar@@@Z @ 2191 NONAME ABSENT ; void TDes16::AppendJustify2(class TDesC16 const &, int, int, enum TAlign, class TChar)
+ ?AppendJustify2@TDes16@@QAEXPBGHW4TAlign@@VTChar@@@Z @ 2192 NONAME ABSENT ; void TDes16::AppendJustify2(unsigned short const *, int, enum TAlign, class TChar)
+ ?Fold2@TDes16@@QAEXXZ @ 2193 NONAME ABSENT ; void TDes16::Fold2(void)
+ ?AppendJustify2@TDes16@@QAEXABVTDesC16@@HW4TAlign@@VTChar@@@Z @ 2194 NONAME ABSENT ; void TDes16::AppendJustify2(class TDesC16 const &, int, enum TAlign, class TChar)
+ ?LowerCase2@TDes16@@QAEXXZ @ 2195 NONAME ABSENT ; void TDes16::LowerCase2(void)
+ ?CopyUC2@TDes16@@QAEXABVTDesC16@@@Z @ 2196 NONAME ABSENT ; void TDes16::CopyUC2(class TDesC16 const &)
+ ?FindCorruptSurrogate@TDesC16@@QBEHXZ @ 2197 NONAME ABSENT ; int TDesC16::FindCorruptSurrogate(void) const
+ ?Justify2@TDes16@@QAEXABVTDesC16@@HW4TAlign@@VTChar@@@Z @ 2198 NONAME ABSENT ; void TDes16::Justify2(class TDesC16 const &, int, enum TAlign, class TChar)
+ ?UpperCase2@TDes16@@QAEXXZ @ 2199 NONAME ABSENT ; void TDes16::UpperCase2(void)
+ ?Capitalize2@TDes16@@QAEXXZ @ 2200 NONAME ABSENT ; void TDes16::Capitalize2(void)
+ ?AppendJustify2@TDes16@@QAEXPBGHHW4TAlign@@VTChar@@@Z @ 2201 NONAME ABSENT ; void TDes16::AppendJustify2(unsigned short const *, int, int, enum TAlign, class TChar)
+ ?CopyLC2@TDes16@@QAEXABVTDesC16@@@Z @ 2202 NONAME ABSENT ; void TDes16::CopyLC2(class TDesC16 const &)
+ ?Fill2@TDes16@@QAEXVTChar@@H@Z @ 2203 NONAME ABSENT ; void TDes16::Fill2(class TChar, int)
+ ?LocateF2@TDesC16@@QBEHVTChar@@@Z @ 2204 NONAME ABSENT ; int TDesC16::LocateF2(class TChar) const
+ ?Match2@TDesC16@@QBEHABV1@@Z @ 2205 NONAME ABSENT ; int TDesC16::Match2(class TDesC16 const &) const
+ ?LocateReverse2@TDesC16@@QBEHVTChar@@@Z @ 2206 NONAME ABSENT ; int TDesC16::LocateReverse2(class TChar) const
+ ?LocateReverseF2@TDesC16@@QBEHVTChar@@@Z @ 2207 NONAME ABSENT ; int TDesC16::LocateReverseF2(class TChar) const
+ ?CopyCP2@TDes16@@QAEXABVTDesC16@@@Z @ 2208 NONAME ABSENT ; void TDes16::CopyCP2(class TDesC16 const &)
+ ?AgainHighRes@RTimer@@QAEXAAVTRequestStatus@@VTTimeIntervalMicroSeconds32@@@Z @ 2209 NONAME ABSENT ; public: void __thiscall RTimer::AgainHighRes(class TRequestStatus &,class TTimeIntervalMicroSeconds32)
+ ?Align@RAllocator@@QBEPAXPAX@Z @ 2210 NONAME ABSENT ; void * RAllocator::Align(void *) const
+ ?Align@RAllocator@@QBEHH@Z @ 2211 NONAME ABSENT ; int RAllocator::Align(int) const
+ ?Size@RAllocator@@QBEHXZ @ 2212 NONAME ABSENT ; int RAllocator::Size(void) const
+ ?Base@RAllocator@@QBEPAEXZ @ 2213 NONAME ABSENT ; void * RAllocator::Base(void) const
+ ?MaxLength@RAllocator@@QBEHXZ @ 2214 NONAME ABSENT ; int RAllocator::MaxLength(void) const
+ ?__DbgGetAllocFail@RAllocator@@QAE?AW4TAllocFail@1@XZ @ 2215 NONAME ABSENT ; enum RAllocator::TAllocFail RAllocator::__DbgGetAllocFail(void)
+ ?__DbgGetAllocFail@User@@SA?AW4TAllocFail@RAllocator@@H@Z @ 2216 NONAME ABSENT ; enum RAllocator::TAllocFail User::__DbgGetAllocFail(int)
+ ?SetKeyOffset@RArrayBase@@IAEXH@Z @ 2217 NONAME ; void RArrayBase::SetKeyOffset(int)
-
--- a/kernel/eka/bx86/ekernsmp.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bx86/ekernsmp.def Mon Jun 21 17:12:14 2010 +0300
@@ -1012,4 +1012,5 @@
?SetNumberOfActiveCpus@NKern@@SAXH@Z @ 1011 NONAME ABSENT ; public: static void __cdecl NKern::SetNumberOfActiveCpus(int)
?FreeRamZone@Epoc@@SAHI@Z @ 1012 NONAME ABSENT ; public: static int Epoc::FreeRamZone(unsigned int)
?SelectiveAlloc@TBitMapAllocator@@QAEIHH@Z @ 1013 NONAME ; public: unsigned int __thiscall TBitMapAllocator::SelectiveAlloc(int,int)
+ ?SetKeyOffset@RArrayBase@@IAEXH@Z @ 1014 NONAME ; void RArrayBase::SetKeyOffset(int)
--- a/kernel/eka/bx86/ekernu.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bx86/ekernu.def Mon Jun 21 17:12:14 2010 +0300
@@ -957,4 +957,5 @@
?Stats@KernCoreStats@@SAHPAX@Z @ 956 NONAME ABSENT ; public: static int KernCoreStats::Stats(void *)
?FreeRamZone@Epoc@@SAHI@Z @ 957 NONAME ABSENT ; public: static int Epoc::FreeRamZone(unsigned int)
?SelectiveAlloc@TBitMapAllocator@@QAEIHH@Z @ 958 NONAME ; public: unsigned int __thiscall TBitMapAllocator::SelectiveAlloc(int,int)
+ ?SetKeyOffset@RArrayBase@@IAEXH@Z @ 959 NONAME ; void RArrayBase::SetKeyOffset(int)
--- a/kernel/eka/bx86/euseru.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bx86/euseru.def Mon Jun 21 17:12:14 2010 +0300
@@ -2182,5 +2182,38 @@
?RandomL@Math@@SAXAAVTDes8@@@Z @ 2181 NONAME ; void Math::RandomL(class TDes8 &)
?Random@Math@@SAXAAVTDes8@@@Z @ 2182 NONAME ; void Math::Random(class TDes8 &)
?RandomL@Math@@SAKXZ @ 2183 NONAME ; unsigned long Math::RandomL(void)
-
-
+ ?Append2@TDes16@@QAEXVTChar@@@Z @ 2184 NONAME ABSENT ; void TDes16::Append2(class TChar)
+ ?CopyC2@TDes16@@QAEXABVTDesC16@@@Z @ 2185 NONAME ABSENT ; void TDes16::CopyC2(class TDesC16 const &)
+ ?Collate2@TDes16@@QAEXXZ @ 2186 NONAME ABSENT ; void TDes16::Collate2(void)
+ ?CopyF2@TDes16@@QAEXABVTDesC16@@@Z @ 2187 NONAME ABSENT ; void TDes16::CopyF2(class TDesC16 const &)
+ ?Fill2@TDes16@@QAEXVTChar@@@Z @ 2188 NONAME ABSENT ; void TDes16::Fill2(class TChar)
+ ?Locate2@TDesC16@@QBEHVTChar@@@Z @ 2189 NONAME ABSENT ; int TDesC16::Locate2(class TChar) const
+ ?AppendFill2@TDes16@@QAEXVTChar@@H@Z @ 2190 NONAME ABSENT ; void TDes16::AppendFill2(class TChar, int)
+ ?AppendJustify2@TDes16@@QAEXABVTDesC16@@HHW4TAlign@@VTChar@@@Z @ 2191 NONAME ABSENT ; void TDes16::AppendJustify2(class TDesC16 const &, int, int, enum TAlign, class TChar)
+ ?AppendJustify2@TDes16@@QAEXPBGHW4TAlign@@VTChar@@@Z @ 2192 NONAME ABSENT ; void TDes16::AppendJustify2(unsigned short const *, int, enum TAlign, class TChar)
+ ?Fold2@TDes16@@QAEXXZ @ 2193 NONAME ABSENT ; void TDes16::Fold2(void)
+ ?AppendJustify2@TDes16@@QAEXABVTDesC16@@HW4TAlign@@VTChar@@@Z @ 2194 NONAME ABSENT ; void TDes16::AppendJustify2(class TDesC16 const &, int, enum TAlign, class TChar)
+ ?LowerCase2@TDes16@@QAEXXZ @ 2195 NONAME ABSENT ; void TDes16::LowerCase2(void)
+ ?CopyUC2@TDes16@@QAEXABVTDesC16@@@Z @ 2196 NONAME ABSENT ; void TDes16::CopyUC2(class TDesC16 const &)
+ ?FindCorruptSurrogate@TDesC16@@QBEHXZ @ 2197 NONAME ABSENT ; int TDesC16::FindCorruptSurrogate(void) const
+ ?Justify2@TDes16@@QAEXABVTDesC16@@HW4TAlign@@VTChar@@@Z @ 2198 NONAME ABSENT ; void TDes16::Justify2(class TDesC16 const &, int, enum TAlign, class TChar)
+ ?UpperCase2@TDes16@@QAEXXZ @ 2199 NONAME ABSENT ; void TDes16::UpperCase2(void)
+ ?Capitalize2@TDes16@@QAEXXZ @ 2200 NONAME ABSENT ; void TDes16::Capitalize2(void)
+ ?AppendJustify2@TDes16@@QAEXPBGHHW4TAlign@@VTChar@@@Z @ 2201 NONAME ABSENT ; void TDes16::AppendJustify2(unsigned short const *, int, int, enum TAlign, class TChar)
+ ?CopyLC2@TDes16@@QAEXABVTDesC16@@@Z @ 2202 NONAME ABSENT ; void TDes16::CopyLC2(class TDesC16 const &)
+ ?Fill2@TDes16@@QAEXVTChar@@H@Z @ 2203 NONAME ABSENT ; void TDes16::Fill2(class TChar, int)
+ ?LocateF2@TDesC16@@QBEHVTChar@@@Z @ 2204 NONAME ABSENT ; int TDesC16::LocateF2(class TChar) const
+ ?Match2@TDesC16@@QBEHABV1@@Z @ 2205 NONAME ABSENT ; int TDesC16::Match2(class TDesC16 const &) const
+ ?LocateReverse2@TDesC16@@QBEHVTChar@@@Z @ 2206 NONAME ABSENT ; int TDesC16::LocateReverse2(class TChar) const
+ ?LocateReverseF2@TDesC16@@QBEHVTChar@@@Z @ 2207 NONAME ABSENT ; int TDesC16::LocateReverseF2(class TChar) const
+ ?CopyCP2@TDes16@@QAEXABVTDesC16@@@Z @ 2208 NONAME ABSENT ; void TDes16::CopyCP2(class TDesC16 const &)
+ ?AgainHighRes@RTimer@@QAEXAAVTRequestStatus@@VTTimeIntervalMicroSeconds32@@@Z @ 2209 NONAME ABSENT ; public: void __thiscall RTimer::AgainHighRes(class TRequestStatus &,class TTimeIntervalMicroSeconds32)
+ ?Align@RAllocator@@QBEHH@Z @ 2210 NONAME ABSENT ; public: int __thiscall RAllocator::Align(int)const
+ ?Align@RAllocator@@QBEPAXPAX@Z @ 2211 NONAME ABSENT ; public: void * __thiscall RAllocator::Align(void *)const
+ ?Base@RAllocator@@QBEPAEXZ @ 2212 NONAME ABSENT ; public: void * __thiscall RAllocator::Base(void)const
+ ?MaxLength@RAllocator@@QBEHXZ @ 2213 NONAME ABSENT ; public: int __thiscall RAllocator::MaxLength(void)const
+ ?Size@RAllocator@@QBEHXZ @ 2214 NONAME ABSENT ; public: int __thiscall RAllocator::Size(void)const
+ ?__DbgGetAllocFail@RAllocator@@QAE?AW4TAllocFail@1@XZ @ 2215 NONAME ABSENT ; enum RAllocator::TAllocFail RAllocator::__DbgGetAllocFail(void)
+ ?__DbgGetAllocFail@User@@SA?AW4TAllocFail@RAllocator@@H@Z @ 2216 NONAME ABSENT ; enum RAllocator::TAllocFail User::__DbgGetAllocFail(int)
+ ?SetKeyOffset@RArrayBase@@IAEXH@Z @ 2217 NONAME ; void RArrayBase::SetKeyOffset(int)
+
--- a/kernel/eka/bx86gcc/ekernsmp.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bx86gcc/ekernsmp.def Mon Jun 21 17:12:14 2010 +0300
@@ -1100,4 +1100,5 @@
_ZN5NKern21SetNumberOfActiveCpusEi @ 1099 NONAME ABSENT
_ZN4Epoc11FreeRamZoneEj @ 1100 NONAME ABSENT
_ZN16TBitMapAllocator14SelectiveAllocEii @ 1101 NONAME
+ _ZN10RArrayBase12SetKeyOffsetEi @ 1102 NONAME
--- a/kernel/eka/bx86gcc/ekernu.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bx86gcc/ekernu.def Mon Jun 21 17:12:14 2010 +0300
@@ -1040,4 +1040,5 @@
_ZN13KernCoreStats9LeaveIdleEj @ 1039 NONAME ABSENT
_ZN4Epoc11FreeRamZoneEj @ 1040 NONAME ABSENT
_ZN16TBitMapAllocator14SelectiveAllocEii @ 1041 NONAME
+ _ZN10RArrayBase12SetKeyOffsetEi @ 1042 NONAME
--- a/kernel/eka/bx86gcc/euseru.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/bx86gcc/euseru.def Mon Jun 21 17:12:14 2010 +0300
@@ -2461,3 +2461,38 @@
_ZN4Math7RandomLER5TDes8 @ 2460 NONAME
_ZN4Math6RandomER5TDes8 @ 2461 NONAME
_ZN4Math7RandomLEv @ 2462 NONAME
+ _ZN6TDes1610LowerCase2Ev @ 2463 NONAME ABSENT
+ _ZN6TDes1610UpperCase2Ev @ 2464 NONAME ABSENT
+ _ZN6TDes1611AppendFill2E5TChari @ 2465 NONAME ABSENT
+ _ZN6TDes1611Capitalize2Ev @ 2466 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2EPKti6TAlign5TChar @ 2467 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2EPKtii6TAlign5TChar @ 2468 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2ERK7TDesC16i6TAlign5TChar @ 2469 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2ERK7TDesC16ii6TAlign5TChar @ 2470 NONAME ABSENT
+ _ZN6TDes165Fill2E5TChar @ 2471 NONAME ABSENT
+ _ZN6TDes165Fill2E5TChari @ 2472 NONAME ABSENT
+ _ZN6TDes165Fold2Ev @ 2473 NONAME ABSENT
+ _ZN6TDes166CopyC2ERK7TDesC16 @ 2474 NONAME ABSENT
+ _ZN6TDes166CopyF2ERK7TDesC16 @ 2475 NONAME ABSENT
+ _ZN6TDes167Append2E5TChar @ 2476 NONAME ABSENT
+ _ZN6TDes167CopyCP2ERK7TDesC16 @ 2477 NONAME ABSENT
+ _ZN6TDes167CopyLC2ERK7TDesC16 @ 2478 NONAME ABSENT
+ _ZN6TDes167CopyUC2ERK7TDesC16 @ 2479 NONAME ABSENT
+ _ZN6TDes168Collate2Ev @ 2480 NONAME ABSENT
+ _ZN6TDes168Justify2ERK7TDesC16i6TAlign5TChar @ 2481 NONAME ABSENT
+ _ZNK7TDesC1614LocateReverse2E5TChar @ 2482 NONAME ABSENT
+ _ZNK7TDesC1615LocateReverseF2E5TChar @ 2483 NONAME ABSENT
+ _ZNK7TDesC1620FindCorruptSurrogateEv @ 2484 NONAME ABSENT
+ _ZNK7TDesC166Match2ERKS_ @ 2485 NONAME ABSENT
+ _ZNK7TDesC167Locate2E5TChar @ 2486 NONAME ABSENT
+ _ZNK7TDesC168LocateF2E5TChar @ 2487 NONAME ABSENT
+ _ZN6RTimer12AgainHighResER14TRequestStatus27TTimeIntervalMicroSeconds32 @ 2488 NONAME ABSENT
+ _ZNK10RAllocator4BaseEv @ 2489 NONAME ABSENT
+ _ZNK10RAllocator4SizeEv @ 2490 NONAME ABSENT
+ _ZNK10RAllocator5AlignEPv @ 2491 NONAME ABSENT
+ _ZNK10RAllocator5AlignEi @ 2492 NONAME ABSENT
+ _ZNK10RAllocator9MaxLengthEv @ 2493 NONAME ABSENT
+ _ZN10RAllocator17__DbgGetAllocFailEv @ 2494 NONAME ABSENT
+ _ZN4User17__DbgGetAllocFailEi @ 2495 NONAME ABSENT
+ _ZN10RArrayBase12SetKeyOffsetEi @ 2496 NONAME
+
--- a/kernel/eka/common/array.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/common/array.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -663,6 +663,12 @@
return iCount;
}
+EXPORT_C void RArrayBase::SetKeyOffset(TInt aKeyOffset)
+ {
+ __ASSERT_ALWAYS(TUint(aKeyOffset)<TUint(iEntrySize) && (aKeyOffset&3)==0, Panic(EBadArrayKeyOffset));
+ iKeyOffset = aKeyOffset;
+ }
+
#ifndef __ARRAY_MACHINE_CODED__
EXPORT_C TAny* RArrayBase::At(TInt anIndex) const
{
--- a/kernel/eka/eabi/ekernsmp.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/eabi/ekernsmp.def Mon Jun 21 17:12:14 2010 +0300
@@ -1189,4 +1189,5 @@
_ZN3Arm14SetIdleHandlerEPFvPvmPVvES0_ @ 1188 NONAME ABSENT
_ZN4Epoc11FreeRamZoneEj @ 1189 NONAME ABSENT
_ZN16TBitMapAllocator14SelectiveAllocEii @ 1190 NONAME
+ _ZN10RArrayBase12SetKeyOffsetEi @ 1191 NONAME
--- a/kernel/eka/eabi/ekernu.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/eabi/ekernu.def Mon Jun 21 17:12:14 2010 +0300
@@ -1181,4 +1181,5 @@
_ZN3Arm14SetIdleHandlerEPFvPvmES0_ @ 1180 NONAME ABSENT
_ZN4Epoc11FreeRamZoneEj @ 1181 NONAME ABSENT
_ZN16TBitMapAllocator14SelectiveAllocEii @ 1182 NONAME
+ _ZN10RArrayBase12SetKeyOffsetEi @ 1183 NONAME
--- a/kernel/eka/eabi/euseru.def Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/eabi/euseru.def Mon Jun 21 17:12:14 2010 +0300
@@ -2504,4 +2504,38 @@
_ZN4Math7RandomLER5TDes8 @ 2503 NONAME
_ZN4Math6RandomER5TDes8 @ 2504 NONAME
_ZN4Math7RandomLEv @ 2505 NONAME
+ _ZN6TDes1610LowerCase2Ev @ 2506 NONAME ABSENT
+ _ZN6TDes1610UpperCase2Ev @ 2507 NONAME ABSENT
+ _ZN6TDes1611AppendFill2E5TChari @ 2508 NONAME ABSENT
+ _ZN6TDes1611Capitalize2Ev @ 2509 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2EPKti6TAlign5TChar @ 2510 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2EPKtii6TAlign5TChar @ 2511 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2ERK7TDesC16i6TAlign5TChar @ 2512 NONAME ABSENT
+ _ZN6TDes1614AppendJustify2ERK7TDesC16ii6TAlign5TChar @ 2513 NONAME ABSENT
+ _ZN6TDes165Fill2E5TChar @ 2514 NONAME ABSENT
+ _ZN6TDes165Fill2E5TChari @ 2515 NONAME ABSENT
+ _ZN6TDes165Fold2Ev @ 2516 NONAME ABSENT
+ _ZN6TDes166CopyC2ERK7TDesC16 @ 2517 NONAME ABSENT
+ _ZN6TDes166CopyF2ERK7TDesC16 @ 2518 NONAME ABSENT
+ _ZN6TDes167Append2E5TChar @ 2519 NONAME ABSENT
+ _ZN6TDes167CopyCP2ERK7TDesC16 @ 2520 NONAME ABSENT
+ _ZN6TDes167CopyLC2ERK7TDesC16 @ 2521 NONAME ABSENT
+ _ZN6TDes167CopyUC2ERK7TDesC16 @ 2522 NONAME ABSENT
+ _ZN6TDes168Collate2Ev @ 2523 NONAME ABSENT
+ _ZN6TDes168Justify2ERK7TDesC16i6TAlign5TChar @ 2524 NONAME ABSENT
+ _ZNK7TDesC1614LocateReverse2E5TChar @ 2525 NONAME ABSENT
+ _ZNK7TDesC1615LocateReverseF2E5TChar @ 2526 NONAME ABSENT
+ _ZNK7TDesC1620FindCorruptSurrogateEv @ 2527 NONAME ABSENT
+ _ZNK7TDesC166Match2ERKS_ @ 2528 NONAME ABSENT
+ _ZNK7TDesC167Locate2E5TChar @ 2529 NONAME ABSENT
+ _ZNK7TDesC168LocateF2E5TChar @ 2530 NONAME ABSENT
+ _ZN6RTimer12AgainHighResER14TRequestStatus27TTimeIntervalMicroSeconds32 @ 2531 NONAME ABSENT
+ _ZNK10RAllocator4BaseEv @ 2532 NONAME ABSENT
+ _ZNK10RAllocator4SizeEv @ 2533 NONAME ABSENT
+ _ZNK10RAllocator5AlignEPv @ 2534 NONAME ABSENT
+ _ZNK10RAllocator5AlignEi @ 2535 NONAME ABSENT
+ _ZNK10RAllocator9MaxLengthEv @ 2536 NONAME ABSENT
+ _ZN10RAllocator17__DbgGetAllocFailEv @ 2537 NONAME ABSENT
+ _ZN4User17__DbgGetAllocFailEi @ 2538 NONAME ABSENT
+ _ZN10RArrayBase12SetKeyOffsetEi @ 2539 NONAME
--- a/kernel/eka/euser/epoc/win32/emulator.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/euser/epoc/win32/emulator.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -79,6 +79,51 @@
return WideCharToMultiByte(Data.iCodePage,0,aUnicode,-1,aNarrow,aLength,"@",NULL);
}
+LOCAL_C TInt GetSectionsSize(const IMAGE_NT_HEADERS32* aBase)
+//
+// Iterates through the section headers at the start of an image and determines the minimum amount of the
+// PE file that must be read in in order to examine the sections themselves
+//
+ {
+ // List of sections are are interested in examining
+ const BYTE* sectionNames[] =
+ {
+ KWin32SectionName_Symbian, KWin32SectionName_Import, KWin32SectionName_EpocData, KWin32SectionName_EpocBss,
+ KWin32SectionName_Text, KWin32SectionName_RData, KWin32SectionName_NmdExpData
+ };
+
+ // Get a ptr to the first section header in preparation for examining all the section headers
+ DWORD maxOffset = 0;
+ const IMAGE_NT_HEADERS32* ntHead = aBase;
+ const IMAGE_SECTION_HEADER* imgHead = (const IMAGE_SECTION_HEADER*) ((TUint8*) &ntHead->OptionalHeader + ntHead->FileHeader.SizeOfOptionalHeader);
+ const IMAGE_SECTION_HEADER* end = imgHead + ntHead->FileHeader.NumberOfSections;
+
+ for (; imgHead < end; ++imgHead)
+ {
+ TBool SectionUsed = EFalse;
+
+ // Go through each of the sections that we need to examine and see if the current section is in the list
+ for (TInt index = 0; index < (sizeof(sectionNames) / sizeof(BYTE*)); ++index)
+ {
+ if (memcmp(imgHead->Name, sectionNames[index], IMAGE_SIZEOF_SHORT_NAME)==0)
+ SectionUsed = ETrue;
+ }
+
+ // If the current section is one we are interested in, calculate its offset in the raw file and add its size;
+ // this gives us the minimum amount of the file to be mapped in order to examine this section and all those
+ // preceding it
+ if (SectionUsed)
+ {
+ if ((imgHead->PointerToRawData + imgHead->SizeOfRawData) > maxOffset)
+ {
+ maxOffset = (imgHead->PointerToRawData + imgHead->SizeOfRawData);
+ }
+ }
+ }
+
+ return(maxOffset);
+ }
+
template <TUint S>
struct Buf8
{
@@ -810,7 +855,32 @@
if (!iMapping)
return LastError();
- iBase = MapViewOfFile(iMapping, FILE_MAP_READ, 0, 0, 0);
+ // First we need to read in the PE file's image headers, which consist of a 4 byte signature, the file header
+ // containing general information and up to 96 section headers. Map this amount of the file into memory so
+ // that we can examine it and calculate the minimum size of the sections themselves that need to be mapped into
+ // memory in order to examine the actual sections
+ SIZE_T headersSize = (sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + (96 * sizeof(IMAGE_OPTIONAL_HEADER)));
+ iBase = MapViewOfFile(iMapping, FILE_MAP_READ, 0, 0, headersSize);
+
+ if (iBase)
+ {
+ // Scan through the section headers and determine the minimum amount of the file to be mapped into memory
+ // in order for us to safely examine the sections, and map the file into memory. We do this rather than
+ // map the entire PE file into memory because with full debug information, DLLs can be anything up to 100 MB!!!
+ TInt sectionsSize = GetSectionsSize(NtHeader());
+
+ // Before remapping the file with its new size, unmap it. While one would think that it is safe to
+ // increase the size of the file's mapping it is not, and doing so triggers behaviour in Windows that
+ // results in quickly using up all available virtual memory address space!
+ if (UnmapViewOfFile(iBase))
+ {
+ iBase = MapViewOfFile(iMapping, FILE_MAP_READ, 0, 0, sectionsSize);
+ }
+ else
+ {
+ iBase = NULL;
+ }
+ }
if (!iBase)
{
--- a/kernel/eka/euser/v7_0/euser-7_0.cia Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/euser/v7_0/euser-7_0.cia Mon Jun 21 17:12:14 2010 +0300
@@ -1,4 +1,18 @@
-//
+// Copyright (c) 2010 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/v7_0/euser-7_0.cia
+//
// EUSER-7_0.CIA - generated by GENSHIMSRC.BAT
//
--- a/kernel/eka/include/e32cmn.h Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/include/e32cmn.h Mon Jun 21 17:12:14 2010 +0300
@@ -5430,6 +5430,7 @@
IMPORT_C RArrayBase(TInt anEntrySize, TInt aMinGrowBy, TInt aKeyOffset, TInt aFactor);
IMPORT_C RArrayBase(TInt aEntrySize,TAny* aEntries, TInt aCount);
IMPORT_C void Close();
+ IMPORT_C void SetKeyOffset(TInt aKeyOffset);
IMPORT_C TInt Count() const;
IMPORT_C TAny* At(TInt anIndex) const;
IMPORT_C TInt Append(const TAny* anEntry);
@@ -5528,6 +5529,7 @@
inline RArray(TInt aMinGrowBy, TInt aKeyOffset, TInt aFactor);
inline RArray(TInt aEntrySize,T* aEntries, TInt aCount);
inline void Close();
+ inline void SetKeyOffset(TInt aKeyOffset);
inline TInt Count() const;
inline const T& operator[](TInt anIndex) const;
inline T& operator[](TInt anIndex);
--- a/kernel/eka/include/e32cmn.inl Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/include/e32cmn.inl Mon Jun 21 17:12:14 2010 +0300
@@ -4980,6 +4980,21 @@
template <class T>
+inline void RArray<T>::SetKeyOffset(TInt aOffset)
+/**
+Sets the offset of the ordering key within each array entry.
+
+@param aKeyOffset The key offset.
+
+@panic USER 128, if aKeyOffset is not positive, or is not less than the
+ size of class T, or is not a multiple of 4.
+*/
+ {RArrayBase::SetKeyOffset(aOffset);}
+
+
+
+
+template <class T>
inline TInt RArray<T>::Count() const
/**
Gets the number of objects in the array.
--- a/kernel/eka/include/e32ver.h Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/include/e32ver.h Mon Jun 21 17:12:14 2010 +0300
@@ -28,7 +28,7 @@
const TInt KE32MajorVersionNumber=2;
const TInt KE32MinorVersionNumber=0;
-const TInt KE32BuildVersionNumber=2127;
+const TInt KE32BuildVersionNumber=2137;
const TInt KMachineConfigurationMajorVersionNumber=1;
const TInt KMachineConfigurationMinorVersionNumber=0;
--- a/kernel/eka/include/emulator.h Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/include/emulator.h Mon Jun 21 17:12:14 2010 +0300
@@ -33,6 +33,10 @@
class TUidType;
class TProcessCreateInfo;
+// Names of sections that we are interested in looking at. These are used by the GetSectionsSize()
+// routine to determine the minimum number of bytes of a DLL to map into memory in order to examine
+// its sections. If a new section is added here then it must also be added to the list of sections
+// held in the sectionNames array in GetSectionsSize()
static const BYTE KWin32SectionName_Symbian[IMAGE_SIZEOF_SHORT_NAME] = {'.','S','Y','M','B','I','A','N'};
static const BYTE KWin32SectionName_Import[IMAGE_SIZEOF_SHORT_NAME] = {'.','i','d','a','t','a','\0','\0'};
static const BYTE KWin32SectionName_EpocData[IMAGE_SIZEOF_SHORT_NAME] = {'.','d','a','t','a','\0','\0','\0'};
--- a/kernel/eka/include/kernel/sproperty.h Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/include/kernel/sproperty.h Mon Jun 21 17:12:14 2010 +0300
@@ -95,7 +95,19 @@
private:
friend class TProperty;
- DProcess* iProcess;
+
+ /**
+ Defines the context of iProcess.
+ @internalComponent
+ */
+ enum {KScheduledForCompletion = 1, KProcessPtrMask = 0xfffffffe};
+
+ /**
+ The process that has required notification.
+ LSB is set if the request is scheduled for completition.
+ */
+ DProcess* iProcess;
+
};
--- a/kernel/eka/kernel/sinit.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/kernel/sinit.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -372,6 +372,7 @@
pN->iFlags |= KThreadFlagSystemPermanent; // supervisor thread can't exit for any reason
+ K::SvThread=pN;
K::TheKernelThread=pN;
K::SvMsgQ->iThread=&pN->iNThread;
K::SvBarrierQ.SetDfcQ(K::SvMsgQ);
--- a/kernel/eka/kernel/sipc.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/kernel/sipc.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -1144,7 +1144,7 @@
if(m->IsDelivered() || m->IsAccepted())
{
- if (!IsClosing())
+ if (!IsClosing() && t->iMState != DThread::EDead)
{
m->SetCompleting();
Kern::QueueRequestComplete(t, m, aReason);
@@ -1750,7 +1750,7 @@
s->iConnectMsgPtr = NULL;
__KTRACE_OPT(KIPC,Kern::Printf("MsgCo: M:%d r:%d %O->%O", m.iFunction, aReason, TheCurrentThread, m.iClient));
- if (!s->IsClosing())
+ if (!s->IsClosing() && m.iClient->iMState != DThread::EDead)
{
m.SetCompleting();
Kern::QueueRequestComplete(m.iClient, &m, aReason);
--- a/kernel/eka/kernel/sproperty.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/kernel/sproperty.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -29,6 +29,14 @@
return TheCurrentThread->iOwningProcess;
}
+// Used by a thread to schedule cancelation of Subscribe request in Supervisor thread.
+class TCancelQ: public SDblQueLink
+{
+public:
+ TPropertySubsRequest* iPropSubRequest;//The request to be cancelled, can be NULL
+ NFastSemaphore iFSemaphore;//Semafore to be signalled by Supervisor thread after the request is cancelled.
+};
+
class TProperty
{
public:
@@ -112,7 +120,10 @@
static void CompleteRequest(TPropertySubsRequest*, TInt aReason);
static void CompleteQue(SDblQue* aQue, TInt aReason);
static void CompleteDfc(TAny* aQue);
-
+ static void CompleteDfcByKErrPermissionDenied(TAny* aQue);
+ static void CompleteDfcByKErrNotFound(TAny* aQue);
+ static void CompleteCancellationQDfc(TAny* aQue);
+
static TUint Hash(TUint aCategory, TUint aKey);
static TProperty** Lookup(TUint aCategory, TUint aKey);
static TInt LookupOrCreate(TUint aCategory, TUint aKey, TProperty**);
@@ -186,10 +197,17 @@
#endif // !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
- enum { KCompletionDfcPriority = 2 };
+ enum { KCancellationDfcPriority = 1, KCompletionDfcPriority = 2 };
static TDfc CompletionDfc;
- // subscriptions to be completed by the DFC
- static SDblQue CompletionQue; // protected by the system lock
+ static TDfc CompletionDfcPermissionDenied;
+ static TDfc CompletionDfcNotFound;
+ static TDfc CancellationDfc;
+
+ // subscriptions to be completed by the DFCs, protected by system lock
+ static SDblQue CompletionQue; // to be completed by KerrNone
+ static SDblQue CompletionQuePermissionDenied;
+ static SDblQue CompletionQueNotFound;
+ static SDblQue CancellationQue;
static DMutex* FeatureLock; ///< Order KMutexOrdPubSub
@@ -266,8 +284,20 @@
};
+// Completion/Cancelation DFCs and their corresponding queues.
+// All subscribe requests are completed in Supervisor thread.
TDfc TProperty::CompletionDfc(TProperty::CompleteDfc, &TProperty::CompletionQue, KCompletionDfcPriority);
SDblQue TProperty::CompletionQue;
+
+TDfc TProperty::CompletionDfcPermissionDenied(TProperty::CompleteDfcByKErrPermissionDenied, &TProperty::CompletionQuePermissionDenied, KCompletionDfcPriority);
+SDblQue TProperty::CompletionQuePermissionDenied;
+
+TDfc TProperty::CompletionDfcNotFound(TProperty::CompleteDfcByKErrNotFound, &TProperty::CompletionQueNotFound, KCompletionDfcPriority);
+SDblQue TProperty::CompletionQueNotFound;
+
+TDfc TProperty::CancellationDfc(TProperty::CompleteCancellationQDfc, &TProperty::CancellationQue, KCancellationDfcPriority);
+SDblQue TProperty::CancellationQue;
+
DMutex* TProperty::FeatureLock;
TProperty* TProperty::Table[KHashTableLimit];
@@ -288,6 +318,9 @@
if (r != KErrNone)
return r;
CompletionDfc.SetDfcQ(K::SvMsgQ);
+ CompletionDfcPermissionDenied.SetDfcQ(K::SvMsgQ);
+ CompletionDfcNotFound.SetDfcQ(K::SvMsgQ);
+ CancellationDfc.SetDfcQ(K::SvMsgQ);
#ifdef __DEMAND_PAGING__
r = Kern::MutexCreate(PagingLockMutex, KPubSubMutexName2, KMutexOrdPubSub2);
@@ -512,8 +545,9 @@
// iteration; we get (move) always the first 'iPendingQue' entry until the
// queue becomes empty.
//
- SDblQue localPendingQue; // protected by the system lock
- SDblQue localCompletionQue; // protected by the system lock
+
+ SDblQue localPendingQue; // Will hold requests with sufficient capabilities.
+ TInt accessDeniedCounter = 0;// Will count requests with no sufficient capabilities.
NKern::LockSystem();
while (!iPendingQue.IsEmpty())
{
@@ -522,7 +556,8 @@
subs->iProcess = NULL;
if (process && !CheckGetRights(process, __PLATSEC_DIAGNOSTIC_STRING("Checked whilst trying to Subscribe to a Publish and Subscribe Property")))
{ // Check fails - will complete the subscription with an error
- localCompletionQue.Add(subs);
+ CompletionQuePermissionDenied.Add(subs);
+ accessDeniedCounter++;
}
else
{ // Check OK - will leave in the pending queue
@@ -536,8 +571,10 @@
// Now the property can be accessed by other threads.
Use();
Unlock();
- // Now we can complete requests.
- CompleteQue(&localCompletionQue, KErrPermissionDenied);
+
+ // Schedule DFC to complete requests of those with insufficient capabilities.
+ if (accessDeniedCounter)
+ CompletionDfcPermissionDenied.Enque();
return KErrNone;
}
@@ -604,9 +641,10 @@
SetNotDefined();
// Down from here nobody can access the property value
- // We don't want to complete requests holding the feature lock.
- SDblQue localQue;
- localQue.MoveFrom(&iPendingQue);
+ // Move all pending requests to completion queue (to be completed by KErrNotFound).
+ TBool pendingQueEmpty = iPendingQue.IsEmpty();
+ if(!pendingQueEmpty)
+ CompletionQueNotFound.MoveFrom(&iPendingQue);
NKern::UnlockSystem();
@@ -616,8 +654,10 @@
Release();
// '*this' may do not exist any more
Unlock();
- // Now we can complete.
- CompleteQue(&localQue, KErrNotFound);
+
+ // Schedule Svc Dfc to complete all requests from CompletionQueNotFound.
+ if (!pendingQueEmpty)
+ CompletionDfcNotFound.Enque();
return KErrNone;
}
@@ -661,9 +701,8 @@
aSubs->iProcess = NULL;
if (aProcess && !CheckGetRights(aProcess,__PLATSEC_DIAGNOSTIC_STRING("Checked whilst trying to Subscribe to a Publish and Subscribe Property")))
{
- NKern::ThreadEnterCS();
- CompleteRequest(aSubs, KErrPermissionDenied);
- NKern::ThreadLeaveCS();
+ CompletionQuePermissionDenied.Add(aSubs);
+ CompletionDfcPermissionDenied.Enque(SYSTEM_LOCK);
return KErrNone;
}
}
@@ -681,36 +720,70 @@
void TProperty::Cancel(TPropertySubsRequest* aSubs)
{
__ASSERT_SYSTEM_LOCK;
- if (!aSubs->iNext)
- { // not pending - silently return
- NKern::UnlockSystem();
+
+ // This is set if the request is about to be completed (in SVC thread). In that case, a 'dummy' CancelationDFC
+ // will be scheduled here. This will just ensure that we don't return from Cancel before ongoing completion has finished.
+ TBool scheduledForCompletition = (TInt)(aSubs->iProcess) & TPropertySubsRequest::KScheduledForCompletion;
+
+ if (!aSubs->iNext && !scheduledForCompletition)
+ { // Neither in any queue nor scheduled for completion.
+ // The request is not active - silently return.
+ NKern::UnlockSystem();
return;
}
- aSubs->Deque();
- aSubs->iNext = NULL;
- aSubs->iProcess = NULL;
- NKern::ThreadEnterCS();
- CompleteRequest(aSubs, KErrCancel);
- NKern::ThreadLeaveCS();
+
+ if (aSubs->iNext)
+ {
+ // Take it out from the current queue. It is usually pending queue of a property but could
+ // also be one of the completion queues.
+ aSubs->Deque();
+ aSubs->iNext = NULL;
+ }
+
+ // Set process to NULL (leave KScheduledForCompletion bit as it is)
+ aSubs->iProcess = (DProcess*)((TInt)aSubs->iProcess & ~TPropertySubsRequest::KProcessPtrMask);
+
+ if (&Kern::CurrentThread() == K::SvThread)
+ { // Complete the request immediatelly if already running in supervisor thread...
+ if (!scheduledForCompletition)
+ CompleteRequest(aSubs, KErrCancel); //This will also release system lock.
+ else
+ NKern::UnlockSystem(); // Nothing to be done here. Just release system lock.
+ }
+ else
+ { //... or schedule DFC in supervisor thread to complete the request.
+ TCancelQ linkQ;
+ if (!scheduledForCompletition)
+ linkQ.iPropSubRequest = aSubs; // CancelationDFC will complete this request with KErrCancel.
+ else
+ linkQ.iPropSubRequest = NULL; // Schedule 'dummy' CancelationDFC (no request will be completed).
+ linkQ.iFSemaphore.iOwningThread = NKern::CurrentThread();
+ CancellationQue.Add(&linkQ);
+ CancellationDfc.Enque(SYSTEM_LOCK); // This will also release system lock.
+
+ NKern::FSWait(&linkQ.iFSemaphore); // Wait for CancellationDfc to finish.
+ }
}
// Enter system locked.
// Return system unlocked.
-// Called in CS or a DFC context
+// Executed in supervisor thread.
void TProperty::CompleteRequest(TPropertySubsRequest* aSubs, TInt aResult)
{ // static
__ASSERT_SYSTEM_LOCK;
- __ASSERT_CRITICAL;
+ __PS_ASSERT(&Kern::CurrentThread() == K::SvThread);
TPropertyCompleteFn fn = aSubs->iCompleteFn;
TAny* ptr = aSubs->iPtr;
+ // Mark that this request is about to be completed.
+ aSubs->iProcess = (DProcess*)((TInt)aSubs->iProcess | TPropertySubsRequest::KScheduledForCompletion);
NKern::UnlockSystem();
(*fn)(ptr, aResult);
}
-// Called in CS or a DFC context
+// Executed in supervisor thread.
void TProperty::CompleteQue(SDblQue* aQue, TInt aReason)
{ // static
- __ASSERT_CRITICAL;
+ __PS_ASSERT(&Kern::CurrentThread() == K::SvThread);
NKern::LockSystem();
while (!aQue->IsEmpty())
{
@@ -723,12 +796,53 @@
NKern::UnlockSystem();
}
-// Executed in DFC context
+// Executed in supervisor thread. Completes requests with KErrNone.
void TProperty::CompleteDfc(TAny* aQue)
{ // static
CompleteQue((SDblQue*) aQue, KErrNone);
}
+// Executed in supervisor thread.
+void TProperty::CompleteDfcByKErrPermissionDenied(TAny* aQue)
+ { // static
+ CompleteQue((SDblQue*) aQue, KErrPermissionDenied);
+ }
+
+// Executed in supervisor thread.
+void TProperty::CompleteDfcByKErrNotFound(TAny* aQue)
+ { // static
+ CompleteQue((SDblQue*) aQue, KErrNotFound);
+ }
+
+// Executed in supervisor thread.
+void TProperty::CompleteCancellationQDfc(TAny* aAny)
+ { // static
+ SDblQue* aQue = (SDblQue*)aAny;
+ NKern::LockSystem();
+ while (!aQue->IsEmpty() )
+ {
+ TCancelQ* first = static_cast<TCancelQ*>(aQue->First());
+ first->Deque();
+ first->iNext = NULL;
+
+ if( first->iPropSubRequest)
+ {
+ CompleteRequest(first->iPropSubRequest, KErrCancel); // This will also release system lock.
+ NKern::LockSystem();
+ }
+ else
+ {
+ // Do not complete the request.
+ // It was already just about to be completed when Cancel request was issued.
+ // As all complitions (this method included) run is Svc thread, we can here be sure that
+ // the request is now completed.
+ NKern::FlashSystem(); // Preemption point
+ }
+ NKern::FSSignal( &first->iFSemaphore ); // Issue the signal that the request is now completed.
+ }
+ NKern::UnlockSystem();
+ }
+
// Enter system locked.
// Return system unlocked.
void TProperty::CompleteByDfc()
@@ -900,7 +1014,7 @@
return KErrArgument;
}
iValue = aValue;
- CompleteByDfc();
+ CompleteByDfc(); //This will also release system lock.
return KErrNone;
}
--- a/kernel/eka/kernel/sthread.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/kernel/sthread.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -114,8 +114,23 @@
iTls.Close();
if (iSyncMsgPtr)
{
- __KTRACE_OPT(KSERVER,Kern::Printf("DThread::Destruct(%08X) freeing sync message at %08X", this, iSyncMsgPtr));
- iSyncMsgPtr->ReleaseMessagePool(RMessageK::ESync, 1);
+ // The sync message might still be outstanding; in particular it may be
+ // on the kernel server's list of messages to be cleaned up on behalf of
+ // dead clients. So we only release it here if it's free; otherwise, we
+ // mutate the type, so that cleanup will return it to the Global pool.
+ NKern::LockSystem();
+ if (iSyncMsgPtr->IsFree())
+ {
+ NKern::UnlockSystem();
+ __KTRACE_OPT(KSERVER,Kern::Printf("DThread::Destruct(%08X) releasing sync message at %08X", this, iSyncMsgPtr));
+ iSyncMsgPtr->ReleaseMessagePool(RMessageK::ESync, 1);
+ }
+ else
+ {
+ __KTRACE_OPT(KSERVER,Kern::Printf("DThread::Destruct(%08X) mutating sync message at %08X", this, iSyncMsgPtr));
+ iSyncMsgPtr->iMsgType = RMessageK::EGlobal;
+ NKern::UnlockSystem();
+ }
iSyncMsgPtr = NULL;
}
FreeSupervisorStack();
--- a/kernel/eka/memmodel/epoc/flexible/mmu/mpager.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/memmodel/epoc/flexible/mmu/mpager.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -458,8 +458,7 @@
case SPageInfo::EPagedOld:
case SPageInfo::EPagedOldestClean:
case SPageInfo::EPagedOldestDirty:
- {// Update the list links point to the new page.
- __NK_ASSERT_DEBUG(iYoungCount);
+ {// Update the list links to point to the new page.
SDblQueLink* prevLink = aOldPageInfo.iLink.iPrev;
#ifdef _DEBUG
SDblQueLink* nextLink = aOldPageInfo.iLink.iNext;
@@ -635,7 +634,10 @@
template <class T, TUint maxObjects> class TSequentialColourSelector
{
public:
- static const TUint KMaxSearchLength = _ALIGN_UP(maxObjects, KPageColourCount);
+ enum
+ {
+ KMaxSearchLength = _ALIGN_UP(maxObjects, KPageColourCount)
+ };
FORCE_INLINE TSequentialColourSelector(TUint aTargetLength)
{
@@ -1109,6 +1111,41 @@
}
+TUint DPager::AllowAddFreePages(SPageInfo*& aPageInfo, TUint aNumPages)
+ {
+ if (iMinimumPageCount + iNumberOfFreePages == iMaximumPageCount)
+ {// The paging cache is already at the maximum size so steal a page
+ // so it can be returned to the system if required.
+ aPageInfo = StealOrAllocPage(EFalse, (Mmu::TRamAllocFlags)0);
+ __NK_ASSERT_DEBUG(aPageInfo->PagedState() == SPageInfo::EUnpaged);
+ return 1;
+ }
+ // The paging cache is not at its maximum so determine how many can be added to
+ // the paging cache without it growing past its maximum.
+ aPageInfo = NULL;
+ __NK_ASSERT_DEBUG(iMinimumPageCount + iNumberOfFreePages < iMaximumPageCount);
+ if (iMinimumPageCount + iNumberOfFreePages + aNumPages > iMaximumPageCount)
+ {
+ return iMaximumPageCount - (iMinimumPageCount + iNumberOfFreePages);
+ }
+ else
+ return aNumPages;
+ }
+
+
+void DPager::AllowAddFreePage(SPageInfo*& aPageInfo)
+ {
+ if (iMinimumPageCount + iNumberOfFreePages == iMaximumPageCount)
+ {// The paging cache is already at the maximum size so steal a page
+ // so it can be returned to the system if required.
+ aPageInfo = StealOrAllocPage(EFalse, (Mmu::TRamAllocFlags)0);
+ __NK_ASSERT_DEBUG(aPageInfo->PagedState() == SPageInfo::EUnpaged);
+ return;
+ }
+ aPageInfo = NULL;
+ }
+
+
void DPager::ReturnPageToSystem(SPageInfo& aPageInfo)
{
__NK_ASSERT_DEBUG(RamAllocLock::IsHeld());
@@ -1186,9 +1223,18 @@
TPhysAddr* end = aPages+aCount;
while(aPages<end)
{
+ // Steal a page from the paging cache in case we need to return one to the system.
+ // This may release the ram alloc lock.
+ SPageInfo* pageInfo;
+ AllowAddFreePage(pageInfo);
+
TPhysAddr pagePhys = *aPages++;
if(RPageArray::State(pagePhys)!=RPageArray::ECommitted)
+ {
+ if (pageInfo)
+ AddAsFreePage(pageInfo);
continue; // page is not present
+ }
#ifdef _DEBUG
SPageInfo* pi = SPageInfo::SafeFromPhysAddr(pagePhys&~KPageMask);
@@ -1211,26 +1257,31 @@
case SPageInfo::EPagedOld:
case SPageInfo::EPagedOldestDirty:
case SPageInfo::EPagedOldestClean:
+ if (pageInfo)
+ AddAsFreePage(pageInfo);
continue; // discard already been allowed
case SPageInfo::EPagedPinned:
__NK_ASSERT_DEBUG(0);
default:
__NK_ASSERT_DEBUG(0);
+ if (pageInfo)
+ AddAsFreePage(pageInfo);
continue;
}
- // put page on live list...
+ // put page on live list and free the stolen page...
AddAsYoungestPage(pi);
++iNumberOfFreePages;
-
+ if (pageInfo)
+ ReturnPageToSystem(*pageInfo);
Event(EEventPageDonate,pi);
// re-balance live list...
- RemoveExcessPages();
BalanceAges();
}
+ __NK_ASSERT_DEBUG((iMinimumPageCount + iNumberOfFreePages) <= iMaximumPageCount);
MmuLock::Unlock();
RamAllocLock::Unlock();
}
@@ -1282,7 +1333,7 @@
}
// check paging list has enough pages before we remove one...
- if(iNumberOfFreePages<1)
+ if(!iNumberOfFreePages)
{
// need more pages so get a page from the system...
if(!TryGrowLiveList())
@@ -1318,8 +1369,15 @@
// we may have added a spare free page to the live list without removing one,
// this could cause us to have too many pages, so deal with this...
+
+ // If there are too many pages they should all be unused free pages otherwise
+ // the ram alloc lock may be released by RemoveExcessPages().
+ __NK_ASSERT_DEBUG( !HaveTooManyPages() ||
+ (iMinimumPageCount + iNumberOfFreePages - iMaximumPageCount
+ <= iOldestCleanCount));
RemoveExcessPages();
+ __NK_ASSERT_DEBUG((iMinimumPageCount + iNumberOfFreePages) <= iMaximumPageCount);
MmuLock::Unlock();
RamAllocLock::Unlock();
return r;
@@ -1883,6 +1941,17 @@
}
while(TryGrowLiveList());
+ if (!ok)
+ {// Failed to allocate enough pages so free any excess..
+
+ // If there are too many pages they should all be unused free pages otherwise
+ // the ram alloc lock may be released by RemoveExcessPages().
+ __NK_ASSERT_DEBUG( !HaveTooManyPages() ||
+ (iMinimumPageCount + iNumberOfFreePages - iMaximumPageCount
+ <= iOldestCleanCount));
+ RemoveExcessPages();
+ }
+ __NK_ASSERT_DEBUG((iMinimumPageCount + iNumberOfFreePages) <= iMaximumPageCount);
MmuLock::Unlock();
RamAllocLock::Unlock();
return ok;
@@ -1897,9 +1966,19 @@
RamAllocLock::Lock();
MmuLock::Lock();
- iNumberOfFreePages += aNumPages;
- RemoveExcessPages();
-
+ while (aNumPages)
+ {
+ SPageInfo* pageInfo;
+ // This may release the ram alloc lock but it will flash the mmulock
+ // if not all pages could be added in one go, i.e. freePages != aNumPages.
+ TUint freePages = AllowAddFreePages(pageInfo, aNumPages);
+ iNumberOfFreePages += freePages;
+ aNumPages -= freePages;
+ if (pageInfo)
+ ReturnPageToSystem(*pageInfo);
+ }
+
+ __NK_ASSERT_DEBUG((iMinimumPageCount + iNumberOfFreePages) <= iMaximumPageCount);
MmuLock::Unlock();
RamAllocLock::Unlock();
}
@@ -2054,7 +2133,7 @@
aMaximumPageCount = KAbsoluteMaxPageCount;
// Min must not be greater than max...
- if(aMinimumPageCount>aMaximumPageCount)
+ if(aMinimumPageCount > aMaximumPageCount)
return KErrArgument;
NKern::ThreadEnterCS();
@@ -2072,12 +2151,12 @@
// Make sure aMinimumPageCount is not less than absolute minimum we can cope with...
iMinimumPageLimit = iMinYoungPages * (1 + iYoungOldRatio) / iYoungOldRatio
+ DPageReadRequest::ReservedPagesRequired();
- if(iMinimumPageLimit<iAbsoluteMinPageCount)
+ if(iMinimumPageLimit < iAbsoluteMinPageCount)
iMinimumPageLimit = iAbsoluteMinPageCount;
- if(aMinimumPageCount<iMinimumPageLimit+iReservePageCount)
- aMinimumPageCount = iMinimumPageLimit+iReservePageCount;
- if(aMaximumPageCount<aMinimumPageCount)
- aMaximumPageCount=aMinimumPageCount;
+ if(aMinimumPageCount < iMinimumPageLimit + iReservePageCount)
+ aMinimumPageCount = iMinimumPageLimit + iReservePageCount;
+ if(aMaximumPageCount < aMinimumPageCount)
+ aMaximumPageCount = aMinimumPageCount;
// Increase iMaximumPageCount?
if(aMaximumPageCount > iMaximumPageCount)
@@ -2091,7 +2170,7 @@
}
// Increase iMinimumPageCount?
- TInt r=KErrNone;
+ TInt r = KErrNone;
while(aMinimumPageCount > iMinimumPageCount)
{
TUint newMin = MinU(aMinimumPageCount, iMinimumPageCount + iNumberOfFreePages);
@@ -2101,7 +2180,7 @@
// have to add pages before we can increase minimum page count
if(!TryGrowLiveList())
{
- r=KErrNoMemory;
+ r = KErrNoMemory;
break;
}
}
--- a/kernel/eka/memmodel/epoc/flexible/mmu/mpager.h Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/memmodel/epoc/flexible/mmu/mpager.h Mon Jun 21 17:12:14 2010 +0300
@@ -442,7 +442,8 @@
If the oldest page is on any other list (i.e. is an old or young page) this will steal it,
aquiring the page cleaning mutex first if it is dirty.
- Called from #PageInAllocPage and #TryReturnOldestPageToSystem.
+ Called from #PageInAllocPage, #TryReturnOldestPageToSystem, #AllowAddFreePage and
+ #AllowAddFreePages.
@param aAllowAlloc Indicates whether the method should try to allocate a page from the system
@@ -503,6 +504,29 @@
TBool TryReturnOldestPageToSystem();
/**
+ Ensure adding a page to the paging cache will be within the maximum size.
+
+ @param aPageInfo On return this is set to the SPageInfo of a page that must be returned
+ to the system before a page can be added to the paging cache, or
+ NULL if no page must be returned to the system.
+ */
+ void AllowAddFreePage(SPageInfo*& aPageInfo);
+
+ /**
+ Ensure adding aNumPages pages to the paging cache will be within the maximum size.
+
+ @param aPageInfo On return this is set to the SPageInfo of a page that must be returned
+ to the system before any more pages can be added to the paging cache, or
+ NULL if no page must be returned to the system.
+ @param aNumPages The number of pages the caller wishes to add to the paging cache.
+
+ @return If aPageInfo == NULL on return, this is the number of pages it is possible to
+ add to the paging cache or 1 if aPageInfo != NULL, i.e. a page will need
+ to be returned to the system.
+ */
+ TUint AllowAddFreePages(SPageInfo*& aPageInfo, TUint aNumPages);
+
+ /**
Put a specific page back on the system's free pool.
@pre RamAllocLock held.
--- a/kernel/eka/release.txt Wed Jun 09 11:10:19 2010 +0300
+++ b/kernel/eka/release.txt Mon Jun 21 17:12:14 2010 +0300
@@ -1,3 +1,91 @@
+Version 2.00.2137
+=================
+(Made by vfebvre 09/06/2010)
+
+1. shubmurt
+ 1. ou1cimx1#387232 CodeAbort exception in CompleteQue method, kernel/sproperty.cpp
+ Changes in Publish & Subscribe
+
+2. coliward
+ 1. ou1cimx1#424882 SDK specific: Unable to Install Midlet in the Emulator.
+
+
+Version 2.00.2136
+=================
+(Made by vfebvre 07/06/2010)
+
+1. lanerobe
+ 1. ou1cimx1#393868 Use built-in uint32 sort function
+
+2. martai
+ 1. ou1cimx1#414410 E32TEST T_RAMALL occasionally times out
+
+
+Version 2.00.2135
+=================
+(Made by vfebvre 04/06/2010)
+
+1. kingzhan
+ 1. ou1cimx1#415058 92 Mutex ordering violation in USB driver
+
+2. cnotton
+ 1. ou1cimx1#414553 Attempt to export missing file bootstrap_smrif.h
+
+
+Version 2.00.2134
+=================
+(Made by vfebvre 03/06/2010)
+
+1. martai
+ 1. ou1cimx1#414435 WDP: The paging cache can increase beyond its maximum size temporarily
+
+
+Version 2.00.2133
+=================
+(Made by vfebvre 03/06/2010)
+
+1. jimhofe
+ 1. MINOR_CHANGE Documentation formatting tweaks
+
+2. gcochran
+ 1. ou1cimx1#400068 E32TEST RMessagePtr2::Kill is not exercised by t_message
+
+
+Version 2.00.2132
+=================
+(Made by vfebvre 02/06/2010)
+
+1. davegord
+ 1. ou1cimx1#410777 Kernel Message Pool corrupted by delayed DeadClientCleanup
+
+
+Version 2.00.2130
+=================
+(Made by vfebvre 28/05/2010)
+
+1. lanerobe
+ 1. ou1cimx1#399811 BM_SUITE does not run on NaviEngine
+
+
+Version 2.00.2129
+=================
+(Made by vfebvre 27/05/2010)
+
+1. vfebvre
+ 1. ou1cimx1#400807 Warnings reported by the Symbian Foundation license checker
+
+2. lanerobe
+ 1. ou1cimx1#399627 Build HCR test roms in its own folder
+
+
+Version 2.00.2128
+=================
+(Made by vfebvre 26/05/2010)
+
+1. elzou
+ 1. ou1cimx1#393925 Phone reset if connect/disconnect USB mouse few times fast
+
+
Version 2.00.2127
=================
(Made by vfebvre 24/05/2010)
Binary file kernelhwsrv_info/doc_pub/base_how_to_armv7_cache_and_access_remapping_-_design.doc has changed
Binary file kernelhwsrv_info/doc_pub/base_how_to_crash_logging.doc has changed
Binary file kernelhwsrv_info/doc_pub/base_how_to_publish_and_subscribe.doc has changed
--- a/kerneltest/e32test/active/t_messge.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/active/t_messge.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -78,7 +78,8 @@
class CTestSession : public CSession2
{
public:
- enum {EStop,ETestInt,ETestPtr,ETestClient,ETestComplete,ETestPtrComplete,ETestCompletePanic,ETestOtherSession,ETestCompleteAfter,ETestMessageConstruction, ETestRMessagePtr2LeavingInterface};
+ enum {EStop,ETestInt,ETestPtr,ETestClient,ETestComplete,ETestPtrComplete,ETestCompletePanic,ETestOtherSession,ETestCompleteAfter,ETestMessageConstruction,
+ ETestRMessagePtr2LeavingInterface, ETestKillCompletePanic};
//Override pure virtual
IMPORT_C virtual void ServiceL(const RMessage2& aMessage);
private:
@@ -323,6 +324,10 @@
case ETestRMessagePtr2LeavingInterface:
r=TestRMessagePtr2LeavingInterface(aMessage);
break;
+ case ETestKillCompletePanic:
+ aMessage.Complete(KErrNone);
+ aMessage.Panic(_L("Testing Panic"),0xFF); //This will panic the server!
+ break;
default:
r=KErrNotSupported;
@@ -480,7 +485,7 @@
test.Next(_L("Start ActiveScheduler and signal to client"));
- test.Printf(_L(" There might be something going on beneath this window"));
+ test.Printf(_L(" There might be something going on beneath this window\n"));
sem.Signal();
CActiveScheduler::Start();
test.Next(_L("Destroy ActiveScheduler"));
@@ -522,6 +527,23 @@
session.PublicSendReceive(CTestSession::EStop, TIpcArgs());//panic should occur before this is serviced
return(KErrNone);
}
+
+TInt KillCompletePanicClientThread (TAny*)
+//
+// A client thread entry - signals to server to kill client after completing the message
+//
+ {
+ sem.Wait();
+
+ TInt r=session.PublicCreateSession(_L("CTestServer"),1);
+ test(r==KErrNone);
+
+ r=session.PublicSendReceive(CTestSession::ETestKillCompletePanic, TIpcArgs());
+ test(r==KErrNone);
+
+ session.PublicSendReceive(CTestSession::EStop, TIpcArgs());//panic should occur before this is serviced
+ return(KErrNone);
+ }
void SimpleRMessage()
//
@@ -575,7 +597,86 @@
test.End();
}
+
+void TestServerCompleteTwicePanic(void)
+ {
+ TRequestStatus clientStat,serverStat;
+
+ TBool justInTime=User::JustInTime();
+
+ test.Next(_L("Check server panics if you try to complete a message twice"));
+ test.Start(_L("Create client and server threads"));
+ clientThread.Create(_L("Client Thread1"),CompletePanicClientThread,KDefaultStackSize,KHeapMinSize,KHeapMaxSize,NULL);
+ serverThread.Create(_L("Server Thread"),ServerThread,KDefaultStackSize,KHeapMinSize,KHeapMaxSize,NULL);
+
+ test.Next(_L("Logon to the threads"));
+ clientThread.Logon(clientStat);
+ serverThread.Logon(serverStat);
+ test.Next(_L("Start the threads"));
+ sem.CreateLocal(0);
+ User::SetJustInTime(EFalse);
+ clientThread.Resume();
+ serverThread.Resume();
+
+ test.Next(_L("Wait for the threads to stop"));
+ User::WaitForRequest(clientStat); //
+ User::WaitForRequest(serverStat);
+ User::SetJustInTime(justInTime);
+ test.Next(_L("Check the exit categories"));
+ test(clientThread.ExitType()==EExitKill);
+ test(clientThread.ExitCategory().Compare(_L("Kill"))==0);
+ test(clientThread.ExitReason()==KErrNone);
+
+ test(serverThread.ExitType()==EExitPanic);
+ test(serverThread.ExitCategory().Compare(_L("USER"))==0);
+ test(serverThread.ExitReason()==ETMesCompletion);
+
+ test.Next(_L("Close the threads"));
+ CLOSE_AND_WAIT(serverThread);
+ CLOSE_AND_WAIT(clientThread);
+ test.End();
+ }
+
+void TestServerKillCompletePanic(void)
+ {
+ TRequestStatus clientStat,serverStat;
+
+ TBool justInTime=User::JustInTime();
+
+ test.Next(_L("Check Server panics if you try to panic a client using a completed message"));
+ test.Start(_L("Create client and server threads"));
+ clientThread.Create(_L("Client Thread2"),KillCompletePanicClientThread,KDefaultStackSize,KHeapMinSize,KHeapMaxSize,NULL);
+ serverThread.Create(_L("Server Thread"),ServerThread,KDefaultStackSize,KHeapMinSize,KHeapMaxSize,NULL);
+
+ test.Next(_L("Logon to the threads"));
+ clientThread.Logon(clientStat);
+ serverThread.Logon(serverStat);
+
+ test.Next(_L("Start the threads"));
+ sem.CreateLocal(0);
+ User::SetJustInTime(EFalse);
+ clientThread.Resume();
+ serverThread.Resume();
+
+ test.Next(_L("Wait for the threads to stop"));
+ User::WaitForRequest(clientStat);
+ User::WaitForRequest(serverStat);
+ User::SetJustInTime(justInTime);
+ test.Next(_L("Check the exit categories"));
+ test(clientThread.ExitType()==EExitKill);
+ test(clientThread.ExitCategory().Compare(_L("Kill"))==0);
+ test(clientThread.ExitReason()==KErrNone);
+
+ test(serverThread.ExitType()==EExitPanic);
+ test(serverThread.ExitCategory().Compare(_L("KERN-EXEC"))==0);
+ test(serverThread.ExitReason()==EBadMessageHandle);
+
+ test.Next(_L("Close the threads"));
+ CLOSE_AND_WAIT(serverThread);
+ CLOSE_AND_WAIT(clientThread);
+ test.End();
+ }
GLDEF_C TInt E32Main()
{
@@ -643,41 +744,10 @@
CLOSE_AND_WAIT(serverThread);
CLOSE_AND_WAIT(clientThread);
test.End();
-
- TBool justInTime=User::JustInTime();
-
- test.Next(_L("Check it Panics if you try to Complete a message twice"));
- test.Start(_L("Create client and server threads"));
- clientThread.Create(_L("Client Thread1"),CompletePanicClientThread,KDefaultStackSize,KHeapMinSize,KHeapMaxSize,NULL);
- serverThread.Create(_L("Server Thread"),ServerThread,KDefaultStackSize,KHeapMinSize,KHeapMaxSize,NULL);
-
- test.Next(_L("Logon to the threads"));
- clientThread.Logon(clientStat);
- serverThread.Logon(serverStat);
-
- test.Next(_L("Start the threads"));
- sem.CreateLocal(0);
- User::SetJustInTime(EFalse);
- clientThread.Resume();
- serverThread.Resume();
- test.Next(_L("Wait for the threads to stop"));
- User::WaitForRequest(clientStat); //
- User::WaitForRequest(serverStat);
- User::SetJustInTime(justInTime);
- test.Next(_L("Check the exit categories"));
- test(clientThread.ExitType()==EExitKill);
- test(clientThread.ExitCategory().Compare(_L("Kill"))==0);
- test(clientThread.ExitReason()==KErrNone);
-
- test(serverThread.ExitType()==EExitPanic);
- test(serverThread.ExitCategory().Compare(_L("USER"))==0);
- test(serverThread.ExitReason()==ETMesCompletion);
-
- test.Next(_L("Close the threads"));
- CLOSE_AND_WAIT(serverThread);
- CLOSE_AND_WAIT(clientThread);
- test.End();
+ TestServerCompleteTwicePanic();
+
+ TestServerKillCompletePanic();
test.End();
--- a/kerneltest/e32test/benchmark/bm_ldd.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/bm_ldd.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -70,7 +70,7 @@
TInt StartTimerStampOverhead();
TInt RequestTimerStampOverhead(); // iRequestInterrupt() implementation
- TInt SetAbsPrioirty(TInt aThreadHandle, TInt aNewPrio, TInt* aOldPrio);
+ TInt SetAbsPriority(TInt aThreadHandle, TInt aNewPrio, TInt* aOldPrio);
DMutex* iLock; // Shall be acquired by anyone who access the object's writable state.
@@ -533,9 +533,9 @@
//
//
-// The implmentation of RBMDriver::SetAbsPrioirty() call.
+// The implementation of RBMDriver::SetAbsPriority() call.
//
-TInt DBMLChannel::SetAbsPrioirty(TInt aThreadHandle, TInt aNewPrio, TInt* aOldPrio)
+TInt DBMLChannel::SetAbsPriority(TInt aThreadHandle, TInt aNewPrio, TInt* aOldPrio)
{
NKern::LockSystem();
//
@@ -690,7 +690,7 @@
TInt newPrio;
TInt oldPrio;
umemget(&newPrio, a2, sizeof(newPrio));
- r = SetAbsPrioirty((TInt) a1, newPrio, &oldPrio);
+ r = SetAbsPriority((TInt) a1, newPrio, &oldPrio);
umemput(a2, &oldPrio, sizeof(oldPrio));
break;
}
--- a/kerneltest/e32test/benchmark/bm_main.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/bm_main.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -78,8 +78,6 @@
#include <e32svr.h>
#include <u32hal.h>
-RTest test(_L("Benchmark Suite"));
-
//
// The default value of the time allocated for one benchmark program.
//
@@ -300,7 +298,7 @@
User::WaitForRequest(iExitStatus);
CLOSE_AND_WAIT(iChild);
//
- // Lower the parent thread prioirty and then restore the current one
+ // Lower the parent thread priority and then restore the current one
// to make sure that the kernel-side thread destruction DFC had a chance to complete.
//
TInt prio = BMProgram::SetAbsPriority(RThread(), iProg->iOrigAbsPriority);
@@ -362,7 +360,7 @@
User::WaitForRequest(iExitStatus);
CLOSE_AND_WAIT(iChild);
//
- // Lower the parent thread prioirty and then restore the current one
+ // Lower the parent thread priority and then restore the current one
// to make sure that the kernel-side thread destruction DFC had a chance to complete.
//
TInt prio = BMProgram::SetAbsPriority(RThread(), iProg->iOrigAbsPriority);
@@ -418,15 +416,9 @@
//
GLDEF_C TInt E32Main()
{
+ RTest test(_L("Benchmark Suite"));
test.Title();
- TInt r = UserSvr::HalFunction(EHalGroupKernel, EKernelHalNumLogicalCpus, 0, 0);
- if (r != 1)
- {
- test.Printf(_L("%d CPUs detected ... test not run\n"), r);
- return r;
- }
-
AddProperty();
AddThread();
AddIpc();
@@ -434,7 +426,7 @@
AddOverhead();
AddrtLatency();
- r = User::LoadPhysicalDevice(KBMPddFileName);
+ TInt r = User::LoadPhysicalDevice(KBMPddFileName);
BM_ERROR(r, (r == KErrNone) || (r == KErrAlreadyExists));
r = User::LoadLogicalDevice(KBMLddFileName);
@@ -545,7 +537,7 @@
//
TBMResult* results = prog->Run(iter, &count);
- // Restore the original prioirty
+ // Restore the original priority
BMProgram::SetAbsPriority(RThread(), prog->iOrigAbsPriority);
//
@@ -617,6 +609,9 @@
void bm_assert_failed(char* aCond, char* aFile, TInt aLine)
{
+ RTest test(_L("Benchmark Suite Assert Failed"));
+ test.Title();
+
TPtrC8 fd((TUint8*)aFile);
TPtrC8 cd((TUint8*)aCond);
@@ -634,6 +629,9 @@
void bm_error_detected(TInt aError, char* aCond, char* aFile, TInt aLine)
{
+ RTest test(_L("Benchmark Suite Error Detected"));
+ test.Title();
+
TPtrC8 fd((TUint8*)aFile);
TPtrC8 cd((TUint8*)aCond);
--- a/kerneltest/e32test/benchmark/bm_suite.h Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/bm_suite.h Mon Jun 21 17:12:14 2010 +0300
@@ -226,7 +226,7 @@
KBMPriorityHigh = 60, // 60 is above all DFC 26 is below timer DFC
/**
* Absolute priority to be used for middle-priority threads.
- * This is also the default prioirty - performance benchmarks are started at this prioirty.
+ * This is also the default priority - performance benchmarks are started at this prioirty.
*/
KBMPriorityMid = KBMPriorityHigh - 1,
/**
@@ -274,7 +274,7 @@
*/
TThreadFunction iChildFunc;
/**
- * The child thread absolute prioirty.
+ * The child thread absolute priority.
* Intialized by constructor.
*/
TInt iChildPrio;
@@ -293,7 +293,7 @@
* Construct a new <code>TBMSpawnArgs</code> object.
*
* @param aChildFunc the child entry point
- * @param aChildPrio the child thread absolute prioirty
+ * @param aChildPrio the child thread absolute priority
* @param aRemote if <code>ETrue</code> the child thread must be created in a separate process;
* otherwise, the child thread must be created within the parent's process.
*/
@@ -343,7 +343,7 @@
*
* @param aThread a handle ro the target thread.
* @param aNewPrio a new absolute priority for the target thread
- * @return the old absolute prioirty of the target thread
+ * @return the old absolute priority of the target thread
*/
static TInt SetAbsPriority(RThread aThread, TInt aNewPrio);
--- a/kerneltest/e32test/benchmark/d32bm.h Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/d32bm.h Mon Jun 21 17:12:14 2010 +0300
@@ -227,7 +227,7 @@
* The operations are implmented as <code>KBMLdName</code> logical device by <code>KBMLddFileName</code>
* logical device driver DLL.
*
- * The API enables to change the absolute prioirty of a thread.
+ * The API enables to change the absolute priority of a thread.
*/
class RBMDriver : public RBusLogicalChannel
{
@@ -243,7 +243,7 @@
return DoCreate(KBMLdName, TVersion(1,0,1), KNullUnit, &KBMPdName, NULL);
}
/**
- * Change the absolute prioirty of a thread.
+ * Change the absolute priority of a thread.
*
* @param aThread a handle to the target thread
* @param aNewPrio a new absolute priority for the target thread
--- a/kerneltest/e32test/benchmark/ipc.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/ipc.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -212,11 +212,11 @@
BMProgram(
aRemote
? ((aPriority == KBMPriorityHigh)
- ? _L("Client-server Framework[Remote High Prioirty Server]")
- : _L("Client-server Framework[Remote Low Prioirty Server]"))
+ ? _L("Client-server Framework[Remote High Priority Server]")
+ : _L("Client-server Framework[Remote Low Priority Server]"))
: ((aPriority == KBMPriorityHigh)
- ? _L("Client-server Framework[Local High Prioirty Server]")
- : _L("Client-server Framework[Local Low Prioirty Server]")))
+ ? _L("Client-server Framework[Local High Priority Server]")
+ : _L("Client-server Framework[Local Low Priority Server]")))
{
iPriority = aPriority;
iRemote = aRemote;
--- a/kerneltest/e32test/benchmark/property.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/property.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -205,25 +205,36 @@
void Property::NotificationLatencyParent(TBMResult* aResult, TBMUInt64 aIter, struct Measurement* aM)
{
+ TRequestStatus st1, st2;
+
RProperty time;
TInt r = time.Define(KPropBenchmarkCategory, 0, RProperty::EByteArray, KPassPolicy, KPassPolicy);
BM_ERROR(r, r == KErrNone);
r = time.Attach(KPropBenchmarkCategory, 0);
BM_ERROR(r, r == KErrNone);
+ time.Subscribe(st2);
RProperty prop;
r = prop.Define(KPropBenchmarkCategory, 1, aM->iType, KPassPolicy, KPassPolicy);
BM_ERROR(r, r == KErrNone);
r = prop.Attach(KPropBenchmarkCategory, 1);
BM_ERROR(r, r == KErrNone);
+ prop.Subscribe(st1);
+
+ RSemaphore sync;
+ r = sync.CreateGlobal(_L("sync"), 0);
+ BM_ERROR(r, r == KErrNone);
NotificationLatencyArgs sl(aM->iType, aM->iSize, aM->iRemote, aIter, aM->iSetGetType);
MBMChild* child = property.SpawnChild(&sl);
+
for (TBMUInt64 i = 0; i < aIter; ++i)
{
- TRequestStatus st;
- prop.Subscribe(st);
- User::WaitForRequest(st);
+ sync.Signal();
+ User::WaitForRequest(st1);
+ BM_ERROR(st1.Int(), st1.Int() == KErrNone);
+ prop.Subscribe(st1);
+
switch(aM->iSetGetType)
{
case EOneArg:
@@ -258,12 +269,11 @@
TBMTicks now;
::bmTimer.Stamp(&now);
- BM_ERROR(st.Int(), st.Int() == KErrNone);
- // subscribe for the time just before Set()
- time.Subscribe(st);
- User::WaitForRequest(st);
- BM_ERROR(st.Int(), st.Int() == KErrNone);
+ User::WaitForRequest(st2);
+ BM_ERROR(st2.Int(), st2.Int() == KErrNone);
+ time.Subscribe(st2);
+
// get the time just before Set()
TBMTicks propSetTime;
TPtr8 ptr((TUint8*) &propSetTime, sizeof(propSetTime), sizeof(propSetTime));
@@ -272,9 +282,19 @@
aResult->Cumulate(TBMTicksDelta(propSetTime, now));
}
+
+ prop.Cancel();
+ User::WaitForRequest(st1);
+ BM_ERROR(st1.Int(), st1.Int() == KErrCancel);
+ time.Cancel();
+ User::WaitForRequest(st2);
+ BM_ERROR(st2.Int(), st2.Int() == KErrCancel);
+
prop.Close();
time.Close();
+ sync.Close();
child->WaitChildExit();
+
r = prop.Delete(KPropBenchmarkCategory, 1);
BM_ERROR(r, r == KErrNone);
r = time.Delete(KPropBenchmarkCategory, 0);
@@ -290,14 +310,25 @@
{
iOutBuf[j] = (TUint8)(j + 1);
}
+
RProperty time;
+ TInt r = time.Attach(KPropBenchmarkCategory, 0);
+ BM_ERROR(r, r == KErrNone);
+
RProperty prop;
- TInt r = prop.Attach(KPropBenchmarkCategory, 1);
+ r = prop.Attach(KPropBenchmarkCategory, 1);
+ BM_ERROR(r, r == KErrNone);
+
+ RSemaphore sync;
+ r = sync.OpenGlobal(_L("sync"));
BM_ERROR(r, r == KErrNone);
+
for (TBMUInt64 i = 0; i < sl->iIterationCount; ++i)
{
+ sync.Wait();
TBMTicks propSetTime;
::bmTimer.Stamp(&propSetTime);
+
switch(sl->iSetGetType)
{
case EOneArg:
@@ -336,13 +367,16 @@
}
break;
}
+
// publish the time just before Set()
TPtr8 ptr((TUint8*) &propSetTime, sizeof(propSetTime), sizeof(propSetTime));
- r = time.Set(KPropBenchmarkCategory, 0, ptr);
+ r = time.Set(ptr);
BM_ERROR(r, r == KErrNone);
}
+
prop.Close();
time.Close();
+ sync.Close();
BMProgram::SetAbsPriority(RThread(), prio);
return KErrNone;
--- a/kerneltest/e32test/benchmark/sync.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/sync.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -272,10 +272,15 @@
void Sync::SemaphoreLatencyParent(TBMResult* aResult, TBMUInt64 aIter, TBool aRemote)
{
+ RSemaphore slSync;
+ TInt r = slSync.CreateGlobal(_L("slSync"), 0);
+ BM_ERROR(r, r == KErrNone);
+
SemaphoreLatencyArgs sl(aRemote, aIter);
MBMChild* child = sync.SpawnChild(&sl);
for (TBMUInt64 i = 0; i < aIter; ++i)
{
+ slSync.Signal();
sl.iSem.Wait();
TBMTicks now;
::bmTimer.Stamp(&now);
@@ -283,20 +288,27 @@
}
child->WaitChildExit();
sl.Close();
+ slSync.Close();
}
TInt Sync::SemaphoreLatencyChild(TAny* ptr)
{
+ RSemaphore slSync;
+ TInt r = slSync.OpenGlobal(_L("slSync"));
+ BM_ERROR(r, r == KErrNone);
+
SemaphoreLatencyArgs* sl = (SemaphoreLatencyArgs*) ptr;
sl->ChildOpen();
for (TBMUInt64 i = 0; i < sl->iIterationCount; ++i)
{
+ slSync.Wait();
TBMTicks sigTime;
::bmTimer.Stamp(&sigTime);
sl->iSem.Signal();
sl->ChildSignalTime(sigTime);
}
sl->ChildClose();
+ slSync.Close();
return KErrNone;
}
@@ -368,11 +380,16 @@
void Sync::ThreadSemaphoreLatencyParent(TBMResult* aResult, TBMUInt64 aIter, TBool aRemote)
{
+ RSemaphore tslSync;
+ TInt r = tslSync.CreateGlobal(_L("tslSync"), 0);
+ BM_ERROR(r, r == KErrNone);
+
ThreadSemaphoreLatencyArgs sl(aRemote, aIter);
MBMChild* child = sync.SpawnChild(&sl);
for (TBMUInt64 i = 0; i < aIter; ++i)
{
sl.iStatus = KRequestPending;
+ tslSync.Signal();
User::WaitForRequest(sl.iStatus);
BM_ASSERT(sl.iStatus == KErrNone);
TBMTicks now;
@@ -381,14 +398,20 @@
}
child->WaitChildExit();
sl.Close();
+ tslSync.Close();
}
TInt Sync::ThreadSemaphoreLatencyChild(TAny* ptr)
{
+ RSemaphore tslSync;
+ TInt r = tslSync.OpenGlobal(_L("tslSync"));
+ BM_ERROR(r, r == KErrNone);
+
ThreadSemaphoreLatencyArgs* sl = (ThreadSemaphoreLatencyArgs*) ptr;
sl->ChildOpen();
for (TBMUInt64 i = 0; i < sl->iIterationCount; ++i)
{
+ tslSync.Wait();
TRequestStatus* sptr = sl->iStatusPtr;
TBMTicks sigTime;
::bmTimer.Stamp(&sigTime);
@@ -396,6 +419,7 @@
sl->ChildSignalTime(sigTime);
}
sl->ChildClose();
+ tslSync.Close();
return KErrNone;
}
--- a/kerneltest/e32test/benchmark/thread.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/benchmark/thread.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -164,8 +164,10 @@
TInt r = child.Create(KNullDesC, Thread::KillingChild, 0x2000, NULL, NULL);
BM_ERROR(r, r == KErrNone);
child.Logon(st);
+ BMProgram::SetAbsPriority(RThread(), KBMPriorityLow);
+ child.Resume();
+ User::After(1000); // Give the child thread a chance to run - killing it too earlier can leave the heap locked
BMProgram::SetAbsPriority(RThread(), KBMPriorityHigh);
- child.Resume();
TBMTicks t1;
::bmTimer.Stamp(&t1);
child.Kill(KErrCancel);
--- a/kerneltest/e32test/group/t_cachechunk.mmp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/group/t_cachechunk.mmp Mon Jun 21 17:12:14 2010 +0300
@@ -18,7 +18,7 @@
TARGET t_cachechunk.exe
TARGETTYPE EXE
SOURCEPATH ../mmu
-SOURCE t_cachechunk.cpp
+SOURCE t_cachechunk.cpp ..\demandpaging\t_dpcmn.cpp
LIBRARY euser.lib hal.lib dptest.lib
OS_LAYER_SYSTEMINCLUDE_SYMBIAN
--- a/kerneltest/e32test/group/t_smpsoakspin.mmp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/group/t_smpsoakspin.mmp Mon Jun 21 17:12:14 2010 +0300
@@ -1,6 +1,17 @@
-// e32test\group\t_smpsoakspin.mmp
+// Copyright (c) 2010 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".
//
-// Copyright (c) 2005 Symbian Ltd. All rights reserved.
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32test/group/t_smpsoakspin.mmp
//
target t_smpsoakspin.exe
--- a/kerneltest/e32test/hcr/hcr.inf Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/hcr/hcr.inf Mon Jun 21 17:12:14 2010 +0300
@@ -29,8 +29,6 @@
PRJ_TESTEXPORTS
hcr_tests.iby /epoc32/rom/include/hcr_tests.iby
-tshell_hcrtest.oby ../../../kernel/eka/rombuild/tshell_hcrtest.oby
-nandloader_hcrtest.oby ../../../kernel/eka/rombuild/nandloader_hcrtest.oby
hcrtest.auto.bat /epoc32/rom/include/hcrtest.auto.bat
hcr_autoexec.bat /epoc32/rom/include/hcr_autoexec.bat
--- a/kerneltest/e32test/hcr/hcrtest_h4roms.mbc Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/hcr/hcrtest_h4roms.mbc Mon Jun 21 17:12:14 2010 +0300
@@ -17,57 +17,57 @@
#ifndef BUILD_NO_UREL
// Multiple Memory Model
//
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR.IMG --type=ubootldr
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR-FAT32.IMG --type=ubootldr -D WITH_FAT32
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR.IMG --type=ubootldr
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR-FAT32.IMG --type=ubootldr -D WITH_FAT32
// Small block NAND support
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-NAND2LDR.IMG --type=nandloader -D _NAND2
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-NAND2LDR.IMG --type=nandloader -D _NAND2
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2
// OneNAND support
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-NANDLDR.IMG --type=nandloader -D _ONENAND
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND.IMG --type=tshell_hcrtest -D _ONENAND
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-NANDLDR.IMG --type=nandloader -D _ONENAND
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b urel -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND.IMG --type=tshell_hcrtest -D _ONENAND
// Direct/Single Memory model - not supported I think
//
- // oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v sh4hrp -b urel -i armv5 --zip --symbol --name=SH4_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
+ // oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v sh4hrp -b urel -i armv5 --zip --symbol --name=SH4_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
// Flexible Memory model
//
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fh4hrp -b urel -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fh4hrp -b urel -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
#endif
// Direct/Single Memory model - not supported I think
//
-// oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v sh4hrp -b udeb -i armv5 --zip --symbol --name=SH4_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
+// oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v sh4hrp -b udeb -i armv5 --zip --symbol --name=SH4_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
// Multiple Memory Model
//
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR-D.IMG --type=ubootldr
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR-FAT32-D.IMG --type=ubootldr -D WITH_FAT32
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR-D.IMG --type=ubootldr
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-BOOTLDR-FAT32-D.IMG --type=ubootldr -D WITH_FAT32
// Small block NAND support
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-NAND2LDR-D.IMG --type=nandloader -D _NAND2
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_PAGED_NAND2B-D.IMG --type=tshell_hcrtest -D USE_SDIO_SD_MMC,WITH_FAT32,_NAND2,PAGED_ROM,PAGED_CODE
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-NAND2LDR-D.IMG --type=nandloader -D _NAND2
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_PAGED_NAND2B-D.IMG --type=tshell_hcrtest -D USE_SDIO_SD_MMC,WITH_FAT32,_NAND2,PAGED_ROM,PAGED_CODE
// OneNAND support
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-NANDLDR-D.IMG --type=nandloader -D _ONENAND
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND-D.IMG --type=tshell_hcrtest -D _ONENAND
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-NANDLDR-D.IMG --type=nandloader -D _ONENAND
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v h4hrp -b udeb -i armv5 --zip --symbol --name=H4_TBARMV5D-TSHELL_NAND-D.IMG --type=tshell_hcrtest -D _ONENAND
// Flexible Memory model
//
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
// Small block NAND support
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-NAND2LDR-D.IMG --type=nandloader -D _NAND2
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL_PAGED_NAND2B-D.IMG --type=tshell_hcrtest -D USE_SDIO_SD_MMC,WITH_FAT32,_NAND2,PAGED_ROM,PAGED_CODE
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-NAND2LDR-D.IMG --type=nandloader -D _NAND2
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL_PAGED_NAND2B-D.IMG --type=tshell_hcrtest -D USE_SDIO_SD_MMC,WITH_FAT32,_NAND2,PAGED_ROM,PAGED_CODE
// OneNAND support
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-NANDLDR-D.IMG --type=nandloader -D _ONENAND
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL_NAND-D.IMG --type=tshell_hcrtest -D _ONENAND
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-NANDLDR-D.IMG --type=nandloader -D _ONENAND
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fh4hrp -b udeb -i armv5 --zip --symbol --name=FH4_TBARMV5D-TSHELL_NAND-D.IMG --type=tshell_hcrtest -D _ONENAND
--- a/kerneltest/e32test/hcr/hcrtest_ne1roms.mbc Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/hcr/hcrtest_ne1roms.mbc Mon Jun 21 17:12:14 2010 +0300
@@ -29,64 +29,64 @@
#ifndef BUILD_NO_UREL
// Direct/Single Memory model - unicore - udeb
//
- // oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v sne1_tb -b urel -i armv5 --zip --symbol --name=SNE1_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
+ // oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v sne1_tb -b urel -i armv5 --zip --symbol --name=SNE1_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest
// Multiple Memory Model - unicore - udeb
//
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR.IMG --type=ubootldr
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR-FAT32.IMG --type=ubootldr -D WITH_FAT32
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR.IMG --type=ubootldr
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR-FAT32.IMG --type=ubootldr -D WITH_FAT32
// Large block NAND support
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-NAND2LDR.IMG --type=nandloader_hcrtest -D _NAND2
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-NAND2LDR.IMG --type=nandloader_hcrtest -D _NAND2
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b urel -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
// OneNAND support -- -D _ONENANDE not supported on NE1
// Flexible Memory model - unicore & SMP - udeb
//
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b urel -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b urel -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b urel -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b urel -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
// Large block NAND support
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b urel -i armv5 --zip --symbol --name=FNE1_TBARMV5D-NAND2LDR.IMG --type=nandloader_hcrtest -D _NAND2
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b urel -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
- oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b urel -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b urel -i armv5 --zip --symbol --name=FNE1_TBARMV5D-NAND2LDR.IMG --type=nandloader_hcrtest -D _NAND2
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b urel -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+ oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b urel -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL_NAND2.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
// OneNAND support -- -D _ONENANDE not supported on NE1
#endif
// Direct/Single Memory model - unicore - udeb
//
-// oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v sne1_tb -b udeb -i armv5 --zip --symbol --name=SNE1_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
+// oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v sne1_tb -b udeb -i armv5 --zip --symbol --name=SNE1_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest
// Multiple Memory Model - unicore - udeb
//
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR-D.IMG --type=ubootldr
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR-FAT32-D.IMG --type=ubootldr -D WITH_FAT32
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR-D.IMG --type=ubootldr
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-BOOTLDR-FAT32-D.IMG --type=ubootldr -D WITH_FAT32
// Large block NAND support
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-NAND2LDR-D.IMG --type=nandloader_hcrtest -D _NAND2
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-NAND2LDR-D.IMG --type=nandloader_hcrtest -D _NAND2
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v ne1_tb -b udeb -i armv5 --zip --symbol --name=NE1_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
// OneNAND support -- -D _ONENANDE not supported on NE1
// Flexible Memory model - unicore & SMP - udeb
//
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL-D.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL-D.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL-D.IMG --type=tshell_hcrtest -D HCR_INCLUDE_VARIANT_TEST_DRIVERS
// Large block NAND support
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-NAND2LDR-D.IMG --type=nandloader_hcrtest -D _NAND2
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-NAND2LDR-D.IMG --type=nandloader_hcrtest -D _NAND2
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL_NAND2-D.IMG --type=tshell_hcrtest -D _NAND2,HCR_INCLUDE_VARIANT_TEST_DRIVERS
// OneNAND support -- -D _ONENANDE not supported on NE1
// Large block NAND support + WDP
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL_NAND2-WDP-D.IMG --type=tshell_hcrtest -D _NAND2,PAGED_ROM,PAGED_CODE,PAGED_DATA,DATAPAGINGWARNINGS,WITH_FAT32,FULL_NAND_TEST,HCR_INCLUDE_VARIANT_TEST_DRIVERS
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-NAND2LDR-WDP-D.IMG --type=nandloader_hcrtest -D _NAND2,_CREATE_NE1_TB_NAND_SWAP
-oneoff \os\kernelhwsrv\kernel\eka\rombuild rom -v fne1_tb -b udeb -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL_NAND2-WDP-D.IMG --type=tshell_hcrtest -D _NAND2,PAGED_ROM,PAGED_CODE,PAGED_DATA,DATAPAGINGWARNINGS,WITH_FAT32,FULL_NAND_TEST,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-TSHELL_NAND2-WDP-D.IMG --type=tshell_hcrtest -D _NAND2,PAGED_ROM,PAGED_CODE,PAGED_DATA,DATAPAGINGWARNINGS,WITH_FAT32,FULL_NAND_TEST,HCR_INCLUDE_VARIANT_TEST_DRIVERS
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 --zip --symbol --name=FNE1_TBARMV5D-NAND2LDR-WDP-D.IMG --type=nandloader_hcrtest -D _NAND2,_CREATE_NE1_TB_NAND_SWAP
+oneoff . \os\kernelhwsrv\kernel\eka\rombuild\rom -v fne1_tb -b udeb -i armv5 -x armv5smp --zip --symbol --name=FNE1_TBARMV5SMPD-TSHELL_NAND2-WDP-D.IMG --type=tshell_hcrtest -D _NAND2,PAGED_ROM,PAGED_CODE,PAGED_DATA,DATAPAGINGWARNINGS,WITH_FAT32,FULL_NAND_TEST,HCR_INCLUDE_VARIANT_TEST_DRIVERS
--- a/kerneltest/e32test/mmu/t_cachechunk.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/mmu/t_cachechunk.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -87,8 +87,9 @@
#include "d_gobble.h"
#include <dptest.h>
#include "freeram.h"
+#include "..\demandpaging\t_dpcmn.h"
-LOCAL_D RTest test(_L("T_CACHECHUNK"));
+RTest test(_L("T_CACHECHUNK"));
RMemoryTestLdd MemoryTest;
@@ -504,6 +505,175 @@
}
+TBool StopCacheThreads;
+
+TInt CacheThreadFunc(TAny* aMax)
+ {
+ RThread::Rendezvous(KErrNone);
+ while (!StopCacheThreads)
+ {
+ TInt maxSize = (TInt)aMax;
+ TInt minSize;
+ TInt r = KErrNone;
+ for (minSize = PageSize << 4; r == KErrNone && !StopCacheThreads; minSize += PageSize)
+ {
+ r = UserSvr::HalFunction(EHalGroupVM,EVMHalSetCacheSize,(TAny*)minSize,(TAny*)maxSize);
+ User::After(minSize/PageSize);
+ }
+ for (minSize -= PageSize;
+ minSize > PageSize << 4 && r == KErrNone && !StopCacheThreads;
+ minSize -= PageSize)
+ {
+ r = UserSvr::HalFunction(EHalGroupVM,EVMHalSetCacheSize,(TAny*)minSize,(TAny*)maxSize);
+ User::After(minSize/PageSize);
+ }
+ }
+ return KErrNone;
+ }
+
+
+TInt DonateThreadFunc(TAny*)
+ {
+ TChunkCreateInfo createInfo;
+ createInfo.SetCache(100 * PageSize);
+ RChunk chunk;
+ TInt r = chunk.Create(createInfo);
+ if (r != KErrNone)
+ {
+ RDebug::Printf("DonateThreadFunc: Failed to create cache chunk %d", r);
+ return r;
+ }
+ TUint chunkEnd = 0;
+ while (chunk.Commit(chunkEnd, PageSize) == KErrNone)
+ chunkEnd += PageSize;
+
+ RThread::Rendezvous(KErrNone);
+ while (!StopCacheThreads)
+ {
+ for (TUint i = PageSize; i <= chunkEnd && !StopCacheThreads; i += PageSize)
+ {
+ chunk.Unlock(0, i);
+ if (chunk.Lock(0, i) != KErrNone)
+ {// Recommit as many pages as possible.
+ while (chunk.Commit(0, chunkEnd) != KErrNone && !StopCacheThreads)
+ chunkEnd -= PageSize;
+ i = 0;
+ }
+ User::After(i/PageSize);
+ }
+ }
+ CLOSE_AND_WAIT(chunk);
+ return KErrNone;
+ }
+
+
+TInt DirtyThreadFunc(TAny*)
+ {
+ RThread::Rendezvous(KErrNone);
+
+ RChunk chunk;
+ TChunkCreateInfo createInfo;
+ createInfo.SetNormal(PageSize * 100, PageSize *100);
+ createInfo.SetPaging(TChunkCreateInfo::EPaged);
+ TInt r = chunk.Create(createInfo);
+ if (r != KErrNone)
+ {
+ RDebug::Printf("Failed to create a cache chunk %d", r);
+ return r;
+ }
+ TUint8* base = chunk.Base();
+ // Dirty each page in the chunk so that there are dirty pages in the live
+ // list while it is being resized and pages are being unlocked.
+ while (!StopCacheThreads)
+ {
+ TUint8* p = base;
+ TUint8* pEnd = base + chunk.Size();
+ for (; p < pEnd && !StopCacheThreads; p += PageSize)
+ {
+ *p = (TUint8)(pEnd - p);
+ User::After((TUint8)(pEnd - p));
+ }
+ }
+ CLOSE_AND_WAIT(chunk);
+ return KErrNone;
+ }
+
+
+void TestResizeExcess()
+ {
+ test.Printf(_L("Commit all of memory again leaving 100 free pages\n"));
+ CommitEnd = 0;
+ TInt r;
+ while(KErrNone==(r=TestChunk.Commit(CommitEnd,PageSize)))
+ {
+ CommitEnd += PageSize;
+ }
+ test(r==KErrNoMemory);
+ test_KErrNone(TestChunk.Unlock(0, 100 * PageSize));
+
+ SVMCacheInfo info;
+ test_KErrNone(UserSvr::HalFunction(EHalGroupVM, EVMHalGetCacheSize, &info, 0));
+
+ StopCacheThreads = EFalse;
+ RThread cacheThread;
+ r = cacheThread.Create( KNullDesC, CacheThreadFunc, KDefaultStackSize, PageSize,
+ PageSize, (TAny*)info.iMaxSize);
+ test_KErrNone(r);
+ TRequestStatus threadStarted;
+ cacheThread.Rendezvous(threadStarted);
+ TRequestStatus cacheStatus;
+ cacheThread.Logon(cacheStatus);
+ cacheThread.Resume();
+ User::WaitForRequest(threadStarted);
+ test_KErrNone(threadStarted.Int());
+
+ // Create the dirty thread before the donate thread as the donate thread may
+ // consume all the free ram periodically.
+ RThread dirtyThread;
+ r = dirtyThread.Create(KNullDesC, DirtyThreadFunc, KDefaultStackSize, PageSize, PageSize, NULL);
+ test_KErrNone(r);
+ dirtyThread.Rendezvous(threadStarted);
+ TRequestStatus dirtyStatus;
+ dirtyThread.Logon(dirtyStatus);
+ dirtyThread.Resume();
+ User::WaitForRequest(threadStarted);
+ test_KErrNone(threadStarted.Int());
+
+ RThread donateThread;
+ r = donateThread.Create(KNullDesC, DonateThreadFunc, KDefaultStackSize, PageSize, PageSize, NULL);
+ test_KErrNone(r);
+ donateThread.Rendezvous(threadStarted);
+ TRequestStatus donateStatus;
+ donateThread.Logon(donateStatus);
+ donateThread.Resume();
+ User::WaitForRequest(threadStarted);
+ test_KErrNone(threadStarted.Int());
+
+ // Run test for 10 secs.
+ User::After(10000000);
+
+ // End the test.
+ StopCacheThreads = ETrue;
+ User::WaitForRequest(donateStatus);
+ test_Equal(EExitKill, donateThread.ExitType());
+ test_KErrNone(donateThread.ExitReason());
+ User::WaitForRequest(dirtyStatus);
+ test_Equal(EExitKill, dirtyThread.ExitType());
+ test_KErrNone(dirtyThread.ExitReason());
+ User::WaitForRequest(cacheStatus);
+ test_Equal(EExitKill, cacheThread.ExitType());
+ test_KErrNone(cacheThread.ExitReason());
+
+ CLOSE_AND_WAIT(donateThread);
+ CLOSE_AND_WAIT(cacheThread);
+ CLOSE_AND_WAIT(dirtyThread);
+
+ test_KErrNone(UserSvr::HalFunction( EHalGroupVM,
+ EVMHalSetCacheSize,
+ (TAny*)info.iMinSize,
+ (TAny*)info.iMaxSize));
+ }
+
TInt E32Main()
{
@@ -636,6 +806,16 @@
if (resizeCache)
test_KErrNone(DPTest::SetCacheSize(originalMin, originalMax));
+ test_KErrNone(GetGlobalPolicies());
+ if (gDataPagingSupported)
+ {
+ test.Next(_L("Test interactions of chunk unlocking and page cache resizing"));
+ // Do this after the live list limit is restored.
+ test_KErrNone(TestChunk.Create(createInfo));
+ TestResizeExcess();
+ TestChunk.Close();
+ }
+
// end...
test.End();
MemoryTest.Close();
--- a/kerneltest/e32test/mmu/t_ramall.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/mmu/t_ramall.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -25,6 +25,7 @@
#include "d_shadow.h"
#include "mmudetect.h"
#include "freeram.h"
+#include "d_gobble.h"
LOCAL_D RTest test(_L("T_RAMALL"));
@@ -47,6 +48,30 @@
TUint OrigMinCacheSize;
TUint OrigMaxCacheSize;
+//
+// Random number generation
+//
+
+TUint32 RandomSeed;
+
+TUint32 Random()
+ {
+ RandomSeed = RandomSeed*69069+1;
+ return RandomSeed;
+ }
+
+TUint32 Random(TUint32 aRange)
+ {
+ return (TUint32)((TUint64(Random())*TUint64(aRange))>>32);
+ }
+
+void RandomInit(TUint32 aSeed)
+ {
+ RandomSeed = aSeed+(aSeed<<8)+(aSeed<<16)+(aSeed<<24);
+ Random();
+ Random();
+ }
+
TInt AllocPhysicalRam(TUint32& aAddr, TInt aSize, TInt aAlign)
{
return Shadow.AllocPhysicalRam(aAddr,aSize,aAlign);
@@ -144,7 +169,7 @@
TInt FillPhysicalRam(TAny* aArgs)
{
- SPhysAllocData& allocData = *((SPhysAllocData*)aArgs);
+ SPhysAllocData allocData = *((SPhysAllocData*)aArgs);
TUint maxAllocs = FreeRam() / allocData.iSize;
TUint32* physAddrs = new TUint32[maxAllocs + 1];
if (!physAddrs)
@@ -224,14 +249,16 @@
{// Need enough heap to store addr of every possible allocation + 1.
TUint requiredHeapMax = Max(PageSize, ((TotalRam / aSize) * sizeof(TUint32)) + sizeof(TUint32));
TInt r = threads[i].Create(KNullDesC, FillPhysicalRam, KDefaultStackSize, PageSize, requiredHeapMax, (TAny*)&allocData);
- test_KErrNone(r);
+ if (r != KErrNone)
+ break;
threads[i].Logon(status[i]);
}
- for (i = 0; i < aNumThreads; i++)
+ TUint totalThreads = i;
+ for (i = 0; i < totalThreads; i++)
{
threads[i].Resume();
}
- for (i = 0; i < aNumThreads; i++)
+ for (i = 0; i < totalThreads; i++)
{
User::WaitForRequest(status[i]);
test_Equal(EExitKill, threads[i].ExitType());
@@ -253,25 +280,32 @@
TInt TouchMemory(TAny*)
{
RThread::Rendezvous(KErrNone); // Signal that this thread has started running.
+ RandomInit(TouchData.iSize);
while (!TouchDataStop)
{
TUint8* p = Chunk.Base();
TUint8* pEnd = p + ChunkCommitEnd;
TUint8* fragPEnd = p + TouchData.iFrequency;
- for (TUint8* fragP = p + TouchData.iSize; fragPEnd < pEnd;)
+ for (TUint8* fragP = p + TouchData.iSize; fragPEnd < pEnd && !TouchDataStop;)
{
TUint8* data = fragP;
- for (; data < fragPEnd; data += PageSize)
+ for (; data < fragPEnd && !TouchDataStop; data += PageSize)
{
*data = (TUint8)(data - fragP);
+ TUint random = Random();
+ if (random & 0x8484)
+ User::After(random & 0xFFFF);
}
- for (data = fragP; data < fragPEnd; data += PageSize)
+ for (data = fragP; data < fragPEnd && !TouchDataStop; data += PageSize)
{
if (*data != (TUint8)(data - fragP))
{
RDebug::Printf("Error unexpected data 0x%x read from 0x%08x", *data, data);
return KErrGeneral;
}
+ TUint random = Random();
+ if (random & 0x8484)
+ User::After(random & 0xFFFF);
}
fragP = fragPEnd + TouchData.iSize;
fragPEnd += TouchData.iFrequency;
@@ -311,10 +345,9 @@
{
TUint minCacheSize = FreeRam();
TUint maxCacheSize = minCacheSize;
- TUint currentCacheSize;
- test_KErrNone(DPTest::CacheSize(OrigMinCacheSize, OrigMaxCacheSize, currentCacheSize));
- test_KErrNone(DPTest::SetCacheSize(minCacheSize, maxCacheSize));
- test_KErrNone(DPTest::SetCacheSize(OrigMinCacheSize, maxCacheSize));
+ DPTest::SetCacheSize(minCacheSize, maxCacheSize);
+ if (OrigMinCacheSize <= maxCacheSize)
+ DPTest::SetCacheSize(OrigMinCacheSize, maxCacheSize);
}
}
@@ -322,7 +355,7 @@
void UnfragmentMemoryFunc()
{
if (FragData.iDiscard && CacheSizeAdjustable)
- test_KErrNone(DPTest::SetCacheSize(OrigMinCacheSize, OrigMaxCacheSize));
+ DPTest::SetCacheSize(OrigMinCacheSize, OrigMaxCacheSize);
Chunk.Decommit(0, Chunk.MaxSize());
}
@@ -351,11 +384,12 @@
TChunkCreateInfo chunkInfo;
chunkInfo.SetDisconnected(0, 0, TotalRam);
chunkInfo.SetPaging(TChunkCreateInfo::EUnpaged);
+ chunkInfo.SetClearByte(0x19);
test_KErrNone(Chunk.Create(chunkInfo));
if (aFragThread)
{
- TInt r = FragThread.Create(KNullDesC, FragmentMemoryThreadFunc, KDefaultStackSize, PageSize, PageSize, NULL);
+ TInt r = FragThread.Create(_L("FragThread"), FragmentMemoryThreadFunc, KDefaultStackSize, PageSize, PageSize, NULL);
test_KErrNone(r);
FragThread.Logon(FragStatus);
FragThreadStop = EFalse;
@@ -373,7 +407,7 @@
{
TouchData.iSize = aSize;
TouchData.iFrequency = aFrequency;
- TInt r = TouchThread.Create(KNullDesC, TouchMemory, KDefaultStackSize, PageSize, PageSize, NULL);
+ TInt r = TouchThread.Create(_L("TouchThread"), TouchMemory, KDefaultStackSize, PageSize, PageSize, NULL);
test_KErrNone(r);
TouchThread.Logon(TouchStatus);
TouchDataStop = EFalse;
@@ -407,6 +441,8 @@
}
else
UnfragmentMemoryFunc();
+ if (CacheSizeAdjustable)
+ test_KErrNone(DPTest::SetCacheSize(OrigMinCacheSize, OrigMaxCacheSize));
CLOSE_AND_WAIT(Chunk);
}
@@ -418,7 +454,7 @@
FragmentMemory(aFragSize, aFragFreq, aDiscard, aTouchMemory, EFalse);
SPhysAllocData allocData;
// Only check free all ram could be allocated in manual tests as fixed pages may be fragmented.
- allocData.iCheckMaxAllocs = (ManualTest && !aTouchMemory && !aAllocAlign)? ETrue : EFalse;
+ allocData.iCheckMaxAllocs = (ManualTest && !aTouchMemory && !aAllocAlign);
allocData.iCheckFreeRam = ETrue;
allocData.iSize = aAllocSize;
allocData.iAlign = aAllocAlign;
@@ -528,6 +564,18 @@
if (memodel >= EMemModelTypeFlexible)
{
+ // To stop these tests taking too long leave only 8MB of RAM free.
+ const TUint KFreePages = 2048;
+ test.Next(_L("Load gobbler LDD"));
+ TInt r = User::LoadLogicalDevice(KGobblerLddFileName);
+ test_Value(r, r == KErrNone || r == KErrAlreadyExists);
+ RGobbler gobbler;
+ r = gobbler.Open();
+ test_KErrNone(r);
+ TUint32 taken = gobbler.GobbleRAM(KFreePages * PageSize);
+ test.Printf(_L("Gobbled: %dK\n"), taken/1024);
+ test.Printf(_L("Free RAM 0x%08X bytes\n"),FreeRam());
+
test.Next(_L("TestFragmentedAllocation"));
TestFragmentedAllocation();
@@ -554,6 +602,8 @@
TestMultipleContiguousAllocations(10, PageSize * 1024, PageShift + 10);
UnfragmentMemory(ETrue, ETrue, EFalse);
+ // Temporarily disable these tests until errors they cause are fixed.
+#if 0
test.Next(_L("TestMultipleContiguousAllocations with repeated movable and discardable allocations"));
FragmentMemory(PageSize, PageSize * 2, EFalse, EFalse, ETrue);
TestMultipleContiguousAllocations(20, PageSize * 2, PageShift);
@@ -570,9 +620,15 @@
FragmentMemory(PageSize * 32, PageSize * 64, ETrue, EFalse, ETrue);
TestMultipleContiguousAllocations(20, PageSize * 1024, PageShift + 10);
UnfragmentMemory(ETrue, EFalse, ETrue);
+#endif
+ gobbler.Close();
+ r = User::FreeLogicalDevice(KGobblerLddFileName);
+ test_KErrNone(r);
}
Shadow.Close();
+ r = User::FreeLogicalDevice(KLddFileName);
+ test_KErrNone(r);
test.Printf(_L("Free RAM=%08x at end of test\n"),FreeRam());
test.End();
return(KErrNone);
--- a/kerneltest/e32test/prime/t_timer.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/prime/t_timer.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -290,16 +290,17 @@
t2.HomeTime();
}
while (t2==t1);
-#if defined(_DEBUG)
- TDateTime dt=t2.DateTime();
- test.Printf(_L("%d:%d\r\n"),dt.Second(),dt.MicroSecond());
-#endif
- test(t2>t1);
+
+ if (t2 <= t1 && t1.MicroSecondsFrom(t2) > TTimeIntervalMicroSeconds(1000)) // HomeTime() only operates at ms precision
+ {
+ test.Printf(_L("Time comparison failed\r\n"));
+ test.Printf(_L("Before: 0x%lx\r\n"), t1.Int64());
+ test.Printf(_L("After: 0x%lx\r\n"), t2.Int64());
+ test(t2>t1);
+ }
+
t1=t2;
}
-#if defined(_DEBUG)
- test.Printf(_L("\r\n"));
-#endif
}
TInt AtTwice(TAny*)
--- a/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/bmwritelargefile.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/bmwritelargefile.pl Mon Jun 21 17:12:14 2010 +0300
@@ -287,8 +287,4 @@
free space for the file that is going to be created. The default size is 400
MB.
-=head1 COPYRIGHT
-
-Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-
=cut
--- a/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/bmwritemanyfiles.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/bmwritemanyfiles.pl Mon Jun 21 17:12:14 2010 +0300
@@ -300,8 +300,4 @@
free space for the file that is going to be created. The default size is 400
MB.
-=head1 COPYRIGHT
-
-Copyright (c) 2006-2008 Symbian Software Ltd. All rights reserved. All rights reserved.
-
=cut
--- a/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/createfilesanddirs.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/createfilesanddirs.pl Mon Jun 21 17:12:14 2010 +0300
@@ -397,8 +397,4 @@
TestExpectedResults:
Read data from files should match with written.
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-
=cut
--- a/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/createlargefile.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32test/usb/t_usb_win/scripts/massstorage/createlargefile.pl Mon Jun 21 17:12:14 2010 +0300
@@ -248,8 +248,4 @@
with written. Sum of file size and free space should be close to
drive size.
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-
=cut
--- a/kerneltest/e32utils/group/base_e32utils.mrp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32utils/group/base_e32utils.mrp Mon Jun 21 17:12:14 2010 +0300
@@ -17,7 +17,6 @@
source \sf\os\kernelhwsrv\kerneltest\e32utils\trace
source \sf\os\kernelhwsrv\kerneltest\e32utils\usbmsapp
source \sf\os\kernelhwsrv\kerneltest\e32utils\sdpartition
-source \sf\os\kernelhwsrv\kerneltest\e32utils\nandboot\coreldr\bootstrap_smrif.h
#MattD: Reltools 2.67 don't understand 'cwtools' are the CW equivelent of 'tools' and try to do '-what cwtools udeb' instead of '-what cwtools deb'.
#binary \sf\os\kernelhwsrv\kerneltest\e32utils\group cwtools
--- a/kerneltest/e32utils/group/bld.inf Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/e32utils/group/bld.inf Mon Jun 21 17:12:14 2010 +0300
@@ -30,8 +30,6 @@
PRJ_EXPORTS
-../nandboot/coreldr/bootstrap_smrif.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(bootstrap_smrif.h)
-
../profiler/profiler.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(profiler.h)
../analyse/profiler.rtf /epoc32/engdoc/profiler/profiler.rtf
--- a/kerneltest/f32test/locl/CodepageUtils/src/t_cputils_cp932.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/f32test/locl/CodepageUtils/src/t_cputils_cp932.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -1,3 +1,16 @@
+// Copyright (c) 2010 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:
//
// Auto-generated by the FatConversiontable tool - Do not edit!!!
//
--- a/kerneltest/f32test/smassstorage/scripts/usbinterop1.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/f32test/smassstorage/scripts/usbinterop1.pl Mon Jun 21 17:12:14 2010 +0300
@@ -279,8 +279,4 @@
TestExpectedResults:
Read data from files should match with written.
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-
=cut
--- a/kerneltest/f32test/smassstorage/scripts/usbinterop2.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/f32test/smassstorage/scripts/usbinterop2.pl Mon Jun 21 17:12:14 2010 +0300
@@ -163,8 +163,4 @@
with written. Sum of file size and free space should be close to
drive size.
-=head1 COPYRIGHT
-
-Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-
=cut
--- a/kerneltest/f32test/smassstorage/scripts/usbperformance.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/f32test/smassstorage/scripts/usbperformance.pl Mon Jun 21 17:12:14 2010 +0300
@@ -174,8 +174,4 @@
free space for the file that is going to be created. The default size is 400
MB.
-=head1 COPYRIGHT
-
- Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-
=cut
--- a/kerneltest/f32test/smassstorage/scripts/usbperformance_multifile.pl Wed Jun 09 11:10:19 2010 +0300
+++ b/kerneltest/f32test/smassstorage/scripts/usbperformance_multifile.pl Mon Jun 21 17:12:14 2010 +0300
@@ -186,8 +186,4 @@
free space for the file that is going to be created. The default size is 400
MB.
-=head1 COPYRIGHT
-
-Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-
=cut
--- a/package_definition.xml Wed Jun 09 11:10:19 2010 +0300
+++ b/package_definition.xml Mon Jun 21 17:12:14 2010 +0300
@@ -141,7 +141,7 @@
<component id="kernelhwsrv_metadata" name="Kernel and Hardware Services Metadata" class="config" introduced="^2" purpose="development" target="desktop">
<unit mrp="kernelhwsrv_info/kernelhwsrv_metadata/kernelhwsrv_metadata.mrp"/>
</component>
- <component id="kernelhwsrv_metadata" name="Kernel and Hardware Services Public Documentation" class="doc" introduced="^3" purpose="development">
+ <component id="kernelhwsrv_docpub" name="Kernel and Hardware Services Public Documentation" class="doc" introduced="^3" purpose="development">
<unit mrp="kernelhwsrv_info/doc_pub/kernelhwsrv_doc_pub.mrp"/>
</component>
</collection>
--- a/userlibandfileserver/fileserver/group/release.txt Wed Jun 09 11:10:19 2010 +0300
+++ b/userlibandfileserver/fileserver/group/release.txt Mon Jun 21 17:12:14 2010 +0300
@@ -1,3 +1,22 @@
+Version 2.00.2062
+=================
+(Made by vfebvre 07/06/2010)
+
+1. davegord
+ 1. ou1cimx1#414834 TB92 Occasional Loader crashes observed during T_WSD_TST_* tests
+ Crash caused by interrupt occurring during handling of SWI called from
+ SVC mode -- which is not supported. Fix is for Loader not to call RDebug
+ methods while executing in supervisor mode.
+
+
+Version 2.00.2061
+=================
+(Made by vfebvre 27/05/2010)
+
+1. vfebvre
+ 1. ou1cimx1#400807 Warnings reported by the Symbian Foundation license checker
+
+
Version 2.00.2060
=================
(Made by vfebvre 25/05/2010)
--- a/userlibandfileserver/fileserver/inc/f32ver.h Wed Jun 09 11:10:19 2010 +0300
+++ b/userlibandfileserver/fileserver/inc/f32ver.h Mon Jun 21 17:12:14 2010 +0300
@@ -58,6 +58,6 @@
@see TVersion
*/
-const TInt KF32BuildVersionNumber=2060;
+const TInt KF32BuildVersionNumber=2062;
//
#endif
--- a/userlibandfileserver/fileserver/sfile/sf_lepoc.cpp Wed Jun 09 11:10:19 2010 +0300
+++ b/userlibandfileserver/fileserver/sfile/sf_lepoc.cpp Mon Jun 21 17:12:14 2010 +0300
@@ -287,9 +287,22 @@
}
}
-// A version that will work in user or supervisor mode
-void MyPrintf(const char* aFmt, ...)
+/**
+It would be nice to be able to print debug information from the various functions
+supervisor-mode functions below. Unfortunately, we can't call RDebug::Printf() or
+any of its relatives in supervisor mode, and of course we can't call the equivalent
+kernel functions even when we're already in supervisor mode, because the entry
+points aren't visible.
+
+So this function just wraps and guards the call to RDebug, so we won't call it
+in SVC mode. The outcome is that trace messages are only generated if using the
+flexible memory model, where the code doesn't actually run in SVC mode anyway.
+*/
+void svPrintf(const char* aFmt, ...)
{
+ if (gExecutesInSupervisorMode)
+ return;
+
VA_LIST list;
VA_START(list, aFmt);
TPtrC8 fmt((const TText8*)aFmt);
@@ -379,15 +392,15 @@
E32Image& exporter = *(E32Image*)aPtr;
// Dump everything potentially useful that we know about the exporter ...
- __LDRTRACE(MyPrintf("RelocateExports: paged? %d, iRomImageHeader@%08x, iHeader@%08x",
+ __LDRTRACE(svPrintf("RelocateExports: paged? %d, iRomImageHeader@%08x, iHeader@%08x",
exporter.iUseCodePaging, exporter.iRomImageHeader, exporter.iHeader));
- __LDRTRACE(MyPrintf(" iCodeLoadAddress %08x, iCodeRunAddress %08x, iCodeSize %x iTextSize %x",
+ __LDRTRACE(svPrintf(" iCodeLoadAddress %08x, iCodeRunAddress %08x, iCodeSize %x iTextSize %x",
exporter.iCodeLoadAddress, exporter.iCodeRunAddress,
exporter.iCodeSize, exporter.iTextSize))
- __LDRTRACE(MyPrintf(" iDataLoadAddress %08x, iDataRunAddress %08x, iDataSize %x iBssSize %x iTotalDataSize %x",
+ __LDRTRACE(svPrintf(" iDataLoadAddress %08x, iDataRunAddress %08x, iDataSize %x iBssSize %x iTotalDataSize %x",
exporter.iDataLoadAddress, exporter.iDataRunAddress,
exporter.iDataSize, exporter.iBssSize, exporter.iTotalDataSize));
- __LDRTRACE(MyPrintf(" iCodeDelta, %x iDataDelta %x, iExportDirEntryDelta %x",
+ __LDRTRACE(svPrintf(" iCodeDelta, %x iDataDelta %x, iExportDirEntryDelta %x",
exporter.iCodeDelta, exporter.iDataDelta, exporter.iExportDirEntryDelta));
// It turns out that very little of the exporter info is useful! For
@@ -429,7 +442,7 @@
newValue = relocAddr; // unknown - just leave it alone
*destExport++ = newValue;
- __LDRTRACE(MyPrintf("RelocateExports: export %d %08x => %08x %c",
+ __LDRTRACE(svPrintf("RelocateExports: export %d %08x => %08x %c",
exporter.iExportDirCount-i, relocAddr, newValue,
(relocAddr >= codeStart && relocAddr < codeFinish) ? 'C' :
(relocAddr >= dataStart && relocAddr < dataFinish) ? 'D' : 'X'));
@@ -471,39 +484,39 @@
E32Image& exporter = *info.iExporter;
#ifdef _DEBUG
- __LDRTRACE(MyPrintf(">svFixupImportAddresses %d imports, code@%08x, fixup@%08x exporter@%08x",
+ __LDRTRACE(svPrintf(">svFixupImportAddresses %d imports, code@%08x, fixup@%08x exporter@%08x",
info.iNumImports, info.iCodeLoadAddress, info.iFixup64, info.iExporter));
// Dump everything potentially useful that we know about the exporter ...
- __LDRTRACE(MyPrintf("%S: paged? %d, iRomImageHeader@%08x, iHeader@%08x",
+ __LDRTRACE(svPrintf("%S: paged? %d, iRomImageHeader@%08x, iHeader@%08x",
&exporter.iFileName, exporter.iUseCodePaging,
exporter.iRomImageHeader, exporter.iHeader));
- __LDRTRACE(MyPrintf("iCodeLoadAddress %08x, iCodeRunAddress %08x, iCodeSize %x iTextSize %x",
+ __LDRTRACE(svPrintf("iCodeLoadAddress %08x, iCodeRunAddress %08x, iCodeSize %x iTextSize %x",
exporter.iCodeLoadAddress, exporter.iCodeRunAddress,
exporter.iCodeSize, exporter.iTextSize))
- __LDRTRACE(MyPrintf("iDataLoadAddress %08x, iDataRunAddress %08x, iDataSize %x iBssSize %x iTotalDataSize %x",
+ __LDRTRACE(svPrintf("iDataLoadAddress %08x, iDataRunAddress %08x, iDataSize %x iBssSize %x iTotalDataSize %x",
exporter.iDataLoadAddress, exporter.iDataRunAddress,
exporter.iDataSize, exporter.iBssSize, exporter.iTotalDataSize));
- __LDRTRACE(MyPrintf("iCodeDelta, %x iDataDelta %x, iExportDirEntryDelta %x",
+ __LDRTRACE(svPrintf("iCodeDelta, %x iDataDelta %x, iExportDirEntryDelta %x",
exporter.iCodeDelta, exporter.iDataDelta, exporter.iExportDirEntryDelta));
if (exporter.iRomImageHeader)
{
const TRomImageHeader& rh = *exporter.iRomImageHeader;
- __LDRTRACE(MyPrintf("ROM: iCodeAddress %08x, iCodeSize %x, iTextSize %x",
+ __LDRTRACE(svPrintf("ROM: iCodeAddress %08x, iCodeSize %x, iTextSize %x",
rh.iCodeAddress, rh.iCodeSize, rh.iTextSize));
- __LDRTRACE(MyPrintf("ROM: iDataAddress %08x, iDataSize %x, iBssSize %x",
+ __LDRTRACE(svPrintf("ROM: iDataAddress %08x, iDataSize %x, iBssSize %x",
rh.iDataAddress, rh.iDataSize, rh.iBssSize));
- __LDRTRACE(MyPrintf("ROM: iDataBssLinearBase %08x, iTotalDataSize %x",
+ __LDRTRACE(svPrintf("ROM: iDataBssLinearBase %08x, iTotalDataSize %x",
rh.iDataBssLinearBase, rh.iTotalDataSize));
}
if (exporter.iHeader)
{
const E32ImageHeader& ih = *exporter.iHeader;
- __LDRTRACE(MyPrintf("HEAD: iCodeBase %08x, iCodeSize %x, iTextSize %x",
+ __LDRTRACE(svPrintf("HEAD: iCodeBase %08x, iCodeSize %x, iTextSize %x",
ih.iCodeBase, ih.iCodeSize, ih.iTextSize));
- __LDRTRACE(MyPrintf("HEAD: iDataBase %08x, iDataSize %x, iBssSize %x",
+ __LDRTRACE(svPrintf("HEAD: iDataBase %08x, iDataSize %x, iBssSize %x",
ih.iDataBase, ih.iDataSize, ih.iBssSize));
}
#endif // _DEBUG
@@ -538,7 +551,7 @@
newValue = expAddr;
}
- __LDRTRACE(MyPrintf("svFixupImportAddresses: import[%d]@%08x is export[%d] == %08x",
+ __LDRTRACE(svPrintf("svFixupImportAddresses: import[%d]@%08x is export[%d] == %08x",
iat - info.iIat, iat, ordinal, newValue));
// In non-paged code, we can simply replace the ordinals in the IAT with the
@@ -573,39 +586,39 @@
E32Image& exporter = *info.iExporter;
#ifdef _DEBUG
- __LDRTRACE(MyPrintf(">svElfDerivedFixupImportAddresses %d imports, code@%08x, fixup@%08x exporter@%08x",
+ __LDRTRACE(svPrintf(">svElfDerivedFixupImportAddresses %d imports, code@%08x, fixup@%08x exporter@%08x",
info.iNumImports, info.iCodeLoadAddress, info.iFixup64, info.iExporter));
// Dump everything potentially useful that we know about the exporter ...
- __LDRTRACE(MyPrintf("%S: paged? %d, iRomImageHeader@%08x, iHeader@%08x",
+ __LDRTRACE(svPrintf("%S: paged? %d, iRomImageHeader@%08x, iHeader@%08x",
&exporter.iFileName, exporter.iUseCodePaging,
exporter.iRomImageHeader, exporter.iHeader));
- __LDRTRACE(MyPrintf("iCodeLoadAddress %08x, iCodeRunAddress %08x, iCodeSize %x iTextSize %x",
+ __LDRTRACE(svPrintf("iCodeLoadAddress %08x, iCodeRunAddress %08x, iCodeSize %x iTextSize %x",
exporter.iCodeLoadAddress, exporter.iCodeRunAddress,
exporter.iCodeSize, exporter.iTextSize))
- __LDRTRACE(MyPrintf("iDataLoadAddress %08x, iDataRunAddress %08x, iDataSize %x iBssSize %x iTotalDataSize %x",
+ __LDRTRACE(svPrintf("iDataLoadAddress %08x, iDataRunAddress %08x, iDataSize %x iBssSize %x iTotalDataSize %x",
exporter.iDataLoadAddress, exporter.iDataRunAddress,
exporter.iDataSize, exporter.iBssSize, exporter.iTotalDataSize));
- __LDRTRACE(MyPrintf("iCodeDelta, %x iDataDelta %x, iExportDirEntryDelta %x",
+ __LDRTRACE(svPrintf("iCodeDelta, %x iDataDelta %x, iExportDirEntryDelta %x",
exporter.iCodeDelta, exporter.iDataDelta, exporter.iExportDirEntryDelta));
if (exporter.iRomImageHeader)
{
const TRomImageHeader& rh = *exporter.iRomImageHeader;
- __LDRTRACE(MyPrintf("ROM: iCodeAddress %08x, iCodeSize %x, iTextSize %x",
+ __LDRTRACE(svPrintf("ROM: iCodeAddress %08x, iCodeSize %x, iTextSize %x",
rh.iCodeAddress, rh.iCodeSize, rh.iTextSize));
- __LDRTRACE(MyPrintf("ROM: iDataAddress %08x, iDataSize %x, iBssSize %x",
+ __LDRTRACE(svPrintf("ROM: iDataAddress %08x, iDataSize %x, iBssSize %x",
rh.iDataAddress, rh.iDataSize, rh.iBssSize));
- __LDRTRACE(MyPrintf("ROM: iDataBssLinearBase %08x, iTotalDataSize %x",
+ __LDRTRACE(svPrintf("ROM: iDataBssLinearBase %08x, iTotalDataSize %x",
rh.iDataBssLinearBase, rh.iTotalDataSize));
}
if (exporter.iHeader)
{
const E32ImageHeader& ih = *exporter.iHeader;
- __LDRTRACE(MyPrintf("HEAD: iCodeBase %08x, iCodeSize %x, iTextSize %x",
+ __LDRTRACE(svPrintf("HEAD: iCodeBase %08x, iCodeSize %x, iTextSize %x",
ih.iCodeBase, ih.iCodeSize, ih.iTextSize));
- __LDRTRACE(MyPrintf("HEAD: iDataBase %08x, iDataSize %x, iBssSize %x",
+ __LDRTRACE(svPrintf("HEAD: iDataBase %08x, iDataSize %x, iBssSize %x",
ih.iDataBase, ih.iDataSize, ih.iBssSize));
}
#endif // _DEBUG
@@ -700,7 +713,7 @@
newValue = expAddr + sectionDelta + adjustment;
}
- __LDRTRACE(MyPrintf("svElfDerivedFixupImportAddresses: import[%d] (%08x:%08x) is export[%d] %08x+%08x => %08x",
+ __LDRTRACE(svPrintf("svElfDerivedFixupImportAddresses: import[%d] (%08x:%08x) is export[%d] %08x+%08x => %08x",
iol - info.iImportOffsetList, codePtr, importInfo, ordinal, expAddr, adjustment, newValue));
// In non-paged code, we can simply replace the ordinals in the IAT with the
@@ -3248,30 +3261,6 @@
}
-/**
-This function is defined because RArray does not natively support
-sorting 64-bit integers.
-
-It is used by FixupDlls to order the import fixup locations in the image
-so they can be organized by page.
-
-@param aLeft 64-bit unsigned integer to compare against aRight.
-@param aRight 64-bit unsigned integer to compare against aLeft.
-@return -1 if aLeft < aRight; 0 if aLeft == aRight; and
- +1 if aLeft > aRight. This conforms to the behavior
- which is expected from a function used by TLinearOrder.
-*/
-static TInt Uint64LinearOrderFunc(const TUint64& aLeft, const TUint64& aRight)
- {
- if (aLeft < aRight)
- return -1;
- else if (aLeft > aRight)
- return 1;
- else
- return 0;
- }
-
-
TUint64* E32Image::ExpandFixups(TInt aNumFixups)
{
__IF_DEBUG(Printf("ExpandFixups,%d+%d", iFixupCount,aNumFixups));
@@ -3315,8 +3304,10 @@
// sort the array in address order, to organize by page
RArray<TUint64> fixup64ToSort(sizeof(TUint64), iFixups, iFixupCount);
- // SortUnsigned doesn't work on TUint64
- fixup64ToSort.Sort(TLinearOrder<TUint64>(Uint64LinearOrderFunc));
+
+ // address is in high word of entry, offset 4
+ fixup64ToSort.SetKeyOffset(4);
+ fixup64ToSort.SortUnsigned();
// now have <address | new-value> pairs, organize into pages.
// Each page is stored as fXXX YYYY ZZZZ where YYYY ZZZZ is written