2016-09-15 6 views
1

Следующая командыКомпиляция для ARM я получаю «Ошибка: Попытка использовать команду ARM на Thumb только процессор»

/usr/bin/arm-linux-gnueabihf-gcc -O3 -DNDEBUG -march=armv7-a -mfloat-abi=hard -fPIC -fno-builtin -fno-exceptions -fomit-frame-pointer -funwind-tables -fno-stack-protector -fvisibility=hidden -fvisibility-inlines-hidden -fno-function-sections -fno-lto -g -Wno-variadic-macros -Wno-non-virtual-dtor -o testAsm.S.o -c testAsm.S 

На следующий файл сборки testAsm.S:

.syntax unified 
    .arch armv7 
    .fpu vfpv3 
    .code 32 
    .global _functionPointer 
    .p2align 2 
    .global _asmFunction 
    .type _asmFunction, %function 
_asmFunction: 
    PUSH {r1-r3,lr} 
    VPUSH {d0-d7} 
    MOVW r1,#:lower16:_functionPointer 
    MOVT r1,#:upper16:_functionPointer 
    LDR r2, [r1] 
    CMP r2, #0 
    BEQ asmFunction_restore 
    MOV r1, #0 
    BLX r2 
asmFunction_restore: 
    VPOP {d0-d7} 
    POP {r1-r3,pc} 

Производит следующая ошибка для каждой инструкции

Error: attempt to use an ARM instruction on a Thumb-only processor

В частности, ниже выдается выход:

testAsm.S: Assembler messages: 
testAsm.S:10: Error: attempt to use an ARM instruction on a Thumb-only processor -- `push {r1-r3,lr}' 
testAsm.S:11: Error: attempt to use an ARM instruction on a Thumb-only processor -- `vpush {d0-d7}' 
testAsm.S:12: Error: attempt to use an ARM instruction on a Thumb-only processor -- `movw r1,#:lower16:_functionPointer' 
testAsm.S:13: Error: attempt to use an ARM instruction on a Thumb-only processor -- `movt r1,#:upper16:_functionPointer' 
testAsm.S:14: Error: attempt to use an ARM instruction on a Thumb-only processor -- `ldr r2,[r1]' 
testAsm.S:15: Error: attempt to use an ARM instruction on a Thumb-only processor -- `cmp r2,#0' 
testAsm.S:16: Error: attempt to use an ARM instruction on a Thumb-only processor -- `beq asmFunction_restore' 
testAsm.S:17: Error: attempt to use an ARM instruction on a Thumb-only processor -- `mov r1,#0' 
testAsm.S:18: Error: attempt to use an ARM instruction on a Thumb-only processor -- `blx r2' 
testAsm.S:20: Error: attempt to use an ARM instruction on a Thumb-only processor -- `vpop {d0-d7}' 
testAsm.S:21: Error: attempt to use an ARM instruction on a Thumb-only processor -- `pop {r1-r3,pc}' 

Я попытался скомпилировать для ARM. Почему он говорит о режиме «Только для пальцев»?

EDIT: по-видимому, изменение в файле сборки от .arch armv7 до .arch armv7a устраняет проблему.

ответ

5

GNU arch=armv7, возможно, путается, представляет собой пересечение из ARMv7-A и ARMv7-M (что делает его сомнительной утилитой). Таким образом, объединив его с .code 32 (что эквивалентно опции командной строки -marm), которая сообщает ассемблеру собираться в кодировках ARM, которые ARMv7-M не поддерживает, не оставляет возможности собрать что-либо.

Конечно, просто прекращение и повышение ошибки в директиве или опции, которая ставит его в невозможную ситуацию, было бы слишком разумным для GAS, поэтому вместо этого он продолжает собираться и не может самостоятельно собрать каждую инструкцию. ..

 Смежные вопросы

  • Нет связанных вопросов^_^