www.mikrocontroller.net

Forum: Compiler & IDEs GCC .lst Ausgabe hexadezimal erzwingen?


Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich brauche einen Tip, wie man die GCC Chain dazu bringt, alle Ausgaben 
in den .lst Dateien in hex auszugeben, statt der dezimalen Form.

Beispiel:
68 0044 28309FE5     str  r3, [r2, #-971]
69 0048 CB3302E5     .loc 1 247 0

Für mich wäre #FFFFFC34 besser lesbar als #-971.
Bisher verwende ich die Optionen -Wa,-adhlns=$(<:.c=.lst)

Habe schon in den binutils Dokus herum gesucht, aber es irgendwie nicht 
innerhalb der gas -Wa Optionen gefunden.

Danke und Gruß

Ulrich

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei den binutils bist Du vermutlich verkehrt, das wird der Compiler so 
übergeben.  Du kannst Dich ja mal durch dessen Switches durchwühlen, ob 
es da was Passendes gibt; vermutlich eher nicht.

Bringt Dir vielleicht ein „arm-...-objdump -dSl file.elf“ ein Format, 
das näher am Gewünschten liegt?  Ich kann's nicht ausprobieren, da ich 
hier auf diesem Rechner nichts für ARM habe.

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

  300144:  e3e02a01   mvn  r2, #4096  ; 0x1000
  300148:  e51233c3   ldr  r3, [r2, #-963]  ; 0x3c3
  30014c:  e3c33a03   bic  r3, r3, #12288  ; 0x3000
  300150:  e50233c3   str  r3, [r2, #-963]  ; 0x3c3

Sieht auch nicht wirklich besser aus...
Zumal die Ausgabe etwas komisch ist, denn #4096 entspricht ja 0x1000
aber #-963 ist 0xFFFFF3C2, dachte ich...

Gruß, Ulrich

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulrich P. schrieb:
> #-963 ist 0xFFFFF3C2

Irgendwie nicht ... die linke Zahl ist ungerade, die andere gerade, das 
kann nicht sein ... mal nachsehen: -963 ist -0x3c3.

Damit hast Du natürlich noch nicht die gewünschte Darstellung im 
Zweierkomplement (0xfffffc3d), aber da weiß ich Dir sonst keinen Rat.

Autor: Tom M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulrich P. schrieb:
> ch brauche einen Tip, wie man die GCC Chain dazu bringt, alle Ausgaben
> in den .lst Dateien in hex auszugeben, statt der dezimalen Form.

Die .lst Dateien werden in meiner Toolchain durch avr-objdump erzeugt. 
Diese Variante des gnu objdump Programms zeigt die Zahlen hexadezimal 
an. Einstellen kann man das gem. manpage aber nicht - im Gegensatz zum 
avr-nm (gnu nm), der kennt die Option --radix

Bei mir läuft:
$ avr-objdump --version
GNU objdump (GNU Binutils) 2.20

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom M. schrieb:
> Die .lst Dateien werden in meiner Toolchain durch avr-objdump erzeugt.

Die heißen dort aber ".lss" und sind in Wirklichkeit Disassembler-
Listings.  Ein Assembler-Listing könntest du bei Bedarf ebenfalls
haben (mit den oben erwähnten Optionen).

Das -Wa besagt dabei nur, dass der Compiler die nachfolgenden Optionen
ohne eigene Begutachtung direkt an den Assembler weiterreichen soll.

Ich fürchte aber auch, dass das einfach mal (im obigen Context) der
Compiler ist, der das so generiert.

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hc Zimmerer schrieb:
> Ulrich P. schrieb:
>> #-963 ist 0xFFFFF3C2
>
> Irgendwie nicht ... die linke Zahl ist ungerade, die andere gerade, das
> kann nicht sein ... mal nachsehen: -963 ist -0x3c3.
>
> Damit hast Du natürlich noch nicht die gewünschte Darstellung im
> Zweierkomplement (0xfffffc3d), aber da weiß ich Dir sonst keinen Rat.

Also die Adresse scheint eher ein 0xFFFFFFFF-963 zu sein, denn sonst 
würde es nicht passen. Ich kenne keinen ARM, der einen Zugriff auf eine 
ungerade Adresse innerhalb seiner eigenen Register klaglos hin nimmt.

@Tom:
Es ist in meinem Fall ein arm-none-eabi-objdump mit der Version
GNU objdump (GNU Binutils) 2.20.1.20100303

@Jörg:
Ich werde es noch mal mit der -Wa,-adhlns=$(<:.c=.lst) Option für den 
Compile-Lauf versuchen. Zwar löst es nicht das Problem, dass man alle 
Register Adressen zurück rechnen muss, aber wenigstens ist hier der 
C-Code und der Assembler Output sauber verschachtelt.

Gruß, Ulrich

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulrich P. schrieb:
[  zu str  r3, [r2, #-963]  ; 0x3c3 ]
> Also die Adresse scheint eher ein 0xFFFFFFFF-963 zu sein, denn sonst
> würde es nicht passen. Ich kenne keinen ARM, der einen Zugriff auf eine
> ungerade Adresse innerhalb seiner eigenen Register klaglos hin nimmt.

Das ist ein Offset von -0x3c3 zu r3 und kein Zugriff auf eine ungerade 
Adresse.  Wo das zugreift, hängt vom Register ab.

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulrich P. schrieb:
> Hc Zimmerer schrieb:
>> Ulrich P. schrieb:
>>> #-963 ist 0xFFFFF3C2
>>
>> Irgendwie nicht ... die linke Zahl ist ungerade, die andere gerade, das
>> kann nicht sein ... mal nachsehen: -963 ist -0x3c3.
>>
>> Damit hast Du natürlich noch nicht die gewünschte Darstellung im
>> Zweierkomplement (0xfffffc3d), aber da weiß ich Dir sonst keinen Rat.

Klingt jetzt wie Haarspalterei, aber der Grund warum die Zahl nicht im
ZK dargestellt wird, ist der vorzeichenlose immediate Wert "963",
der als Offset verwendet wird. Dieser Offset kann entweder addiert
oder subtrahiert werden. Im Opcode selbst wird der Wert gewissermaßen
im sign/magnitude Format abgelegt.

> Also die Adresse scheint eher ein 0xFFFFFFFF-963 zu sein, denn sonst
> würde es nicht passen.

Das hat GCC noch nie davon abgehalten das zu generieren }:^) So einen
Fall hatte ich erst vor kurzem beim Kunden.

> Ich kenne keinen ARM, der einen Zugriff auf eine ungerade Adresse
> innerhalb seiner eigenen Register klaglos hin nimmt.

Was meinst Du mit "innerhalb seiner eigenen Register"? Sämtliche V6
und v7 Prozessoren (ARM11 und alle Cortex Prozessoren) können
unaligned Speicherzugriffe tätigen. Die älteren können das auch, nur
erscheint der zurückgelieferte Wert bisweilen etwas merkwürdig.

Gruß
Marcus

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.