Index: lld/trunk/ELF/SyntheticSections.cpp =================================================================== --- lld/trunk/ELF/SyntheticSections.cpp +++ lld/trunk/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: lld/trunk/test/ELF/dynstr-no-rosegment.s =================================================================== --- lld/trunk/test/ELF/dynstr-no-rosegment.s +++ lld/trunk/test/ELF/dynstr-no-rosegment.s @@ -0,0 +1,12 @@ +# Verify that a .dynstr in the .text segment has null byte terminators + +# 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