[PATCH] D43858: Do not create multiple NOTE segments.

Rui Ueyama via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 28 18:33:44 PST 2018


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rLLD326410: Do not create multiple NOTE segments. (authored by ruiu, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D43858?vs=136431&id=136455#toc

Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D43858

Files:
  ELF/Writer.cpp
  test/ELF/note-contiguous.s


Index: test/ELF/note-contiguous.s
===================================================================
--- test/ELF/note-contiguous.s
+++ test/ELF/note-contiguous.s
@@ -8,12 +8,13 @@
 // CHECK-NEXT: Offset:
 // CHECK-NEXT: VirtualAddress:
 // CHECK-NEXT: PhysicalAddress:
-// CHECK-NEXT: FileSize: 8
-// CHECK-NEXT: MemSize: 8
+// CHECK-NEXT: FileSize: 16
+// CHECK-NEXT: MemSize: 16
 // CHECK-NEXT: Flags [
 // CHECK-NEXT:   PF_R
 // CHECK-NEXT: ]
 // CHECK-NEXT: Alignment: 1
+// CHECK-NOT:  Type: PT_NOTE
 
 // RUN: echo "SECTIONS { .note : { *(.note.a) *(.note.b) } }" > %t.script
 // RUN: ld.lld %t.o --script %t.script -o %t2
@@ -29,6 +30,7 @@
 // SCRIPT-NEXT:   PF_R
 // SCRIPT-NEXT: ]
 // SCRIPT-NEXT: Alignment: 1
+// SCRIPT-NOT:  Type: PT_NOTE
 
 .section .note.a, "a", @note
 .quad 0
Index: ELF/Writer.cpp
===================================================================
--- ELF/Writer.cpp
+++ ELF/Writer.cpp
@@ -668,16 +668,17 @@
 // * 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 << 16,
-  RF_NOT_INTERP = 1 << 15,
-  RF_NOT_ALLOC = 1 << 14,
-  RF_WRITE = 1 << 13,
-  RF_EXEC_WRITE = 1 << 12,
-  RF_EXEC = 1 << 11,
-  RF_NON_TLS_BSS = 1 << 10,
-  RF_NON_TLS_BSS_RO = 1 << 9,
-  RF_NOT_TLS = 1 << 8,
-  RF_BSS = 1 << 7,
+  RF_NOT_ADDR_SET = 1 << 18,
+  RF_NOT_INTERP = 1 << 17,
+  RF_NOT_ALLOC = 1 << 16,
+  RF_WRITE = 1 << 15,
+  RF_EXEC_WRITE = 1 << 13,
+  RF_EXEC = 1 << 12,
+  RF_NON_TLS_BSS = 1 << 11,
+  RF_NON_TLS_BSS_RO = 1 << 10,
+  RF_NOT_TLS = 1 << 9,
+  RF_BSS = 1 << 8,
+  RF_NOTE = 1 << 7,
   RF_PPC_NOT_TOCBSS = 1 << 6,
   RF_PPC_OPD = 1 << 5,
   RF_PPC_TOCL = 1 << 4,
@@ -765,6 +766,12 @@
   if (IsNoBits)
     Rank |= RF_BSS;
 
+  // We create a NOTE segment for contiguous .note sections, so make
+  // them contigous if there are more than one .note section with the
+  // same attributes.
+  if (Sec->Type == SHT_NOTE)
+    Rank |= RF_NOTE;
+
   // Some architectures have additional ordering restrictions for sections
   // within the same PT_LOAD.
   if (Config->EMachine == EM_PPC64) {
@@ -790,6 +797,7 @@
     if (Name == ".branch_lt")
       Rank |= RF_PPC_BRANCH_LT;
   }
+
   if (Config->EMachine == EM_MIPS) {
     // All sections with SHF_MIPS_GPREL flag should be grouped together
     // because data in these sections is addressable with a gp relative address.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43858.136455.patch
Type: text/x-patch
Size: 2426 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180301/4e320eb8/attachment.bin>


More information about the llvm-commits mailing list