Ich habe Projekt, auf einem ARM Cortex-M4-Prozessor, wo ich versuche, die gcc Link-Time-Optimierung (LTO) -Funktion zu integrieren.gcc LTO scheint Debugging-Symbole zu entfernen
Derzeit meine Zusammenstellung und Verknüpfung von Flags sind:
CFLAGS = -ggdb -ffunction-sections -Og
LDFLAGS = -Wl,-gc-sections
Alles funktioniert mit diesen Flaggen in Ordnung und ich bin in der Lage, das Projekt richtig zu debuggen.
Dann habe ich versucht, CFLAGS -flto
hinzuzufügen. Obwohl das Programm gut funktioniert, kann ich das Projekt nicht mehr debuggen, wobei gdb sich über fehlende Debugging-Symbole beschweren muss. Laufen objdump -g
auf der ELF-Datei (mit LTO aktiviert) gibt die folgende Ausgabe:
xxx.elf: file format elf32-littlearm
Contents of the .debug_frame section:
00000000 0000000c ffffffff CIE
Version: 1
Augmentation: ""
Code alignment factor: 2
Data alignment factor: -4
Return address column: 14
DW_CFA_def_cfa: r13 ofs 0
00000010 00000018 00000000 FDE cie=00000000 pc=08002a3c..08002a88
DW_CFA_advance_loc: 2 to 08002a3e
DW_CFA_def_cfa_offset: 16
DW_CFA_offset: r4 at cfa-16
DW_CFA_offset: r5 at cfa-12
DW_CFA_offset: r6 at cfa-8
DW_CFA_offset: r14 at cfa-4
DW_CFA_nop
0000002c 0000000c ffffffff CIE
Version: 1
Augmentation: ""
Code alignment factor: 2
Data alignment factor: -4
Return address column: 14
DW_CFA_def_cfa: r13 ofs 0
0000003c 0000000c 0000002c FDE cie=0000002c pc=08002a88..08002a98
Beachten Sie die fehlende .debug_info
Seite. Zurück zu den Projekteinstellungen und nur -flto
von CFLAGS zu entfernen löst das Problem. objdump -g
auf der ELF-Datei ohne LTO zeigt jetzt einen .debug_info
Abschnitt, mit den richtigen Verweisen auf die Funktionen in meinem Projekt gefüllt, und das Debugging funktioniert wieder gut.
Wie erhalten LTO und Debug-Symbole gut zusammen zu spielen?
Bearbeiten: vergessen, meine GCC-Informationen aufzunehmen. Ich verwende die GNU ARM Embedded Toolchain, und der Test wurde auf den Versionen 5.4-2016q2 und 5.4-2016q3 durchgeführt.
Es gibt einige Informationen, die Sie hier interessieren könnten: https://gcc.gnu.org/wiki/early-debug – Pyves
Haben Sie das jemals herausgefunden? –
Noch nicht. Ich habe jedoch nicht auf einer neueren Version von gcc getestet. – swineone