[OSy] Odevzdani 3. zakladniho zadani

Martin Decky decky at dsrg.mff.cuni.cz
Tue Jan 20 11:23:15 CET 2009


Hezky den.

> Prvni otazka je jak vyrobit archiv. Nabizi se opet pouzit linker

Linker opravdu neni pro vytvareni staticke knihovny ten spravny nastroj,
jak jste si ostatne sam logickou uvahou o symbolech odvodil.

> Prichazi hlavni krok, slikovani knihovny (librt.a) a testu (test.o). 
> Rekl bych, ze na tomto kroku jsme se vsichni zarazili. Vysledek 
> (user.raw) jsem kontroloval pomoci objdump - a (pokud pouzijeme 
> linker skript z Kalista) nase sekce .excvec proste zmizela, ve 
> vyslednem user.raw nebyla. A nejen ta - s ni taky polovina dalsich 
> funkci. Zkratka vsechno, co neni primo volane z aktualniho testu.

A povazujete to skutecne za tak prekvapivy fakt? Jedna z vlastnosti
linkeru je, ze vytvari zavislostni graf symbolu. Ty symboly, ktere
v tomto grafu nekdo vyzaduje, ale nema jejich implementaci, zpusobi, ze
se slinkovani nepovede.

Naopak symboly, u nich sice ma implementaci (v knihovne), ale nikdo je
nevyzaduje, neni potreba do vysledne binarky vubec linkovat. Asi byste
prilis neuvital, kdyby se kuprikladu do Vasi binarky vzdy prilinkovala
cela 10 MB knihovna, prestoze z ni vyzadujete jen jednu izolovanou funkci.

Fakt o grafu zavislosti symbolu se samozrejme tyka i toho vstupniho bodu
uzivatelskeho procesu v knihovne librt.a (dejme tomu, ze se jmenuje
__entry). Pokud nezajistite, aby __entry pri linkovani nekdo vyzadoval,
tak jej linker zcela pochopitelne z vysledne binarky vynecha. Vyzadat
jej muzete napriklad v linker skriptu pomoci direktivy

EXTERN(__entry)

> Po dlouhem hrani jsem zjistil, ze linker se domniva, ze sekce .excvec
>  vubec neni ve vstupnich souborech obsazena.

A mela ta sekce nastavene spravne atributy, aby ji linker skutecne
povazoval za kodovou sekci? V assembleru dejme tomu

.section .excvec, "ax"

Byl skutecne ten vstupni bod deklarovan jako globalni? Opet v assembleru
pomoci

.global __entry

> Domnivam se proto, ze linker se opravdu chova pri linkovani klihovny 
> s danym linker skriptem velice zvlastne.

Na zaklade toho, co jste napsal, stale nemam pocit, ze byste narazil na
nejake zvlastni chovani nebo chybu. Nemam jistotu, ze potize, na ktere
jste narazil, neplynou napriklad z vynechani nejake dulezite deklarace.
Souhlasi Vase pozorovani s dokumentaci?


M.D.




More information about the NSWI004 mailing list