asm et gcc sous AmigaOS

6 sujets de 1 à 6 (sur un total de 6)

  • WillyCat

      #4105

      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.

      Gilloo

        #72448

        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…

        :-D

        WillyCat

          #72449

          Bonjour,

          C’est pourtant ce que j’ai fait, mais cela ne marche pas.

          Peut-être est-ce une incompatibilité avec le format de fichier produit par DevPac. Je vasi essayer avec un autre assembleur.

          Willy.

          WillyCat

            #72450

            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.

            corto

              #72451

              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.

              WillyCat

                #72452

                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

              Amiga Impact