[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