Compilazione e Linking
universityDal C al binario passando dall’assembler IJVM ~ Compilazione e Linking
- 
C - Compiler
- avviene per passi successivi
- compila il main
- si ferma se ha bisogno di chiamate a cose non ancora compilate, in caso le compila prima di continuare
 
- compila le funzioni necessarie al main
 
- compila il main
 
- avviene per passi successivi
 
- Compiler
- 
Linguaggio Assembler IJVM - Assembler
- 
Primo Passo- 
Contruisce due tabelle - 
Delle Constanti- assegna ad ognuna un indirizzo (offsetrispetto alla base dello spazio della costanti)
 
- assegna ad ognuna un indirizzo (
- 
Dei Simboliriferimenti a variabili, procedure e indirizzi per salti condizionati e incondizionati - assegna ad ognuna un indirizzo
 
 
- 
- 
Tabella degli Opcode- 
usata dall’assemblatore per sapere quanti byte occupa ogni istruzione 
- 
utile per individuare l’offset di ogni salto condizionato/incondizionato rispetto al PC chiamante 
 
- 
 
- 
- 
Secondo Passo- 
risolviamo tutti i simboli - 
li convertiamo a riferimenti, offset 
- 
descrittore di main - 
# parametri + 1 (objref) 
- 
# variabili 
 
- 
- 
opcode e simbolo risolto - 
costanti non sappiamo ancora dove inizia il Costant Pool 
- 
metodi non sappiamo ancora dove inizia lo spazio delle procedure 
 
- 
- 
descrittore del metodo 
- 
opcode e simbolo risolto 
 
- 
- 
per i simboli non ancora risolvibili spetta il linker - lascia un buco
 
 
- 
 
- 
 
- Assembler
- 
Codice Oggetto - 
Esegue il processo di collegamento - 
fonde i moduli oggetto in un unico spazio di indirizzamento - 
vede la lunghezza del codice compilato 
- 
li consegue uno all’altro creando lo spazio di indirizzamento
 
- 
- 
determina l’inizio dello spazio delle costanti subito dopo allo spazio di indirizzamento dei metodi - una volta che e' determinato l’indirizzo di inizio si risolvono le costanti
- si aggiunge l’offset
 
 
- una volta che e' determinato l’indirizzo di inizio si risolvono le costanti
 
- 
 
- 
- 
Codice eseguibile