[OSy] Odevzdani 3. zakladniho zadani

Martin Decky decky at dsrg.mff.cuni.cz
Mon Jan 19 10:25:15 CET 2009


> Bylo potreba umistit vstupni bod userspace vlaken na konkretni
> (virtualni) adresu. S timto jsme si poradili vytvorenim zvlastniho
> zdrojoveho souboru obsahujici pouze funkci, ktera predstavovala tento
> vstupni bod a nasledne se nam podarilo pomoci definice sekce v linker
> scriptu umistit funkci na pevnou adresu.

Ano, to je myslim standardni postup, na kterem nevidim nic spatneho.
Ostatne podobne se na pevne adresy umistuji rutiny kernelu (v Kalistu).

> Druhy problem, ktery jsme doposud neprorazili, je pouziti main funkce
> v behove knihovne a prelozeni knihovny tak, aby nevyzadovala
> implementaci main.

Nechapu presne, v cem by zde mel byt problem. Pro knihovnu librt.a je
funkce main() klasicky externi symbol (deklarovany s klicovym symbolem
"extern"). Muze se tedy na nej klidne odkazovat (jako kdyby to byl
externi symbol v samostatne stojicim objektovem souboru) a jeho skutecna
adresa se doplni pri linkovani.

> Jako diagnosticky prostredek se vyplati seznamit se s objdump pro
> mips. Aplikuje se na .raw binarky, nikoliv na binarky prohnane pres
> objcopy.

Ano, utilita objdump je skutecne velmi sikovna.

> Take tedy prosim o navod, jakym zpusobem docilit korektniho prekladu
> librt.a. Miru podrobnosti bych rad nechal na vasem uvazeni.

Jak jiz psal kolega Outly, staticka knihovna (pripona .a) neni vlastne
nic jineho nez soubor jednotlivych objektovych souboru (pripona .o)
zabaleny do jednoho archivu (pod pojmem archiv si muzete klidne
predstavit neco jako ZIP).

Pokud tedy chcete vytvorit statickou knihovnu, prelozite jednotlive
objketove soubory, ktere do ni patri, a to v zasade uplne stejne, jako
byste tyto objektove soubory chteli linkovat primo. Potom pouzijete
utilitu "ar" na ulozeni techto objektovych souboru do archivu.

Pokud chcete statickou knihovnu pouzit (tj. slinkovat s ni nejake dalsi
objektove soubory), tak ji jednoduse uvedete na prikazove radce linkeru
jako jeho vstup (pripadne muzete pouzit prepinac -l, za predpokladu, ze
mate spravne nastaveny cesty atd.).


M.D.




More information about the NSWI004 mailing list