Index: ELF/SyntheticSections.cpp =================================================================== --- ELF/SyntheticSections.cpp +++ ELF/SyntheticSections.cpp @@ -990,6 +990,7 @@ void StringTableSection::writeTo(uint8_t *Buf) { for (StringRef S : Strings) { memcpy(Buf, S.data(), S.size()); + Buf[S.size()] = '\0'; Buf += S.size() + 1; } } Index: test/ELF/dynstr-no-rosegment.s =================================================================== --- test/ELF/dynstr-no-rosegment.s +++ test/ELF/dynstr-no-rosegment.s @@ -0,0 +1,12 @@ +# Verify that a .dynstr in the .text segment has null byte separators + +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o +# RUN: ld.lld %t.o -no-rosegment -o %t.so -shared +# RUN: llvm-objdump %t.so -s -j .dynstr | FileCheck %s + +# CHECK: 00666f6f 00 .foo. + +.globl foo +foo: + ret