Problemy s gcc

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Středa Září 20 15:14:59 CEST 2000


On Wed, 20 Sep 2000, Zbynek Vyskovsky wrote:

> 1)
> sdilene knihovny: pri loadovani vetsiho poctu so-knihoven se
> neuprednostnuji funkce ze stejne knihovny, takze mam-li dve knihovny s
> definici funkce fff() a obe knihovny se na ni odkazuji, tak se po loadnuti
> odkazuji obe na funkci z jedne z techto knihoven.

Kdyz to budete linkovat staticky, tak bude vysledek stejny, tak se
nedivte. Rozdilneho chovani se da dosahnout akorat s dlopen(), kde je
mozno vynechat RTLD_GLOBAL a pak se exportovane symboly z knihovny
nepridavaji do globalni tabulky symbolu. Solaris umi jeste nejake dalsi
triky a Linux je mozna uz prevzal.

> Celkem me taky prekvapilo, ze i interni cally v ramci jedne knihovny jdou
> pres mezitabulku funkci (ackoli jde v kazdem pripade o relativni call).
> Daji se tyto dve veci nastavit nejakym optionem?

Ta "interni" volani jdou pres globalni symbol, ktery muze dynamic linker
predefinovat a proto musi jit pres PLT. Reseni viz bod 3.

> 2)
> Kdyz mam vlastni sectiony, je treba je oznacovat jako
> spustitelne/zapisovatelne podle toho, zda jde o kod ci data? Paklize ano,
> jak?

info --node=Section --file=as

> 3)
> Potreboval bych stripnout jen symboly (i v dynamicke tabulce), ktere se
> nachazeji v konkretni sectione.
> Pripadne, kdyby to slo jednoduseji - potreboval bych exportovat jen nektere
> symboly, vyse uvedeny problem beru zatim jako nutny mezikrok.

info --node=VERSION --file=ld

> 5)
> V pripade, ze se ve vyrazu povetsinou se skladajiciho z doublu objevi
> float, tak gcc ulozi mezivysledek na stack jako float a potom znovu loadne
> zpatky - typicke je to u kodu float f(double v) { return v; }
> Mozna to splnuje ANSI, nebezpeci se zaokrouhlovanim jsem si vedom, ale
> stejne bych to radeji vypnul, takze - existuje nejaky -f ?
...
>  Ta funkce byla jenom jednoduchy priklad. Vetsinou se tenhle kod
> objevuje ve vyrazech, kde je mi tohle ukladani k nicemu...

Zkuste dat nejaky smysluplnejsi priklad.

> 6)
> .so: Lze nejak prinutit gcc (neco jako fno-writable-strings ?), aby
> floatove konstanty davalo do text-section a flds tak predavalo
> jednoduchy posun oproti nactenemu %eip misto hledani promenne pres
> tabulku globalnich symbolu? Ten druhy zpusob mi prijde dost pomaly...

Kdyz pouzijete --version-script (viz bod 3), je mozne, ze linker ten kod
trochu vylepsi, nicmene vyse popsany efekt je proste dan za -fPIC. Mozna
by take pomohlo ty konstanty nadefinovat jako static promenne.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux