[PATCH] D44923: [ELF] Disable ICF for synthetic sections

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 27 07:13:36 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL328624: [ELF] Disable ICF for synthetic sections (authored by anng, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D44923?vs=139914&id=139917#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D44923

Files:
  lld/trunk/ELF/ICF.cpp
  lld/trunk/test/ELF/icf-merged-sections.s


Index: lld/trunk/test/ELF/icf-merged-sections.s
===================================================================
--- lld/trunk/test/ELF/icf-merged-sections.s
+++ lld/trunk/test/ELF/icf-merged-sections.s
@@ -1,20 +1,28 @@
 # REQUIRES: x86
 
 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
-# RUN: ld.lld %t.o -o %t --icf=all --ignore-data-address-equality --print-icf-sections | FileCheck %s --check-prefix ICF
-# RUN: llvm-objdump -s -d -print-imm-hex %t | FileCheck %s
+# RUN: ld.lld %t.o -o %t --icf=all --ignore-data-address-equality --print-icf-sections | FileCheck -allow-empty --check-prefix=NOICF %s
+# RUN: llvm-readobj -s -section-data %t | FileCheck %s
 
-# ICF: selected section <internal>:(.rodata)
-# ICF-NEXT: removing identical section <internal>:(.rodata)
+# Check that merge synthetic sections are not merged by ICF.
 
-# CHECK: {{^}}.text:
-# CHECK-NEXT: movq 0x[[ADDR:[0-9a-f]+]], %rax
-# CHECK-NEXT: movq 0x[[ADDR]], %rax
-# CHECK: Contents of section .rodata:
-# CHECK-NEXT: 2a000000 00000000 67452301 10325476
+# NOICF-NOT: selected section <internal>:(.rodata)
 
-.section .rodata, "a"
-  .quad 42
+# CHECK:      Name: .rodata
+# CHECK-NEXT: Type: SHT_PROGBITS
+# CHECK-NEXT: Flags [
+# CHECK-NEXT:   SHF_ALLOC
+# CHECK-NEXT:   SHF_MERGE
+# CHECK-NEXT: ]
+# CHECK-NEXT: Address:
+# CHECK-NEXT: Offset:
+# CHECK-NEXT: Size: 16
+# CHECK-NEXT: Link:
+# CHECK-NEXT: Info:
+# CHECK-NEXT: AddressAlignment: 8
+# CHECK-NEXT: EntrySize: 0
+# CHECK-NEXT: SectionData (
+# CHECK-NEXT:   0000: 67452301 10325476 67452301 10325476
 
 .section .rodata.cst4,"aM", at progbits,4
 rodata4:
@@ -27,7 +35,3 @@
 rodata8:
   .long 0x01234567
   .long 0x76543210
-
-.section .text,"ax"
-  movq rodata4, %rax
-  movq rodata8, %rax
Index: lld/trunk/ELF/ICF.cpp
===================================================================
--- lld/trunk/ELF/ICF.cpp
+++ lld/trunk/ELF/ICF.cpp
@@ -77,6 +77,7 @@
 #include "Config.h"
 #include "SymbolTable.h"
 #include "Symbols.h"
+#include "SyntheticSections.h"
 #include "lld/Common/Threads.h"
 #include "llvm/ADT/Hashing.h"
 #include "llvm/BinaryFormat/ELF.h"
@@ -166,6 +167,12 @@
   if (!(S->Flags & SHF_EXECINSTR) && !Config->IgnoreDataAddressEquality)
     return false;
 
+  // Don't merge synthetic sections as their Data member is not valid and empty.
+  // The Data member needs to be valid for ICF as it is used by ICF to determine
+  // the equality of section contents.
+  if (isa<SyntheticSection>(S))
+    return false;
+
   // .init and .fini contains instructions that must be executed to
   // initialize and finalize the process. They cannot and should not
   // be merged.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44923.139917.patch
Type: text/x-patch
Size: 2652 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180327/f9425813/attachment.bin>


More information about the llvm-commits mailing list