[OSy] Par pripominek a dotazu
LubomÃr Bulej
bulej at nenya.ms.mff.cuni.cz
Thu Nov 2 12:11:37 CET 2006
Dobry den,
>
> 1) podarilo se nekomu vyvolat break tak, aby v branch delay slotu byla
> instrukce a doslo tak k panice? Testy toto netestuji, ale osobne by me
> to docela zajimalo, jak to vyvolat. Zkousel jsem nekolik breaku za
> sebou, nop a podobne, ale nic.
>
Mozna se snazite o neco trochu jineho. Problem je, kdyz je samotny break v BD
slotu a to by melo jit vyvolat jednoduse:
.set push
.set noreoder
nop
j somewhere
break 10 # break se tyka instrukce pred skokem
somewhere:
nop
.set pop
> 2) jak ignorovat vyjimku Break pointu asi kazdy nasel v manualu (str
> 138). Na cvikach nas varovali, ze nemame na stack hrabat pomoci offsetu
> (coz se tady primo nabizi). Zkousel jsem delat strukturu se vsemi
> registry, co se ukladaji, ale naprosto se mi nedari pak pristoupit na
> nejakou jeji polozku zpusobem napr. context->epc+=4
> Nejsem zadny C guru a moje predstava implementace struct je takova, ze
> v poradi jak pisu jednotlive polozky, tak se ukladaji do souvisleho
> bloku v pameti a stejne je tam i najdu. Takze pokud predavam int* jako
Prvni vec - proc mit argument int *, kdyz muzete mit rovnou struct context *.
Druha vec - jednotlive polozky te struktury musi mit stejne offsety jak v C,
tak v assembleru. Ty sice jdou spocitat i rucne, ale doporuceny postup je
malym programkem vygenerovat .h soubor s makry pro velikost te struktury a
offsety jednotlivych polozek, ktere se pak pouziji v assembleru. To ma tu
vyhodu, ze kdykoliv zmenite obsah te struktury, informace pro assembler se
pregeneruji.
> 3) v souboru sys.h na radce 324 je instrukce
> sw $v1, OFFSET_BADVADDR($sp)
>
> uvadim i sirsi kontext:
> lw $v1, OFFSET_SAFE_EPC($v0)
> sw $v1, OFFSET_EPC($sp)
> lw $v1, OFFSET_SAFE_CAUSE($v0)
> sw $v1, OFFSET_BADVADDR($sp)
> lw $v1, OFFSET_SAFE_BADVADDR($v0)
> sw $v1, OFFSET_BADVADDR($sp)
> lw $v1, OFFSET_SAFE_STATUS($v0)
> sw $v1, OFFSET_STATUS($sp)
>
> nemelo by tam na byt
> sw $v1, OFFSET_CAUSE($sp)
> ?
> Nebo je to nejaky trik a neco mi uchazi ?
>
To spis vypada jako cut'n'paste chyba v kalistu. Ta chyba se neprojevila diky
tomu, ze ve funkci exception se pricina zjistuje primo z cause registru cp0.
> 4)je treba v panic funkci dumpovat registry
> a) vsechny
> b) pomoci printk apod.
> c) staci pomoci __reg_view
> Mam tam zatim __reg_view, ale to je debugovaci nastroj MSIMu... nejaky
> jiny zpusob??
__reg_view staci.
Lubos Bulej
More information about the NSWI004
mailing list