forked from OSchip/llvm-project
[ELF] Explicitly write null bytes in string tables
Following r309829, if a string table appears in an executable segment, the strings will not be null terminated. This is a problem, for example, for the .dynstr section when using -no-rosegment. The strings end up being terminated with 0xcc because prior to this patch, LLD did not explicitly write the null terminators. This change fixes that by always writing the null terminators. Reviewers: rafael Differential Revision: https://reviews.llvm.org/D36267 llvm-svn: 310042
This commit is contained in:
parent
9c0f79663e
commit
a5bc09a86f
|
@ -990,6 +990,7 @@ unsigned StringTableSection::addString(StringRef S, bool HashIt) {
|
|||
void StringTableSection::writeTo(uint8_t *Buf) {
|
||||
for (StringRef S : Strings) {
|
||||
memcpy(Buf, S.data(), S.size());
|
||||
Buf[S.size()] = '\0';
|
||||
Buf += S.size() + 1;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue