Wimp invalid error pointer during initialisation
Charles Ferguson (8243) 427 posts |
In RISC OS 5.27, the WindowManager can fail to initialise, and return an invalid error pointer from the module initialisation. A trace of the error: Initialise module: # 7 WindowManager flags &00000001 Module instantiate: <Module(WindowManager @ &fc110890 + &20808)> Instantiate module WindowManager: class=<class 'riscos.modules.Instance'> Calling module init for <Instance(WindowManager%Base, pw=&00000000)> Init dispatch for module WindowManager%Base (instance 0) to &fc1116b4 (arguments='') fc1116b4: {DA 'Extension ROM', module 'WindowManager': Entry Initialise} ... ==== Begin RISC OS error pointer ==== Error pointer &0fffffff is not valid memory Registers: r0 = &0fffffff, r1 = &00000000, r2 = &00000000, r3 = &00000000 r4 = &00000000, r5 = &00000000, r6 = &00000000, r7 = &00000000 r8 = &00000000, r9 = &00000000, r10 = &00000000, r11 = &00000000 r12 = &00000000, sp = &04108000, lr = &00000000, pc = &00000000 CPSR= &70000013 : SVC-32 ARM fi ae qVCZn SPSR= &00000000 : USR-26 ARM fi ae qvczn Locations: pc is DA 'Zero Page' lr is DA 'Zero Page' Recently executed code: ---- Block &fc12f46c, 1 instructions ---- fc12f46c: {DA 'Extension ROM', module 'WindowManager'} fc12f46c: POP {r0, r1, pc} ---- Block &fc12f3a8, 2 instructions ---- fc12f3a8: MOV r0, #0 fc12f3ac: BL &FC12F6F0 ---- Block &fc12f6f0, 5 instructions ---- fc12f6f0: PUSH {r1, r2, lr} fc12f6f4: LDR r1, [r12, #&1a0] fc12f6f8: ADD r1, r1, #&3ac fc12f6fc: TEQ r0, #0 fc12f700: BEQ &FC12F720 ---- Block &fc12f720, 2 instructions ---- fc12f720: ADD r0, r1, #8 fc12f724: POP {r1, r2, pc} ---- Block &fc12f3b0, 15 instructions ---- fc12f3b0: MOV r9, r0 fc12f3b4: MOV r0, #&110 ; #272 fc12f3b8: MOV r1, r9 fc12f3bc: ADR r2, &FC12F2C4 ; -> "ipboard Workspace" fc12f3c0: SUB r2, r2, #8 fc12f3c4: MOV r3, #0 fc12f3c8: LDR lr, [r12, #&24] fc12f3cc: SUB r5, r5, #1 fc12f3d0: MOV r7, r5, LSL lr fc12f3d4: LDR lr, [r12, #&20] fc12f3d8: SUB r4, r4, #1 fc12f3dc: MOV r6, r4, LSL lr fc12f3e0: MOV r5, #0 fc12f3e4: MOV r4, #0 fc12f3e8: SWI XOS_SpriteOp ---- Block &fc12f3ec, 1 instructions ---- fc12f3ec: BVS &FC12F40C ---- Block &fc12f40c, 4 instructions ---- fc12f40c: MOVVS lr, #0 fc12f410: STR lr, [r8] fc12f414: STRVS r0, [sp] fc12f418: POP {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, pc} ---- Block &fc1121d0, 2 instructions ---- fc1121d0: POP {r0} fc1121d4: POP {pc} ---- Block &fc111c10, 2 instructions ---- fc111c10: STRVS r0, [sp] fc111c14: POP {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, pc} ---- Block &04107fac, 1 instructions ---- 4107fac: {DA 'SVC Stack'} 4107fac: SWI &FEED05 ==== End RISC OS error pointer ==== Instantiate failed: RISCOSSyntheticError('[Synthetic] Invalid error pointer &0fffffff',) Error: [Synthetic] Invalid error pointer &0fffffff Implies to me that the error from XOS_SpriteOp is identified and leaves the V flag set. This is preserved in the stack at &fc12f414, but then corrupted by the POP at &fc1121d0, which is then preserved on to the return registers by the STRVS at &fc111c10. |
Charles Ferguson (8243) 427 posts |
Testing with the latest RC of 5.31, this bug remains. The error report from RISC OS Pyromaniac is near identical, implying that no change has been made, and the same problem persists. Initialise module: # 7 WindowManager flags &00000001 ==== Begin RISC OS error pointer ==== Error pointer &0fffffff is not valid memory Registers: r0 = &0fffffff, r1 = &00000000, r2 = &00000000, r3 = &00000000 r4 = &00000000, r5 = &00000000, r6 = &00000000, r7 = &00000000 r8 = &00000000, r9 = &00000000, r10 = &00000000, r11 = &00000000 r12 = &00000000, sp = &04108000, lr = &00000000, pc = &00000000 CPSR= &70000013 : SVC-32 ARM fi ae qVCZn SPSR= &00000000 : USR-26 ARM fi ae qvczn Locations: pc is DA 'Zero Page' lr is DA 'Zero Page' Recently executed code: ---- Block &fc1307cc, 3 instructions ---- fc1307cc: {DA 'Extension ROM', module 'WindowManager'} fc1307cc: MOV r0, #&228 ; #552 fc1307d0: ADD r2, r9, #&10 fc1307d4: SWI XOS_SpriteOp ---- Block &fc1307d8, 1 instructions ---- fc1307d8: BVS &FC1307E8 ---- Block &fc1307dc, 2 instructions ---- fc1307dc: STR r6, [r8, #4] fc1307e0: BL &FC1307F8 ---- Block &fc1307f8, 2 instructions ---- fc1307f8: PUSH {r0, r1, r2, r3, lr} fc1307fc: LDR r0, &FC130B3C ; = &0000023e ---- Block &fc130800, 4 instructions ---- fc130800: MOV r1, r9 fc130804: LDR r2, [r1, #8] fc130808: ADD r2, r2, r9 fc13080c: SWI XOS_SpriteOp ---- Block &fc130810, 1 instructions ---- fc130810: POPVS {r0, r1, r2, r3, pc} ---- Block &fc1307e4, 5 instructions ---- fc1307e4: MOVVC lr, #1 fc1307e8: MOVVS lr, #0 fc1307ec: STR lr, [r8] fc1307f0: STRVS r0, [sp] fc1307f4: POP {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, pc} ---- Block &fc11333c, 2 instructions ---- fc11333c: POP {r0} fc113340: POP {pc} ---- Block &fc112d70, 2 instructions ---- fc112d70: STRVS r0, [sp] fc112d74: POP {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, pc} ---- Block &04107fac, 1 instructions ---- 4107fac: {DA 'SVC Stack'} 4107fac: SWI &FEED05 ==== End RISC OS error pointer ==== Error: [Synthetic] Invalid error pointer &0fffffff The same description of the fault as the original error report remains true. |