Compilazione e Linking
Dal 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 (
offset
rispetto alla base dello spazio della costanti)
- assegna ad ognuna un indirizzo (
-
Dei
Simboli
riferimenti 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