Problemy s gcc

Zbynek Vyskovsky rat na scssoft.com
Čtvrtek Září 21 12:36:46 CEST 2000


0)
Trosku off-topic: Ktery balik v Debianu obsahuje info-dokumentaci k ld?
gcc-doc jsem nasel, ale o ld-doc nikde ani zminka. Ted mam k dispozici
pouze info z RH 6.2 (dle data cca rok stare).

> 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.
 Nevsiml jsem si, ale zda se, ze version-script tyhle problemy vyresi.

> > 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.
 Castecne vyreseno - call je primy, kdyz se vola lokalni symbol. Ale pro
symboly
definovane ve version-scriptu jako global se stale pouziva call pres
tabulku.
Mozna se pletu v jedne veci - predpokladam totiz, ze chci-li exportovat
nejaky
symbol, tak musi byt uveden ve version-scriptu jako global. Je to tak nebo
existuje jeste jiny zpusob?

> > 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
 Cannot find node VERSION. Nuz, ale pres search jsem se nakonec dostal k
version-script, ktery tento problem vyborne resi, ale pouze pro sdilene
knihovny.
Potreboval bych exportovat jeste nektere symboly z executable. global a
local
ve version-scriptu linker evidentne ignoruje (exportuje jen to, co po nem
pozaduji
linkovane .so), kdyz mu predam jeste -E, tak exportuje pro zmenu vsechno.
Jeste jsem zahledl option --version-exports-symbol, ale v --help toho moc
neni
a v RH infu o tom neni ani zminka.

> > 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.
 Tim myslite definovat konstanty jako promenne v section .text a ve
version-scriptu je uvest jako local?

Jeste k dotazu na volani konstruktoru:
Neexistuje nejaky jiny zpusob? Definovat kvuli tomu novy operator new se
mi moc nechce, uz z toho duvodu, ze ta puvodni classa o tom, ze ji budu
pouzivat timto zpusobem, nemusi vubec vedet.

 V kazdem pripade diky za vsechny predchozi odpovedi.

--
 Zbynek Vyskovsky
 Engine/Game-AI Development, SCS Software
  rat na scssoft.com                 talk: rat@{ns,mail}.scssoft.com
  http://www.scssoft.com/         ICQ: 55391944




Další informace o konferenci Linux