1

2

Je suis bien d'accord avec toi, et je trouve la façon de faire d'A68k assez désagréable.
Je trouve qu'on devrait séparer les directives d'assemblage (xdef _ti89, etc.) des labels exportés.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

4

Mais peut-être qu'il y a une raison qui justifie ce fonctionnement d'a68k ?

Peut-être tout simplement que ça facilite le travaille d'a68k : au final il traite de la même manière les labels exportés et les directives d'assemblage, il n'y a donc pas de code spécifique à écrire pour les directives d'assemblage. Ensuite, c'est le linker qui gère : il regarde quels sont les symboles exportés et agit en fonction.
Bon, n'empêche que j'aurais trouvé plus cohérent de mettre un autre mot clé pour les directives d'assemblage...
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

5

le truc c'est qu'un label définit un "symbole" associé à une adresse.

xdef marque ce symbole comme exporté.

Il ne peut rien faire si le symbole associé n'existe pas!

et a priori il n'y a aucune raison d'avoir différents types de symbole, un symbole est la représentation d'une adresse quelconque, et t'es pas obligé de t'intéresser à la valeur de cette adresse.

sinon c'est quoi une directive d'assemblage? xdef? xdef dit juste "copie ce symbole dans la table d'exportation" c'est tout.

un label EST un symbole.

ensuite effectivement le linker peut avoir un comportement controlé par la présence de symboles particuliers. mais c'est la présence du symbole qui comte plus que sa valeur associée.

6

Une directive d'assemblage c'est justement un symbole qui contrôle le comportement du linker.

Par exemple le symbole _ti89 qui demande de produire un fichier .89z.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

7

oki.

mais ce sont des symboles normaux, qui commandent le linker au lieu d'utiliser des options de ligne de commande.

8

9

(tout ceci d'après moi, je sais pas si c'est 100% exact vérité vraie toussa)

ben non, ils sont deux symboles identiques en structure, mais n'ont pas le même rôle derrière.

de mon sens, dans l' *assembleur* ils doivent être traités de la même manière, et le *linker* fait cekifo quand il rencontre un symbole spécial.

en gros, l'assembleur génère des trucs à l'aveugle, mais c'est le linker qui fait le boulot.

l'assembleur se cantonne à transformer du texte en binaire et à stocker des associations (symbole, adresse)

10

11

./9 Ben oui, c'est ce qu'on dit depuis le début, et on ne trouve pas ça très judicieux, c'est tout tongue
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

12

13

./10: ben oué c'est con mais c'est que t'as trop l'habitude des directives grin
je dirais que c'est l'utilisation en tant que flag qui est un peu pourrie et ad-hoc.

je te rappelle qu'a la base cet asm n'a pas été fait pour ti, et donc les symboles ont sans doute été le meilleur moyen de transférer des informations du source au linker.

si tu veux t'en passer, il te faudra mettre des options au linker et complètement virer ces directives. Mais tu vas voir que ça fait sans doute beaucoup d'options smile

14

Folco (./13) :
Sauf qu'un assembleur n'utilise pas forcément un linker

ben si, même si il est intégré, cf cite suivant grin
Folco (./13) :
Il faut au pire créer un wrapper autour du programme pour le formater

c'est ça un linker chef grin

pas besoin de faire du cross relogement entre fichiers objets pour avoir besoin d'un éditeur de liens smile

et 11: tu veux optimiser en taille ou en vitesse? avec 256k de ram et 12 MHz je pense qu'il vaut mieux reparcourir une unique table qui aura pas des centaines d'entrées mais je te laisse le choix de faire ce que tu veux évidemment grin

15

16

17

ben makeprgm est un linker ^^

et si c'est plus court de séparer, ben sépare grin

18

19

20

Folco> c'est vraiment la peine de s'amuser à définir une classe spécifique de symboles pour économiser 2*9 octets dans le meilleur des cas ? confus

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

21

22

Pour A68k, _ti89 est un label comme un autre, ça n'a aucun sens particulier pour lui, donc il refuse de l'exporter s'il n'est pas défini. Pour GNU as, c'est aussi un label comme un autre, mais pour je ne sais pas quelle raison il accepte d'exporter un symbole non défini... C'est plutôt illogique, mais c'est bien pratique pour cet usage, donc évidemment je n'ai aucune intention de changer ça. smile En revanche, je n'ai aucune intention de modifier A68k pour ça non plus, vous n'avez qu'à utiliser GNU as! tongue
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é

23

24

25

ld-tigcc ne vérifie pas non plus l'unicité des exports, tu peux exporter le label foo dans chaque fichier .asm et ld-tigcc ne gueulera pas. Ce qui se passe, c'est que les références à l'intérieur du fichier seront résolues par l'assembleur vers le label dans le même fichier, et les références depuis les fichiers qui ne définissent pas foo seront résolus par ld-tigcc en n'importe quel foo.

Et ça va à l'encontre du standard C, d'ailleurs, mais c'est nécessaire, sinon les global imports ne fonctionneraient pas, notamment. (Un global import importe tous les fichiers des .a linkés qui exportent un certain symbole, c'est utilisé pour importer les bonnes sections de démarrage.)
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é

26

#vomi#

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

27

28

D'ailleurs, un des patches les plus "fous" du GDB de TiEmu, c'est un patch à bfd/linker.c pour faire comme si le flag allow_multiple_definition était défini pour toutes les sections (parce que c'est comme ça que fonctionne ld-tigcc).
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é

29

30

ça peut facilement générer un avertissement de symbole dupliqué, non?