[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