relocalisation pas fixé jusqu'à
j'ai récemment commencé la programmation assembleur pour des cœurs arm. Ma première petite démos, seulement avec le .texte de la section, a fonctionné sans aucun problème.
Comme une extension logique je voulais structure du code assembleur dans les rubriques habituelles: .texte, .de données, .sev .
Donc j'ai écrit ce programme simple:
.globl _start
.section .text
_start:
b main
b .
b .
b .
b .
b .
b .
b .
main:
ldr r0, x
nop
.section .data
x: .word 0xf0f0f0f0
.end
Mais
/opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o
se termine avec l'erreur
prog.s: Assembler messages:
prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
make: *** [prog.o] Error 1
Je n'ai aucune idée de pourquoi l'assembleur se plaint de déménagement, parce que j'ai pensé que c'est la tâche de l'éditeur de liens. Je ne pouvais imaginer que je dois dire à l'assembleur que mon .les données de la section n'est pas situé à la finale de la mémoire de la position du montage de la scène, mais je ne peux pas trouver tout ce qui est lié.
Même si j'ai trouvé un moyen d'obtenir le code assemblé correctement, en remplaçant
.section .data
par
.org .
qui n'est pas une solution satisfaisante. Surtout compte tenu du fait que le gaz de documentation de mettre en évidence le sens de la présente section.
Peut-être que quelqu'un de vous les experts peuvent m'aider à acquérir une certaine sagesse
OriginalL'auteur user1146332 | 2012-04-10
Vous devez vous connecter pour publier un commentaire.
Il semble que la seule façon que vous pouvez faire c'est en saisissant l'adresse de la variable et de charger une valeur à partir de cette adresse.
Dans un sens, ce genre de logique. Après tout, si l'adresse de x (après connexion) est trop loin pour un PC par rapport à y accéder? Puisque le compilateur (ce qui ne veut pas faire la liaison) ne sait pas comment loin, la section de données peut être à partir de la section de texte, il refusera de compiler ce code juste au cas où il n'est pas joignable.
En utilisant ce moyen indirect de l'accès à une variable, il est garanti que la variable soit accessible (ou au moins le compilateur peut être sûr que la variable est accessible ou pas).
Code adapté de http://www.zap.org.au/elec2041-cdrom/examples/intro/pseudo.s
est-ce la accepté de répondre ?
OriginalL'auteur tangrs