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

Tristan Gingold gingold@adacore.com
Thu Jul 27 12:40:00 GMT 2017


On 27/07/2017 14:35, Georg-Johann Lay wrote:
> 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.*.

Ok with me.

Tristan.



More information about the Binutils mailing list