zhuzhenhua wrote:
I think the problem is not with the linker, but in your use of objcopy
to convert your ELF file to a raw binary file.
1) What arguments are you giving to mipsel-linux-objcopy?
i use objcopy as follow(the brec_flash is elf file)
mipsel-linux-objcopy -O binary brec_flash brec_flash.bin
2) What is the output from mipsel-linux-objdump -h run on your
intermediate ELF object file?
i use mipsel-linux-objdump -h brec_flash and get messages as follow
brec_flash: file format elf32-tradlittlemips
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000b140 72000000 72000000 00010000 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00001080 7200b140 7200b140 0001b140 2**4
CONTENTS, ALLOC, LOAD, DATA
2 .sbss 00000010 7200c1c0 7200c1c0 0001c1c0 2**2
ALLOC
3 .bss 000008a0 7200c1d0 7200c1d0 0001c1c0 2**4
ALLOC
4 .reginfo 00000018 7200ca70 7200ca70 0001ca70 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA,
LINK_ONCE_SAME_SIZE
5 .pdr 000011a0 00000000 00000000 0001ca88 2**2
CONTENTS, READONLY
6 .mdebug.abi32 00000000 00000000 00000000 0001dc28 2**0
CONTENTS, READONLY
7 .comment 000000ea 00000000 00000000 0001dc28 2**0
CONTENTS, READONLY
8 .rodata 00000190 000000f0 000000f0 000000f0 2**4
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .rodata.str1.4 000005fe 00000280 00000280 00000280 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
OK. I think that the final .rodata.str1.4 section is causing your
problem because the offset between its load address and the other
section is huge, causing "objcopy -O binary" to generate a huge file.
This is a new section generated by gcc 3.x and above to hold mergeable
constant data. Try changing the line in your linker script which (I'm
guessing here) probably looks like this:
*(.rodata)
to:
*(.rodata) *(.rodata.*)
Nigel