[OSy] Posunuti _kernel_end dovnitr kernelu
Martin Decky
decky at d3s.mff.cuni.cz
Mon Dec 5 12:02:18 CET 2011
Hezky den,
> prevzali jsem kostru Kalosta, kde se pro stanoveni konce assembleru
> jadra umisti promenna _kernel_end. Puvodne je umistena v malloc.c, kde
> je jejich external.
Myslim, ze si uplne nerozumime. Promenna _kernel_end neni nikde ve
zdrojaku umistena, samotna promenna neni nikde vubec deklarovana. V
hlavickovem souboru malloc.h je pouze deklarace jejiho symbolu, ale
adresa toho symbolu se nastavi az linkerem diky linker skriptu.
Pokud jste promennou _kernel_end nekde deklarovali, tak to samozrejme
nebude fungovat.
> V prubehu vyvoje jadra jsem pridaval hodne souboru,
> ktere jsou zavisle ci zavisi na malloc.h a _kernel_end se posunul
> dovnitr jadra, tj. jiz neukazuje na konec kernelu. Poznal jsem to podle
> velikosti binarky, ktera je nahravana do MSIMu. Podle objdumpu nyni
> adresa, kam ukazuje _kernel_end je adresa funkce panic(), ktere je
> inlinovana na spouse mist v jadre. S linker scriptem nebylo nijak
> manipulovano, pouze se pridavali nove soubory do makefilu.
S inlinovam ten problem nema urcite nic spolecneho. Stejne jako to neni
primarne problem s pridavanim dalsich souboru, protoze linker skript by
mel zajistit, ze _kernel_end bude az za vsemi vstupnimi sekcemi
obsahujici kod a data ze vsech souboru.
Podivejte se do souboru kernel.map, kde je videt, kam se linkuji
jednotlive vstupni sekce. Jedina moznost, ktera me napada, jak by se
mohlo stat to, co popisujete, je to, ze se nekde vyrobila nejaka nova
kodova nebo datova vstupni sekce, ktera pri linkovani nejak skoncila za
tou vystupni sekci .kernel. Ale i to mi prijde dost nepravdepodobne.
Kazdopadne kernel.map by Vam mel rict vic.
M.D.
More information about the NSWI004
mailing list