[OSy] SET_STATIC_STACK

Ondrej Mocny ondrej.mocny at gmail.com
Mon Dec 14 14:56:08 CET 2009


Zdravim,

pri opakovanem zkoumani asembleru v handlovani vyjimek mi neni jasne, co presne to vlastne dela :)

Pokud jsem to spravne pochopil, tak handle_tlbrefill pouziva kernel stack, na ktery si ulozi registry. Ale
pred ukladanim badvaddr registru se vola
SET_STATIC_STACK $k0 $k1 $t1 0
tedy do t1 se ulozi adresa konce stacku. Kdyz se pak badvaddr ulozi volanim
sw $t0, STATIC_OFFSET_BADVA($t1)
tak se preci musi ulozit az za konec stacku?! Nebo mi neco unika? Nema se tam odecist CONTEXT_SIZE offset?

Podobny problem mam v handle_general. SET_STATIC_STACK se tam vola s nulovym offsetem, takze vrati adresu
konce zasobniku, nacez se za konec zasobniku ulozi EPC, Cause, BadVa a Status. Pochopil jsem, ze je to asi z
toho duvodu, ze kdyz nasledne prijde TLB Refill (pri pokusu o ukladani kontextu na zasobnik vlakna, ktery muze
byt v mapovane pameti), tak by obsluha teto vyjimky prepsala ulozene registry. Ale proc se registry ukladaji
az za konec kernel stacku? Nebo puvodni kod Kalista predpoklada, ze za kernel stackem je nejaky volny prostor?

Diky za help,

Ondra Mocny




More information about the NSWI004 mailing list