[OSy] Zapisana hodnota sa neprecita spravne
Peter Júnoš
petoju at gmail.com
Thu Dec 13 23:24:52 CET 2012
Zdravim,
msim sa mi chova divne a pravdepodobne to nepredpoklada ani
GCC, viac info v komentaroch v kusku trace z msimu.
Pravdepodobne ja a GCC necakame nejake zakladne veci, ktore sa tam deju
- mozete mi objasnit hlavne posledny riadok a ako to, ze sa tam
neprecitalo to iste co sa tam skor zapisalo?
Cele to bolo ziskane pomocou msim_stop(); v prilohe je vykopirovany
relevatny kusok - tieto "divne" udaje ale potom ako divne vstupuju aj
do vypoctov. Sync by nemal robit nic (je to bariera, ked mi to stale
neslo); bug sa prejavoval aj predtym.
Za tymto kodom nasledovalo scitanie registrov a ich ulozenie niekam, kde
sa objavoval nespravny vysledok. Podla manualu load delay slot pri
najhorsom vyzaduje dodatocne cykly, ale ma fungovat aj ked sa GCC /
uzivatel nestara.
ASM je generovany GCC z C kodu; sam by som to takto nenapisal.
Dakujem za napad, co tam moze byt zle
--
Peter Júnoš
-------------- next part --------------
0 8000D850 ori v0, 0, 0xbeef # v0: 0x0->0xbeef, v1: 0x0->0x1, a0: 0x0->0x80233000, a1: 0x0->0x1000, a2: 0x0->0x1, a3: 0x0->0x80229000, t0: 0x0->0x20ffb, t1: 0x0->0x232000, t2: 0x0->0x232000, t3: 0x0->0xa, t4: 0x0->0x80019cbc, t5: 0x0->0x2, t6: 0x0->0xffffe000, t7: 0x0->0x80027a84, s0: 0x0->0x80233000, s1: 0x0->0x1000, s2: 0x0->0x80233ff8, s3: 0x0->0x1000, s4: 0x0->0x1, s5: 0x0->0x80229000, s6: 0x0->0x80229000, s7: 0x0->0x80011e54, t8: 0x0->0x1, t9: 0x0->0x50001000, k0: 0x0->0x400, gp: 0x0->0x80000000, sp: 0x0->0x800006f8, fp: 0x0->0xa000, ra: 0x0->0x8000e0a4, cp0_entrylo1: 0x00000000->0x00000001, cp0_status: 0x00000000->0x00400004, cp0_prid: 0x00000000->0x00000400, loreg: 0x0->0x80010000
0 8000D854 sw v0, 0x1c(sp) # 0x1c=28 //uloz 0xbeef
0 8000D858 sync
0 8000D85C sw a1, 0x18(sp) # 0x18=24
0 8000D860 sync
0 8000D864 sw a1, (s0) //uloz 0x1000 na adresu 0x80233000
0 8000D868 sync
0 8000D86C lw v1, 0x18(sp) # 0x18=24, v1: 0x1->0x1000 //nacitaj si zhodou okolnosti prave 0x1000 z adresy 0x800006f8+0x18=80000710
0 8000D870 lw v0, (a0) # v0: 0xbeef->0xffffffff //nahraj 0xffffffff z adresy 0x80233000 - kde sa to tam zobralo behom tych 2 instrukcii?
More information about the NSWI004
mailing list