This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Relocating Data Sections
- From: "Wood Mark" <mjwood2 at hotmail dot com>
- To: binutils at sources dot redhat dot com
- Date: Fri, 22 Aug 2003 20:37:05 +0000
- Subject: Relocating Data Sections
- Bcc:
I am writing a program to be used in an powerpc embedded system. I have
compiled the appropriate cross compiler and including binutils-2.13.92.
I am trying to place my .text section at 0xff400000. Since I can only load
to flash, I am also trying to load my .data section directly after my .text
section, but have it relocated to 0xe80000 during program initialization.
Upon reading the ld documentation, I was under the impression this could be
accomplished by using the AT command as follows:
--- start linker script ---
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc",
"elf32-powerpc")
OUTPUT_ARCH(powerpc)
PROVIDE (__stack = 0x00E00000);
MEMORY
{
flash : ORIGIN = 0xFF400000, LENGTH = 0xFFFFF
ram : ORIGIN = 0x00E80000, LENGTH = 0x7FFF
}
SECTIONS
{
.text : { *(.text) _etext = .; } > flash
.data : AT ( ADDR( .text ) + SIZEOF( .text ) )
{ _data = . ; *(.data); _edata = . ; }
}
--- end linker script ---
If I use this linker script, the resulting ELF file shows the LMA of the
.data section to be 0xff4041bc and the VMA of the .data section at
0x00e80000.
However, when I load this application on the hardware, before the code is
even run, I find the .data section at 0xe80000. Interestingly enough, it is
not located at 0xff4041bc as well. This is problematic because everything
at 0xe80000 is zeroed before execution by crt0. Am I wrong in believing
that crt0 is supposed to copy everything from the _etext through _edata and
place it at _data?
Thanks for any help,
Mark Wood
_________________________________________________________________
Get MSN 8 and help protect your children with advanced parental controls.
http://join.msn.com/?page=features/parental