call_user_func() ähnliche Funktion

Beides.
Hab mir grad die Arbeit dir zu Liebe gemacht, Windows gebootet, und unser
kleines Testprogramm in eine exe übersetzt. Auch da erscheint das Symbol "add",
ohne das ich den Debugschalter -g aktiviert hätte...
Code:
redwing@euklid:~ $ nm a.out  | grep add
08048330 T add

//edit:
btw. die man page sagt zu nm:

Code:
           "N" The symbol is a debugging symbol.

           "R" The symbol is in a read only data section.

           "S" The symbol is in an uninitialized data section for small objects.

           "T" The symbol is in the text (code) section.
also ist add definitv kein Debugsymbol...

Gruß,

RedWing
 
Zuletzt bearbeitet:
Das wundert mich zwar, da es ja zum Ausführen definitiv nivht gebraucht wird, aber man lernt ja nie aus...
Ich bin zur Zeit etwas knapp an Zeit, aber ich werd's im Hinterkopf behalten und mich bei Gelegenheit mal schlaumachen.
 
Hallo,
Das wundert mich zwar, da es ja zum Ausführen definitiv nivht gebraucht wird, aber man lernt ja nie aus...
Ich bin zur Zeit etwas knapp an Zeit, aber ich werd's im Hinterkopf behalten und mich bei Gelegenheit mal schlaumachen.
hab jetzt ein paar Nachforschungen angestellt. Zumindest beim gcc ist es so:
Der gcc weiß ja zur Übersetzungszeit noch nicht ob die Symbole eventuell von
anderen Programmen noch referenziert werden, das weiß frühestens der Linker.
Aber die Überprüfung ob eine Funktionsdefinition referenziert wird um somit das
evtl. wegoptimieren zu gewähreisten ist nicht Aufgabe des Linkers.
Deshalb ist das Symbol in dem Binary enthalten.
Ein Weg wäre, dem gcc klarzumachen das die Funktion nur in der aktuellen Datei
verwendet wird. Dann kann er (schon zur Übersetzungszeit) überprüfen ob die
Funktion innerhalb der Datei referenziert wird, und wenn nicht kann er sie ohne
Bedenken wegoptimieren.
Code:
static int add(){}
Meine Einwände gegen deine These sind beseitigt :)
allerdings muss ich anmerken, das falls die Funktion referenziert wird bzw der
Compiler sie nicht wegoptimieren kann, besitzt das Binary dann trotzdem ein add
Symbol, was nicht für Debug Zwecke bestimmt ist sondern dafür das der Linker seine Informationen
bekommen kann.

Gruß,

RedWing
 
Zuletzt bearbeitet:
Danke, das klingt ziemlich logisch.
Und erspart mir, mich selber schlauzumachen ;-)

Wir produzieren hier u.A. ziemlich viel Steuergerätecode. Da wird das ELF dann noch in ein HEX (Motorola-HEX-Format bzw. Intel-Hex-Format) umgewandelt. und sind dann definitiv keine Symbole mehr drin.
 
Zuletzt bearbeitet:
Zurück