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 (
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
- Contruisce due tabelle
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
- risolviamo tutti i simboli
- Assembler
- Codice Oggetto
-
Linker 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
- fonde i moduli oggetto in un unico spazio di indirizzamento
-
- Codice eseguibile