[Kos-dev] EXPORT_FUNCTION_RESTRICTED
Thomas Petazzoni
thomas.petazzoni at enix.org
Wed Dec 15 23:41:59 CET 2004
Bonjour,
Je viens de committer un patch qui ajoute la macro
EXPORT_FUNCTION_RESTRICTED en plus de la macro EXPORT_FUNCTIOn déjà
existante pour exporter un symbole.
Ce que ça fait
--------------
Le soucis que j'ai vu avec EXPORT_FUNCTION, c'est qu'on a une vision
très binaire de l'export de symbole. Soit le symbole est exporté auquel
cas il est visible de tout le monde et de partout, soit il n'est pas
exporté, auquel cas il n'est visible de nulle part (sauf du module
courant évidemment).
Il me semble qu'il y a pas mal de symboles qui sont destinées à être
utilisés exclusivement par certains modules. Il m'a paru donc
intéressant d'écrire une macro du type EXPORT_FUNCTION_RESTRICTED qui
s'utilise de la manière suivante :
EXPORT_FUNCTION_RESTRICTED(symbol, module);
qui va tout naturellement autoriser le "module" à accéder au symbole
"symbol", mais pas les autres modules.
A priori, rien n'empêche d'exporter un symbole vers plusieurs modules en
utilisant plusieurs directives EXPORT_FUNCTION_RESTRICTED.
Comment ça marche
-----------------
La macro EXPORT_FUNCTION ajoute une entrée dans une section spéciale du
fichier ELF. Cette entrée contient entre autre la chaîne de caractères
correspondant au symbole exporté.
EXPORT_FUNCTION_RESTRICTED fonctionne de même, sauf que la chaîne de
caractères représentant le symbole exporté est sous la forme
"module:symbolname".
Ensuite, dans loader/elf32/link.c, au lieu de chercher simplement
"symbolname" dans le dictionnaire des symboles exportés, on cherche
également "module:symbolname", où "module" est le nom du module courant,
dont l'extension a été retirée (à priori c'est .ro). Donc si un module a
exporté le symbole "symbolname" pour notre module, alors on trouvera une
correspondance, et la relocation sera correctement effectuée. Dans le
cas contraire, le loader signalera un "Unresolved symbol".
Il est intéressant de noter que grâce au travail de d2 qui a permis la
réutilisation du code du loader pour mod_check, ce dernier n'a pas eu
besoin d'être modifié pour supporter cette nouvelle fonctionnalité.
Inconvénient
------------
Le seul problème que je vois pour l'implémentation du patch, c'est les
manipulations de chaînes de caractères un peu tordues dans
loader/elf32/link.c. C'est pas bien méchant, mais c'est toujours un peu
bidouille cette affaire là. J'ai ajouté strrchr() et strcat() pour
l'occasion.
Bonne soirée,
Thomas
--
PETAZZONI Thomas - thomas.petazzoni at enix.org
http://thomas.enix.org - Jabber: thomas.petazzoni at jabber.dk
KOS: http://kos.enix.org/ - Lolut: http://lolut.utbm.info
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E 1624 F653 CB30 98D3 F7A7
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 256 bytes
Desc: OpenPGP digital signature
Url : http://the-doors.enix.org/pipermail/kos-dev/attachments/20041215/a987acbd/signature.pgp
More information about the Kos-dev
mailing list