asm et gcc sous AmigaOS
6 sujets de 1 à 6 (sur un total de 6)
-
Bonjour,
je travaille sur une librairie écrite en c.Afin d’en améliorer la vitesse, je réécris certaines fonctions en asm. Mais je rencontre un pb avec celles ayant accès aux structures d’AmigaOS. En effet, les includes du ndk3.9 sont incompatibles avec gas. J’ai essayé d’assembler avec genam (devpac) mais ld me retourne « undefined reference to » même en utilisant la directive « xref » sur le nom de la fonction.
quelqu’un a-t-il une idée pour résoudre mon pb ?
Merci, Willy.
Si tu fais référence à des noms, il faut effectivement qu’ils existent de l’autre coté…
Exemple débile de références croisées C/asm.
code .c
extern void titi(void) ;
int toto (void)
{/*blabla*/
titi() ;
}
code .asm
xref _toto
xdef _titi
; blabla
_titi nop
nop
rts
D’après mes vagues souvenirs il y a un préfixe à utiliser dans les programmes assembleurs pour s’interfacer avec le C.
Dans la plupart des cas, c’est le trait bas ‘_’ qui est utilisé (passage des paramètres par la pile), mais on trouve aussi ‘@’ voire ‘@@’ si on passe par les registres…
Bonjour,
D’après mes recherches, il s’agirait bien d’un pb de compatibilité entre le format objet de devpac (et je pense des autres assembleurs sur Amiga) et celui utilisé par les outils ar,nm,…
il faut donc utiliser la commande hunk2aout pour convertir chaque fichier objet produit par devpac.
Je vais l’essayer et voir ce qu’il en résulte.
Willy.
Je viens de regarder dans les sources de SongPlayer et les quelques fonctions assembleur ne sont pas toujours indiquées de la même manière :
Elles sont bien sûr toutes dans une section de code :
section ASMCODE,code
Après, le label prend indifféremment (apparemment) _ ou @ préfixe. Et la fonction est référencée par :
XDEF @mafonction
ou
XDEF _mafonction
A l’origine c’était Devpac qui était utilisé puis c’est passé à phxass, devenu vasm (l’assembleur de vbcc).
Les paramètres passent par les registres et leur prototype C a cette forme :
ASM long mafonction( REG(a0, char *param1), REG(d0, int param2) );
Remarque : Pour ce prototype, les macros de SDI_headers sont utilisées.
merci pour tes infos. En fait, on peut lier avec ld des modules compilés avec gcc à d’autres assemblés avec devpac ou même phxass; il n’y a aucun pb. Par contre, avec ar, il faut utiliser hunk2aout pour convertir chaque fichier objet produit par devpac ou phxass, car la commande ar ne gère pas tous les hunks des fichiers objets Amiga. Je l’ai essayée et cela marche.
Willy.
6 sujets de 1 à 6 (sur un total de 6)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › asm et gcc sous AmigaOS