[PATCH] D79590: [lld] Add a new output section ".text.unknown" for funtions with unknown hotness info especially in sampleFDO

Wei Mi via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu May 7 16:19:52 PDT 2020


wmi marked an inline comment as done.
wmi added inline comments.


================
Comment at: lld/ELF/Writer.cpp:136
     for (StringRef v :
-         {".text.hot.", ".text.unlikely.", ".text.startup.", ".text.exit."})
+         {".text.hot.", ".text.unknown.", ".text.unlikely.", ".text.startup.", ".text.exit."})
       if (isSectionPrefix(v, s->name))
----------------
MaskRay wrote:
> wmi wrote:
> > MaskRay wrote:
> > > tmsriram wrote:
> > > > wmi wrote:
> > > > > tmsriram wrote:
> > > > > > The new prefix looks good to me.
> > > > > > 
> > > > > > Just curious about input sections that are named just ".text.hot" or ".text.unknown" without the traling period.  This could happen with -fno-unique-section-names I think?  In that case, this handling seems insufficient.  This is related to -keep-text-section-prefix in general. I can take a look at this.
> > > > > isSectionPrefix seems considering the section name without trailing period (prefix.drop_back())?
> > > > > 
> > > > > ```
> > > > > static bool isSectionPrefix(StringRef prefix, StringRef name) {
> > > > >   return name.startswith(prefix) || name == prefix.drop_back();
> > > > > }
> > > > > ```
> > > > Ah, thanks!
> > > I know what you are discussing... (And I mentioned this problem internally previously)
> > > 
> > > To prevent a linker change (the GNU ld and gold approach has an small annoying behavior), I created https://reviews.llvm.org/D79600
> > I am not familiar with linker so I don't know the behavior of GNU ld and gold, but lld seems recognize ".text.hot" and return ".text.hot." for it, so I don't fully understand the intention of D79600, could you explain it a little bit? Thanks.
> I updated the description of D79600 a bit. Hope it is clear now... I can clarify if you still think that unclear.
> 
> In lld, I hope we only recognize `.text.exit.*` but not `.text.exit`, so that the function `exit` in a function section will not be ordered strangely.
> 
> To achieve that goal, we can rename `.text.exit` (without function sections, or with -fno-unique-section-names) to `.text.exit.`
Thanks, now I see what you and Sri mean. Although ".text.hot" is mapped to ".text.hot." when outputing the section, it is not recognized during section ordering or other phases in linker. The function isSectionPrefix is only called by getOutputSectionName so only section outputing phase recognize ".text.hot" 

Then D79600 makes sense to me. Thanks for clarifying!


Repository:
  rLLD LLVM Linker

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79590/new/

https://reviews.llvm.org/D79590





More information about the llvm-commits mailing list