Nepřemístitelné symboly ve formátu ELF (assembleru)

hlasů
10

Vyvíjíme port GNU assembleru pro klienta architektury. Problém, kterým čelí nyní, že:

Je-li bezprostřední operand na pokyn je výraz zahrnující více než jeden přemístitelné symbolů, jak je možné manipulovat v výstupní soubor ve formátu elf. Jaký bude informace o přemístění vyrobené v takovém případě?

Například:

j label1 + label2

kde label1 a Label2 jsou definovány v přemístitelných částí, mohou být stejné nebo různé úseky nepřemístitelné sekce.

Položena 06/12/2008 v 19:26
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
7

ELF neví o pokynech, jsou samy o sobě. To ví o konkrétních kódování symbolu offsetů v rámci pokynů. V assembleru, budete muset výstup dvě stěhování záznamů, každý s odpovídajícím [adresa, typ, symbol] triplet řádně opravit tu část výuky. Linker by nemusela ani neví, že tyto dva záznamy ukazují na stejné instrukce.

Typy ELF přemístění jsou zcela závislé na CPU (nebo, přesněji řečeno, ISA-závislý), takže máte možnost definovat, co přeložky potřebné pro vytvoření nové architektury.

Je těžké být konkrétnější bez podrobností o kódování instrukcí.

Odpovězeno 06/12/2008 v 23:09
zdroj uživatelem

hlasů
0

Očekával bych, že jeden vstup na adresu pro každý pokyn, který potřebuje přemístění.

Objdump by mohl být schopen zobrazit přemístění tabulky spustitelného nebo objektového souboru, ale nevím příznaky offhand.

Můj návrh je, aby se pokusili vyhrabat x86 (nebo jiný CISC) pokyn, který dělá něco podobného tomu, co váš klient arch dělá, a uvidíme, co přemisťování jsou generovány při montáži / odkaz.

Odpovězeno 07/12/2008 v 01:32
zdroj uživatelem

hlasů
0

Vím, jack o ELF a jen trochu víc o propojení, ale ...

Očekával bych, že každý operand je zpracována stejným způsobem, že by bylo, kdyby tam byl jen jeden.

OTOH mohl být problém, že formát pro joltářů v závislosti na tom, kde jsou štítky? Pokud tomu tak je, myslím si, že jste potopili jako linkery nejsou dost chytří na to dělat takové věci (ADA build systém IIRC by mohla být chytřejší než většina ostatních, takže byste se na to podívat.)

Odpovězeno 06/12/2008 v 20:33
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more