Symboltabellen

Florian Lohoff flo at rfc822.org
Mon Aug 14 14:35:48 CEST 2000


On Mon, Aug 14, 2000 at 01:10:28PM +0200, Dennis Wetzig wrote:
> Hi, 
> 
> 	im Kernel ist es ja so, dass ich um eine Funktion auch aus anderen
> Sourcefiles/Objecten aufrufen zu koennen, die jeweilige Funktion
> erst manuell in den "globalen" Kernel Symboltable packen muss (siehe
> /proc/ksyms").

Jein - du musst die Symbole exportieren wenn sie von Modulen erreichbar
sein sollen d.h. in der Globalen symbol table "System.map" oder /proc/ksyms
auftauchen sollen. Wenn es alles "fest" eincompilte sachen sind reicht
ein "extern" declaration.

> Wie kann ich soetwas auch in userspace C Programmen erreichen? Wenn
> ich derzeit meine Objecte mit gcc zusammenlinke, dann kann ich von
> jedem sourcefile aus jede beliebiege Fkt. in den anderen Sourcefiles
> aufrufen. Kann ich explizit die Sichtbarkeit auf das lokale Object
> beschraenken?

Wenn du einzelne Objecte (Nicht executables) hast werden alle
Globalen symbole (Funktionen, Globale Variablen) exportiert um
das linken gegen externe References zu ermoeglichen - Im finalen
link lauf werden all diese Symbol references aufgeloest und abgegelichen
gegen die Symbole in ggfs. dynamischen libraries enthaltenen. Sollte
danach noch was uebrigbleiben gibts ein "undefine reference to ..."
Um symbols auf ein object file zu begrenzen kannst du es static
deklarieren wodurch es aber trotzdem in der symbol table auftaucht.

Wenn du dann dein executable "stripst" werden alle symbole die
nicht noch durch libs aufgeloest werden muessen entfernt (Dadurch
weiss dann der gdb auch nicht mehr bescheid)

Du hast allerdings beim exportieren von Symbols in einem object file
nur die Wahl zwischen "lokalen" variablen und "globalen" variablen
oder funktionen.

Das ganze wird komplizierter mit symbol versioning, weak symbols,
dlopen und konsorten ...

(flo at ping)/tmp# echo "static int localsymbol;" >i.c
(flo at ping)/tmp# gcc -c i.c
(flo at ping)/tmp# readelf -s i.o

Symbol table '.symtab' contains 9 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 FILE    LOCAL  DEFAULT  ABS i.c
     2: 00000000     0 SECTION LOCAL  DEFAULT    1 
     3: 00000000     0 SECTION LOCAL  DEFAULT    2 
     4: 00000000     0 SECTION LOCAL  DEFAULT    3 
     5: 00000000     0 NOTYPE  LOCAL  DEFAULT    1 gcc2_compiled.
     6: 00000000     4 OBJECT  LOCAL  DEFAULT    3 localsymbol
     7: 00000000     0 SECTION LOCAL  DEFAULT    4 
     8: 00000000     0 SECTION LOCAL  DEFAULT    5 

Flo
-- 
Florian Lohoff		flo at rfc822.org		      	+49-5201-669912
     "If you're not having fun right now, you're wasting your time."


-
Hinweise zur Benutzung dieser (und anderer Mailing-Listen) bitte beachten:
--> http://lug-owl.de/mailinglist_hints.html <--



More information about the Linux mailing list