[OSy] Zamrzani

Martin Decky decky at nenya.ms.mff.cuni.cz
Wed Dec 6 12:00:40 CET 2006


Hezky den,

souhlasim, ze ladici schopnosti samotneho msimu nejsou uplne nejbohatsi. 
Z principu jeho funkce neumoznuje napriklad zpracovat debug information 
z prelozeneho kernelu (musite si vygenerovat mapfile a disassebly a 
porovnavat adresy s nimi), ale i tak umoznuje ladit kernel o mnoho radu 
pohodlneji nez v pripade, kdy byste programovali na holem zeleze.

Chybejici podporu breakpointu na kod muzete bud obejit rucnim vlozenim 
instrukce DINT, nebo (pokud si nemuzete dovolit menit kod kernelu) 
vlozenim podminky primo do msimu.

Podobne breakpoint na pristup do pameti muzete udelat zmenou msimu nebo 
alespon zpetne analyzou vystupu trace rezimu. Co se tyce prepisovani 
kodu kernelu, tak tam ten test muze byt velmi jednoduchy, proste budete 
hlidat, zda nekdo nezapisuje do adres odpovidajicich .text.


Metoda ladicich vypisu primo v kodu kernelu (jak napriklad psala slecna 
Dufkova) je take mozna, ale zrovna u veci, kdy se jedna o nejaky race 
condition, vede k tomu, ze se zmeni usporadani kodu a dany race se bud 
projevovat prestane, nebo se presune nekam jinam. Zde je naopak potreba 
vyuzit neocenitelne vlastnosti simulatoru -- se stejnym kodem a daty 
bezi vzdy presne stejne.

Bohuzel v techto situacich ani presne nalezeni mista, kde se zapisuje 
nejaka hodnota na spatne misto do pameti, nemusi vezt k nalezeni prave 
priciny problemu, protoze to muze byt jen projev zavlecene chyby 
(obzvlaste ve strukturach memory managementu nebo pri synchronizaci). 
Nezbyva nez vylucovaci metodou najit priblizne misto kodu, kde se neco 
dela spatne, a potom dukladnym prozkoumanim zdrojaku zjistit skutecnou 
pricinu. Ze jste ji nasli, poznate typicky podle toho, ze dovedete nejen 
rici, ze se chyba uz neprojevuje, ale taky naprosto presne vite, v cem 
byl vlastne problem.


V TLB Refill handleru neni potreba explicitne zakazovat preruseni, 
protoze ta jsou zakazana od zacatku. Naopak je vhodne preruseni vubec 
nepovolovat, aby bylo mozne rutinu prerusit jen jinym TLB Refillem. Pro 
usnadneni cele logiky je navic vhodne, aby behem provadeni TLB Refillu 
zadny dalsi TLB Refill nemohl nenastat -- bud diky tomu, ze k veskerym 
datum pristupuje handler pres nemapovanou pamet, nebo za pouziti wired 
TLB zaznamu (viz registr CP0 Wired).


Upozorneni: Bez alespon zbezne znalosti assembleru MIPSu se skutecne 
neobejdete (a bude to platit i pro treti zadani, prestoze by se mohlo 
zdat, ze to uz bude v user space a tedy "daleko od procesoru").


M.D.



More information about the NSWI004 mailing list