If I change this to 0 I get closer and it survives zeroing the sr
registers but it cannot survive zeroing SDR1 and crashes after that
happens:
IN:
0x0041cde0: lwz r0,60(r3)
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
0x0041cde4: sync
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
0x0041cde8: mtsr 15,r0
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
0x0041cdec: isync
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
0000000000000697
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=0000000000000697
found PTE at offset 0000a5e0
PTE access granted !
helper_store_sr: reg=15 00000000 2000000f
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
found PTE at offset 00000728
PTE access granted !
IN:
0x0041cdf0: sync
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
0x0041cdf4: mtsdr1 r6
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
0x0041cdf8: isync
htab_base 000000000fe00000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=000000000fe00000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
ppc_store_sdr1: 00000000
htab_base 0000000000000000 htab_mask 000000000000ffff hash
000000000000041c
0 htab=0000000000000000/000000000000ffff vsid=0 ptem=1
hash=000000000000041c
1 htab=0000000000000000/000000000000ffff vsid=0 api=1
hash=fffffffffffffbe3
Raise exception at 0041cdfc => 00000003 (40000000)
IN:
0x00000400: mtsprg 2,r2
What comes after this is loading some values from the stack then
disabling MMU bits in MSR (then putting the values loaded into BAT
regs). If I could get these run without getting an ISI inbetween it
would boot:
41ce0c: 82 84 00 14 lwz r20,20(r4)
41ce10: 82 a4 00 10 lwz r21,16(r4)
41ce14: 82 c4 00 1c lwz r22,28(r4)
41ce18: 82 e4 00 18 lwz r23,24(r4)
41ce1c: 83 05 00 04 lwz r24,4(r5)
41ce20: 83 25 00 00 lwz r25,0(r5)
41ce24: 83 45 00 0c lwz r26,12(r5)
41ce28: 83 65 00 08 lwz r27,8(r5)
41ce2c: 83 85 00 14 lwz r28,20(r5)
41ce30: 83 a5 00 10 lwz r29,16(r5)
41ce34: 83 c5 00 1c lwz r30,28(r5)
41ce38: 83 e5 00 18 lwz r31,24(r5)
41ce3c: 7c 00 04 ac sync
41ce40: 7c 00 00 a6 mfmsr r0
41ce44: 70 00 ff cf andi. r0,r0,65487
41ce48: 7c 00 04 ac sync
41ce4c: 7c 00 01 24 mtmsr r0
41ce50: 4c 00 01 2c isync
Why are we getting ISIs on QEMU and why can this work on real hardware
without crashing?