Index: lld/trunk/ELF/SyntheticSections.cpp =================================================================== --- lld/trunk/ELF/SyntheticSections.cpp +++ lld/trunk/ELF/SyntheticSections.cpp @@ -3016,7 +3016,6 @@ } StringRef OutsecName = getOutputSectionName(MS); - uint32_t Alignment = std::max(MS->Alignment, MS->Entsize); auto I = llvm::find_if(MergeSections, [=](MergeSyntheticSection *Sec) { // While we could create a single synthetic section for two different @@ -3028,11 +3027,11 @@ // Using Entsize in here also allows us to propagate it to the synthetic // section. return Sec->Name == OutsecName && Sec->Flags == MS->Flags && - Sec->Entsize == MS->Entsize && Sec->Alignment == Alignment; + Sec->Entsize == MS->Entsize && Sec->Alignment == MS->Alignment; }); if (I == MergeSections.end()) { MergeSyntheticSection *Syn = - createMergeSynthetic(OutsecName, MS->Type, MS->Flags, Alignment); + createMergeSynthetic(OutsecName, MS->Type, MS->Flags, MS->Alignment); MergeSections.push_back(Syn); I = std::prev(MergeSections.end()); S = Syn; 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 @@ -19,7 +19,7 @@ # CHECK-NEXT: Size: 16 # CHECK-NEXT: Link: # CHECK-NEXT: Info: -# CHECK-NEXT: AddressAlignment: 8 +# CHECK-NEXT: AddressAlignment: 1 # CHECK-NEXT: EntrySize: 0 # CHECK-NEXT: SectionData ( # CHECK-NEXT: 0000: 67452301 10325476 67452301 10325476 Index: lld/trunk/test/ELF/merge-entsize.s =================================================================== --- lld/trunk/test/ELF/merge-entsize.s +++ lld/trunk/test/ELF/merge-entsize.s @@ -4,10 +4,15 @@ // RUN: llvm-readobj -s %t | FileCheck %s .section .rodata.1,"aM",@progbits,1 + .p2align 2 .byte 0x42 - .section .rodata.2,"aM",@progbits,2 +// sh_addralign = 4 while sh_entsize = 3. +// sh_entsize is not necessarily a power of 2 and it can be unrelated to sh_addralign. + .section .rodata.2,"aM",@progbits,3 + .p2align 2 .short 0x42 + .byte 0 // Since the output section has both .rodata.1 and .rodata.2, it // contains elements of different sizes and we use an entsize of 0. @@ -23,5 +28,5 @@ // CHECK-NEXT: Size: // CHECK-NEXT: Link: // CHECK-NEXT: Info: -// CHECK-NEXT: AddressAlignment: +// CHECK-NEXT: AddressAlignment: 4 // CHECK-NEXT: EntrySize: 0 Index: lld/trunk/test/ELF/merge-gc-piece.s =================================================================== --- lld/trunk/test/ELF/merge-gc-piece.s +++ lld/trunk/test/ELF/merge-gc-piece.s @@ -10,7 +10,7 @@ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: SHF_MERGE # CHECK-NEXT: ] -# CHECK-NEXT: Address: 0x200 +# CHECK-NEXT: Address: 0x1FD # CHECK: Name: .bar # CHECK-NEXT: Type: SHT_PROGBITS @@ -24,7 +24,7 @@ # CHECK-NEXT: AddressAlignment: # CHECK-NEXT: EntrySize: # CHECK-NEXT: SectionData ( -# CHECK-NEXT: 0000: 01020000 00000000 02020000 00000000 +# CHECK-NEXT: 0000: FE010000 00000000 FF010000 00000000 # CHECK-NEXT: ) .section .foo,"aM",@progbits,8 Index: lld/trunk/test/ELF/merge-reloc-O0.s =================================================================== --- lld/trunk/test/ELF/merge-reloc-O0.s +++ lld/trunk/test/ELF/merge-reloc-O0.s @@ -16,7 +16,7 @@ # CHECK-NEXT: Size: 16 # CHECK-NEXT: Link: # CHECK-NEXT: Info: -# CHECK-NEXT: AddressAlignment: 8 +# CHECK-NEXT: AddressAlignment: 1 # CHECK-NEXT: EntrySize: 8 # CHECK-NEXT: SectionData ( # CHECK-NEXT: 0000: 41000000 00000000 42000000 00000000 @@ -33,7 +33,7 @@ # CHECK-NEXT: Size: 8 # CHECK-NEXT: Link: # CHECK-NEXT: Info: -# CHECK-NEXT: AddressAlignment: 4 +# CHECK-NEXT: AddressAlignment: 1 # CHECK-NEXT: EntrySize: 4 # CHECK-NEXT: SectionData ( # CHECK-NEXT: 0000: 41000000 42000000 Index: lld/trunk/test/ELF/merge-sym.s =================================================================== --- lld/trunk/test/ELF/merge-sym.s +++ lld/trunk/test/ELF/merge-sym.s @@ -15,7 +15,7 @@ // CHECK-NEXT: SHF_ALLOC // CHECK-NEXT: SHF_MERGE // CHECK-NEXT: ] -// CHECK-NEXT: Address: 0x210 +// CHECK-NEXT: Address: 0x20D // CHECK: Name: foo -// CHECK-NEXT: Value: 0x212 +// CHECK-NEXT: Value: 0x20F