Forum: Mikrocontroller und Digitale Elektronik Keil uVision armclang-Assembler und Debugsymbole


von Michael Engel (Gast)


Lesenswert?

Hallo,

evtl. bin ich ja nicht der Einzige, der versucht, mit dem 
GNU-kompatiblen ARM-Assembler von Keil zu arbeiten - also der 
clang-basierte Assembler, der beim Compiler V6 dabei ist.

Kurze Problembeschreibung:

Wenn ich im "alten" V5 ARM-Assembler eine Funktion wie folgt definiere:
1
    AREA |text|, CODE, READONLY
2
    EXPORT _foo
3
4
foo PROC
5
    b foo
6
    ENDP
7
    END

dann kann ich im Keil-Debugger durch die Instruktionen in foo steppen 
und bekomme den entsprechenden Quellcode angezeigt, also enthält die 
Objektdatei entsprechende Informationen zu Codeoffset und 
Sourcefile/Sourcezeile.

Wenn ich das PROC/ENDP weglasse, funktioniert das nicht mehr und ich 
bekomme nur noch disassemblierte Instruktionen angezeigt, was das 
Debuggen doch etwas nerviger macht (und das möchte ich meinen Studis 
nicht antun...). Die Objectfiles unterscheiden sich auch in Größe (und 
Inhalt, versteht sich), mit PROC/ENDP kommen zwei ELF-Sektionen dazu 
(.debug_frame und .rel.debug_frame) und der Inhalt einiger anderer 
wächst (.debug_info, .rel.debug_info, .symtab und .shstrtab).

Soweit, so gut - mit PROC in "altem" ARM-Assembler erhalte ich also die 
gewünschten Informationen. Wenn ich nun den clang-basierten Assembler 
verwende, gibt es kein Äquivalent zu PROC/ENDP (siehe auch [1]). Und 
ohne die Verwendung von PROC/ENDP fehlen dem Keil-Debugger scheinbar die 
Filename/Zeilennummer-Informationen.

Das Komische dabei ist aber, dass die ELF-Objektdateien irgendwelche 
(vermutlich DWARF-)Informationen zu Offset-Filename-Zeilennummer 
enthalten, sowohl mit wie auch ohne PROC/ENDP mit dem alten Assembler 
und auch mit armclang:
1
$ arm-none-eabi-objdump -dlr foo.o
2
3
foo.o:     file format elf32-littlearm
4
5
Disassembly of section text:
6
7
00000000 <__foo>:
8
__foo():
9
C:\Users\mic8823m\Desktop\Keil\Keil/foo.s:6
10
   0:  f04f 0001   mov.w  r0, #1
11
C:\Users\mic8823m\Desktop\Keil\Keil/foo.s:7
12
   4:  f04f 0102   mov.w  r1, #2
13
C:\Users\mic8823m\Desktop\Keil\Keil/foo.s:8
14
   8:  e7fe        b.n  0 <__foo>
15
      8: R_ARM_THM_JUMP11  __foo

Die Info scheint der Keil-Debugger aber zu ignorieren und liest 
"irgendwas" anderes...

Hat jemand von euch eine Idee, wie man entweder den clang-Assembler dazu 
bekommt, die richtigen Debuginfos zu generieren oder den Keil-Debugger 
dazu, die existierenden Debuginfos zu verwenden?

-- Michael

[1] 
http://www.keil.com/support/man/docs/armclang_mig/armclang_mig_chr1398343610532.htm
PS: Keil uVision-Version ist 5.24.2.0 mit ARMClang 6.7

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.