[lld] 070555c - [lld] Make -z keep-text-section-prefix recognize .text.split. as a prefix.

Snehasish Kumar via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 24 15:06:30 PDT 2020


Author: Snehasish Kumar
Date: 2020-09-24T15:02:48-07:00
New Revision: 070555c6c008c57c408c1e99025b12c5d71c9848

URL: https://github.com/llvm/llvm-project/commit/070555c6c008c57c408c1e99025b12c5d71c9848
DIFF: https://github.com/llvm/llvm-project/commit/070555c6c008c57c408c1e99025b12c5d71c9848.diff

LOG: [lld] Make -z keep-text-section-prefix recognize .text.split. as a prefix.

".text.split." holds symbols which are split out from functions in
other input sections. For example, with -fsplit-machine-functions,
placing the cold parts in .text.split instead of .text.unlikely mitigates
against poor profile inaccuracy. Techniques such as hugepage remapping can
make conservative decisions at the section granularity.

Differential Revision: https://reviews.llvm.org/D87840

Added: 
    

Modified: 
    lld/ELF/Writer.cpp
    lld/test/ELF/text-section-prefix.s

Removed: 
    


################################################################################
diff  --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index f42686f08e640..78d6cd018d76b 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -131,9 +131,14 @@ StringRef elf::getOutputSectionName(const InputSectionBase *s) {
   // SampleFDO is used, if a function doesn't have sample, it could be very
   // cold or it could be a new function never being sampled. Those functions
   // will be kept in the ".text.unknown" section.
+  // ".text.split." holds symbols which are split out from functions in other
+  // input sections. For example, with -fsplit-machine-functions, placing the
+  // cold parts in .text.split instead of .text.unlikely mitigates against poor
+  // profile inaccuracy. Techniques such as hugepage remapping can make
+  // conservative decisions at the section granularity.
   if (config->zKeepTextSectionPrefix)
     for (StringRef v : {".text.hot.", ".text.unknown.", ".text.unlikely.",
-                        ".text.startup.", ".text.exit."})
+                        ".text.startup.", ".text.exit.", ".text.split."})
       if (isSectionPrefix(v, s->name))
         return v.drop_back();
 

diff  --git a/lld/test/ELF/text-section-prefix.s b/lld/test/ELF/text-section-prefix.s
index 5ef2b4b9fb455..950f9d788a2f5 100644
--- a/lld/test/ELF/text-section-prefix.s
+++ b/lld/test/ELF/text-section-prefix.s
@@ -15,9 +15,10 @@
 # KEEP:      [ 1] .text
 # KEEP-NEXT: [ 2] .text.hot
 # KEEP-NEXT: [ 3] .text.unknown
-# KEEP-NEXT: [ 4] .text.startup
-# KEEP-NEXT: [ 5] .text.exit
-# KEEP-NEXT: [ 6] .text.unlikely
+# KEEP-NEXT: [ 4] .text.split
+# KEEP-NEXT: [ 5] .text.startup
+# KEEP-NEXT: [ 6] .text.exit
+# KEEP-NEXT: [ 7] .text.unlikely
 
 # NOKEEP:    [ 1] .text
 # NOKEEP-NOT:     .text
@@ -32,6 +33,7 @@
 # SCRIPT-NEXT: .text.f
 # SCRIPT-NEXT: .text.hot.f_hot
 # SCRIPT-NEXT: .text.unknown.f_unknown
+# SCRIPT-NEXT: .text.split.f_split
 # SCRIPT-NEXT: .text.startup.f_startup
 # SCRIPT-NEXT: .text.exit.f_exit
 # SCRIPT-NEXT: .text.unlikely.f_unlikely
@@ -49,6 +51,9 @@ _start:
 .section .text.unknown.f_unknown,"ax"
   nop
 
+.section .text.split.f_split,"ax"
+  nop
+
 .section .text.startup.f_startup,"ax"
   nop
 


        


More information about the llvm-commits mailing list