[PATCH] D55800: [ELF] Place .note in the first page to ensure they are available in core files

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 17 17:38:08 PST 2018


MaskRay updated this revision to Diff 178571.
MaskRay edited the summary of this revision.
MaskRay added a comment.

gold


Repository:
  rLLD LLVM Linker

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

https://reviews.llvm.org/D55800

Files:
  ELF/Writer.cpp


Index: ELF/Writer.cpp
===================================================================
--- ELF/Writer.cpp
+++ ELF/Writer.cpp
@@ -729,9 +729,10 @@
 // * It is easy to check if a give branch was taken.
 // * It is easy two see how similar two ranks are (see getRankProximity).
 enum RankFlags {
-  RF_NOT_ADDR_SET = 1 << 18,
+  RF_NOT_ADDR_SET = 1 << 19,
+  RF_NOT_ALLOC = 1 << 18,
   RF_NOT_INTERP = 1 << 17,
-  RF_NOT_ALLOC = 1 << 16,
+  RF_NOT_NOTE = 1 << 16,
   RF_WRITE = 1 << 15,
   RF_EXEC_WRITE = 1 << 14,
   RF_EXEC = 1 << 13,
@@ -759,17 +760,25 @@
     return Rank;
   Rank |= RF_NOT_ADDR_SET;
 
-  // Put .interp first because some loaders want to see that section
-  // on the first page of the executable file when loaded into memory.
-  if (Sec->Name == ".interp")
-    return Rank;
-  Rank |= RF_NOT_INTERP;
-
   // Allocatable sections go first to reduce the total PT_LOAD size and
   // so debug info doesn't change addresses in actual code.
   if (!(Sec->Flags & SHF_ALLOC))
     return Rank | RF_NOT_ALLOC;
 
+  // Put .interp first because some loaders want to see that section
+  // on the first page of the executable file when loaded into memory.
+  if (Sec->Name == ".interp")
+    return Rank;
+  Rank |= RF_NOT_INTERP;
+
+  // Put allocatable .note next because they contain information (e.g.
+  // .note.gnu.build-id identifies the origin of the core) useful in core files.
+  // This ensures they are always dumped (at least on Linux) because they are in
+  // the first page.
+  if (Sec->Type == SHT_NOTE)
+    return Rank;
+  Rank |= RF_NOT_NOTE;
+
   // Sort sections based on their access permission in the following
   // order: R, RX, RWX, RW.  This order is based on the following
   // considerations:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55800.178571.patch
Type: text/x-patch
Size: 1739 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181218/d514008e/attachment.bin>


More information about the llvm-commits mailing list