diff --git a/VersionASM b/VersionASM index 6b18d74d0a05357788c2d3ff0b120cb24b23f524..d28c88bff7a3b42189baf58ce144d512c7f661a4 100644 --- a/VersionASM +++ b/VersionASM @@ -13,12 +13,12 @@ GBLS Module_ComponentPath Module_MajorVersion SETS "5.35" Module_Version SETA 535 -Module_MinorVersion SETS "4.79.2.35" +Module_MinorVersion SETS "4.79.2.36" Module_Date SETS "13 Jun 2001" Module_ApplicationDate2 SETS "13-Jun-01" Module_ApplicationDate4 SETS "13-Jun-2001" Module_ComponentName SETS "Kernel" Module_ComponentPath SETS "RiscOS/Sources/Kernel" -Module_FullVersion SETS "5.35 (4.79.2.35)" -Module_HelpVersion SETS "5.35 (13 Jun 2001) 4.79.2.35" +Module_FullVersion SETS "5.35 (4.79.2.36)" +Module_HelpVersion SETS "5.35 (13 Jun 2001) 4.79.2.36" END diff --git a/VersionNum b/VersionNum index c323df6166645596f13d1ebb71ae645aefeca72d..22ed65504d51e0213f6494ad0831b30fbcefb597 100644 --- a/VersionNum +++ b/VersionNum @@ -4,12 +4,12 @@ * */ #define Module_MajorVersion_CMHG 5.35 -#define Module_MinorVersion_CMHG 4.79.2.35 +#define Module_MinorVersion_CMHG 4.79.2.36 #define Module_Date_CMHG 13 Jun 2001 #define Module_MajorVersion "5.35" #define Module_Version 535 -#define Module_MinorVersion "4.79.2.35" +#define Module_MinorVersion "4.79.2.36" #define Module_Date "13 Jun 2001" #define Module_ApplicationDate2 "13-Jun-01" @@ -18,5 +18,5 @@ #define Module_ComponentName "Kernel" #define Module_ComponentPath "RiscOS/Sources/Kernel" -#define Module_FullVersion "5.35 (4.79.2.35)" -#define Module_HelpVersion "5.35 (13 Jun 2001) (4.79.2.35)" +#define Module_FullVersion "5.35 (4.79.2.36)" +#define Module_HelpVersion "5.35 (13 Jun 2001) (4.79.2.36)" diff --git a/s/AMBControl/memmap b/s/AMBControl/memmap index 3a3a1a40898bcbd51e413475313ff9d1b27f9cdb..c8b8735a53c561a3139f49f93122ad13ccaf161e 100644 --- a/s/AMBControl/memmap +++ b/s/AMBControl/memmap @@ -63,19 +63,19 @@ AMB_LazyFixUp ROUT MOV r12,#AMBControl_ws LDR r12,[r12] CMP r12,#0 - BEQ %FT20 + BEQ %FT90 ;not initialised! LDR r1,AMBFlags TST r1,#AMBFlag_LazyMapIn_disable :OR: AMBFlag_LazyMapIn_suspend - BNE %FT20 - SUBS r0,r0,#ApplicationStart - BMI %FT20 - MOV r0,r0,LSR #Log2PageSize ;address now in terms of pages from ApplicationStart + BNE %FT90 ;not active LDR r1,AMBMappedInNode CMP r1,#0 - BEQ %FT20 + BEQ %FT90 ;no current node LDR r2,[r1,#AMBNode_Npages] + SUBS r0,r0,#ApplicationStart + BMI %FT20 ;abort not in current app space + MOV r0,r0,LSR #Log2PageSize ;address now in terms of pages from ApplicationStart CMP r2,r0 - BLS %FT20 + BLS %FT20 ;abort not in current app space ; ; check/update the MappedIn bitmap ; @@ -119,7 +119,28 @@ AMB_LazyFixUp ROUT STMIA r5,{r0,r1} ;update CAM entry MOV r12,r7 MOV pc,lr ;r0 is non-zero, NE status +; +; not our abort, but is possible that client abort handler is in app space, so force all +; app space pages in now (so that client abort handler does not cause lazy abort, scribbling over original abort details) +; + ASSERT No26bitCode ;assumes we have an abort stack! (recursive lazy fixup aborts may occur) 20 + MOV r1,#ApplicationStart ;good old page walk to provoke lazy fixups + LDR r2,AMBMappedInNode + LDR r2,[r2,#AMBNode_Npages] + CMP r2,#0 + BEQ %FT90 + MRS r0,SPSR ;preserve SPSR_abort for original abort details + MOV r4,lr ;preserve lr_abort so we can return properly (!) +30 + LDR r3,[r1] ;bring that page in by the magic of aborts + SUBS r2,r2,#1 + ADD r1,r1,#PageSize + BNE %BT30 + MSR SPSR_all,r0 ;SPSR for original abort + MOV lr,r4 ;restore return address +; +90 MOVS r0,#0 MOV r12,r7 MOV pc,lr ;r0 is zero, EQ status