[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