mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 15:13:49 -04:00
[llvm-objcopy] - Fix a st_name of the first symbol table entry.
Spec says about the first symbol table entry that index 0 both designates the first entry in the table and serves as the undefined symbol index. It should have zero value. Hence the first symbol table entry has no name. And so has to have a st_name == 0. (http://refspecs.linuxbase.org/elf/gabi4+/ch4.symtab.html) Currently, we do not emit zero value for the first symbol table entry. That happens because we add empty strings to the string builder, which for each such case adds a zero byte: (https://github.com/llvm-mirror/llvm/blob/master/lib/MC/StringTableBuilder.cpp#L185) After the string optimization performed it might return non zero indexes for the empty string requested. The patch fixes this issue for the case above and other sections with no names. Differential revision: https://reviews.llvm.org/D59496 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356739 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -159,6 +159,13 @@ void StringTableBuilder::finalizeStringTable(bool Optimize) {
|
||||
|
||||
if (K == MachO)
|
||||
Size = alignTo(Size, 4); // Pad to multiple of 4.
|
||||
|
||||
// The first byte in an ELF string table must be null, according to the ELF
|
||||
// specification. In 'initSize()' we reserved the first byte to hold null for
|
||||
// this purpose and here we actually add the string to allow 'getOffset()' to
|
||||
// be called on an empty string.
|
||||
if (K == ELF)
|
||||
StringIndexMap[CachedHashStringRef("")] = 0;
|
||||
}
|
||||
|
||||
void StringTableBuilder::clear() {
|
||||
|
||||
Reference in New Issue
Block a user