some question about output section
loody
miloody@gmail.com
Thu May 19 04:31:00 GMT 2011
hi:
2011/5/18 loody <miloody@gmail.com>:
> hi
> 2011/5/11 Alan Modra <amodra@gmail.com>:
>> On Wed, May 11, 2011 at 02:27:09PM +0800, loody wrote:
>>> 2. I found if the LMA of 2 sections are quite close, the size of
>>> objcopy will get small, script1.
>>> But why if the LMA of third section is close to previous section, the
>>> size will still get big, script2?
>>
>> Why do you think the LMAs are close?
>>
>> Your scripts are setting LMA of a section to the end VMA of the
>> previous section. I suspect that wasn't what you intended.
>> See ld.info LOADADDR and SIZEOF.
>>
>
> I finally figured out what you mean :)
>
> I use MEMORY command in my ld script, and I found the LMA of one
> section will right behind previous one, even I didn't tell the script
> to do so.
>
> below is some part of my ld script:
> MEMORY
> {
> region0 : org = 0xbfc00000, l = 24k
> region1 : org = 0xbfc06000, l = 26k
> region2 : org = 0xbfb04000, l = 14k
> region3 : org = 0x80000000, l = 64k
> }
> ....
> .onlyText : { lib1.a:*.o (*.text) _eonlytext =
> ABSOLUTE(.); } >region2 AT>region0
>
> . = ALIGN(4);
> _fbss = .;
> .sbss : { *(.sbss) *(.scommon) *(.bss) *(COMMON) } >region2
>
> ...
>
>
> Below is the output of map:
> .sbss 0x00000000bfb05540 0x60 load address 0x00000000bfc0187c
> *(.sbss)
> *(.scommon)
> .scommon 0x00000000bfb05540 0x4 main.o
>
>
> It seem ".sbss" adopt the same setting of .onlyText even I didn't at
> AT>region0 at the end.
>
> appreciate your help,
> miloody
I do the following experimemts:
1. assign address directly instead of using MEMORY comamnd
".sbss" still adopt the same setting of .onlyText
.onlyText 0x00000000bfb04000 0x70 load address 0x00000000bfc0030c
Zebra*(.text)
.text 0x00000000bfb04000 0x70 Zebra.o
0x00000000bfb04000 testmain1
0x00000000bfb04070 _eonlytext = ABSOLUTE (.)
0x00000000bfb04070 . = ALIGN (0x4)
0x00000000bfb04070 _fbss = .
.sbss 0x00000000bfb04070 0x4 load address 0x00000000bfc0037c
*(.sbss)
*(.scommon)
2. I purposely let the content of .onlyText be empty and ".sbss" will
have the LMA that I expected.
------------------------------------------------------------------------------
.onlyText 0xbfb04000:AT(_etext) { /* Zebra*(.text)*/
_eonlytext =
ABSOLUTE(.); }
. = ALIGN(4);
_fbss = .;
.sbss : { *(.sbss) *(.scommon) *(.bss) *(COMMON) }
-------------------------------------------------------------------------------
.onlyText 0x00000000bfb04000 0x0 load address 0x00000000bfc00380
0x00000000bfb04000 _eonlytext = ABSOLUTE (.)
0x00000000bfb04000 . = ALIGN (0x4)
0x00000000bfb04000 _fbss = .
.sbss 0x00000000bfb04000 0x4
*(.sbss)
*(.scommon)
.scommon 0x00000000bfb04000 0x4 main.o
Why the attributes of .sbss is depended on the size of previous section?
If I didn't assign the LMA address of .sbss, it should be reset
instead of using the end of previous one, right?
Thanks a lot,
More information about the Binutils
mailing list