www.mikrocontroller.net

Forum: Compiler & IDEs gcc produziert ungewollt THUMB


Autor: Daniel G. (motello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Daniel G. (motello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Daniel G. (motello)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.