2016-10-20 2 views
1

Mit MicroSemi SoftConsole 4.0 versuchen, ein FreeRTOS-Demo-Projekt kompiliert und ausgeführt zu bekommen, und ich habe einen Fehler gefunden "schlechte Anweisung [jede Zeile Code]". Grundsätzlich wird die gesamte Datei aus irgendeinem Grund nicht zusammengebaut. Meine Konsole sieht wie folgt aus:SoftConsole 4.0 Assembler "bad instruction"

Building file: ../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm 
Invoking: Cross ARM GNU Assembler 
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -O2 -g -x assembler-with-cpp -MMD -MP -MF"FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.d" -MT"FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.o" -c -o "FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.o" "../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm" 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm: Assembler messages: 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:37: Error: bad instruction `_text SEGMENT' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:38: Error: bad instruction `aes_cbc_encrypt PROC' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:46: Error: bad instruction `save rdi and rsi to rax and r11,restore before ret' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:47: Error: ARM register expected -- `mov rax,rdi' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:48: Error: immediate expression requires a # prefix -- `mov r11,rsi' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:50: Error: bad instruction `convert to what we had for att&t convention' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:51: Error: ARM register expected -- `mov rdi,rcx' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:52: Error: ARM register expected -- `mov rsi,rdx' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:53: Error: ARM register expected -- `mov rdx,r8' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:54: Error: ARM register expected -- `mov rcx,r9' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:55: Error: immediate expression requires a # prefix -- `mov r8,[rsp+40]' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:56: Error: ARM register expected -- `mov r9d,[rsp+48]' 
../FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.asm:58: Error: bad instruction `end' 
FreeRTOS-Plus/WolfSSL/wolfcrypt/src/subdir.mk:161: recipe for target 'FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.o' failed 
make: *** [FreeRTOS-Plus/WolfSSL/wolfcrypt/src/aes_asm.o] Error 1 

etc. etc. (es mir für fast alle 1000ish Codezeilen einen Fehler gibt, die ich für die Lesbarkeit natürlich herausgeschnitten haben). Wie zu bemerken ist, benutze ich den Cross ARM GNU Assembler (arm-none-eabi-gcc) und meine ARM Assembler Option ist -x assembler-with-cpp. Nicht sicher, was ich noch hinzufügen muss, aber wenn jemand von einem möglichen Assembler-Flag oder einer Option weiß, die ich irgendwo in der Befehlszeile vermisse, wäre das sehr hilfreich. Ich bin mir nicht einmal 100% sicher, was hier los ist, also wäre jede Erklärung, was schiefgehen könnte, auch hilfreich. Ich habe das Gefühl, dass das nicht wirklich ein Coding-Problem ist, sondern eher ein Mangel an Kompatibilitätsproblemen (vielleicht falsches Assembly-Format? Obwohl ich einen Cross-Arm-Assembler verwende). Vielen Dank!

+0

Die Datei, die es zu montieren versucht, ist nicht für ARM, es ist für x86. Das wird nicht funktionieren. – Jester

+0

@Jester, das dachte ich mir, aber wie ich zu Richard gesagt habe, war es in einem Softwareprojekt enthalten, das für ein ARM-Board gedacht war, was mich verwirrte. – Justin

+0

Ich habe nicht überprüft, aber dieses Projekt könnte plattformübergreifend sein, oder könnte nur etwas Code von woanders enthalten. Vielleicht hat der Code, den Sie zu kompilieren versuchen, auch eine ARM-spezifische oder eine generische C-Version, nur Ihr Build-System wählt das falsche zum Kompilieren aus. – Jester

Antwort

1

Sieht nicht wie ARM asm code aus. Möglicher Intel-Code.

+0

@RichardIch hatte das Gefühl, es war x86-Code, aber es ist in einem großen Dateisystem enthalten, das für eine Embedded-Platine gedacht ist (die einen ARM-Prozessor verwendet), was mich verwirrte. – Justin

0

@Richard ist richtig. Das ist unsere Intel-Assembly, die die kryptographische Beschleunigung auf bestimmten Intel-Plattformen unterstützt.

Sie können dies beheben, indem Sie in wolfSSL das define NO_ASM hinzufügen oder indem Sie alle Dateien mit der Endung .asm aus Ihrem Projekt ausschließen.