avr-libc-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-libc-dev] PROGMEM section variables throw away by --gc-sections


From: Dean
Subject: Re: [avr-libc-dev] PROGMEM section variables throw away by --gc-sections?
Date: Wed, 14 Nov 2007 21:50:31 +1100


----- Original Message ----- From: "Rolf Ebert" <address@hidden>
To: "Dean" <address@hidden>
Cc: <address@hidden>
Sent: Wednesday, November 14, 2007 5:13 PM
Subject: Re: [avr-libc-dev] PROGMEM section variables throw away by --gc-sections?


Dean schrieb:
Hi guys,

I've been noticing some strange behaviour with my makefile arguments.

Firstly, LD.exe crashes when I use -mshort-calls with the --relax linker option, but *only* if I *don't* use -ffunction-sections and --gc-sections. With the latter two options enabled both -mshort-calls and --relax work just fine.

Secondly, -ffunction-sections and --gc-sections seems to throw away some of my PROGMEM variables. I rely on a few PROGMEM variables being embedded into the binary so I can later distinguish which version it was compiled from, similar to:

char PROGMEM buildtime[] = __TIME__;

--gc-sections seems to remove this, although I thought it was only designed to remove unused functions and not PROGMEM data. Is there a workaround to this?

--gc_sections removes all sections, that the linker thinks are unused. Did you compile also with the -fdata-sections compiler switch?

No, didn't try that. I was under the hazy impression that -fdata-sections didn't work for the AVR target? I'll give it a try.


The assembler symbol of buildtime is not modified by -ffunction-sections, only by -fdata-sections.

I can also imagine a missing KEEP instruction in the linker script

Rolf


This is all getting wierder. It's only triggered by --relax, --gc-sections and -mshort-calls on my large projects - test cases don't work. Incidentally, removing -ffunction-sections causes my USB demo apps to misbehave, even when --gc-sections isn't enabled. I though that -ffunction-sections essentially does nothing without --gc-sections? I tried to compare the listings and found some very minor differences, but nothing to indicate why the firmware screwed up when -ffunction-sections was turned off. Removing --relax fixes the problem and allows me to freely turn -ffunction-sections on and off without faulty firmware.

I've no idea what's going on, but there's obviously some sort of confict (if not multiple ones) between -mshort-calls, -ffunction-sections, --relax and --gc-sections. It only seems to affect my large complex project, not simple ones I've tested it on. Wierd.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]