Forum: Compiler & IDEs Section .text


von Stephan (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> --gc-sections

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

von Martin T. (mthomas) (Moderator) Benutzerseite


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Martin T. (mthomas) (Moderator) Benutzerseite


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.

von Stephan (Gast)


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

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.