Che cosa fa l''emulazione' nel Linker?

0

Sto esaminando l'assemblatore e sto cercando di capire l'intero processo di compilazione.

Durante la fase di collegamento utilizzo:

ld -m elf_i386 -s -o hello hello.o

Tutto funziona correttamente, ma non capisco cosa faccia il parametro -m .

Nel manuale dice:

Emulate the emulation linker.

E qui dice:

A linker emulation is a "personality" of the linker, which gives the linker default values for the other aspects of the target system.

Nel articolo di Wikipedia per il Linker non viene nemmeno menzionata la parola "emulazione".

Che cos'è l''emulazione', in che modo influenza il linker e cosa devo tenere a mente quando seleziono l'emulazione?

    
posta AK_is_curious 28.06.2018 - 09:05
fonte

1 risposta

4

I compilatori hanno un target di compilazione che determina quale codice oggetto dell'architettura verrà prodotto. Nel lontano passato, le toolchain di sviluppo erano un affare one-architecture-per-compiler-binary, in cui il compilatore e il linker producevano un tipo di risultato. Ciò è cambiato quando GCC è stato ristrutturato, quindi un'installazione su un'architettura potrebbe eseguire una compilazione incrociata con qualsiasi altra supportata . GCC ha adottato l'opzione -m (per macchina ) per specificare questo parametro.

Essendo parte della stessa toolchain, lo stesso switch è stato trasferito al linker. Invece di determinare l'architettura della macchina, -m determina quale formato eseguibile (tra le altre cose) sarà prodotto dagli oggetti e dalle librerie essere collegato. Mentre il mondo stava compiendo il passaggio da COFF a ELF, non era insolito dover collegare l'uno o l'altro senza dover costruire una macchina separata per farlo. Normalmente, si impostano diversi parametri per far sì che il linker generi un file per un dato sistema; dato che -m in GNU ld ha approssimativamente lo stesso scopo di GCC, è per questo che è stato usato.

L'architettura della macchina non è il termine giusto in quanto i formati eseguibili non sono necessariamente specifici dell'architettura della macchina. Se dovessi fare un'ipotesi su come la documentazione ha ottenuto dove è stata fatta, sarebbe stato che qualcuno l'avesse notato, provato a ricoprire qualcosa che era iniziato con M , non riusciva a trovare nulla che avrebbe funzionato e deciso per andare con eMulation .

    
risposta data 28.06.2018 - 15:37
fonte

Leggi altre domande sui tag