This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
ld maps sections without consider memory region?
- From: Masaki Muranaka <monaka at monami-software dot com>
- To: binutils at sources dot redhat dot com
- Date: Wed, 14 Feb 2007 16:40:38 +0900
- Subject: ld maps sections without consider memory region?
Hello,
I'm using for embedded application and I'm confusing ld's output.
Follows are extremely simplified example:
My target have two ROMs and their address regions aren't continuous.
So I put MEMORY command into ldscript.
- - - - -
MEMORY {
REGION_ROM1 : ORIGIN = 0x0000, LENGTH = 0x080
REGION_ROM2 : ORIGIN = 0x0100, LENGTH = 0x800
REGION_OTHER : ORIGIN = 0x2000, LENGTH = 0x080
}
SECTIONS {
.begin : {
begin.o(.text);
} > REGION_ROM1
.tail : {
tail.o(.text);
} > REGION_ROM2
/* dummy */
.data : { } > REGION_OTHER
.bss : { } > REGION_OTHER
}
- - - - -
And I called ld.
But ld combined .begin and .tail section to same program header
like this:
- - - - - -
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg
Align
LOAD 0x000054 0x00000000 0x00000000 0x00204 0x00204 R E 0x4
Section to Segment mapping:
Segment Sections...
00 .begin .tail
- - - - - -
Address 0x81 to 0x0ff are zero filled. This causes bus error
as there is no memory. Of course it is unexpected to me.
Why is ld merge these sections without considering MEMORY command?
My target environment is mips64-elf (GNU ld version 2.17.50 20060513).
Any comments appreciate.
--
Masaki Muranaka
Monami software