[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