Seminar Room 2, ground floor (Building IMAG)
12 décembre 2023 - 09h30
Validation Formelle de Transformations Intra-Procédurales par Simulation Symbolique Défensive (Phd Defense)
par Leo Gourdin de VERIMAG
Résumé : Les compilateurs sont des systèmes logiciels très complexes et peuvent donc contenir des bogues. Ces bogues peuvent se traduire par des erreurs au cours du processus de compilation ou, plus ennuyeusement encore, par la génération dâun code incorrect. Les bogues qui altèrent subtilement la sémantique des programmes générés sont souvent très insidieux et difficiles à retracer. Dans certaines applications, en particulier dans les systèmes embarqués critiques pour la sécurité et sujets à des exigences et régulations strictes (par exemple, avionique, trains, etc.), lâélimination de ces bogues est dâune importance capitale.
Bien que la plupart de ces bogues soient typiquement situés dans les passes dâoptimisation, la désactivation des optimisations nâest pas une solution viable dans de nombreuses applications. En fait, la simple désactivation des optimisations ne suffit pas à garantir un code exempt de bogues. Les normes réglementaires imposent en général lâutilisation de processeurs simples et prédictibles, dont la performance dépend largement du compilateur.
Une solution alternative est dâemployer un compilateur certifié, mécaniquement prouvé correct dans un assistant de preuve. Un tel compilateur assure que le code assembleur généré préserve fidèlement la sémantique du code source. CompCert appartient à cette catégorie, et est le premier compilateur C formellement vérifié et largement utilisé dans lâindustrie. Cependant, prouver la correction dâoptimisations complexes reste un défi. Câest pourquoi les compilateurs certifiés, y compris CompCert, produisent un code significativement moins performant que les compilateurs classiques tels que GCC ou LLVM.
La validation de traduction est une technique où seul le résultat dâune optimisation est vérifié, plutôt que de prouver la correction de son implémentation. Lâalgorithme dâoptimisation, appelé oracle, reste considéré comme non fiable. Néanmoins, ses résultats sont toujours soumis à la validation par un validateur prouvé et conçu pour rejeter toute erreur.
Dans cette thèse, nous approfondissons le concept de validation de traduction guidée. Le principe est de permettre aux oracles de guider le validateur en lui fournissant des indices qui réduisent lâespace de recherche, minimisant ainsi la complexité du processus de validation. Plus précisément, nous proposons un interpréteur symbolique formellement vérifié capable de valider toute une classe de transformations. Notre outil demande aux oracles des invariants de programme en tant quâindices pour guider la simulation symbolique du code original et du code optimisé. Le test de simulation prouvé valide défensivement les optimisations appliquées, en garantissant leur cohérence vis-à -vis du code non optimisé.
Nous avons validé avec succès plusieurs nouvelles transformations en utilisant cette approche, dont certaines nâavaient jamais été formellement vérifiées jusquâalors, grâce à la communication entre les oracles et leur validateur. Notamment, nous avons vérifié une optimisation de âstrength-reductionâ (littéralement, âréduction de forceâ) ciblant les architectures RISC-V 64 bits, qui sont prometteuses dans le contexte des systèmes embarqués critiques pour la sécurité. En plus de la âstrength-reductionâ, notre outil de simulation symbolique supporte lâélimination de redondances partielles, lâélimination du code mort, le déplacement de code, lâordonnancement, et une forme faible de pipeline logiciel avec renommage.
Nous avons intégré notre mécanisme de validation dans notre version de développement (fork) de CompCert, en développant une nouvelle représentation intermédiaire nommée âBlock Transfer Languageâ, BTL (littéralement âLangage de Transfert en Blocsâ). Les traductions de et vers BTL sont également validées de manière défensive, à lâaide dâun vérificateur dédié, formellement vérifié, et capable de valider de la duplication et factorisation de code en tant que morphismes des graphes de flux de contrôle. Pour évaluer rigoureusement lâimpact de nos optimisations et le temps de compilation supplémentaire induit par leur validation, nous avons effectué de multiples mesures expérimentales du temps de compilation et des performances à lâexécution. Les optimisations spécifiques à une architecture cible ont été testées sur des plateformes AArch64 et RISC-V. Les résultats montrent une amélioration significative des performances à lâexécution tout en maintenant un temps de compilation raisonnable.
à lâavenir, cette même méthode pourrait potentiellement être appliquée pour valider dâautres transformations, comme lâinsertion automatique de contre-mesures de sécurité. Nos conceptions semblent être applicables au-delà de CompCert.
Les tranparents de la presentation.
Phd defense of Léo Gourdin.
See https://lgourd.in/defense.html for more information (e.g. remote link).