[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] GCC 6.1.0, strings and PROGMEM
From: |
Senthil Kumar Selvaraj |
Subject: |
Re: [avr-gcc-list] GCC 6.1.0, strings and PROGMEM |
Date: |
Mon, 16 May 2016 22:43:28 +0530 |
User-agent: |
mu4e 0.9.17; emacs 24.5.1 |
Senthil Kumar Selvaraj writes:
> Alan Burlison writes:
>
>> I've just updated my toolchain to use GCC 6.1.0 and I notice that
>> constant C strings seem to be being placed automatically in PROGMEM,
>> rather than requiring the use of the PSTR macro as in the past. This
>> caused me some confusion because call such as printf("foo") started
>> printing garbage. Here's the proof:
>>
>> printf(" ");
>> 91e: 84 e7 ldi r24, 0x74 ; 116
>> 920: 90 e0 ldi r25, 0x00 ; 0
>> 922: 9f 93 push r25
>> 924: 8f 93 push r24
>> 926: 0e 94 04 17 call 0x2e08 ; 0x2e08 <printf>
>>
>> 74: 20 20 and r2, r0
>> 76: 20 20 and r2, r0
>> 78: 20 20 and r2, r0
>> 7a: 20 20 and r2, r0
>> 7c: 20 20 and r2, r0
>> 7e: 00 21 and r16, r0
>>
>> I haven't been able to find any mention of this change anywhere. Is
>> this a deliberate change in gcc behaviour, or a bug?
>
> It looks correct to me. From the dissassembly output, I guess you're
> looking at contents at 0x0074 in the flash address space. You should
> be looking at contents in the data address space instead. Can you try
> dumping contents of the .data section, like so (assuming a.out is the ELF
> output)
>
> $ avr-objdump -s -j .data a.out
>
> You should see the blank space string at 0x0074 in the output.
>
> Don't know why you're getting garbage output though. Can you post a
> testcase that shows the incorrect behavior?
>
Filed https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71151 to track this.
Regards
Senthil