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!
Die Datei, die es zu montieren versucht, ist nicht für ARM, es ist für x86. Das wird nicht funktionieren. – Jester
@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
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