[PATCH] D44923: [ELF] Disable ICF for synthetic sections
Andrew Ng via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 27 06:04:20 PDT 2018
andrewng created this revision.
andrewng added reviewers: ruiu, espindola.
Herald added subscribers: arichardson, emaste.
Do not include synthetic sections in ICF.
Fixes bug PR36910.
Alternative to https://reviews.llvm.org/D44898.
https://reviews.llvm.org/D44923
Files:
ELF/ICF.cpp
test/ELF/icf-merged-sections.s
Index: test/ELF/icf-merged-sections.s
===================================================================
--- test/ELF/icf-merged-sections.s
+++ 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: ELF/ICF.cpp
===================================================================
--- ELF/ICF.cpp
+++ 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"
@@ -161,9 +162,10 @@
// Returns true if section S is subject of ICF.
static bool isEligible(InputSection *S) {
- // Don't merge read only data sections unless
- // --ignore-data-address-equality was passed.
- if (!(S->Flags & SHF_EXECINSTR) && !Config->IgnoreDataAddressEquality)
+ // Don't merge read only data sections unless --ignore-data-address-equality
+ // was passed. Don't merge synthetic sections.
+ if ((!(S->Flags & SHF_EXECINSTR) && !Config->IgnoreDataAddressEquality) ||
+ dyn_cast<SyntheticSection>(S))
return false;
// .init and .fini contains instructions that must be executed to
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44923.139906.patch
Type: text/x-patch
Size: 2685 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180327/0581d13e/attachment.bin>
More information about the llvm-commits
mailing list