diff -r 55a0a1279a7e -r 206a6eaaeb71 kerneltest/e32test/mmu/t_shadow.cpp --- a/kerneltest/e32test/mmu/t_shadow.cpp Wed Oct 13 13:34:03 2010 +0100 +++ b/kerneltest/e32test/mmu/t_shadow.cpp Mon Oct 18 15:31:10 2010 +0100 @@ -78,7 +78,11 @@ TUint8* PageBuffer2 = NULL; TUint8* PageBuffer3 = NULL; -void TestShadowPage(TLinAddr aPageAddr, TPaged aPageType) +// A buffer used to test shadowing of paged ROM. It is two pages in size so that it will always +// contain at least one memory page. +const TUint8 RomToShadow[8192] = { 1 }; + +void TestShadowPage(TLinAddr aPageAddr, TPaged aPageType, TBool aCanModify) { test.Start(_L("Test shadowing a page")); test.Printf(_L(" addr == 0x%08x, type == %d\n"), aPageAddr, aPageType); @@ -130,16 +134,19 @@ test.Next(_L("Check page following shadow page is unaltered")); test_Equal(0, Mem::Compare((TUint8*)(secondPage),PageSize,PageBuffer3,PageSize)); - test.Next(_L("Write data into shadow page")); - for(TInt i=0; i>8)^(i2>>16)); + test.Next(_L("Write data into shadow page")); + for(TInt i=0; i>8)^(i2>>16)); + } + test_KErrNone(Shadow.Write(aPageAddr,PageBuffer2)); + + test.Next(_L("Check data written into shadow page")); + test_Equal(0, Mem::Compare((TUint8*)aPageAddr,PageSize,PageBuffer2,PageSize)); } - test_KErrNone(Shadow.Write(aPageAddr,PageBuffer2)); - - test.Next(_L("Check data written into shadow page")); - test_Equal(0, Mem::Compare((TUint8*)aPageAddr,PageSize,PageBuffer2,PageSize)); test.Next(_L("Check page following shadow page is unaltered")); test_Equal(0, Mem::Compare((TUint8*)(secondPage),PageSize,PageBuffer3,PageSize)); @@ -460,6 +467,18 @@ User::Free(PageBuffer3); } +static TLinAddr PageToShadow(TBool aPaged) + { + if (aPaged) + { + test(RomPagingSupported); + test(sizeof(RomToShadow) >= ((TUint)(2 * PageSize))); + return _ALIGN_UP((TLinAddr)RomToShadow, PageSize); + } + else + return Shadow.GetUnpagedPage(); + } + GLDEF_C TInt E32Main() // // Test ROM shadowing @@ -484,22 +503,28 @@ test.Start(_L("Testing ROM shadowing")); Initialise(); - TestRomIsSectionMapped(); + TestRomIsSectionMapped(); - TestShadowPage(RomUnpagedStart, EUnpaged); - TestShadowPage(RomUnpagedStart + PageSize, EUnpaged); - TestShadowPage(RomUnpagedEnd - PageSize, EUnpaged); - TestNoFreeRAM(RomUnpagedStart); - TestShadowPageOOM(RomUnpagedStart); + TLinAddr unpagedPage = PageToShadow(EFalse); + + TestShadowPage(unpagedPage, EUnpaged, ETrue); + TestShadowPage(RomUnpagedStart, EUnpaged, EFalse); + TestShadowPage(RomUnpagedEnd - PageSize, EUnpaged, EFalse); + + TestNoFreeRAM(unpagedPage); + TestShadowPageOOM(unpagedPage); if (RomPagingSupported) { - TestShadowPage(RomPagedStart, EPaged); - TestShadowPage(RomPagedStart + PageSize, EPaged); - TestShadowPage(RomPagedEnd - PageSize, EPaged); - TestNoFreeRAM(RomPagedEnd - PageSize); - TestShadowPageOOM(RomPagedStart); - TestInteractionWithPinning(RomPagedStart); + TLinAddr pagedPage = PageToShadow(ETrue); + + TestShadowPage(pagedPage, EPaged, ETrue); + TestShadowPage(RomPagedStart, EPaged, EFalse); + TestShadowPage(RomPagedEnd - PageSize, EPaged, EFalse); + + TestNoFreeRAM(pagedPage); + TestShadowPageOOM(pagedPage); + TestInteractionWithPinning(pagedPage); } // todo: add test when reforming section mappings is implemented