[PATCH] D30419: [ELF] - Define __bss_start symbol.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 1 05:25:02 PST 2017


>> +  // __bss_start should point to the first .bss.* output section.
>> +  for (OutputSection *OS : OutputSections) {
>> +    bool IsBSS = (In<ELFT>::Common && In<ELFT>::Common->OutSec == OS) ||
>> +                 OS == Out::Bss || OS == Out::BssRelRo;
>
>You can just check if the type is NOBITS, no?

I do not think I can. That would catch .tbss first.
 __bss_start is not documented, so I am refering to BFD imlementation,
it default script places __bss_start before all .bss and .tbss is listed explicitly before:

  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.....
  . = .;
  __bss_start = .;
  .bss            :
  {
   *(.dynbss)
   *(.bss .bss.* .gnu.linkonce.b.*)
   *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end.  Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections.
      FIXME: Why do we need it? When there is no .bss section, we don't
      pad the .data section.  */
   . = ALIGN(. != 0 ? 64 / 8 : 1);
  }

So to have the same behavior, I think I should do what I do.

George.


More information about the llvm-commits mailing list