Forum: Compiler & IDEs gcc kein code mit -flto


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Stefan A. (king-crash)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Hallo,

Ich hab gerade die Link Time Optimizations ausprobiert und bekomme zwar 
eine Ausgabedatei, die enthält aber scheinbar keinen Code.

Mit -flto:
1
Section Headers:
2
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
3
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
4
  [ 1] .text             PROGBITS        00000000 010000 000000 00  AX  0   0  4
5
readelf: Warning: [ 2]: Link field (0) should index a symtab section.
6
readelf: Warning: [ 2]: Info field (0) should index a relocatable section.
7
  [ 2] .relocate         REL             20000000 010000 000000 08   W  0   0  1
8
  [ 3] .bss              NOBITS          20000000 000000 000000 00  WA  0   0  1
9
  [ 4] .symtab           SYMTAB          00000000 010000 000140 10      5   4  4
10
  [ 5] .strtab           STRTAB          00000000 010140 0000c7 00      0   0  1
11
  [ 6] .shstrtab         STRTAB          00000000 010207 000030 00      0   0  1

Ohne -flto:
1
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
2
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
3
  [ 1] .text             PROGBITS        00000000 010000 00050c 00  AX  0   0  4
4
readelf: Warning: [ 2]: Link field (0) should index a symtab section.
5
readelf: Warning: [ 2]: Info field (0) should index a relocatable section.
6
  [ 2] .relocate         REL             20000000 01050c 000000 08   W  0   0  1
7
  [ 3] .bss              NOBITS          20000000 000000 000000 00  WA  0   0  1
8
  [ 4] .debug_info       PROGBITS        00000000 01050c 009a02 00      0   0  1
9
  [ 5] .debug_abbrev     PROGBITS        00000000 019f0e 000b69 00      0   0  1
10
  [ 6] .debug_loc        PROGBITS        00000000 01aa77 000233 00      0   0  1
11
  [ 7] .debug_aranges    PROGBITS        00000000 01acaa 0000f8 00      0   0  1
12
  [ 8] .debug_ranges     PROGBITS        00000000 01ada2 000108 00      0   0  1
13
  [ 9] .debug_macro      PROGBITS        00000000 01aeaa 00bc22 00      0   0  1
14
  [10] .debug_line       PROGBITS        00000000 026acc 001dbc 00      0   0  1
15
  [11] .debug_str        PROGBITS        00000000 028888 047244 01  MS  0   0  1
16
  [12] .comment          PROGBITS        00000000 06facc 00002a 01  MS  0   0  1
17
  [13] .ARM.attributes   ARM_ATTRIBUTES  00000000 06faf6 00002b 00      0   0  1
18
  [14] .debug_frame      PROGBITS        00000000 06fb24 000198 00      0   0  4
19
  [15] .symtab           SYMTAB          00000000 06fcbc 000690 10     16  47  4
20
  [16] .strtab           STRTAB          00000000 07034c 000341 00      0   0  1
21
  [17] .shstrtab         STRTAB          00000000 07068d 0000bc 00      0   0  1

Der gcc hat die Version 8.1.0
Aufgerufen wird er mit:
1
arm-cortexm-eabi-gcc -g3 -O2 -ffunction-sections -fdata-sections -Wl,--gc-sections -nostdlib  -marm -I./include/cmsis -mlittle-endian -mthumb  -I./include/samd20 -mcpu=cortex-m0plus -mfloat-abi=soft -D__SAMD20J14__ -Wl,"-Tsamd20j14a_flash.ld" -Wall -o servo.elf main.c startup_samd20.c clock.c servo.c uart-samd20.c

Oder eben mit "-flto"

Im Anhang habe ich noch die Linkerkommandos.

von Stefan A. (king-crash)


Bewertung
0 lesenswert
nicht lesenswert
Das Problem konnte gelöst werden.
Ein "__attribute__ ((used))" für die Vektortabelle bringt den 
Durchbruch.

Die Fragen die sich noch stellen sind:
Warum hilft hier der Eintrag "KEEP(*(.vectors .vectors.*))" in der 
Linkerdatei nichts?
Warum ist der Artikel https://www.mikrocontroller.net/articles/ARM_GCC , 
dem ich das entnommen habe, nicht im Linksseitigen Menü verlinkt.

von Nico W. (nico_w)


Bewertung
0 lesenswert
nicht lesenswert
Ich hab irgendwas in der Richtung erst vor kurzem gelesen. Ist afaik nen 
Bug der mit der nächsten Version behoben wurde.

von Markus F. (mfro)


Bewertung
0 lesenswert
nicht lesenswert

von Vincent H. (vinci)


Bewertung
0 lesenswert
nicht lesenswert
An der Stelle sei angemerkt dass der LLD aktuell (6.0.1) in meinen Augen 
sowieso ein unbrauchbarer Linker für embedded Projekte ist, weil er 
nicht in der Lage ist den Location Counter nach hinten zu versetzen. Das 
heißt im Klartext ich muss mich manuell um die Compilier-Reihenfolge 
meiner c/cpp Files kümmern wenn irgendwo Code steht, der etwas in eine 
Section legen will die eine niedrigere Adresse als die aktuelle hat... 
das ist ein absolutes NO-GO.

von S. R. (svenska)


Bewertung
1 lesenswert
nicht lesenswert
Stefan A. schrieb:
> Ein "__attribute__ ((used))" für die Vektortabelle
> bringt den Durchbruch.

Ja, das ist sowieso immer hilfreich.

Stefan A. schrieb:
> Warum hilft hier der Eintrag "KEEP(*(.vectors .vectors.*))"
> in der Linkerdatei nichts?

Weil die Section zu dem Zeitpunkt schon entsorgt wurde.
Ein "bitte nicht wegschmeißen" bringt nichts mehr, wenn der Kram schon 
beim Entsorger liegt. :-)

Beitrag #5507066 wurde von einem Moderator gelöscht.
Beitrag #5507096 wurde von einem Moderator gelöscht.
Beitrag #5507119 wurde von einem Moderator gelöscht.
Beitrag #5507136 wurde von einem Moderator gelöscht.
Beitrag #5507153 wurde von einem Moderator gelöscht.
Beitrag #5507158 wurde von einem Moderator gelöscht.
Beitrag #5507168 wurde von einem Moderator gelöscht.
Beitrag #5507178 wurde von einem Moderator gelöscht.
Beitrag #5507247 wurde von einem Moderator gelöscht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.