lst-File. Was ist .lfb, .lm.

OP #2339460
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ß
Persönliche Seite #2339516
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.
OP #2339566
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
OP #2339587
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ß
OP #2339623
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
Gast #2339634
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).
Persönliche Seite #2339683
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, ...
Persönliche Seite #2339726
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren