2016-11-08 2 views
0

Je suis en train de développer des laboratoires «amusants» pour un cours d'architecture de l'informatique où les étudiants écrivent et exécutent un système d'exploitation très minimal. Je suis la configuration Bare Bones de http://wiki.osdev.org/Bare_Bones et en utilisant le compilateur croisé i686 précompilé de Richard Hull (https://github.com/rm-hull/barebones-toolchain).Est-il possible d'utiliser% r8d avec i686-elf-gcc?

Lorsque je tente d'écrire du code assembleur en utilisant %r8d, je reçois cette erreur

Error: bad register name `%r8' 

Le Readme dit « Il y a deux saveurs de la plate-forme, 32- et 64 bits en fonction de votre environnement Linux hôte », mais indique également "i686 (ELF 32 bits)" comme l'une des cibles.

Suis-je correct que la source du problème est que la cible ELF est de 32 bits? Si oui, existe-t-il un moyen facile de mettre en place un compilateur croisé avec une cible ELF 64 bits?

Répondre

1

Je suppose que le README dit fait référence à la « CHOST » du compilateur, alors que le « CTARGET » est toujours i686 (qui est de 32 bits.) Il n'y a pas %r8d (ou %r8, ou tout %r{number}) registre, donc non vous ne pouvez pas l'utiliser (c'est un registre x86-64/IA32-E.)

Vous pouvez voir my blogpost on CHOST/CBUILD/CTARGET pour comprendre la relation entre les différents noms de plates-formes pour la compilation croisée.