[PATCH] D61296: [ELF] Place SHT_NOTE sections with the same alignment into one PT_NOTE

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu May 2 17:34:13 PDT 2019


MaskRay updated this revision to Diff 197899.
MaskRay added a comment.

Update description


Repository:
  rLLD LLVM Linker

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

https://reviews.llvm.org/D61296

Files:
  ELF/Writer.cpp
  test/ELF/build-id.s
  test/ELF/note-alignment.s


Index: test/ELF/note-alignment.s
===================================================================
--- /dev/null
+++ test/ELF/note-alignment.s
@@ -0,0 +1,36 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
+# RUN: ld.lld %t.o -o %t
+# RUN: llvm-readelf -l %t | FileCheck %s
+
+# Check that we don't mix 4-byte and 8-byte aligned notes in one PT_LOAD.
+# The possible 4-byte padding before the 8-byte align note may make consumers
+# fail to parse it.
+
+# CHECK: NOTE {{0x[0-9a-f]+}} {{0x[0-9a-f]+}} {{0x[0-9a-f]+}} 0x000004 0x000004 R   0x4
+# CHECK: NOTE {{0x[0-9a-f]+}} {{0x[0-9a-f]+}} {{0x[0-9a-f]+}} 0x000010 0x000010 R   0x8
+# CHECK: NOTE {{0x[0-9a-f]+}} {{0x[0-9a-f]+}} {{0x[0-9a-f]+}} 0x000008 0x000008 R   0x4
+
+# CHECK:      03     .note.a
+# CHECK-NEXT: 04     .note.b .note.c
+# CHECK-NEXT: 05     .note.d .note.e
+
+.section .note.a, "a", @note
+.align 4
+.long 0
+
+.section .note.b, "a", @note
+.align 8
+.quad 0
+
+.section .note.c, "a", @note
+.align 8
+.quad 0
+
+.section .note.d, "a", @note
+.align 4
+.long 0
+
+.section .note.e, "a", @note
+.align 4
+.long 0
Index: test/ELF/build-id.s
===================================================================
--- test/ELF/build-id.s
+++ test/ELF/build-id.s
@@ -65,15 +65,15 @@
 # DEFAULT:      Contents of section .note.test:
 # DEFAULT:      Contents of section .note.gnu.build-id:
 # DEFAULT-NEXT: 04000000 08000000 03000000 474e5500  ............GNU.
-# DEFAULT-NEXT: 894c04e8 fbf5556b
+# DEFAULT-NEXT: 95849665 2621c734
 
 # MD5:      Contents of section .note.gnu.build-id:
 # MD5-NEXT: 04000000 10000000 03000000 474e5500  ............GNU.
-# MD5-NEXT: 6a51bbd7 9e8ee3f9 2e02d213 711cfec9
+# MD5-NEXT: 1882c01f 71698eed 229b3994 eb554c80
 
 # SHA1:      Contents of section .note.gnu.build-id:
 # SHA1-NEXT: 04000000 14000000 03000000 474e5500  ............GNU.
-# SHA1-NEXT: 9a8618b1 d6fd0e5c eda73dd8 76de5596
+# SHA1-NEXT: 96820adf d90d5470 0a0c32ff a88c4017
 
 # UUID:      Contents of section .note.gnu.build-id:
 # UUID-NEXT: 04000000 10000000 03000000 474e5500  ............GNU.
Index: ELF/Writer.cpp
===================================================================
--- ELF/Writer.cpp
+++ ELF/Writer.cpp
@@ -1999,11 +1999,12 @@
   if (Config->ZWxneeded)
     AddHdr(PT_OPENBSD_WXNEEDED, PF_X);
 
-  // Create one PT_NOTE per a group of contiguous .note sections.
+  // Create one PT_NOTE per a group of contiguous SHT_NOTE sections with the
+  // same alignment.
   PhdrEntry *Note = nullptr;
   for (OutputSection *Sec : OutputSections) {
     if (Sec->Type == SHT_NOTE && (Sec->Flags & SHF_ALLOC)) {
-      if (!Note || Sec->LMAExpr)
+      if (!Note || Sec->LMAExpr || Note->LastSec->Alignment != Sec->Alignment)
         Note = AddHdr(PT_NOTE, PF_R);
       Note->add(Sec);
     } else {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61296.197899.patch
Type: text/x-patch
Size: 2806 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190503/2ad28cc6/attachment.bin>


More information about the llvm-commits mailing list