Portage de GCC sur processeur Libre Simple-CPU
Par Wilfrid et Michel
Introduction:
L'évolution des langages de programmations nous ont ammené petit à petit
à nous éloigner des contraintes du matériel, pour nous
consacrer à l'écriture de code dans des languages dit
de plus haut niveau. Ces niveaux d'abstraction pourrait etre organisé
comme suit: en bas de l'échelle le language assembleur propre
à chaque machine, juste au dessus le langauge C, puis C++,
etc... jusqu'au language de très haut niveau que sont l'UML.
Hélas écrire un programme fonctionnant sur un
processeur à partir de sa description UML est encore
impossible. Mais on tentera de plus en plus de programmer dans un
language abstrait vis à vis du matériel pour
faciliter le portage de code entre différentes plateformes et par
soucis d'économie de temps de programmation.
Le projet Simple CPU permet de mettre à la disposition de la communnauté du libre un
ensemble de composants logiciels et matériels afin de mieux comprendre
le fonctionnement d'un système informatique. Une fois le core
écrit, et le jeu d'instruction définit, il fallait
munir le projet de composants essentiels à sa réalisation,
le compilateur C en est un.
Ce document d'introduction présente donc le déroulement du projet vis à vis de la
réalisation du portage d'un compilateur issu également
du monde libre, GCC.
Fonctionnement d'un compilateur:
Le but d'un compilateur est, à partir d'un fichier de code
source, de réaliser un fichier de code cible, en général
dans un language interprétable directement par le processeur
cible. Pour se faire il passe par plusieur grandes étapes.
- L'analyse syntaxique convertit un flux de caractères brut issus du fichier de sources en un flot de lexème. Les lexemes sont les structure indépendantes de tout languages et vont ensuite etre utilisé dans le étapes d'analyse suivantes.
- L'analyse syntaxique convertit le flux de lexeme en un arbre syntaxique représentant les relations entre lexemes.
- L'analyse sémantique enfin permet de donner un signification à l'arbre syntaxique issu de l'analyse syntaxique.
On pourrait comparrer ses 3 étapes à l'étude
des lettres (analyse lexicale) des mots (syntaxique) et des phrases
(sémantique) dans un texte (programme source). Ces étapes
placés en tout début de compilation permettent la
génération de code intermédiaire et interne au
compilateur, s'affranchissant ainsi de toute contrainte tant
matérielle que formelle (langage générique). On
regroupera ainsi les précédentes étapes sous le
nom de “front-end” du compilateur du fait que tout ceci se passe
très proche du language considéré, mais encore
très loin du matériel cible.
Une fois ce code intermédiaire propre au compilateur
généré il va etre possible de lui appliquer
plusieurs étape d'optimisation et de traduction dans le
langage destination. Ces étapes de traduction pour la cible
s'appellent “back-end” et sont évidemment très
proche du processeur visé dont les caractéristiques
doivent etre connu, le code sera ainsi optimisé pour celui-ci.