[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