[PATCH] D46786: COFF: Allow ICFing sections with different alignments.
Peter Collingbourne via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon May 14 11:40:45 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rLLD332273: COFF: Allow ICFing sections with different alignments. (authored by pcc, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D46786?vs=146444&id=146649#toc
Repository:
rLLD LLVM Linker
https://reviews.llvm.org/D46786
Files:
COFF/Chunks.cpp
COFF/ICF.cpp
test/COFF/icf-different-align.test
Index: test/COFF/icf-different-align.test
===================================================================
--- test/COFF/icf-different-align.test
+++ test/COFF/icf-different-align.test
@@ -2,9 +2,14 @@
# RUN: lld-link /entry:foo /out:%t.exe /subsystem:console /include:bar \
# RUN: /verbose %t.obj > %t.log 2>&1
# RUN: FileCheck %s < %t.log
+# RUN: llvm-objdump -s %t.exe | FileCheck --check-prefix=OBJDUMP %s
-# CHECK-NOT: Selected foo
-# CHECK-NOT: Removed bar
+# CHECK: Selected foo
+# CHECK: Removed bar
+
+# OBJDUMP: Contents of section .text:
+# OBJDUMP-NEXT: 140001000 00cccccc cccccccc cccccccc cccccccc
+# OBJDUMP-NEXT: 140001010 4883ec28 e8000000 004883c4 28c3
--- !COFF
header:
@@ -19,6 +24,10 @@
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_LNK_COMDAT, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
Alignment: 16
SectionData: 4883EC28E8000000004883C428C3
+ - Name: '.text'
+ Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+ Alignment: 1
+ SectionData: 00
symbols:
- Name: '.text$mn'
Value: 0
Index: COFF/ICF.cpp
===================================================================
--- COFF/ICF.cpp
+++ COFF/ICF.cpp
@@ -67,8 +67,8 @@
// Returns a hash value for S.
uint32_t ICF::getHash(SectionChunk *C) {
- return hash_combine(C->getOutputCharacteristics(), C->SectionName, C->Relocs.size(),
- C->Alignment, uint32_t(C->Header->SizeOfRawData),
+ return hash_combine(C->getOutputCharacteristics(), C->SectionName,
+ C->Relocs.size(), uint32_t(C->Header->SizeOfRawData),
C->Checksum, C->getContents());
}
@@ -168,7 +168,7 @@
// Compare section attributes and contents.
return A->getOutputCharacteristics() == B->getOutputCharacteristics() &&
- A->SectionName == B->SectionName && A->Alignment == B->Alignment &&
+ A->SectionName == B->SectionName &&
A->Header->SizeOfRawData == B->Header->SizeOfRawData &&
A->Checksum == B->Checksum && A->getContents() == B->getContents() &&
assocEquals(A, B);
Index: COFF/Chunks.cpp
===================================================================
--- COFF/Chunks.cpp
+++ COFF/Chunks.cpp
@@ -438,6 +438,7 @@
}
void SectionChunk::replace(SectionChunk *Other) {
+ Alignment = std::max(Alignment, Other->Alignment);
Other->Repl = Repl;
Other->Live = false;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46786.146649.patch
Type: text/x-patch
Size: 2485 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180514/89ede38e/attachment.bin>
More information about the llvm-commits
mailing list