Ouai. Ca boufferait un registre en permanence pour stocker l'adresse du bloc, mais ça doit être la seule solution possible. Cela demanderait une collaboration du compilo.

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
OK, et ton programme accédait à ces données par le biais d'un registre ?

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
ben non, piske la section .text savait que la section .data devait être à une adresse en RAM (mais fixe, on peut pas utiliser ça pour des programmes chargeables dynamiquement)
D'accord, mais comment est-on sûr que le handle sera à telle adresse précisément ?

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
y'a pas de handle.
le linker (ld officiel de binutils) fait des relocations statiques pour toucher les bonnes adresses.
quand je fais mon programme, j'utilise un ldscript pour donner l'adresse de début des sections au linker qui fusionne les fichiers objets. donc quand il trouve un symbole qui est dans la section .data, il donne directement la bonne adresse.
Oui mais tu parlais de mettre des variables globales en RAM.

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
Oui donc ma question est justement : Comment les adresses de ces variables peuvent-elles être inscrites en dur dans le programme ? Comment l'éditeur des liens sait-il à l'avance où sera logé le handle qui les contiendra ?

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.
C'est un Flash OS entier, comme PedroM, donc il faut ce qu'il veut avec la RAM.
Non, parce qu'il y a du code de TIGCCLIB qui n'est pas PC-relatif et même du code automodifiant dans TIGCCLIB.
Justement, mon point de vue est que TIGCCLIB n'est pas optionnel, sauf évidemment pour les targets bien particuliers (Fargo, Flash OS) qui viennent avec leurs propres stubs et qui auraient aussi besoin de leur propre librairie de fonctions (actuellement leurs .a ne contiennent que les stubs et/ou headers).
Le code de démarrage utilise des variables globales à l'intérieur du code à certains endroits, donc c'est comme du code automodifiant. Il n'y a pas de relogements dans le code de démarrage normalement parce qu'il peut tourner avant que le relogement soit effectué en fonction de la méthode de relogements, mais il y a ces variables. Par exemple __calculator, le modèle de calculatrice détecté, pour éviter de devoir refaire le test à chaque utilisation. Il y en a d'autres aussi. On ne peut pas rendre ces variables externalisables pour plusieurs raisons: les sections externes ne sont pas encore allouées à cet endroit (c'est le code de démarrage qui le fait), efficacité des accès, ... Et de toute façon l'externalisation automatique des fichiers de données fonctionne avec des relogements, donc ce n'est pas possible non plus dans ton cas.
PreOS exécute-t-il en Flash automatiquement les programmes dénués de table de relogement ?

Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 :
www.ti-fr.com.
Quelques idées personnelles
ici.