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