interner Umzug nicht behoben
Ich habe kürzlich mit der Assembler-Programmierung für Arm-Cores begonnen. Meine ersten kleinen Demos, nur mit der .text Sektion, liefen ohne Probleme.
Als logische Erweiterung wollte ich den Assembler-Code in die üblichen Abschnitte gliedern: .text, .data, .bss.
Also habe ich folgendes einfaches Programm geschrieben:
<code> .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 </code>
Aber
<code> /opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o </code>
wird mit dem Fehler beendet
<code> prog.s: Assembler messages: prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up make: *** [prog.o] Error 1 </code>
Ich habe keine Ahnung, warum sich der Assembler über eine Verlagerung beschwert, weil ich dachte, das ist die Aufgabe des Linkers. Ich könnte mir vorstellen, dass ich dem Assembler mitteilen muss, dass sich mein .data-Abschnitt beim Assemblieren nicht am endgültigen Speicherplatz befindet, aber ich kann nichts Passendes finden.
Obwohl ich einen Weg gefunden habe, den Code richtig zusammenzusetzen, indem ich ihn ersetzte
<code> .section .data </code>
durch
<code> .org . </code>
das ist keine befriedigende lösung. Insbesondere angesichts der Tatsache, dass die Gasdokumentation den Sinn dieses Abschnitts hervorhebt.
Vielleicht kann mir jemand von euch Experten helfen, etwas Weisheit zu erlangen