Problemy s gcc

Zbynek Vyskovsky rat na ns.scssoft.com
Středa Září 20 10:23:40 CEST 2000


Zdravim,
pri kompilaci (a linkovani) jsem narazil na nekolik nasledujicich
problemu/featur kompilatoru gcc, ktere nedokazu vyresit:

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.
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?

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

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.

4)
Jak zavolat konstruktor na jiz alokovanou pamet? U vetsiny kompilatoru to
jde zapisem ((class0 *)mem)->class0::class0(); U gcc jsem na to neprisel.

4)
Nedokazu vypnout warning (-W???) pro nasledujici kod:
class c_int {
  int val; operator int &() { return val; }
  operator const int &() { return val; }
};
void f(int);
{ c_int i; f(i); }
file.cpp:6: warning: choosing `c_int::operator int &()' over `c_int::operator const int &() const'
file.cpp:6: warning:   for conversion from `c_int' to `const int &'
file.cpp:6: warning:   because conversion sequence for the argument is better
Neznate nekdo ten spravny -W ?

A neco z optimalizace:
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 ?

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...

Tohle vsechno jsem zkousel pod:
gcc -v:
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.2/specs
gcc version 2.95.2 20000220 (Debian GNU/Linux)
ld -v:
GNU ld version 2.10.90 (with BFD 2.10.0.24)



Tohle je snad vsechno, za pripadne odpovedi predem diky.

S pozdravem,
-- 
	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