Forum: Compiler & IDEs GCC assembler output ändern?


von Johannes V. (johannes_v)


Lesenswert?

Guten Tag,

gibt es eine einfache möglichkeit den Assembler der vom GCC ausgespuckt 
wird zu modifizieren? Habe ihn im Moment auf o3 stehen aber beim stöbern 
gerade ein paar super Zeilen gefunden.

Z.B.:
1
        cmp r1, #0
2
        str r2, [r3, #8]
3
        mvn r2, #0x7F
4
        strb r2, [r3, #4]
5
        ldrne r2, 0x00000A64
6
        ldreq r2, 0x00000A64
7
        ldrne r1, [r2]
8
        ldreq r1, [r2]
9
        orrne r1, r1, #1
10
        biceq r1, r1, #1
11
        strne r1, [r2]
12
        streq r1, [r2]

Na wer sieht was da gemacht wird? ;)

MfG

von Andreas B. (andreas_b77)


Lesenswert?

Johannes V. schrieb:
> gibt es eine einfache möglichkeit den Assembler der vom GCC ausgespuckt
> wird zu modifizieren?

Ja, nimm nen Editor.

Im Ernst: Was soll "Assembler modifizieren" hier heissen? Willst du den 
Compiler ändern?

Johannes V. schrieb:
> Na wer sieht was da gemacht wird? ;)

Falls r1 gleich 0 ist, wird Bit 0 vom Wert an Adresse 0xa64 gelöscht, 
anderenfalls gesetzt. Daneben werden noch zwei Werte an Offsets von r3 
(zeigt wohl auf ein struct) geschrieben. Was hab ich gewonnen?

Tja, außer dem orr und bic hätte der Rest nicht in zwei Pfade aufgeteilt 
werden müssen. Ist das der aktuellste GCC?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Evtl. die Ausgane des Compilers anschauen anstatt ein Disassembly:

Als Compileroptionen
1
   -fsave-temps -fverbose-asm
hinzufügen und -pipe weglassen (falls überhaupt verwendet).

Die s-Datei wird dann nicht temporär angelegt und direkt wieder 
gelöscht, sondern bleibt erhalten; i- bzw. ii-Datei natürlich auch.

Und die s-Datei liest sich deutlich besser ohne Debug-Info, d.h. -g 
auch weglassen, das braucht man eh nicht.

von Johannes V. (johannes_v)


Lesenswert?

> Tja, außer dem orr und bic hätte der Rest nicht in zwei Pfade aufgeteilt
> werden müssen. Ist das der aktuellste GCC?

Das kann ich ehrlich gesagt nicht genauer sagen. Es ist zumindest die 
neuste Version von Crossworks. Konnte auf deren Webseite oder in den 
Programmdateien keine Versionsnummer zum GCC entdecken.

Bzw, eben mal Kopf eingeschaltet.. Aufruf über die Console mit --version 
sagt 4.4.5

Aber ja, 100 punkte für dich. Ist zwar keine struct sondern ein Objekt 
aber heute wollen wir mal nicht so sein ;).
Was ich mit Assembler modifiezieren meine? Vermutlich Assembly 
modifizieren.
Also im Endeffect mit Notepad in die file.o und hoffen das er mir die am 
nächsen Tag nicht neu kompiliert

Ich habe eben die Compiler flags mal ausprobiert, -fsave-temps mag der 
compiler nicht, finde ich hier auch nicht 
http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Johannes V. schrieb:
> Ich habe eben die Compiler flags mal ausprobiert, -fsave-temps mag der
> compiler nicht, finde ich hier auch nicht
> http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html

Tippo: -save-temps oder -save-temps=...

von Andreas B. (andreas_b77)


Lesenswert?

Jetzt hol ich den Thread nochmal rauf weil mich was interessiert: War 
die Variable oder was auch immer an Adresse 0xa64 vielleicht volatile?

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
Noch kein Account? Hier anmelden.