2016-11-22 2 views
4

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.

+0

Es gibt einige Informationen, die Sie hier interessieren könnten: https://gcc.gnu.org/wiki/early-debug – Pyves

+0

Haben Sie das jemals herausgefunden? –

+0

Noch nicht. Ich habe jedoch nicht auf einer neueren Version von gcc getestet. – swineone

Antwort

1

Dies liegt daran, dass gcc keine Kombination von -flto mit -g unterstützt.

Sie können die Details finden here

"Die Kombination mit -g -flto wird derzeit experimentell und erwarten produzieren unerwartete Ergebnisse."

Wenn Sie -flto verwenden, wird -g ignoriert.

Verwandte Themen