mikrocontroller.net

Forum: Compiler & IDEs Section .text


Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab bei den ersten Programmen mit GCC (ARM) und Eclipse einige 
Probleme, wie zum Beispiel dieses hier

Wenn ich mein Projekt mit "make all" durchlaufen lassen kommt ab und zu, 
bei Linken nur Müll raus( nehme ich an!?!).

Make Ausgabe bei Linken:    <- sieht eigentlich ok aus
Linking: main-test.elf
arm-elf-gcc -mthumb -mcpu=arm7tdmi -mthumb-interwork -I. -gdwarf-2 
-DROM_RUN -DVECTORS_IN_ROM -D__WinARM__ -D__WINARMSUBMDL_AT91SAM7S64__ 
-Os -ffunction-sections -fdata-sections -Wall -Wcast-align -Wimplicit 
-Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -Wshadow 
-Wunused -Wa,-adhlns=StartUp/Cstartup.lst  -I./StartUp -I./Include 
-IO:\Programme\amontec\sdk4arm\gat\garm\arm-elf\include -MD -MP -MF 
.dep/main-test.elf.d StartUp/Cstartup.o   main-test.o 
StartUp/Cstartup_SAM7.o     --output main-test.elf -nostartfiles 
-Wl,-Map=main-test.map,--cref,--gc-sections -lc  -lm -lc -lgcc 
-L./StartUp -L./Include 
-LO:\Programme\amontec\sdk4arm\gat\garm\arm-elf\include 
-T./Include/AT91SAM7S64-ROM.ld

und zum Schluss dies hier:

Size after:
main-test.elf  :
section              size      addr
.text                   0   1048576
.glue_7t               80   1048576
.ctors                  0   1048656
.dtors                  0   1048656
.data                   0   2097152
.bss                    0   2097152
.comment              270         0
.debug_aranges        912         0
.debug_pubnames      1128         0
.debug_info         17681         0
.debug_abbrev        4360         0
.debug_line          6284         0
.debug_frame         1324         0
.debug_str           4669         0
.debug_loc          10086         0
.internal_ram_top       0         0
.reset                  0         0
.debug_ranges         656         0
Total               47450

Jetzt meine Frage:
WIESO ist meine ".text" Section leer???

In dem alten Projekt mit WinARM und PN sah die Ausgabe ganz anders aus:
Size after:
main-test.elf  :
section           size      addr
.text            15448         0
.rodata            552     15448
.rodata.str1.4     194     16000
.data             1028   2097152
.bss                80   2098180
.int_data            0   2113536
.stab            11340         0
.stabstr         32027         0
.comment           432         0
.debug_aranges      96         0
.debug_info        345         0
.debug_abbrev       60         0
.debug_line       1228         0
.reset               0         0
Total            62830

und das Projekt läuft auf dem Controller auch!!! :)

Für jeden Tip wär ich sehr dankbar.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> --gc-sections

Meine Vermutung wäre, dass dir diese Option sämtlichen Code als
vermeintlich ungenutzt rauskegelt.

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht so aus, als würden Teile aus einem meiner WinARM Beispiele genutzt 
aber irgenwie noch weiteres beigemischt (amontec..). Mit dem kurzen 
Happen Information kann zumindest ich nicht wirklich weiterhelfen, 
vermute aber die Ursache wie Jörg in einer fehlerhaften Verwendung des 
"unused code removal" von gcc 4.x. Dazu beachtenswert:

- Alle c Sourcen mit -ffunction-sections -fdata-sections compilieren. 
Dies ist nicht aus dem Beitrag ersichtlich, da nur der Linker-Aufruf 
gezeigt wird

- Passendes Linkerscript verwenden. Unter anderem nicht nur *(.text) 
sondern auch *(.text.*), aber auch weiteres. AT91SAM7S64-ROM.ld 
dahingehende prüfen. Das default linker-script (arm-elf-ld --verbose) 
und einige meiner WinARM-Beispiele können als Vorlage dienen.

- -gc-sections an den Linker übergeben (ist wohl "gemacht")

Martin Thomas

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um rauszufinden, ob's das ist, müsste er doch auch einfach das
--gc-sections und das -ffunction-sections weglassen können, oder?

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Um rauszufinden, ob's das ist, müsste er doch auch einfach das
> --gc-sections und das -ffunction-sections weglassen können, oder?

Zusätzlich auch das -fdata-sections entfernen. Aber stimmt, damit kann 
man das Problem eingrenzen.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Antworten.

also ich wollte ein altes Programm von mir das auf M. Thomas Beispielen 
von 2005 beruht, jetzt neu mit neuem StartFile und neuen MakeFile von 
2007 (vom gleichen Projekt "Gamma") verwenden, was aber der maßen in die 
Hose gegangen ist, das ich es seinlassen werde! :-(

PS: Die von euch beschriebenen Optionen habe ich abgeschaltet und meine 
".text"-Section besaß nun wieder ein Programm freu.

Aber wie gesagt, der gewünschte Erfolg(laufendes Programm) blieb aus.

Ist halt doch etwas komplizierter als, die MC die ich vorher benutzt 
hatte.

Danke für eure Hilfe.

mfg

Stephan

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.