Changes between Version 20 and Version 21 of Archi-1-TD10
- Timestamp:
- Nov 20, 2022, 4:04:17 PM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TD10
v20 v21 432 432 5. Vous avez appris à écrire des programmes assembleur, mais parfois il est plus simple, voire nécessaire, de mélanger le code C et le code assembleur. Dans l'exemple ci-dessous, nous voyons comment la fonction `syscall()` est écrite. Cette fonction utilise l'instruction `syscall`.\\Deux exemples d'usage de la fonction `syscall()` pris dans le fichier `tp2/4_libc/ulib/libc.c`. 433 433 {{{#!c 434 1 int fprintf (int tty, char *fmt, ...) // tty est l'identifiant du terminal435 2 { // fmt est la chaine format, suivie d'une liste d'arguments optionnelz434 1 int fprintf (int tty, char *fmt, ...) // tty identifiant du terminal 435 2 { // fmt chaine format, suivie d'arguments optionnels 436 436 3 int res; 437 437 4 char buffer[PRINTF_MAX]; … … 465 465 A quoi sert la ligne 3 de la fonction `syscall()` et que se passe-t-il si on la retire ? 466 466 Expliquer la ligne 5 de la fonction `syscall()`. 467 Aurait-il été possible de mettre le code de la fonction `syscall()` dans un fichier `.S` ? 468 {{{#!protected ------------------------------------------------------------------------------------ 469 '' 470 Cours 10 annexe / slide 10 467 Aurait-il été possible de mettre le code de la fonction `syscall()` dans un fichier `.S` ? (C10 S31) 468 {{{#!protected ------------------------------------------------------------------------------------ 469 '' 471 470 - La fonction `syscall()` a 5 a arguments 472 471 - Elle reçoit ses 4 premiers arguments dans les registres $4 à $7 et le 5e (le numéro de service) dans la pile. … … 492 491 493 492 494 1. Rappelez à quoi sert un Makefile? 495 {{{#!protected ------------------------------------------------------------------------------------ 496 '' 497 Cours 9 / slide 26 493 1. Rappelez à quoi sert un Makefile? (C9 annexe S5 à S7) 494 {{{#!protected ------------------------------------------------------------------------------------ 495 '' 498 496 - Le rôle principal d'un Makefile est de décrire le mode d'emploi pour construire un fichier dit **`cible`** à partir d'un ou plusieurs fichiers **`source`** (dits de dépendance) en utilisant des commandes du `shell`. Ce rôle pourrait tout aussi bien être occupé par un script `shell` et d'ailleurs, dans le premier TP, nous avons vu un usage du Makefile dans lequel nous avions rassemblé plusieurs scripts `shell` sous forme de règles. 499 497 - Le second rôle d'un Makefile est de permettre la reconstruction partielle du fichier **`cible`** lorsque quelques fichiers **`source`** changent (pas tous). Pour ce rôle, le Makefile exprime toutes les étapes de construction de la **`cible`** finale et des **`cibles`** intermédiaires sous forme d'un arbre dont les feuilles sont les fichiers **`sources`**. 500 498 '' 501 499 }}} 502 1. Vous n'allez pas à avoir à écrire un Makefile complètement. Toutefois, si vous ajoutez des fichiers source, vous allez devoir les modifier en ajoutant des règles. Nous avons vu brièvement la syntaxe utilisée dans les Makefiles de ce TP au cours n°1. Les lignes qui suivent sont des extraits de `1_klibc/Makefile` (le Makefile de l'étape1). Dans cet extrait, quelles sont la `cible` finale, les `cibles` intermédiaires et les `sources`? A quoi servent les variables automatiques de make? Dans ces deux règles, donnez-en la valeur.500 1. Vous n'allez pas à avoir à écrire un Makefile complètement. Toutefois, si vous ajoutez des fichiers source, vous allez devoir les modifier en ajoutant des règles. Nous avons vu brièvement la syntaxe utilisée dans les Makefiles de ce TP. Les lignes qui suivent sont des extraits de `1_klibc/Makefile` (le Makefile de l'étape1). Dans cet extrait, quelles sont la `cible` finale, les `cibles` intermédiaires et les `sources`? A quoi servent les variables automatiques de make? Dans ces deux règles, donnez-en la valeur. (C9 annexe S5 à S7) 503 501 {{{#!make 504 502 kernel.x : kernel.ld obj/hcpua.o obj/kinit.o obj/klibc.o obj/harch.o … … 512 510 {{{#!protected ------------------------------------------------------------------------------------ 513 511 '' 514 Cours 9 / slides 27 et 56515 512 - La `cible` finale est : `kernel.x` 516 513 - Les `cibles` intermédiaires sont : `kernel.ld`, `obj/hcpua.o`, `obj/kinit.o`, `obj/klibc.o` et `obj/harch.o`. … … 525 522 '' 526 523 }}} 527 1. Dans le TP, à partir de la deuxième étape, nous avons trois répertoires de sources `kernel`, `ulib` et `uapp`. Chaque répertoire contient une fichier `Makefile` différent destiné à produire une `cible` différente grâce à une règle nommée `compil`, c.-à-d. si vous tapez `make compil` dans un de ces répertoires, cela compile les sources locales.\\Il y a aussi un Makefile dans le répertoire racine `4_libc`. Dans ce dernier Makefile, une des règles est destinée à la compilation de l'ensemble des sources dans les trois sous-répertoires. Cette règle appelle récursivement la commande `make` en donnant en argument le nom du sous-répertoire où descendre :\\`make -C <répertoire> [cible]` est équivalent à `cd <répertoire>; make [cible] ; cd ..`\\Ecrivez la règle `compil` du fichier `4_libc/Makefile`. 524 1. Dans le TP, à partir de la deuxième étape, nous avons trois répertoires de sources `kernel`, `ulib` et `uapp`. Chaque répertoire contient une fichier `Makefile` différent destiné à produire une `cible` différente grâce à une règle nommée `compil`, c.-à-d. si vous tapez `make compil` dans un de ces répertoires, cela compile les sources locales.\\Il y a aussi un Makefile dans le répertoire racine `4_libc`. Dans ce dernier Makefile, une des règles est destinée à la compilation de l'ensemble des sources dans les trois sous-répertoires. Cette règle appelle récursivement la commande `make` en donnant en argument le nom du sous-répertoire où descendre :\\`make -C <répertoire> [cible]` est équivalent à `cd <répertoire>; make [cible] ; cd ..`\\Ecrivez la règle `compil` du fichier `4_libc/Makefile`. (Ce n'est pas dit dans le cours, mais la question contient la réponse...) 528 525 {{{#!xml 529 526 4_libc/ … … 539 536 {{{#!protected ------------------------------------------------------------------------------------ 540 537 '' 541 Ce n'est pas dit dans le cours, mais la question contient la réponse...542 538 {{{#!make 543 539 compil: