1

2

3

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é.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

5

La table de relogements acceptée par AMS est un ensemble de paires (16-bit non signé adresse de la reloc, 16-bit non signé adresse vers laquelle pointe la reloc), terminé par un 0000 en tant qu'adresse de la reloc. C'est pour ça que les chaînes exec valides se terminent par 0000.
Si tu as un désassembleur on-calc, comme celui qui est dans Command Post Plus, tu peux vérifier en désassemblant EX_patch.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

6

7

Le format n'est pas du tout le même:

* relogements format AMS:
- La table grandit avec les adresses décroissantes, en d'autres mots, tout ce qui suit est "à l'envers"!
- pour chaque relogement:
. 2 octets: endroit à reloger
. 2 octets: offset de l'adresse à insérer
- pour signaler la fin de la table: 2 octets nuls (0000)
Ces octets se trouvent donc devant la table des relogements quand tu lis/écris le fichier du début à la fin. La raison pour laquelle les chaînes Exec se terminent souvent par ce 0000 est que leur table de relogements est vide.

* relogements format kernel:
- La table grandit avec les adresses croissantes, en d'autres mots, tout ce qui suit est "à l'endroit"!
- pour chaque relogement:
. 2 octets: endroit à reloger
(et c'est tout! L'offset de l'adresse à insérer se trouve à l'endroit où l'adresse sera inséré! Il suffit donc lors du relogement de rajouter l'adresse du début du fichier. C'est aussi pour ça que ce format a besoin d'un dérelogement à la fin, où l'adresse du début du fichier est à nouveau retranchée pour permettre un nouveau relogement plus tard. Le format de AMS, lui, ne nécessite pas de dérelogement, mais ça se paye par 2 octets de plus pour chaque relogement.)
- pour signaler la fin de la table: 2 octets nuls (0000)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

9

Il est marqué comme "relogé" dans les tables internes, donc à déréloger après le crash.