Hallo, ich habe dem Compiler die option -marm mitgegeben um nur arm-code zu produzieren. Das assembler listing zeigt auch auf den ersten blick nur arm instructions. Wenn ich dann aber das object file disassembliere, ist beispielsweise der stm-befehl durch push ersetzt. Der Witz ist noch, dass der push-Befehl 4 byte lang ist: 0xe52db004 Was soll das? Ist es doch nur arm code? toolchain ist codesourcery arm-none-eabi. Viele Grüße Daniel Gering
Daniel G. schrieb: > arm instructions. Wenn ich dann aber das object file disassembliere, ist > beispielsweise der stm-befehl durch push ersetzt. Hast du mal kontrolliert, ob dieser ominöse PUSH-Befehl nicht in Wirklichkeit der gesuchte STM-Befehl ist? Es führen mehrere Wege nach Rom. Manche Assembler-Befehle sind einfach nur Spezialformen anderer Befehle. So ist der PUSH Befehl in Thumb2 in der Langfassung eine Spezialform von STM und im ARM-Modus mag es heutzutage ähnlich aussehen. Deshalb muss sich der Disassembler für eine Variante entscheiden. Was der Programmierer/Compiler in den Assembler-Quelltext reingeschrieben hat kann er nicht wissen.
OBJDUMP sollte es wissen, oder? Denn wie kann Thumb und ARM nicht eindeutig sein? Das eine hat 4 byte und das andere 2 byte Länge. Also ist es ein OBJDUMP Fehler? Kontrolliert habe ich es nicht, dazu müsste ich wohl die Zahl oder Teile davon per Befehlssatz-Spezifikation selbst ermitteln und vergleichen?! Grüße Daniel
Daniel G. schrieb: > OBJDUMP sollte es wissen, oder? Denn wie kann Thumb und ARM nicht > eindeutig sein? Das eine hat 4 byte und das andere 2 byte Länge. ARM hat immer 4 Byte, aber Thumb2 hat teils 2 teils 4 Bytes. Das spielt hier aber keine Rolle. Ausserdem ist es durchaus nicht eindeutig. Siehe http://www.arm.com/pdfs/QRC0001H_rvct_v2.1_arm.pdf unter PUSH. Das ist auch im ARM Modus ein Synonym von STMDB SP!. Der Disassembler hat sich offenbar entschieden, in diesem Fall diese Spezialform anzuzeigen, an Stelle der generischen Version. Das ist letztlich auch die Folge einer Revision den Mnemotechnik durch ARM. ARM hat dabei versucht, die Syntax in ARM und Thumb-Modus so Modus-unabhängig zu gestalten wie möglich. An den Maschinenbefehlen hat sich nichts geändert, an den Namen davon jedoch schon. In anderen Architekturen kriegt man ähnliche Probleme. So ist bei AVR der "ROL r" Befehl tatsächlich nur ein Synonym für "ADC r,r", aber woher soll der Disassembler wissen was der Programmierer geschrieben hat?
Danke für die Info! Dann kann ich also davon ausgehen, dass Thumb keinesfalls verwendet wird wenn ich die -marm option gesetzt habe? Wobei diese ja ohnehin default ist?!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.