Globale Variablen fehlen in avr-size

Gast #2949262
Lesenswert?

Hallo zusammen,

mir ist gerade aufgefallen, dass avr-size anscheinend keine globalen 
Variablen berücksichtigt, wenn man es auf eine .o-Datei anwendet. Ist 
das normal?

Beispiel:
1
// test.c
2

3
char buffer_global[16];
4
static char buffer_local[32];
5

6
int main(void) {}

Das ergibt:
1
> avr-gcc -c test.c
2
> avr-gcc -o test.elf test.o
3
> avr-size test.o
4
   text     data      bss      dec      hex  filename
5
     14        0       32       46       2e  test.o
6
> avr-size test.elf
7
   text     data      bss      dec      hex  filename
8
     54        0       48      102       66  test.elf

Das globale Array scheint also erst nach dem Linken berücksichtigt zu 
werden. Aber warum? Es ist doch Teil von test.o und darf auch nicht 
nochmal wo anders definiert werden.

Gibt es eine Möglichkeit den Speicherverbrauch der globalen Variablen 
einer .o-Datei mit anzuzeigen ohne jede einzeln in eine .elf-Datei zu 
linken?
#2949306
Lesenswert?

> Das globale Array scheint also erst nach dem Linken berücksichtigt zu
> werden. Aber warum?

Weil es nach dem Kompilieren erstmal im common-Block liegt, und erst 
nach dem Linken in bss.

> Gibt es eine Möglichkeit den Speicherverbrauch der globalen Variablen
> einer .o-Datei mit anzuzeigen ohne jede einzeln in eine .elf-Datei zu
> linken?

Benutze beim Kompilieren -fno-common, dann landen sie gleich in bss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren