This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.

See the CrossGCC FAQ for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Initialised Data


Nicolas Moreau wrote:
Hi

I am trying to understand the logic behind the initialised data segment.
I understand that, the values should be copied from ROM to RAM by crt0.s on startup, the values normally sit after the text section.
What gets me really confused is that in my current build where my linker script says:
. = 0xC0000000;
.data : { __data_start__ = .;
*(.data) __data_end__ = .;
} The actual values are put in 0xC0000000, my text stops at around 0x00600000.
This has been working fine with GDB, but now that I am trying to build a binary image, objcopy complains that it can't write at 0xc0000000 (which is normal). So to create my binary image to load into the system, I have to relocate the data segment to the end of text using objcopy.
This works but sounds very awkward, can someone tell me how this should be done ?
Thanks

Nic
This is done in the linker script using the "AT" instruction

Here is an example:

   .data :
   AT ( ROM_ADDRESS )

This should put a copy of the .data in your rom at ROM_ADDRES

Hope that helps... see the LD documentation for more information.

Regards

Paul



------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]