Problemes lors de l'appel de fonction avec le version intel d'une application

palito

Membre enregistré
9 Août 2006
5
0
Salut,

Je suis stagiaire et en ce moment je développe sur un macintel
Je travaille sur la migration d'une application au début compilée sous Code Warrior vers Xcode en universal. La version powerpc marche correctement, cependant j'ai des problèmes avec la version intel. Mon tuteur et moi ne voyons pas pourquoi ça ne marche pas bien ....

Voila les données des problèmes :
J'ai du code asm qui appelle des fonctions sur des objets et par moment lors de l’appel des fonction, je me retrouve dans dyld_stub_binding_helper_interface (alors que toutes les lirairies sont des librairies statiques, donc pas besoin de dyld normalement, enfin bon) et je crash plus tard dans cette fonction.

J’ai pensé aux fonctions Templates et inlinées, j’en ai modifiées certaines voir si ça venait de ça mais il n’y a hélas pas de changement ...
Les options testées pour résoudre ce problème sont inline function hidden, generate-position–dependent-code

Exemple de fonction :

Float InvMagnitude(Vector &v)
{
return 1.0f/Magnitude(v);
}

void vector ::normalize()
{
float n = InvMagnitude(*this)
x*=n; y*=n; z*=n;
}

Quand j’arrive dans normalize mon this est bon (a priori, mes valeurs x,y,z sont bonnes) et au moment de l’appel a InvMagnitude c’est la que ça pose problème.
Lorsque que cela marche le dyld_stub_interface_helper m’envoie rapidement sur ma fonction en faisant un jump, et quand ça marche pas il m’envoie dans dyld_fast_stub_interface_helper crach plus tard lors d’accès à un registre sse.
D’ailleurs pourquoi en debug(-g,-o0) ce coquin me compile mes fonction en SSE(2 ?).

Nota j’ai aussi ce problème avec es fonction « simple » par exemple une fonction int Max(int a, int b) marche alors que sont homologue float Max(float a, float b), ne marche pas.

Est-ce que quelqu'un a déjà eu à faire a ce genre de problème ?
Ou avez vous des liens sur quelques documents d'intéressant ? Je n'ai rien trouvé sur developer.apple.com, et pas grand-chose dans le web (je suis peut être mauvais)

Merci et a plus ;)
 
c'est un peu bordelique ton explication

mais je presume que les jeux d'assembler sont bien distinct ( que font ils ? besoin de précision / floating point );

1 - je pense que tu as un probleme de FLAG
2 - je ne sais pas ce que contient tes archives elles ne contiennent
pas forcément du code non repositionnable
3 - un petit man gcc ne te ferait pas de mal
4 - un petit man ld ne te ferait pas de mal
5 - utilises tu Carbon ?
6 - attache avec gdb ,
avant de porter en FAT , porte deja pour x86 sur un proc x86, (minimum de sérieux )

si tu reformules correctement étape par étape peut etre qu'on y verra plus clair
essaye de comprendre que nous ne somme pas le nez ds le guidon , après si ta formulation est claire et qu'on ne voit pas le probleme , mais à mon avis il est pas trop compliqué à trouver

je posterais un Radar sur la list concernée par ton appli mais j'ai besoin de comprendre
le probleme , il peut etre multiple , mais à mon avis c'est un probleme structurel et de config


:zen:
 
3 - un petit man gcc ne te ferait pas de mal
4 - un petit man ld ne te ferait pas de mal
5 - utilises tu Carbon ?
6 - attache avec gdb ,
avant de porter en FAT , porte deja pour x86 sur un proc x86, (minimum de sérieux )
3-4 certe mais les man sont enorme, je pensais pouvoir zapper de la lecture
5 oui j'utilise carbon.
6 je ne comprends pas ce que tu veux dire .... je bosse sur un imac ca me parait un minimum pour tester les applis en intel

L'appli est capable de d'interpreter via une vm un script.
cette virtual machine simule l'execution du script et j'utilise utilise des morceaux de code en asembleur afin de jumper dans les fonctions, et de remplire la stack/les registres.

Exemple de script
Bloc de code:
void main()
{
Vector v(1.0,1.0,1.0);    
v.Normalize();
}
la concretement je vais arriver dans les fonctions je vais appeler le ctor, puis la fonction normalize.
Le probleme c'est qu'en réalité le lien n'est pas bien et ca plante, dans le dyld_stb_binding_helper_interface alors qu'il ne devrait meme pas aller dedans mais dans les fonction.

c'est vrai que le code n'est pas forcement repositionnal, c'est pour cela que j'ai modifier des fonction qui posse probleme (template et fonction inline) mais a priori non mais surtout y'a pas de pb en ppc :(.


sinon tu pense a un flag en particulier ?

Ca marche sur ppc, mais pas sur intel, je me sert des fichiers de configuration pour xcode (xcconfig) et la config est exactement la meme pour l'une au l'autre compilateur.

je'ai mis a dl la version 2.4 pour voir ... en esperant que c'est le generateur de code intel qui bug un peu.

Merci.