Index: ELF/SyntheticSections.cpp =================================================================== --- ELF/SyntheticSections.cpp +++ ELF/SyntheticSections.cpp @@ -2514,8 +2514,13 @@ uint32_t Alignment = std::max(MS->Alignment, MS->Entsize); auto I = llvm::find_if(MergeSections, [=](MergeSyntheticSection *Sec) { + // We could ignore Entsize in here: We would create a single Syncthetic + // section for two different values of Entsize. That would work, but no + // piece from one could be equal to a piece from the other. + // Using Entsize in here also allows us to propagate it to the synthetic + // section. return Sec->Name == OutsecName && Sec->Flags == MS->Flags && - Sec->Alignment == Alignment; + Sec->Entsize == MS->Entsize && Sec->Alignment == Alignment; }); if (I == MergeSections.end()) { MergeSyntheticSection *Syn = @@ -2523,6 +2528,7 @@ MergeSections.push_back(Syn); I = std::prev(MergeSections.end()); S = Syn; + Syn->Entsize = MS->Entsize; } else { S = nullptr; } Index: test/ELF/basic-aarch64.s =================================================================== --- test/ELF/basic-aarch64.s +++ test/ELF/basic-aarch64.s @@ -81,7 +81,7 @@ # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 1 -# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: EntrySize: 1 # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 3 Index: test/ELF/basic-mips.s =================================================================== --- test/ELF/basic-mips.s +++ test/ELF/basic-mips.s @@ -164,7 +164,7 @@ # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 1 -# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: EntrySize: 1 # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 8 Index: test/ELF/basic-ppc.s =================================================================== --- test/ELF/basic-ppc.s +++ test/ELF/basic-ppc.s @@ -163,7 +163,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.| // CHECK-NEXT: ) Index: test/ELF/basic-sparcv9.s =================================================================== --- test/ELF/basic-sparcv9.s +++ test/ELF/basic-sparcv9.s @@ -81,7 +81,7 @@ # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 1 -# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: EntrySize: 1 # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 3 Index: test/ELF/basic.s =================================================================== --- test/ELF/basic.s +++ test/ELF/basic.s @@ -83,7 +83,7 @@ # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 1 -# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: EntrySize: 1 # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 3 Index: test/ELF/basic32.s =================================================================== --- test/ELF/basic32.s +++ test/ELF/basic32.s @@ -80,7 +80,7 @@ # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 1 -# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: EntrySize: 1 # CHECK-NEXT: } # CHECK-NEXT: Section { # CHECK-NEXT: Index: 3 Index: test/ELF/basic64be.s =================================================================== --- test/ELF/basic64be.s +++ test/ELF/basic64be.s @@ -175,7 +175,7 @@ # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 1 -# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: EntrySize: 1 # CHECK-NEXT: SectionData ( # CHECK-NEXT: 0000: 4C4C4420 312E3000 |LLD 1.0.| # CHECK-NEXT: ) Index: test/ELF/build-id.s =================================================================== --- test/ELF/build-id.s +++ test/ELF/build-id.s @@ -63,15 +63,15 @@ # DEFAULT: Contents of section .note.test: # DEFAULT: Contents of section .note.gnu.build-id: # DEFAULT-NEXT: 04000000 08000000 03000000 474e5500 ............GNU. -# DEFAULT-NEXT: 1950bcad 6ffba153 +# DEFAULT-NEXT: 894c04e8 fbf5556b # MD5: Contents of section .note.gnu.build-id: # MD5-NEXT: 04000000 10000000 03000000 474e5500 ............GNU. -# MD5-NEXT: 6560b957 58afb40a 70f61d5a 7d76104e +# MD5-NEXT: 6a51bbd7 9e8ee3f9 2e02d213 711cfec9 # SHA1: Contents of section .note.gnu.build-id: # SHA1-NEXT: 04000000 14000000 03000000 474e5500 ............GNU. -# SHA1-NEXT: c41b2962 9fd0d863 0a35299a 746a626f +# SHA1-NEXT: 9a8618b1 d6fd0e5c eda73dd8 76de5596 # UUID: Contents of section .note.gnu.build-id: # UUID-NEXT: 04000000 10000000 03000000 474e5500 ............GNU. Index: test/ELF/compressed-debug-input.s =================================================================== --- test/ELF/compressed-debug-input.s +++ test/ELF/compressed-debug-input.s @@ -59,7 +59,7 @@ # DATA-NEXT: Link: 0 # DATA-NEXT: Info: 0 # DATA-NEXT: AddressAlignment: 1 -# DATA-NEXT: EntrySize: 0 +# DATA-NEXT: EntrySize: 1 # DATA-NEXT: SectionData ( # DATA-NEXT: 0000: 6C6F6E67 20756E73 69676E65 6420696E |long unsigned in| # DATA-NEXT: 0010: 7400756E 7369676E 65642063 68617200 |t.unsigned char.| Index: test/ELF/gc-merge-local-sym.s =================================================================== --- test/ELF/gc-merge-local-sym.s +++ test/ELF/gc-merge-local-sym.s @@ -15,7 +15,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 61626300 |abc.| // CHECK-NEXT: ) Index: test/ELF/gc-sections-merge-addend.s =================================================================== --- test/ELF/gc-sections-merge-addend.s +++ test/ELF/gc-sections-merge-addend.s @@ -16,7 +16,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 62617200 |bar.| // CHECK-NEXT: ) Index: test/ELF/gc-sections-merge-implicit-addend.s =================================================================== --- test/ELF/gc-sections-merge-implicit-addend.s +++ test/ELF/gc-sections-merge-implicit-addend.s @@ -16,7 +16,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 62617200 |bar.| // CHECK-NEXT: ) Index: test/ELF/gc-sections-merge.s =================================================================== --- test/ELF/gc-sections-merge.s +++ test/ELF/gc-sections-merge.s @@ -18,7 +18,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 666F6F00 62617200 |foo.bar.| // CHECK-NEXT: ) @@ -36,7 +36,7 @@ // GC-NEXT: Link: 0 // GC-NEXT: Info: 0 // GC-NEXT: AddressAlignment: 1 -// GC-NEXT: EntrySize: 0 +// GC-NEXT: EntrySize: 1 // GC-NEXT: SectionData ( // GC-NEXT: 0000: 666F6F00 |foo.| // GC-NEXT: ) Index: test/ELF/linkerscript/merge-sections.s =================================================================== --- test/ELF/linkerscript/merge-sections.s +++ test/ELF/linkerscript/merge-sections.s @@ -21,7 +21,7 @@ # CHECK-NEXT: Link: 0 # CHECK-NEXT: Info: 0 # CHECK-NEXT: AddressAlignment: 2 -# CHECK-NEXT: EntrySize: 0 +# CHECK-NEXT: EntrySize: 2 # CHECK-NEXT: } # CHECK: Name: begin Index: test/ELF/merge-string.s =================================================================== --- test/ELF/merge-string.s +++ test/ELF/merge-string.s @@ -34,7 +34,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 1 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 1 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 61626300 |abc.| // CHECK-NEXT: ) @@ -52,7 +52,7 @@ // NOTAIL-NEXT: Link: 0 // NOTAIL-NEXT: Info: 0 // NOTAIL-NEXT: AddressAlignment: 1 -// NOTAIL-NEXT: EntrySize: 0 +// NOTAIL-NEXT: EntrySize: 1 // NOTAIL-NEXT: SectionData ( // NOTAIL-NEXT: 0000: 62630061 626300 |bc.abc.| // NOTAIL-NEXT: ) @@ -88,7 +88,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 2 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 2 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 14000000 |....| // CHECK-NEXT: ) Index: test/ELF/merge.s =================================================================== --- test/ELF/merge.s +++ test/ELF/merge.s @@ -29,7 +29,7 @@ // CHECK-NEXT: Link: 0 // CHECK-NEXT: Info: 0 // CHECK-NEXT: AddressAlignment: 4 -// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: EntrySize: 4 // CHECK-NEXT: SectionData ( // CHECK-NEXT: 0000: 10000000 42000000 // CHECK-NEXT: )