[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