[Kos-dev] Galere
Thomas Petazzoni
kos-dev@enix.org
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 __builtin_new, builtin_vec_new,
__builtin_delete et __pure_virtual, 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é de la manière suivante :
void *operator new (std::size_t sz) throw (std::bad_alloc)
et dans vec.cc, on trouve des fonctions __cxa_vec_new,
__cxa_vec_delete qui semblent etre utilises pour allouer/construire et
deconstruire/desallouer des tableaux d'objets.
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
"operator" ? Comment le compilateur sait que pour allouer un tableau
d'objets, il doit appeler __cxa_vec_new et non pas la fonction
bonjour_ca_va_bien ?
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).
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.
Bonne journee,
Thomas
--
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
(Perso) http://www.enix.org/~thomas/
(KOS) http://kos.enix.org/
(Club LinUT) http://club-linut.enix.org