[OSy] Odevzdani 3. zakladniho zadani

Ersin ersin at post.cz
Tue Jan 20 12:09:43 CET 2009


Dobre poledne,

> 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.
Ano, to je pomerne zrejme.

> 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)
Ano, to je jasne. Celou dobu jsem prave hledal, jak donutit linker, aby dany symbol byl ve vystupni binarce pritomen. Nenasel jsem prikaz EXTERN, je to moje chyba. EXTERN take resi problem.
Zkousel jsem symbol pouze oznacit jako vstupni pomoci ENTRY(__entry), coz prave zpusobil ono varovani:
warning: cannot find entry symbol __entry; not setting start address

> A mela ta sekce nastavene spravne atributy, aby ji linker skutecne
> povazoval za kodovou sekci? V assembleru dejme tomu
> 
> .section .excvec, "ax"
Ano, sekce mela nastavene presne tyto atributy.

> Byl skutecne ten vstupni bod deklarovan jako globalni? Opet v assembleru
> pomoci
> 
> .global __entry
Vstupni bod byl deklarovan jako .globl. Operator (nebo jak se to nazyva) .global nejak nemohu na webu nalezt.
Zkratka - okopirovali jsme linker skript z Kalista.

> 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?
Jedine, co me zarazi, je proc byla najednou sekce .excvec pritomna kdyz jsem nahradil wildcard za konkretni jmeno souboru v linker scriptu. Tedy:

*(.excvec)
nahrazeno za
head.o (.excvec)

Dokumentace rika, ze * stoji za libovolnym jmenem souboru. Proc tedy nestoji za head.o?
Pripadne naopak - pokud head.o neni linkovanym souborem (coz neni, linkuje se librt.a), jaktoze je sekce na vystupu pritomna, pokud jsem zadal neexistujici soubor?

Stanislav Kozina




More information about the NSWI004 mailing list