Changes between Version 70 and Version 71 of Archi-1-TP9


Ignore:
Timestamp:
Dec 4, 2020, 11:21:29 AM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v70 v71  
    324324  - Appel du désassembleur prend les fichiers binaires (`.o` ou `.x`) pour retrouver le code produit par le compilateur à des fins de debug ou de curiosité.
    325325
     326**Questions**
     327
    326328Le fichier `kernel.ld` décrit l'espace d'adressage et la manière de remplir les sections dans le programme exécutable.
    327329{{{#!c
     
    351353}}}
    352354
    353 **Questions**
    354 
    3553551. Le fichier commence par la déclaration des variables donnant des informations sur les adresses et les tailles des régions de mémoire. Ces symboles n'ont pas de type et ils sont visibles de tous les programmes c, il faut juste leur donner un type pour le compilateur puisse les exploiter, c'est ce que nous avons fait pour `extern volatile struct tty_s __tty_regs_map[NTTYS]`. En regardant, dans le dessin de la représentation de l'espace d'adressage, complétez les lignes de déclaration des variables pour la région `kdata_region`
    356356{{{#!protected ------------------------------------------------------------------------------------
     
    380380'''''''''''''''
    381381}}}
    382 
     382 
     383Nous allons systématiquement utiliser des Makefiles pour la compilation du code, mais aussi pour lancer le simulateur du prototype **almo1**. Pour cette première séance, les Makefiles ne permettent pas de faire des recompilations partielles de fichiers. Les Makefiles sont utilisés pour agréger toutes les actions que nous voulons faire sur les fichiers, c'est-à-dire : compiler, exécuter avec ou sans trace, nettoyer le répertoire. Nous avons recopiez le premier Makefile pour montrer sa forme et poser quelques questions, auxquels vous savez certainement répondre.
     384{{{#!make
     385# Tools and parameters definitions
     386# ------------------------------------------------------------------------------
     387NTTY   ?= 2 #                          default number of ttys
     388
     389CC      = mipsel-unknown-elf-gcc #     compiler
     390LD      = mipsel-unknown-elf-ld #      linker
     391OD      = mipsel-unknown-elf-objdump # desassembler
     392SX      = almo1.x #                    prototype simulator
     393
     394CFLAGS  = -c #                         stop after compilation, then produce .o
     395CFLAGS += -Wall -Werror #              gives almost all C warnings and considers them to be errors
     396CFLAGS += -mips32r2 #                  define of MIPS version
     397CFLAGS += -std=c99 #                   define of syntax version of C
     398CFLAGS += -fno-common #                do not use common sections for non-static vars (only bss)
     399CFLAGS += -fno-builtin #               do not use builtin functions of gcc (such as strlen)
     400CFLAGS += -fomit-frame-pointer #       only use of stack pointer ($29)
     401CFLAGS += -G0 #                        do not use global data pointer ($28)
     402CFLAGS += -O3 #                        full optimisation mode of compiler
     403CFLAGS += -I. #                        directories where include files like <file.h> are located
     404CFLAGS += -DNTTYS=$(NTTY) #            #define NTTYS with the number of ttys in the prototype   
     405
     406FROM   ?= 0 #                          first cycles to trace
     407NCYC   ?= 10000 #                      number of cycles to execute
     408
     409# Rules (here they are used such as simple shell scripts)
     410# ------------------------------------------------------------------------------
     411help:
     412    @echo "\nUsage : make <compil|exec|trace|clean> [FROM=num] [NCYC=num]\n"
     413    @echo "        compil  : compile all sources"
     414    @echo "        exec    : prototype execution"
     415    @echo "        trace   : execution with a trace for debug (trace.log)"
     416    @echo "                   FROM is the first cycle from which the trace is made"
     417    @echo "                   NCYC is the number of cycles to execute"
     418    @echo "        clean   : clean all compiled files\n"
     419
     420compil:
     421    $(CC) -o hcpu.o $(CFLAGS) hcpu.S
     422    @$(OD) -D hcpu.o > hcpu.o.s
     423    $(LD) -o kernel.x -T kernel.ld hcpu.o
     424    @$(OD) -D kernel.x > kernel.x.s
     425
     426exec: compil
     427    $(SX) -KERNEL kernel.x -NTTYS $(NTTY)
     428
     429trace: compil
     430    $(SX) -KERNEL kernel.x -DEBUG $(FROM) -NCYCLES $(NCYC) -NTTYS $(NTTY) > details.log;\
     431    echo -e "\ngenerate trace.log, please wait... ";\
     432    tracelog -vout="trace.log.s" *.x.s details.log ;\
     433    rm details.log
     434
     435clean:
     436    -rm *.o* *.x* *~ *.log.* proc?_term? 2> /dev/null || true
     437
     438}}}
     4394. Au début du fichier se trouve la déclaration des variables du Makefile, quelle est la différence entre `=`, `?=` et `+=` ?
     440{{{#!protected ------------------------------------------------------------------------------------
     441'''''''''''''''
     442*
     443'''''''''''''''
     444}}}
     4451. Que fait `-DNTTYS=$(NTTY)` ?
     446{{{#!protected ------------------------------------------------------------------------------------
     447'''''''''''''''
     448*
     449'''''''''''''''
     450}}}
    383451
    384452