[ld]: Checks for address space overflow will reject any avr program.

Georg-Johann Lay avr@gjlay.de
Wed Mar 15 10:24:00 GMT 2017


On 14.03.2017 12:52, Tristan Gingold wrote:
>
>> On 14 Mar 2017, at 12:16, Tristan Gingold <gingold@adacore.com> wrote:
>>
>> [...]
>>
>>> I didn't actually check whether it's due to your change, but as
>>> you are active there, you'll likely know the solution.
>>>
>>> avr is using virtual addresses in order to linearize the address
>>> space.
>>
>> Yes, I suppose that section offset is larger than address space.
>>
>> I think I have an idea for this.
>
> Does this work for you ?
>
> Tristan.
>
> diff --git a/ld/ldlang.c b/ld/ldlang.c
> index a0638ea..cf7aadc 100644
> --- a/ld/ldlang.c
> +++ b/ld/ldlang.c
> @@ -4782,16 +4782,23 @@ lang_check_section_addresses (void)
>    addr_mask = (addr_mask << 1) + 1;
>    for (s = link_info.output_bfd->sections; s != NULL; s = s->next)
>      {
> -      s_end = (s->vma + s->size) & addr_mask;
> -      if (s_end != 0 && s_end < s->vma)
> -	einfo (_("%X%P: section %s VMA wraps around address space\n"),
> -	       s->name);
> -      else
> +      /* Only for allocated sections and if already in the address space.
> +	 This handles targets like avr which have I+D small spaces linearized
> +	 in the only one ELF address space.  */
> +      if ((s->flags & SEC_ALLOC) != 0
> +	  && (s->vma & addr_mask) == s->vma)
>  	{
> -	  s_end = (s->lma + s->size) & addr_mask;
> -	  if (s_end != 0 && s_end < s->lma)
> -	    einfo (_("%X%P: section %s LMA wraps around address space\n"),
> +	  s_end = (s->vma + s->size) & addr_mask;
> +	  if (s_end != 0 && s_end < s->vma)
> +	    einfo (_("%X%P: section %s VMA wraps around address space\n"),
>  		   s->name);
> +	  else
> +	    {
> +	      s_end = (s->lma + s->size) & addr_mask;
> +	      if (s_end != 0 && s_end < s->lma)
> +		einfo (_("%X%P: section %s LMA wraps around address space\n"),
> +		       s->name);
> +	    }
>  	}
>      }
>

I tried this patch with some simple programs and it worked for them.

Thanks for the fast fix.

Johann




More information about the Binutils mailing list