Projet Logiciel en C - Sujet 1 : Simulateur de - Ensiwiki

publicité
Projet Logiciel en C - Sujet 1 :
Simulateur de microprocesseur MIPS
Ensimag 1ère année - 2011/12
31 mai 2012
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 1 / 52
Objectifs de la scéance
Présentation succinte des objectifs du projet logiciel en C, et son
déroulement général.
Simulateur de microprocesseur MIPS
• Contexte du projet
• Fonctionnalités et intérêt d’un simulateur
• L’architecture MIPS
Organisation et spécifications du projet pour le sujet MIPS
Réponse aux questions éventuelles liées au projet ou au sujet
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 2 / 52
Plan
1
Introduction
2
Déroulement du projet
Objectifs
Planning/Encadrement
Règles du jeu
3
Simulateur de microprocesseur MIPS
4
Travail à réaliser
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 3 / 52
Objectifs du projet logiciel
Apprentissage d’un langage de référence : le C
Mise en pratique des connaissances acquises dans d’autres
modules : compilation, Unix, logiciel de base
Premier aperçu des contraintes d’un ”gros” projet logiciel :
• Travail en équipe (trinôme): découpage répartition des tâches, mise
en commun
• Gestion du temps et de la difficulté des différentes étapes
• Respect d’un cahier des charges
• Importance de la phase de validation (tests, débug, . . . )
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 4 / 52
Plan
1
Introduction
2
Déroulement du projet
Objectifs
Planning/Encadrement
Règles du jeu
3
Simulateur de microprocesseur MIPS
4
Travail à réaliser
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 5 / 52
Planning/Encadrement
Jeudi 31 mai: Amphi de présentation et lancement du projet
Du 31 mai au mercredi 13 juin: libre-service encadré
•
•
•
•
salles machines du 2ème étage
2 encadrants par demi-journée
1 ou 2 demi-journées par jour
planning disponible sur ensiwiki
Rendu du projet le mercredi 13 juin sur TEIDE
Soutenances les jeudi 14 et vendredi 15 juin
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 6 / 52
A quoi sert un encadrant ?
Les encadrants sont là pour :
• vous aider sur la programmation en C en général
• vous aider sur les points techniques du projet
• vous conseiller sur l’aspect conception (comment structurer son
projet)
• vous apporter des conseils sur l’organisation (le travail en équipe
n’apporte pas que des avantages !)
Les encadrants NE SONT PAS LA pour :
• faire le projet à votre place
• vous donner les solutions à tous les problèmes
• remplacer les logiciels de debug
Dans tous les cas, réfléchissez à vos questions avant de les poser
et discutez avec vos binômes, souvent la réponse est dans la
question, et soyez précis
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 7 / 52
The Dream Team
Frédéric Wagner
Luc Michel
Ludovic Jacquin
Loı̈c Petit
Frédéric Elisei
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 8 / 52
Plan
1
Introduction
2
Déroulement du projet
Objectifs
Planning/Encadrement
Règles du jeu
3
Simulateur de microprocesseur MIPS
4
Travail à réaliser
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS -
| 9 / 52
Petit rappel sur la fraude
Il est interdit de copier ou de s’inspirer de fichiers concernant le
projet, à l’exception des fichiers fournis par les encadrants. Ceci
inclus:
• les fichiers des années précédentes
• les fichiers d’étudiants n’appartenant pas au trinôme
De même, il est interdit de transmettre des fichiers à des étudiants
extérieurs au trinôme. Ceci implique que vous protégiez vos
fichiers en lecture (contrôle effectué périodiquement). Des
informations sur la sécurisation des fichiers sont disponibles sur le
Wiki
Des outils de détection automatique de triche sont utilisés
En cas de fraude avérée, la sanction est le 0 au projet, en plus des
sanctions prévues dans le réglement de l’école
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 10 / 52
Evaluation
L’évaluation du projet compte pour 80% de la note finale de
projet C (le restant étant la note de la semaine de préparation)
Votre projet sera évalué lors des soutenances des 14 et 15 juin.
Tout le trinôme participe à la soutenance, avec un enseignant.
La soutenance se divise en trois parties
1. 10 minutes de présentation:
I
I
I
de votre solution
des principaux choix de conception
des difficultés/facilités rencontrées
Ne pas prévoir une démonstration, mais plusieurs qui démontrent les
atouts de votre projet final
2. L’examinateur vous soumet un problème à résoudre. Vous avez alors
30 minutes pour apporter une solution à ce problème dans votre
code
3. Les 15 dernières minutes sont consacrées à des tests plus avançés, à
partir de vos programmes tests et/ou de ceux de l’examinateur
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 11 / 52
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
Contexte du projet
Description du MIPS
Langage d’assemblage
Fichier objets relogeables
4
Travail à réaliser
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 12 / 52
Simulateur
Principe identique aux simulateurs disponibles pour les jeux vidéos
• Émulation logicielle d’une architecture (CPU + RAM + périphériques)
• Lancement d’un vrai logiciel sur le faux matériel
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 13 / 52
Simulateur
Principe identique aux simulateurs disponibles pour les jeux vidéos
• Émulation logicielle d’une architecture (CPU + RAM + périphériques)
• Lancement d’un vrai logiciel sur le faux matériel
Intérêts
• Compréhension du fonctionnement d’une machine
• Très intéressant pour la sécurité en informatique
• Bonne vision de la partie finale d’une chaine de compilation
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 13 / 52
m1.c
compilation
gcc -c
m1.o
preprocessing
gcc -E
m1.i
EDITION DE LIENS
fusion
ld -t -o progrel.o \
m1.o m2.o m3.o
implantation
ld progrel.o -o prog
progrel.o
prog
assemblage
gcc -c
ou as
2
traduction
gcc -S
m1.s
chargement
librairies
m2.s
m2.o
image mémoire
lib dynamiques
m3.c
m3.o
COMPILATION
données
exécution
résultats
Fonctionnalités du simulateur
En sortie de l’édition de liens, on peut disposer d’un programme :
relogeable (adresses relatives)
exécutable (adresses implantées, absolues)
Le simulateur permettra :
1. le chargement en mémoire de ce programme
• aux adresses prévues, dans le cas d’un exécutable
• à des adresses paramétrables, dans le cas relogeable
Il faudra alors reloger le programme à ces adresses.
2. le désassemblage du programme chargé, c’est-à-dire l’affichage
du code en langage assembleur correspondant
3. l’exécution de la suite des instructions, avec mise à jour de l’état
de la machine (registres, mémoire, ...).
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 14 / 52
Intérêt du simulateur ?
Reproduire l’objet simulé, ici la machine MIPS
• dans sa structure: registres & mémoire similaires au processeur
• dans sa capacité à décoder un programme
• dans son comportement pendant l’exécution
Les mêmes résultats doivent être obtenus que lors de l’exécution
sur un MIPS réel, mais pas forcément de la même façon!
Un tel logiciel permet par exemple de tester et déboguer des
programmes destinés à une machine équipée d’un processeur
MIPS, sans avoir réellement d’ordinateur avec cette architecture.
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 15 / 52
Framebuffer
Framebuffer
• zone mémoire correspondant à la mémoire d’une carte graphique
• 320x200, niveaux de gris
• adresses fixes, écriture seulement
Principe
• simulateur : simulation du CPU mais aussi de la mémoire
• tout accès mémoire est géré par le simulateur
I vérification de l’adresse accédée
I gestion spécifique si framebuffer ou RAM
Module d’affichage fourni
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 16 / 52
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
Contexte du projet
Description du MIPS
Langage d’assemblage
Fichier objets relogeables
4
Travail à réaliser
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 17 / 52
Processeurs MIPS
Gamme de micro-contrôleurs légers
• processeur
• mémoire, ports, périphériques, etc.
Stations de travail (Silicon Graphics, . . . )
Systèmes embarqués légers
• imprimantes, modems
• consoles de jeux!
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 18 / 52
Processeurs MIPS : architecture
MIPS : Microprocesseur without Interlocked Pipeline Stages
• Pipeline d’exécution : lecture, décodage, exécution, registres,
mémoire
• Une instruction terminée à chaque cycle d’horloge
Processeur de type RISC: Reduced Instruction Set Computer
• Jeu d’instructions réduit
• Syntaxe des instructions régulière
• Codage régulier, toujours sur 32 bits
Load/Store architecture
• Mémoire accédée seulement pas les instructions de lecture/écriture
• Pour toutes les autres: opérandes dans des registres ou immédiats
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 19 / 52
Processeurs MIPS : architecture
MIPS : Microprocesseur without Interlocked Pipeline Stages
• Pipeline d’exécution : lecture, décodage, exécution, registres,
mémoire
• Une instruction terminée à chaque cycle d’horloge
Processeur de type RISC: Reduced Instruction Set Computer
• Jeu d’instructions réduit
• Syntaxe des instructions régulière
• Codage régulier, toujours sur 32 bits
Load/Store architecture
• Mémoire accédée seulement pas les instructions de lecture/écriture
• Pour toutes les autres: opérandes dans des registres ou immédiats
L’anti-Pentium??
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 19 / 52
Processeurs MIPS : mémoire
Adressage 32 bits ↔ tableau de 4 Go
Big Endian : octet de poids fort à l’adresse la plus basse
0x12345678 à l’adresse mémoire 0x4
0x00000004
↓
0x00000007
big endian
...
0x01
0x23
0x45
0x67
...
little endian
...
0x67
0x45
0x23
0x01
...
Mémoire alignée
• Tous les mots de 32 bits (en particulier les instructions) sont à des
adresses multiples de 4
• Seuls les octets peuvent être placés n’importe où en mémoire
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 20 / 52
Processeurs MIPS : registres de 32 bits
Que des registres de 32 bits!
Trente deux Registres d’usage général: $0 à $31
General Purpose Registers
Registre
$0
$1
$2, $3
$4-$7
$8-$15
$16-$23
$24, $25
$26, $27
$28
$29
$30
$31
Mnemonic
$zero
$at
$v0, $v1
$a0-$a3
$t0-$t7
$s0-$s7
$t8, $t9
$k0, $k1
$gp
$sp
$fp
$ra
Usage (réservé ou conventionnel)
Toujours nul (relié à la masse)
Assembler temporary (réservé!)
Valeurs retournées par une sous-routine
Arguments d’une sous-routine
Registres temporaires
Registres temporaires, préservés par les sous-routines
Deux temporaires de plus
kernel
Global pointer
Stack pointer
Frame pointer
Return address
Trois registres spécialisés
• $PC : Program Compter
• $HI, $LO : résultats sur 64 bits (MULT, DIV)
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 21 / 52
Processeurs MIPS : modes d’adressage
Seulement cinq modes d’adressage des opérandes
Registre direct : ADD $2, $3, $4
Immédiat : ADDI $2, $3, 0x12C
Indirect avec base et déplacement : LW $2, -200($10)
Relatif : B 0xF3
Absolu aligné dans une région de 256 Mo : J 0xABC3
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 22 / 52
Processeurs MIPS : instructions
Instructions dans le projet : sous-ensemble de celles du MIPS
Arithmétiques
• ADD $2, $3, $4
• ADDI $2, $3, 0xA1C
• MULT $2, $3
Logiques
• AND $2, $3, $4
Lecture / écriture mémoire
• LB $2, 0xAB4($10) Load Byte
• SW $2, -100($10) Store Word
Instruction de contrôle
• BEQ $2, $3, 0x1000 Branch on Equals
• JAL 0xABCD0 Jump And Link
• JR $31 Jump Register
...
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 23 / 52
Processeurs MIPS : instructions
Syntaxe toujours régulière
Généralement un seul mode d’adressage possible par opérande
En tout et pour tout, trois formats de codage binaire:
• R-instruction rd, rs, rt
• I-instruction rd, rs, immediate
• J-instruction instr index
Format d’une instruction de type I
31
26 25
opcode
6
21 20
rs
5
16 15
rt
5
0
immediate
16
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 24 / 52
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
Contexte du projet
Description du MIPS
Langage d’assemblage
Fichier objets relogeables
4
Travail à réaliser
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 25 / 52
Langage d’assemblage du MIPS
Langage produit par les compilateurs des langages de haut
niveau (Ada, Java, C), . . . ou écrit à la main!
Intermédiaire entre un langage de haut niveau et le langage de
la machine au format binaire
Quel langage d’assemblage?
• cours de Logiciel de base: langage as, pour le Pentium
• ici: sous ensemble de as, donc beaucoup de points identiques:
directives, commentaires. . .
• avec bien sûr les instructions du MIPS!
Types d’informations :
•
•
•
•
commentaires
étiquettes
instructions machine
directives d’assemblage
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 26 / 52
Langage d’assemblage
Commentaires
# Sur une ligne
/* Sur plusieurs
lignes */
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 27 / 52
Langage d’assemblage
Commentaires
Etiquettes
# Sur une ligne
/* Sur plusieurs
lignes */
Label1:
Label3:
Label2:
ADDI $2, $3, 0xC8
Les 3 symboles repèrent l’adresse en
mémoire de l’instruction ADDI $2, $3, 0xC8
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 27 / 52
Langage d’assemblage
Commentaires
Etiquettes
# Sur une ligne
/* Sur plusieurs
lignes */
Label1:
Label3:
Label2:
ADDI $2, $3, 0xC8
Les 3 symboles repèrent l’adresse en
mémoire de l’instruction ADDI $2, $3, 0xC8
Littéraux
OxFdCba98 # nombre hexadécimal
123456789 # nombre décimal
hexadécimaux interprétés comme non-signés
décimaux interprétés comme signés en complément à 2
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 27 / 52
Langage d’assemblage : directives
Sectionnement
3 mots-clés pour 2 zones mémoire :
.text : zone programme
.data : données initialisées de la
zone données
.bss : données non initialisées de
la zone données
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 28 / 52
Langage d’assemblage : directives
Sectionnement
3 mots-clés pour 2 zones mémoire :
.text : zone programme
.data : données initialisées de la
zone données
.bss : données non initialisées de
la zone données
Définition de données
Données non initialisées : .skip <taille>
Données initialisées :
.byte <valeur sur 8 bits>
.word <valeur sur 32 bits>
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 28 / 52
Langage d’assemblage : directives
Autres
Sectionnement
3 mots-clés pour 2 zones mémoire :
.text : zone programme
.data : données initialisées de la
zone données
.bss : données non initialisées de
la zone données
Exportation de nom
d’étiquette :
.globl <nom>
Options avancées pour as :
.set noreorder
Définition de données
Données non initialisées : .skip <taille>
Données initialisées :
.byte <valeur sur 8 bits>
.word <valeur sur 32 bits>
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 28 / 52
Langage d’assemblage : instructions
Instructions machine
operation [op1 [,op2 [,op3]]]
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 29 / 52
Langage d’assemblage : instructions
Instructions machine
operation [op1 [,op2 [,op3]]]
Nom de l’opération
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 29 / 52
Langage d’assemblage : instructions
Instructions machine
operation [op1 [,op2 [,op3]]]
Nom de l’opération
0, 1, 2 ou 3 opérandes.
Une destination, puis la ou les sources
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 29 / 52
Langage d’assemblage : instructions
Instructions machine
operation [op1 [,op2 [,op3]]]
Nom de l’opération
0, 1, 2 ou 3 opérandes.
Une destination, puis la ou les sources
Syntaxe des opérandes suivant le mode d’adressage :
•
•
•
•
nom d’un registre : $29, $sp, . . .
valeur immédiate : 0xC8, 1234
indirect avec base et déplacement : -200($17)
etc., voir description des modes d’adressage
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 29 / 52
Langage d’assemblage :
pseudos-instructions
Uniquement définies dans le langage d’assemblage
Macro-instructions, équivalentes à une ou plusieurs instructions
machine
Opération courantes:
• MOVE rt, rs ↔ ADDU rt, rs, $zero
• LI rt, immediate32 ↔
LUI rt, hi(immediate32)
ORI rt, rt, lo(immediate32)
• ...
Modes d’adressage différents, en particulier des symboles:
• BEQ rt, rs, adr de branch
• LW rt, label ↔ LUI $1, addendHI16
LW rt, addendLO16($1)
• ...
Avec des symboles, le codage binaire est généralement relatif et
accompagné d’informations de relocation
→ Notion de fichier binaire relogeable.
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 30 / 52
Langage d’assemblage : exemple
miam.s
. s e t noreorder
. text
LB $t0 , lunchtime
ADDI $t1 , $zero , 8
boucle :
BEQ $t0 , $t1 , byebye
NOP
ADDI $t1 , $t1 , 1
B boucle
NOP
byebye :
JAL v i t e v i t e a u r u
NOP
. data
lunchtime : . byte 12
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 31 / 52
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
Contexte du projet
Description du MIPS
Langage d’assemblage
Fichier objets relogeables
4
Travail à réaliser
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 32 / 52
Principe de la relocation
Pour coder un fichier assembleur, il
suffit de coder l’ensemble des
instructions et déclarations de
données.
Code simple, absolu
. text
ADDI $3 , $0 , 12345
SW $3 , 0x100 ( $17 )
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 33 / 52
Principe de la relocation
Pour coder un fichier assembleur, il
suffit de coder l’ensemble des
instructions et déclarations de
données.
Que se passe-t-il lorsque des
symboles sont utilisés?
Code simple, absolu
. text
ADDI $3 , $0 , 12345
SW $3 , 0x100 ( $17 )
En utilisant des symboles
. text
ADDI $3 , $0 , 12345
SW $3 , X
. data
. word 0xABC
X : . word 0x12345
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 33 / 52
Principe de la relocation
Pour coder un fichier assembleur, il
suffit de coder l’ensemble des
instructions et déclarations de
données.
Que se passe-t-il lorsque des
symboles sont utilisés?
les adresses des symboles ne
sont connues que relativement au
début des sections
Code simple, absolu
. text
ADDI $3 , $0 , 12345
SW $3 , 0x100 ( $17 )
En utilisant des symboles
. text
ADDI $3 , $0 , 12345
SW $3 , X
. data
. word 0xABC
X : . word 0x12345
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 33 / 52
Principe de la relocation
Pour coder un fichier assembleur, il
suffit de coder l’ensemble des
instructions et déclarations de
données.
Que se passe-t-il lorsque des
symboles sont utilisés?
les adresses des symboles ne
sont connues que relativement au
début des sections
ici, X est 4 octets après le début
de la section .data
Code simple, absolu
. text
ADDI $3 , $0 , 12345
SW $3 , 0x100 ( $17 )
En utilisant des symboles
. text
ADDI $3 , $0 , 12345
SW $3 , X
. data
. word 0xABC
X : . word 0x12345
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 33 / 52
Principe de la relocation
Pour coder un fichier assembleur, il
suffit de coder l’ensemble des
instructions et déclarations de
données.
Que se passe-t-il lorsque des
symboles sont utilisés?
les adresses des symboles ne
sont connues que relativement au
début des sections
ici, X est 4 octets après le début
de la section .data
On ne peut coder que de manière
“non-définitive”. Il faudra reloger
le fichier binaire, à l’édition de
liens ou au chargement
Code simple, absolu
. text
ADDI $3 , $0 , 12345
SW $3 , 0x100 ( $17 )
En utilisant des symboles
. text
ADDI $3 , $0 , 12345
SW $3 , X
. data
. word 0xABC
X : . word 0x12345
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 33 / 52
Informations de relocation
Les informations disponibles sont :
•
•
•
•
l’adresse du code à reloger (ici .text + 4)
l’adresse du symbole, s’il est local (.data + 4)
... ou juste son nom, s’il est global!
l’utilisation du symbole (opérande, ...),
définissant un mode de relocation
En utilisant des symboles
. text
ADDI $3 , $0 , 12345
SW $3 , X
. data
. word 0xABC
X : . word 0x12345
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 34 / 52
Informations de relocation
Les informations disponibles sont :
•
•
•
•
l’adresse du code à reloger (ici .text + 4)
l’adresse du symbole, s’il est local (.data + 4)
... ou juste son nom, s’il est global!
l’utilisation du symbole (opérande, ...),
définissant un mode de relocation
Elles seront codées entre :
• l’espace temporaire addend dans le codage
binaire, qu’on ne sait pas coder de manière
absolue (ici, 16 bits dans le SW)
• une table de relocation, associée à la zone
contenant le code à reloger (ici .rel.text)
En utilisant des symboles
. text
ADDI $3 , $0 , 12345
SW $3 , X
. data
. word 0xABC
X : . word 0x12345
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 34 / 52
Informations de relocation
Les informations disponibles sont :
•
•
•
•
l’adresse du code à reloger (ici .text + 4)
l’adresse du symbole, s’il est local (.data + 4)
... ou juste son nom, s’il est global!
l’utilisation du symbole (opérande, ...),
définissant un mode de relocation
Elles seront codées entre :
• l’espace temporaire addend dans le codage
binaire, qu’on ne sait pas coder de manière
absolue (ici, 16 bits dans le SW)
• une table de relocation, associée à la zone
contenant le code à reloger (ici .rel.text)
En utilisant des symboles
. text
ADDI $3 , $0 , 12345
SW $3 , X
. data
. word 0xABC
X : . word 0x12345
Table de relocation .rel.text
Offset
00000004
00000008
Info
Type
00000205 R MIPS HI16
00000206 R MIPS LO16
Sym . Value
00000000
00000000
Sym . Name
. data
. data
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 34 / 52
Format de fichier ELF
ELF: Executable and Linkable Format
Format de fichiers objets et exécutables relogeables, commun à
de nombreux OS (Linux, MacOs, ...)
Ensemble de sections (éventuellement vides)
•
•
•
•
•
•
•
Entête
Table des entêtes de sections
Table des noms de sections (“.text”, “.data”, “.rel.text”, ...)
Table des chaı̂nes (noms des symboles)
Table des symboles (informations sur les symboles)
Section de données (.text, .data, .bss)
Tables de relocations (.rel.text, .rel.data)
Librairies C standard (libelf, gelf) pour la lecture/écriture d’un
fichier ELF
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 35 / 52
Format de fichier ELF
entête
du fichier
e_shoff
e_shstrndx
table
des entêtes
de sections
entête
sh_offset
de section
sh_name
section
ELF
table
des noms
de sections
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 36 / 52
Exemple d’assemblage
mips-as miam.s -o miam.o
Fichier d’entrée : miam.s
. s e t noreorder
. text
LB $t0 , lunchtime
ADDI $t1 , $zero , 8
boucle :
BEQ $t0 , $t1 , byebye
NOP
ADDI $t1 , $t1 , 1
B boucle
NOP
byebye :
JAL v i t e v i t e a u r u
NOP
. data
lunchtime : . byte 12
Fichier de sortie : miam.o
00111000000100001000000100011. . .
les adresses sont relatives ou
non-déterminées
miam.o est un fichier objet
binaire relogeable au
format ELF.
Ce n’est pas un fichier
exécutable.
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 37 / 52
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
4
Travail à réaliser
Spécifications du simulateur
Modules fournis
Cahier des charges
Conseils
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 38 / 52
Interface Homme-Machine
IHM très simple, de type shell (lignes de commandes)
Fonctions du simulateur: 15 commandes paramétrées
•
•
•
•
•
•
•
chargement d’un fichier objet binaire
relocation des adresses
désassemblage
simulation de l’exécution des instructions
affichage & modification de l’état de la machine
screenshot
...
E n t r e r une commande: dreg $8
$8 : 0x00000000
E n t r e r une commande: run
E n t r e r une commande: dreg $8
$8 : 0x00010ABC
E n t r e r une commande:
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 39 / 52
Chargement d’un programme
load <fichier>: Chargement en mémoire d’un fichier binaire
• Représentation interne de la mémoire?
• “recopie” du code des instructions et des données
• Relocation éventuelle!
E n t r e r une commande: load exempleElf
Chargement de exempleElf . . . Le f i c h i e r e s t EXECUTABLE
Section . t e x t => 36 octets implantes a l ’ adresse 0x00400018
Section . data => 12 octets implantes a l ’ adresse 0x0040103C
Section . bss => 9 octets implantes a l ’ adresse 0x00401048
E n t r e r une commande: load exempleElf . o
Chargement de exempleElf . e l f . . . Le f i c h i e r e s t RELOGEABLE
Adresse d’ implantation de l a section . t e x t ? (0 x00400000 )
Adresse d’ implantation de l a section . data? (0 x00401000 )
Section . t e x t => 36 octets implantes a l ’ adresse 0x00400000
Section . data => 12 octets implantes a l ’ adresse 0x00401000
Section . bss => 9 octets implantes a l ’ adresse 0x0040100C
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 40 / 52
Désassemblage
dasm : affiche le programme en assembleur correspondant code
binaire chargé
E n t r e r une commande: dasm
====> Section . t e x t :
00400018: 20033039
0040001C: 0C10000B
00400020: 00000000
00400024: 10000005
00400028: 00000000
0040002C: 3C010040
00400030: AC231044
00400034: 03E00008
00400038: 00000000
====> Section . data :
0040103C: AB000000
00401040: 00401044
00401044: 00000000
====> Section . bss :
00401048: 00000000
0040104C: 00000000
00401050: 00000000
E n t r e r une commande:
ADDI $v1 , $zero , 0x3039
JAL 0x0040002C
SLL $zero , $zero , 0x00
BEQ $zero , $zero , 0x0040003C
SLL $zero , $zero , 0x00
L U I $at , 0x0040
SW $v1 , 0x1044 ( $at )
JR $ra
SLL $zero , $zero , 0x00
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 41 / 52
État de la machine
dreg, sreg: affichage/modification des valeurs des registres
dmem, smem: affichage/modification des valeurs en mémoire
clear, help, quit
Entrer
$zero :
$a0 :
$t0 :
$t4 :
$s0 :
$s4 :
$t8 :
$gp :
$hi :
une commande: dreg
00000000 $at :
00000000
000004DC $a1 :
000004D1
00000000 $t1 :
00000000
FFFF89A3 $t5 :
FFFF1346
00000000 $s1 :
00000000
00000000 $s5 :
0000000A
00000000 $t9 :
00000000
00000000 $sp :
004 FFFFF
00000000 $lo :
00000000
$v0 :
$a2 :
$t2 :
$t6 :
$s2 :
$s6 :
$k0 :
$fp :
$pc :
00000000
FFFF84D1
000009AE
00000000
00000000
FFFFFFF6
00000000
00000000
00400060
$v1 :
$a3 :
$t3 :
$t7 :
$s3 :
$s7 :
$k1 :
$ra :
000004D2
FFFFFFFD
FFFF89A3
00000000
00000000
FFFF7FFF
00000000
00000000
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 42 / 52
Exécution
run: exécute les instructions jusqu’à la fin / point d’arrêt
step, stepi : exécution pas à pas (ligne à ligne ou exacte)
• Mise à jour registre PC (instruction suivante)
• Effectue de travail de l’instruction courante (mise à jour registres,
mémoire)
addbp, rmbp, dp : ajoute, enlève affiche les points d’arrêts dans
le code
E n t r e r une commande:
Execution en
E n t r e r une commande:
Execution en
DELAY SLOT :
step
00400018: ADDIU 0 1 = 1
step
0040001C: BEQ 0 0 1c => branchement en 40003c
Execution en 00400020: SLL 0 0 = 0
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 43 / 52
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
4
Travail à réaliser
Spécifications du simulateur
Modules fournis
Cahier des charges
Conseils
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 44 / 52
Modules fournis
1. Deux éléments de squelette pour aider à démarrer le projet :
shell minimaliste, qui ne gère que quelques commandes mais
vous permettra de démarrer facilement
syntaxeMIPS une description de la syntaxe des registres
la syntaxe n’est là qu’à titre d’exemple: libre à vous de ne pas
vous en servir!
le code du shell n’est pas fourni (seulement shell.h + un fichier
objet compilé), vous n’avez accès qu’aux fonctions appelées par
les commandes reconnues
vous devrez de toutes façons écrire votre propre module de shell
pour avancer dans le projet!
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 45 / 52
Modules fournis
2. Trois modules fondamentaux :
elfReader permet d’extraire les données d’un fichier au format ELF:
code binaire des sections .text et .data, table des
symboles, table des chaı̂nes, tables de relocations, ...
relocation permet de reloger les symboles et sections aux adresses
indiquées
framebuffer permet de gérer simplement l’affichage graphique
disponibles: les fichiers .h, les fichiers objets .o, l’API des modules
dans un premier temps, vous devrez utiliser ces modules
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 46 / 52
Main Page
File List
Data Structures
Files
Globals
re location.h File Re fe re nce
Module de relocation des données extraites d'un f ichier ELF. More...
Go to the source code of this f ile.
Data Structures
Date:
printemps 2010
Define Docum entation
#define _RELOCATION_ 1
Symbole
Structure représentant un sy mbole dans un f ormat "clair". More...
Defines
#def ine
Version:
1.1
Def inition in f ile relocation.h.
#include "elfReader.h"
struct
Author:
[email protected] r
Def inition at line 38 of f ile relocation.h.
Function Docum entation
_RELOCATION_
1
Functions
void relogeSection ( uint32_t
uint8_t *
v oid
v oid
scnAdr,
scnData,
Elf32_Rel * relData,
v oid traduitTableSymboles (Elf 32_Sy m *sy mtab, size_t sy mtabSize, char *strtab, Symbole
**tableSy mboles, size_t *nbSy mboles)
Traduit une table des sy mboles au f ormat ELF en f ormat "clair".
size_t
relSize,
Symbole *
tableSymboles
relogeSymboles (Elf 32_Sy m *sy mtab, size_t sy mtabSize, char *strtab, uint32_t adrText,
uint32_t adrData, uint32_t adrBss, Symbole **tableSy mboles, size_t *nbSy mboles)
Reloge les sy mboles d'une table ELF.
Reloge une section d'instruction ou de données.
relogeSection (uint32_t scnAdr, uint8_t *scnData, Elf 32_Rel *relData, size_t relSize, Symbole
*tableSy mboles)
Reloge une section d'instruction ou de données.
Reloge une section à partir de ses données initiales, de sa table de relocation associée, et d'une table de
sy mboles déjà relogée.
Detailed Description
Module de relocation des données extraites d'un f ichier ELF.
Ensimag 2010, première année.
Introduction
Les données contenues dans un f ichier ELF peuv ent être accompagnées d'inf ormations permettant de
reloger les sy mboles et les sections d'instructions (.text) et de données (.data, .bss) à des adresses
mémoires spécif iques.
Ce module f ournit un ensemble de f onctions permettant:
)
L'adresse scnAdr doit naturellement correspondre à celle ay ant été utilisé pour reloger les sy mboles av ec
la f onction relogeSymboles.
Parameters:
[in]
[in,out]
[in]
[in]
[out]
scnAdr
scnData
relData
relSize
tableSymboles
l'adresse où reloger la section
les octets de la section, av ant puis après relogement
la table de relocation associée à la section
le nombre d'entrées dans la table de relocation
la table des sy mboles relogée
void relogeSymboles ( Elf32_Sym * symtab,
size_t
symtabSize,
char *
strtab,
uint32_t
adrText,
uint32_t
adrData,
Les données en entrée de ces f onctions sont les inf ormations brutes issues du f ichier ELF, lues à l'aide du
module elfReader.
uint32_t
adrBss,
Symbole **
tableSymboles,
Note:
size_t *
nbSymboles
1. de récuperer les sy mboles dans un f ormat "clair" (nom, adresse)
2. d'extraire les sy mboles (absolus) d'un f ichier ELF executable
3. de reloger les sy mboles et les sections d'un f ichier ELF relogeable
Outre l'API, un f ichier objet binaire correspondant à ce module v ous est f ourni. Vous pouv ez ainsi
charger des donnees relogées dans v otre simulateur. Il v ous rev ient ensuite de remplacer le f ichier
objet f ourni pas v otre propre implémentation de ce module!
Compilation
Ce module utilise elfReader et la librairie libelf. Voir la documentation de elfReader.h.
)
Reloge les sy mboles d'une table ELF.
Les adresses des sy mboles sont relogées à partir des adresses de section déf inies en paramètres. Puis,
une table de sy mboles identique à celle générée par traduitTableSymboles est construite.
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
4
Travail à réaliser
Spécifications du simulateur
Modules fournis
Cahier des charges
Conseils
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 47 / 52
Cahier des charges
1. Objectifs minimums:
représentation de la machine MIPS (mémoire, registres...)
intégralité des fonctionnalités: chargement, désassemblage,
exécution, etc.
simulateur validé!
Cette implantation minimale devra s’appuyer sur les modules fournis
pour la lecture d’un fichier ELF et la relocation.
2. Extensions du projet:
Réécriture des modules fournis ELF
Amélioration du shell (ergonomie, historique, complétion...)
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 48 / 52
Plan
1
Introduction
2
Déroulement du projet
3
Simulateur de microprocesseur MIPS
4
Travail à réaliser
Spécifications du simulateur
Modules fournis
Cahier des charges
Conseils
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 49 / 52
Conseils (1)
Familiarisez-vous avec l’assembleur MIPS et le format ELF avant de
commencer le projet
Plusieurs outils disponibles (cf. Kiosk/Ensiwiki):
• mips-as et mips-gcc : as et gcc cross-compilés pour une cible MIPS.
• mips-objdump, mips-readelf: permettent d’étudier le contenu
d’un fichier objet relogeable au format ELF
• mips-gdb : simulation d’un programme à partir d’un exécutable ELF.
En gros votre projet?
Créez une base de tests écrits en langage assembleur
Utilisez les outils ci-dessus pour
• comprendre le codage et les informations de relocation
• comparer le désassemblage et la relocation de votre simulateur avec
ceux des binutils!
Avancé:
• créez des tests en langage C (voir wiki)
• comparez votre exécution avec celle de mips-gdb!
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 50 / 52
Conseils (2)
Passez du temps à réfléchir à la conception de votre programme
et à votre organisation avant de commencer à coder
répartissez-vous bien les tâches
inter-agissez
Mieux vaut faire une petite partie du début à la fin que de tout
commencer et que rien ne fonctionne
ne testez pas tout à la fin mais au fur et à mesure
Pensez à gérer les erreurs qui peuvent se produire, même celles
qui ne devraient pas se produire (programmation défensive)
Utilisez gdb, ddd, valgrind et/ou faites des traces dans votre
programme pour déboguer facilement
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 51 / 52
The End
Bon courage & Enjoy!
Projet Logiciel en C - Sujet 1 : Simulateur de microprocesseur MIPS - | 52 / 52
Téléchargement