[patch,avr] PR21849: Locate section .progmemx.* at a higher address.

Georg-Johann Lay avr@gjlay.de
Thu Jul 27 12:35:00 GMT 2017


On 27.07.2017 13:48, Nick Clifton wrote:
> Hi Johann,
> 
>> Hi, this fixes PR21849:  The current location of data for
>> avr-gcc named address space __memx is such that it "wastes"
>> lower addresses in the 16-bit range.
>>
>> As the compiler is using 24-bit addresses for __memx data which
>> it located in .progmemx.*, this section can be moved to a higher
>> address in the linker script.
> 
>> @@ -128,7 +128,7 @@ SECTIONS
>>       ${RELOCATING+ *libprintf_flt.a:*(.progmem.data)}
>>       ${RELOCATING+ *libc.a:*(.progmem.data)}
>>   
>> -    ${RELOCATING+ *(.progmem*)}
>> +    ${RELOCATING+ *(.progmem.*)}
>>       
>>       ${RELOCATING+. = ALIGN(2);}
>>   
>> @@ -196,6 +196,8 @@ SECTIONS
>>       *(.hightext)
>>       ${RELOCATING+ *(.hightext*)}
>>   
>> +    ${RELOCATING+ *(.progmemx.*)}
>> +
>>       ${RELOCATING+. = ALIGN(2);}
>>   
>>       /* For tablejump instruction arrays.  We don't relax
> 
> This does not look right.  It does add the .progmemx.* entry to the high area
> but it also removes the .progmem.* entry from the low area.  Why is this needed ?
> .progmem.* will not match any .progmemx.* sections, so the two are distinct.

There is

+    ${RELOCATING+ *(.progmem.*)}

at the low end.  avr-gcc only generates .progmem.data (or .progmem.gcc*
for old versions) so that .progmem.* catches them all without matching
.progmemx.*

> (Note the period character in a section pattern is not a regexp character, it
> exactly matches only the period character itself).
> 
>> Would also be great if this can go into 2.29.
> 
> Sorry - 2.29 is out of the door - so it is too late for this to happen.
> 
> Cheers
>    Nick

What I meant is back-porting to the 2.29 branch so it will come with 2.29.*.

Johann



More information about the Binutils mailing list