Question : Est-ce qu'on a tous les noms de libs à la suite, puis les imports pour chacune d'elle, ou alors les imports d'une lib suivent imédiatement les 8+2 octets de son nom/version ?
On a tous les noms de libs à la suite, puis les imports pour chacune d'elle.
Je comprends pas les 3 dernières lignes : "number of imported functions times" / "import library function number" / "reloc table"
on a donc si je comprends à peu près, pour chaque fonction utilisée :
- le nombre de fois où elle l'est (un word ?)
- son numéro d'export - une table de relogement
Non, ces 3 lignes veulent dire:
* pour chaque fonction importée: - le numéro de la fonction importée (genre 0xA pour libfoo__000A, ce que tu appelles "numéro d'export") - une table de relogements (au même format que la table de relogements habituelle)
Donc il n'y a pas "le nombre de fois où elle l'est", cette information découle de la table de relogements si on en a besoin.
Quel est le format de cette table ? 2 octets pour chaque relogement je suppose ? juste un offset par rapport à Origin ?
Le même que celui de la table de relogements du programme: 2 octets pour chaque relogement, et un word nul à la fin.
Par contre, la section 4 concerne quoi ? les relogements ams-native ?
Non, les relogements kernel. Les tables fixes sont émises dans l'ordre suivant: libs, ROM_CALLs, RAM_CALLs, relogements "normaux". (Les tables BSS et export peuvent être émises n'importe où à part à l'intérieur du header, elles sont référencées à travers un offset dans le header.)
Peut-être aussi que ces sources et les commentaires qu'elles contiennent peuvent t'aider:
http://tigcc-linux.cvs.sourceforge.net/tigcc-linux/tigcc/archive/startup/_kernel_program_header.s?revision=1.1&view=markup
http://tigcc-linux.cvs.sourceforge.net/tigcc-linux/tigcc/archive/startup/_kernel_library_header.s?revision=1.1&view=markup
Il y a aussi les stubs utilisés par TIGCC:
http://tigcc-linux.cvs.sourceforge.net/tigcc-linux/tigcc/archive/startup/_kernel_program_stub.s?revision=1.1&view=markup
http://tigcc-linux.cvs.sourceforge.net/tigcc-linux/tigcc/archive/startup/_kernel_library_stub.s?revision=1.1&view=markup
quel est le format de [la table ams-native] ? un offset de l'endroit à reloger et un "offset de l'adresse" à calculer, le tout sur 4 octets ?
Oui, et en partant de la fin du fichier, donc si tu lis le fichier du début à la fin, l'offset de l'adresse à calculer vient avant l'offset de l'endroit à reloger. Et à la "fin" de la table (donc la première chose que tu rencontres quand tu lis/écris du début à la fin), il y a un word nul (oui, le null-terminator est seulement sur 2 octets, pas 4!).
on doit faire quoi si un export a été zappé par le codeur ? on lui donne quoi comme offset ?
ld-tigcc met 0 pour un export non exporté.