ld generates invalid addresses

Alan Modra amodra@gmail.com
Mon May 14 03:49:00 GMT 2012

On Sun, May 13, 2012 at 03:21:48PM +0200, Niklas Gürtler wrote:
> from the program memory. The problem is now, that the _sidata label
> is set incorrectly - in my case, the initialization data in the
> flash begins at addess 0x080021b0 (placed there by ld), so ld should
> set _sidata to exactly that address, but it sets it to 0x080021ac.

Why must ld do that?  You have

  _sidata = .;

  .data : 
    . = ALIGN(4);

.data may be at a different address due to alignment of .data, or ld
may have inserted an orphan section between the assignment and .data.

Probably your best option is to use
  _sidata = ADDR (.data);
Put this somewhere after the .data section.

Alan Modra
Australia Development Lab, IBM

More information about the Binutils mailing list