Je suis en train de créer un lien avec FreeScale Code Warrior 5.9 pour MPC5554, qui est une puce PPC avec un noyau e500mc. Je compile avec GCC 4.6.4 compilé pour powerpc-none-eabi.Utilisation de FreeScale Code Warrior pour lier des fichiers objets GCC avec des appels __eabi
Je compile du code C pour mon projet, y compris le fichier avec main
, en utilisant un compilateur croisé GCC. J'ai besoin de lier en utilisant Code Warrior, cependant. GCC ajoute un appel à une fonction appelée __eabi
au début de main, qui est censée initialiser deux registres. Il ne peut pas être retiré, et n'est pas nécessaire pour ce que je fais. GCC s'attend à ce qu'il soit fourni par le CRT.
Ce sont mes drapeaux de compilation pour GCC: -O2 -std=c99 -w -mno-eabi -mregnames -mcpu=e500mc -misel=yes -mfloat-gprs=single -mno-string -msdata=none
La documentation de GCC PowerPC dit il y a un argument -no-eabi
, qui devrait enlever, mais si vous creusez dedans il y a un certain nombre de rapports de bugs de pointage out que la documentation est erronée et le drapeau ne supprime pas réellement l'appel à __eabi
.
J'ai essayé simplement d'ajouter une fonction __eabi
au crt de CodeWarrior. En __ppc_eabi_init.c j'ai ajouté la fonction:
asm extern void __eabi(void)
{
addis r13,r0,[email protected]
ori r13,r13,[email protected]
addis r2,r0,[email protected]
ori r2,r2,[email protected]
blr
}
Cependant, lorsque je tente de créer un lien, je reçois toujours l'erreur que __eabi
de principal main.o est indéfini. Il semble que le linker Code Warrior ne trouve pas ma fonction. J'ai vérifié que __ppc_eabi_init.c est le premier dans l'ordre des liens.
Comment puis-je obtenir ce lien? Y at-il un moyen de supprimer l'appel à __eabi
? Pourquoi Code Warrior est-il incapable de trouver la fonction quand je la fournis?
la langue d'assemblage de CodeWarrior a la directive '.global' pour faire une étiquette visible à d'autres fichiers. Donc je m'attendrais, au minimum que la première ligne soit: 'asm global void __eabi (void)' – user3629249
@ user3629249 on pourrait le penser, mais il attend le mot-clé 'extern' dans ce contexte. – seanmk