Forum: Compiler & IDEs lst-File. Was ist .lfb, .lm.


von Michael O. (ebito)


Lesenswert?

Hallo zusammen,

wenn ich mir nach dem compilieren (gcc für hc12 ) die .lst File 
anschauen tauchen Zeile wie folgende auf:
1
...
2
000d8000 l       .bank2  00000000 .LFB4
3
000d8000 l       .bank2  00000000 .LM1
4
000d8019 l       .bank2  00000000 .L4
5
000dc779 l       .bank3  00000000 .LC3
6
...

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.

Gruß

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

von Michael O. (ebito)


Lesenswert?

Hi,

hier ein Ausschnitt aus dem Assembler-Code. Hilft mir leider auch nicht 
viel weiter:
1
000d805f <.L9>:
2
   d805f:  f6 00 01      ldab  1 <.Ldebug_info0+0x1>
3
   d8062:  c8 02         eorb  #2
4
   d8064:  7b 00 01      stab  1 <.Ldebug_info0+0x1>
5
...
6
000d806b <.LM30>:
7
   d806b:  1d 00 00 01   bclr  0 <.Ldebug_info0> #$01
8
9
000d806f <.LM31>:
10
   d806f:  0a            rtc

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

von Michael O. (ebito)


Lesenswert?

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ß

von Michael O. (ebito)


Lesenswert?

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:
1
000044cf <.L30>:
2
    {
3
        case  Task_Button:
4
           ulReturnValue = ulEvents_Button;
5
    44cf:  fc 12 0a      ldd  120a <ulEvents_Button+0x2>
6
    44d2:  fe 12 08      ldx  1208 <ulEvents_Button>
7
.
8
.
9
000044d6 <.L31>:
10
    44d6:  fc 12 0e      ldd  120e <ulEvents_LED+0x2>
11
    44d9:  fe 12 0c      ldx  120c <ulEvents_LED>
12
13
000044dc <.LM69>:
14
    44dc:  0a            rtc

von Juergen (Gast)


Lesenswert?

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).

von Juergen (Gast)


Lesenswert?

Ach ja, mit der Assembler-Option -da kann man die Ausgabe der 
Debug-Infos im .lst abschalten.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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, ...

von Michael O. (ebito)


Lesenswert?

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ß

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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.

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.