Michael Ordnung schrieb:> Hallo zusammen,>> wenn ich mir nach dem compilieren (gcc für hc12 ) die .lst File> anschauen tauchen Zeile wie folgende auf:>> ...> 000d8000 l .bank2 00000000 .LFB4> 000d8000 l .bank2 00000000 .LM1> 000d8019 l .bank2 00000000 .L4> 000dc779 l .bank3 00000000 .LC3> ...>> ich kann mit den Bezeichnern nicht wirklich viel anfangen und im I-Net> hab ich auch nichts gefunden. Könnt ihr mir weiter helfen? Danke> schonmal.
Schau in den Assenbler-Code, da siehst du wie die Labels erzeugt sind,
wahrscheinlich .LC3 für ein String-Literal, etc.
Michael Ordnung schrieb:> hier ein Ausschnitt aus dem Assembler-Code.
Das ist kein Assembler-Code, das ist ein irgendwie erstelltes
Disassembly.
Den Assembler-Code bekommst du mit -save-temps und nach Gusto
-fverbose-asm und ohne -g.
Bei den Labels oben handelt es sich offenbar um Debug-Symbole.
Danke, für deine Hilfe.
Das ist ein aus dem elf-File generierte lst-File (oder auch map-File
genannt). Bin heute leider nicht am PC mit dem Compiler drauf und kann
deswegen erstmal kein neues compilat erstellen.
Aber generell, Anweisungen wie rtc, oder sogar stab 1
<.Ldebug_info0+0x1> sind doch Assembler Anweisungen. --> Deswegen die
Frage wie Unterscheid sich danach der Assembler-Code zu den oben
genannten "Code"?
Gruß
Hab nun folgendes rausgefunden. Wie du schon meintest bezgl. der
Highlevel Debug Symbolic.
einzelne C-Anweisungen bekommen <LM> Symbole. Diese werden dann in die
entsprechende Assembler Anweisungen übersetzt.
Warum in manchen Fällen jedoch <L> und in anderen <LM> verwendet wird
habe ich noch nicht rausgefunden. Beispiel:
Das sind Informationen für den Debugger, damit der sich zurechtfindet
und den passenden Source-Code anzeigen kann.
Zumindest bei .stab bin ich mir da sicher, anderes kannst du im
gas-Manual nachsehen (z.B. .bank2, .bank3, die könnten auch
hc13-spezifisch sein).
Michael Ordnung schrieb:> Frage wie Unterscheid sich danach der Assembler-Code zu den oben> genannten "Code"?
Es ist der Code, den der Compiler ausgibt und nicht ein dargestells
hex-Gewurschdel aus Object-Dateien etc.
Man sieht in der gcc-Ausgabe besser, was der Compiler mit einem Label
macht und wozu er ihn definiert.
Die Labelnamen sind in deinem Backend definiert (keine Ahnung, wie das
für hc12 heisst), d.h. in der Backendbeschreibung/GCC-Quellen zu deinem
Target gibt es sowas wie USER_LABEL_PREXIX, DIE_LABEL_PREFIX,
LOCAL_LABEL_PREFIX, ...
Johann L. schrieb:> Es ist der Code, den der Compiler ausgibt und nicht ein dargestells> hex-Gewurschdel aus Object-Dateien etc.
das ist meinen Wissens nach der OP-Code!? Oder sehe ich das falsch?
z.B.
1
0a rtc
da handelt es sich bei 0x0a um den OP-Code für rtc.
Euch vielen Dank für eure Hilfe!
Gruß
Michael O. schrieb:> Johann L. schrieb:>> Es ist der Code, den der Compiler ausgibt und nicht ein dargestells>> hex-Gewurschdel aus Object-Dateien etc.>> das ist meinen Wissens nach der OP-Code!? Oder sehe ich das falsch?
GCC gibt einen Opcode/Maschinencode aus sondern Text (Assembler-Quelle),
die vom Assembler assembliert wird zu Object-Code (Opcodes (mit
Platzhaltern für operanden), Objekte, Debug-Info, ...)
> 0a rtc>> da handelt es sich bei 0x0a um den OP-Code für rtc.
Jein. rtc ist wohl als 0xa zu codieren, was aber nicht unbedingt
bedeutet, daß an jeder Stelle, wo ein 0xa steht, ein RTC gemeint ist. Es
kann sich auch um Daten handeln, die (un)sinnigerweise zu Code
disassembliert wurden. Ergo: s-File angucken.