[Kos-dev] Galere

kos-dev@enix.org kos-dev@enix.org
Thu, 16 Jan 2003 11:32:15 CET


Salut tous le monde, me voici de retour =

(enfin pas trop qd meme, vu que je peut difficilement vous aider)

----Message d'origine----
>A: kos-dev=40enix.org
>De: Thomas Petazzoni <thomas.petazzoni=40enix.org>
>Sujet: =5BKos-dev=5D Galere
>Date: Thu, 16 Jan 2003 10:44:36 +0100
>
>Salut,
>
>Avec Julien hier on a discute du probleme de libcxxrt. On a essaye de
>chercher chacun de notre cote de la doc pendant une heure, j'ai
>regarde les liens qu'il y avait sur le site de David, mais j'ai
>vraiment rien trouve de probant qui explique clairement comment
>utiliser du C++ dans un noyau.
>
>Actuellement, Julien a code des =5F=5Fbuiltin=5Fnew, builtin=5Fvec=5Fnew,
>=5F=5Fbuiltin=5Fdelete et =5F=5Fpure=5Fvirtual, mais quand on regarde le =
code de
>libsupc++ (contenu dans libstdc++), on se rend compte que tout cela
>est fait bien differement.
>
>le new (simple) est cod=E9 de la mani=E8re suivante :
>void *operator new (std::size=5Ft sz) throw (std::bad=5Falloc)

enfin normallement y en a 4 operateurs new:
- new (size) throw
- new (size) =

- vector new (size) throw
- vector new (size) =


donc comme, on compile sans exception, on ne doit avoir =

que le new classique et potentielement celui pour les tablos

>et dans vec.cc, on trouve des fonctions =5F=5Fcxa=5Fvec=5Fnew,
>=5F=5Fcxa=5Fvec=5Fdelete qui semblent etre utilises pour allouer/construi=
re et
>deconstruire/desallouer des tableaux d'objets.

vi cf dessus
enfin si jamais le compilo ne trouve pas le vector new il utilise
un boucle de new classique

>Mais rien de precis sur la maniere de porter tout ca : doit on
>reprendre telles quelles ces fonctions, en adaptant leur corps pour
>qu'elles n'utilisent pas les exceptions ? Comment fonctionne le
>=22operator=22 ? Comment le compilateur sait que pour allouer un tableau
>d'objets, il doit appeler =5F=5Fcxa=5Fvec=5Fnew et non pas la fonction
>bonjour=5Fca=5Fva=5Fbien ?

ca c'est tout simplement une histoire de mangling (noms de fonction  , au =
sens link, generee par le compilo c++)
par exemple, mangling des =22internals=22 c++, sous windows:
- le new classique devient ??2=40YAPAXI=40Z
- le vector new classique devient ??=5FU=40YAPAXI=40Z
- pour les exceptions je me rappelle plus trop du mangling exacte
ca nous donne 4 fonctions bien distinctes

>Bref j'ai du mal a comprendre les interactions entre le C++ et le
>runtime qui va derriere pour qu'on puisse utiliser du C++ dans le
>noyau. (ca me fait penser que si un jour on y arrive -> ecriture de doc).=
 =


ben je pense qu'une implementation des 2 fonctions necessaires (dans un so=
urce en c++ afin de pas trop jouer avec le loader)
doit etre la solution

>Je pensais eventuellement ecrire a un des mecs qui a fait des modifs
>sur la libsupc++ (y'a des emails dans le ChangeLog), mais si quelqu'un
>sur la mailing list a des infos plus precises, elles sont les
>bienvenues.

j'espere que ca t'aidera

>Bonne journee,

de meme

>Thomas

Raphael