forked from OSchip/llvm-project
COFF: Allow ICFing sections with different alignments.
The combined section gets the maximum alignment of all sections. Differential Revision: https://reviews.llvm.org/D46786 llvm-svn: 332273
This commit is contained in:
parent
1b64a12654
commit
62f7af712c
|
@ -438,6 +438,7 @@ ArrayRef<uint8_t> SectionChunk::getContents() const {
|
|||
}
|
||||
|
||||
void SectionChunk::replace(SectionChunk *Other) {
|
||||
Alignment = std::max(Alignment, Other->Alignment);
|
||||
Other->Repl = Repl;
|
||||
Other->Live = false;
|
||||
}
|
||||
|
|
|
@ -67,8 +67,8 @@ private:
|
|||
|
||||
// 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 @@ bool ICF::equalsConstant(const SectionChunk *A, const SectionChunk *B) {
|
|||
|
||||
// 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);
|
||||
|
|
|
@ -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 @@ sections:
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue