внутреннее перемещение не исправлено

Недавно я начал программировать на ассемблере для ядер рук. Мои первые небольшие демонстрации, только с разделом.text, запускались без проблем.

В качестве логического расширения я хотел структурировать ассемблерный код в обычные разделы:.text,.data,.bss.

Итак, я написал следующую простую программу:

.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

Но

  /opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o

завершается с ошибкой

 prog.s: Assembler messages:
 prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
 make: *** [prog.o] Error 1

Я понятия не имею, почему ассемблер жалуется на перемещение, потому что я думал, что это задача компоновщика. Я мог представить, что мне нужно сказать ассемблеру, что мой раздел.data не находится в конечной позиции памяти на этапе сборки, но я не могу найти ничего связанного.

Хотя я нашел способ правильно собрать код, заменив

.section.data

на

.org.

, это не является удовлетворительным решением. Особенно с учетом того, что в газовой документации подчеркивается смысл этого раздела.

Может быть, кто-то из вас, экспертов, может помочь мне обрести мудрость

13
задан user1146332 11 April 2012 в 14:31
поделиться