In article <20080508232434$,
Vincent Lefevre <vincent+ wrote:En fait, je ne vois pas le problème dont parle Marc concernant la mise
à 0 de la mémoire: il suffit de mettre le code dans une fonction avec
le pointeur passé à cette fonction, et de compiler cette fonction
séparément du reste: le compilateur ne peut pas deviner ce que va faire
le reste du programme et ne pourra donc pas optimiser (i.e. il sera
forcé de mettre à 0 la mémoire comme voulu).
Effectivement, tu passes completement a cote du vrai probleme.
Dans le temps, gcc n'optimisait pas le memset en question.
Qui te dit que bientot, il n'optimisera pas ce qui se passe entre
unites de compilation ? certains compilos le font bien...
In article <20080508232434$05bf@prunille.vinc17.org>,
Vincent Lefevre <vincent+news@vinc17.org> wrote:
En fait, je ne vois pas le problème dont parle Marc concernant la mise
à 0 de la mémoire: il suffit de mettre le code dans une fonction avec
le pointeur passé à cette fonction, et de compiler cette fonction
séparément du reste: le compilateur ne peut pas deviner ce que va faire
le reste du programme et ne pourra donc pas optimiser (i.e. il sera
forcé de mettre à 0 la mémoire comme voulu).
Effectivement, tu passes completement a cote du vrai probleme.
Dans le temps, gcc n'optimisait pas le memset en question.
Qui te dit que bientot, il n'optimisera pas ce qui se passe entre
unites de compilation ? certains compilos le font bien...
In article <20080508232434$,
Vincent Lefevre <vincent+ wrote:En fait, je ne vois pas le problème dont parle Marc concernant la mise
à 0 de la mémoire: il suffit de mettre le code dans une fonction avec
le pointeur passé à cette fonction, et de compiler cette fonction
séparément du reste: le compilateur ne peut pas deviner ce que va faire
le reste du programme et ne pourra donc pas optimiser (i.e. il sera
forcé de mettre à 0 la mémoire comme voulu).
Effectivement, tu passes completement a cote du vrai probleme.
Dans le temps, gcc n'optimisait pas le memset en question.
Qui te dit que bientot, il n'optimisera pas ce qui se passe entre
unites de compilation ? certains compilos le font bien...
Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
les normes liées aux langages n'y
changeront rien. Un des problèmes connus concernant la sécurité est
d'ailleurs le swap, d'où la nécessité probablement d'utiliser mlock
sous système POSIX...
Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
les normes liées aux langages n'y
changeront rien. Un des problèmes connus concernant la sécurité est
d'ailleurs le swap, d'où la nécessité probablement d'utiliser mlock
sous système POSIX...
Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
les normes liées aux langages n'y
changeront rien. Un des problèmes connus concernant la sécurité est
d'ailleurs le swap, d'où la nécessité probablement d'utiliser mlock
sous système POSIX...
In article <20080513110728$,
Vincent Lefevre <vincent+ wrote:Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
C'est bien ce que je reproche a gcc, de s'arreter *avant* ce niveau
de detail, et de se retrancher derriere la norme pour changer des
comportements qui ont une importance pratique.
In article <20080513110728$5484@prunille.vinc17.org>,
Vincent Lefevre <vincent+news@vinc17.org> wrote:
Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
C'est bien ce que je reproche a gcc, de s'arreter *avant* ce niveau
de detail, et de se retrancher derriere la norme pour changer des
comportements qui ont une importance pratique.
In article <20080513110728$,
Vincent Lefevre <vincent+ wrote:Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
C'est bien ce que je reproche a gcc, de s'arreter *avant* ce niveau
de detail, et de se retrancher derriere la norme pour changer des
comportements qui ont une importance pratique.
Dans l'article <g0c3ms$ufd$,
Marc Espie écrit:In article <20080513110728$,
Vincent Lefevre <vincent+ wrote:Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
C'est bien ce que je reproche a gcc, de s'arreter *avant* ce niveau
de detail, et de se retrancher derriere la norme pour changer des
comportements qui ont une importance pratique.
Il en a tout à fait le droit; il ne peut pas deviner ce que tu veux
comme optimisation. Et si tu ne veux aucune optimisation qui puisse
changer le comportement vis-à-vis de l'extérieur (en quelque sorte,
une généralisation du volatile), les performances seront énormément
dégradées.
Dans l'article <g0c3ms$ufd$1@biggoron.nerim.net>,
Marc Espie <espie@lain.home> écrit:
In article <20080513110728$5484@prunille.vinc17.org>,
Vincent Lefevre <vincent+news@vinc17.org> wrote:
Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
C'est bien ce que je reproche a gcc, de s'arreter *avant* ce niveau
de detail, et de se retrancher derriere la norme pour changer des
comportements qui ont une importance pratique.
Il en a tout à fait le droit; il ne peut pas deviner ce que tu veux
comme optimisation. Et si tu ne veux aucune optimisation qui puisse
changer le comportement vis-à-vis de l'extérieur (en quelque sorte,
une généralisation du volatile), les performances seront énormément
dégradées.
Dans l'article <g0c3ms$ufd$,
Marc Espie écrit:In article <20080513110728$,
Vincent Lefevre <vincent+ wrote:Mais de toute façon, là, on sort complètement de la norme C, et le
programmeur doit un minimum se baser sur la doc de son compilateur
quand celui-ci outrepasse ce qu'il est censé faire (qui est de
compiler une unité en un fichier objet), et plus généralement de
son environnement (OS, etc.);
C'est bien ce que je reproche a gcc, de s'arreter *avant* ce niveau
de detail, et de se retrancher derriere la norme pour changer des
comportements qui ont une importance pratique.
Il en a tout à fait le droit; il ne peut pas deviner ce que tu veux
comme optimisation. Et si tu ne veux aucune optimisation qui puisse
changer le comportement vis-à-vis de l'extérieur (en quelque sorte,
une généralisation du volatile), les performances seront énormément
dégradées.
Mais *TOUS* les cryptographes ont rale sur la suppression de ce truc,
ont dit que volatile n'etait clairement pas une solution, ont *demande*
un truc aux gens qui pondent gcc, avec juste comme resultat des discussions
de `language lawyer' sur `ah ouais, mais la, ca ca s'interprete pas comme
ca, et la norme ne permet rien'... ce qui n'est pas exactement ce qui
etait voulu comme resultat, hein.
Mais *TOUS* les cryptographes ont rale sur la suppression de ce truc,
ont dit que volatile n'etait clairement pas une solution, ont *demande*
un truc aux gens qui pondent gcc, avec juste comme resultat des discussions
de `language lawyer' sur `ah ouais, mais la, ca ca s'interprete pas comme
ca, et la norme ne permet rien'... ce qui n'est pas exactement ce qui
etait voulu comme resultat, hein.
Mais *TOUS* les cryptographes ont rale sur la suppression de ce truc,
ont dit que volatile n'etait clairement pas une solution, ont *demande*
un truc aux gens qui pondent gcc, avec juste comme resultat des discussions
de `language lawyer' sur `ah ouais, mais la, ca ca s'interprete pas comme
ca, et la norme ne permet rien'... ce qui n'est pas exactement ce qui
etait voulu comme resultat, hein.
Dans l'article <g0du4c$12kk$,
Marc Espie écrit:Mais *TOUS* les cryptographes ont rale sur la suppression de ce truc,
ont dit que volatile n'etait clairement pas une solution, ont *demande*
un truc aux gens qui pondent gcc, avec juste comme resultat des discussions
de `language lawyer' sur `ah ouais, mais la, ca ca s'interprete pas comme
ca, et la norme ne permet rien'... ce qui n'est pas exactement ce qui
etait voulu comme resultat, hein.
Est-ce qu'ils ont pondu une spécification claire (qui pourrait alors
être implémentée et activée avec telle ou telle option et serait de
l'implementation-defined)?
Dans l'article <g0du4c$12kk$1@biggoron.nerim.net>,
Marc Espie <espie@lain.home> écrit:
Mais *TOUS* les cryptographes ont rale sur la suppression de ce truc,
ont dit que volatile n'etait clairement pas une solution, ont *demande*
un truc aux gens qui pondent gcc, avec juste comme resultat des discussions
de `language lawyer' sur `ah ouais, mais la, ca ca s'interprete pas comme
ca, et la norme ne permet rien'... ce qui n'est pas exactement ce qui
etait voulu comme resultat, hein.
Est-ce qu'ils ont pondu une spécification claire (qui pourrait alors
être implémentée et activée avec telle ou telle option et serait de
l'implementation-defined)?
Dans l'article <g0du4c$12kk$,
Marc Espie écrit:Mais *TOUS* les cryptographes ont rale sur la suppression de ce truc,
ont dit que volatile n'etait clairement pas une solution, ont *demande*
un truc aux gens qui pondent gcc, avec juste comme resultat des discussions
de `language lawyer' sur `ah ouais, mais la, ca ca s'interprete pas comme
ca, et la norme ne permet rien'... ce qui n'est pas exactement ce qui
etait voulu comme resultat, hein.
Est-ce qu'ils ont pondu une spécification claire (qui pourrait alors
être implémentée et activée avec telle ou telle option et serait de
l'implementation-defined)?
Tu pourrais tres facilement pondre un builtin, style
__builtin_volatile(v);
au point ou le builtin est indique, la valeur de v est observee par
un element exterieur, et donc *doit* coincider avec ce qui est ecrit
dans le code...
Tu pourrais tres facilement pondre un builtin, style
__builtin_volatile(v);
au point ou le builtin est indique, la valeur de v est observee par
un element exterieur, et donc *doit* coincider avec ce qui est ecrit
dans le code...
Tu pourrais tres facilement pondre un builtin, style
__builtin_volatile(v);
au point ou le builtin est indique, la valeur de v est observee par
un element exterieur, et donc *doit* coincider avec ce qui est ecrit
dans le code...
Dans l'article <g0i2dp$1kov$,
OK, ça devient plus clair. À plus long terme, ce serait bien que
ce genre de chose soit dans la norme C, même si le mapping entre la
mémoire de la machine virtuelle et celle(s) de la machine physique
restera de l'implementation-defined (je pense notamment au swap,
mais surtout à un cache write back: une "bonne" implémentation
devra s'assurer que les données du cache sont recopiées en RAM).
Dans l'article <g0i2dp$1kov$1@biggoron.nerim.net>,
OK, ça devient plus clair. À plus long terme, ce serait bien que
ce genre de chose soit dans la norme C, même si le mapping entre la
mémoire de la machine virtuelle et celle(s) de la machine physique
restera de l'implementation-defined (je pense notamment au swap,
mais surtout à un cache write back: une "bonne" implémentation
devra s'assurer que les données du cache sont recopiées en RAM).
Dans l'article <g0i2dp$1kov$,
OK, ça devient plus clair. À plus long terme, ce serait bien que
ce genre de chose soit dans la norme C, même si le mapping entre la
mémoire de la machine virtuelle et celle(s) de la machine physique
restera de l'implementation-defined (je pense notamment au swap,
mais surtout à un cache write back: une "bonne" implémentation
devra s'assurer que les données du cache sont recopiées en RAM).