Priprema koda "za učitavanje u ROM" i "izvođenje iz RAM-a"
Promijeniti skriptu za povezivanje
ldscript.ld
te dodati datoteku premjesti.c
u direktorij boot
tako da se sav sustav pripremi za učitavanje na adresu ROM=0x100000 (kao i sada), ali da ispravno radi tek kad se:
- podaci iz odjeljaka
.data*
premjeste na adresuADDR_DATA
(postaviti ju uconfig.ini
na npr.0x200000
) - podaci iz odjeljaka
.bss*
premjeste odmah iza.data*
- stog postavi tako da mu je vrh na adresi
0x800000
(vrh=kraj, početak postaviti na manju adresu:0x800000 - STACK_SIZE
) - dodati polja
p1[P1SIZE]
ip2[P2SIZE]
i postaviti ih na adreseP1ADDR
iP2ADDR
- sve konstante definirati u
config.ini
- način ostvarenja polje je proizvoljan - može i samo kroz skriptu, ili i kroz kod
- dodati kod u neki program koji popunjava zadana polja s vrijednošću
0xab
.
- sve konstante definirati u
Pokazati da je navedeno napravljeno ispisom adresa odgovarajućih elemenata (npr. adresa neke funkcije, adresa globalne varijable, adresa lokalne varijable na stogu).
Ako odjeljak .eh_frame
stvara probleme, odbaciti ga sa /DISCARD/ : { *(.eh_frame) }
Primjer prikazan na predavanju (prije par godina) lab2-demo.diff.
Ispitivanje koda, traženje grešaka
Upoznati se s ispitnim pokretanjem i traženjem grešaka korištenjem alata
gdb
. U datoteci Makefile
već postoje pripremljeni predmeti prevođenja debug_qemu
i debug_gdb
.