This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


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

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



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