[OSy] problem pri testu malloc1
Jiri Tousek
jiri.tousek at gmail.com
Sat Dec 2 18:16:25 CET 2006
Dobry den,
testem malloc1 uz jsme prosli. Pak jsme ale opravovali jine casti
kernelu a test malloc1 prestal prochazet. Poslednich par radku vystupu
vypada takhle:
allocate_in_block: block 80012000: size=21fe8 -> 1fe4
malloc: returning 0x80013fe8 (size 131072 = 0x20000)
.. cycle 23 (786528B allocated) -- allocated 131072 bytes.
Debug: register view
processor p0
0 00000000 at 00000000 v0 02E57A9D v1 00000001 a0 80018604
a1 8000A080 a2 00000000 a3 8000A098 t0 00000018 t1 80008E60
t2 8000A098 t3 00000001 t4 00000000 t5 00000000 t6 00000000
t7 00000000 s0 80018604 s1 00008000 s2 80010000 s3 00000017
s4 80007B30 s5 8000870C s6 80010000 s7 8000A4EC t8 00000000
t9 00000000 k0 80018600 k1 D7D6D5D4 gp A0000000 sp 800005A8
fp 80010000 ra 80001424 pc 8000107C lo 00000038 hi 00000040
current thread ID = 0
Kernel panic: ĐŃŇÓÜÝŢßŘŮÚŰÄĹĆÇŔÁÂĂĚÍÎĎČÉĘËôőö÷đńňóüýţ˙řůúűäĺćçŕáâăěíîďčéęë
´ľśˇ°ą˛łź˝žż¸šşť¤ĽŚ§
Ą˘ŁŹŽŻ¨ŠŞŤTUVWPQRS\]^_XYZ[DEFG at ABCLMNOHIJKtuvwpqrs|}~xyz{defg`abclmnohijk
Cycles: 48592168
(cely log je k videni na adrese
http://www.ms.mff.cuni.cz/~tousj3am/malloclog1.txt)
current thread ID byva 0 nebo 1, pri zmenach zdrojaku se meni i
cyklus, v kterem chyba nastava (byva to ale nejcasteji v cycklu 0 nebo
23 faze 2, subfaze 1).
Zkousel jsem se v repository vratit do momentu, kdy to fungovalo, a
pomalu pridavat pozdejsi upravy. Do jisteho momentu vse funguje, pak
ale pridani jakehokoliv kodu (i kodu napriklad ve funkcich kolem
virtualni pameti, ktere se urcite nevolaji) zpusobi chybu. Z toho to
vypada, jako bych pri zvetseni zdrojaku si zacal zapisovat do kodu
programu, ale jsem si pomerne jisty, ze vsechny alokacejsou nad
adresou _kernel_end.
Ten vystup konci vystupem z funkce panic(). Do funkce panic skutecne
kernel dojde (zkousel jsem tam dat ___interactive_on() ). Zkousel jsem
ale dat pred vsechna volani fce panic ___interactive_on() a nechytlo
se to nikde. Taky ten "rozsypany caj" svedci tomu, ze se kernel do te
funkce nedostane normalni cestou.
Zkouseli jsme davat ladici tisky do testu (malloc1/test.c). Vypada to,
ze k panic dochazi nekde ve funkci fill_block() - kdyz dam ladici tisk
pred a za cyklus v ni, prvnim to projde, druhy uz se nezobrazi. Kdyz
dam tisk dovnitr cyklu, panic se objevi nekde uprostred (po nekolika
tisicich vytisku). A aby toho nebylo malo, zamenim-li ve (v tom cyklu
pouzivane) funkci expected_value() vypocet kontrolniho cisla za
konstantu (predpokladam, ze kompilator/optimalizator pak volani fce
nahradi tou konstantou), k chybe nedojde.
Zkousel jsem pro jistotu alokovat pamet az o 4kB dal od kernelu,
zvetsovat velikost zasobniku vlakna. Bez uspechu.
Vim, ze dotaz "co s tim?" nema nadeji na uspech, nicmene byl bych
vdecny za jakykoliv napad, postreh ci pripominku. Uz na tom travim
druhy den a zatim naprosto bez uspechu.
Dekuji
Jiri Tousek
More information about the NSWI004
mailing list