[yaml2obj][ELF] Add dummy .strtab section.
authorSean Silva <silvas@purdue.edu>
Tue, 18 Jun 2013 21:37:50 +0000 (21:37 +0000)
committerSean Silva <silvas@purdue.edu>
Tue, 18 Jun 2013 21:37:50 +0000 (21:37 +0000)
This will be needed later for holding symbol names, due to the libObject
issue mentioned in the commit message of r184161.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184242 91177308-0d34-0410-b5e6-96231b3b80d8

tools/yaml2obj/yaml2elf.cpp

index 3a4f5e045028148163709b1221b253eff11f7257..b83dd1d1a3549a6e51e72cff7c170b57c6fe43fc 100644 (file)
@@ -177,10 +177,10 @@ static int writeELF(raw_ostream &OS, const ELFYAML::Object &Doc) {
     zero(S.AddressAlign);
     Sections.insert(Sections.begin(), S);
   }
-  // "+ 1" for string table.
-  Header.e_shnum = Sections.size() + 1;
+  // "+ 2" for string table and section header string table.
+  Header.e_shnum = Sections.size() + 2;
   // Place section header string table last.
-  Header.e_shstrndx = Sections.size();
+  Header.e_shstrndx = Sections.size() + 1;
 
   SectionNameToIdxMap SN2I;
   for (unsigned i = 0, e = Sections.size(); i != e; ++i) {
@@ -230,6 +230,13 @@ static int writeELF(raw_ostream &OS, const ELFYAML::Object &Doc) {
     SHeaders.push_back(SHeader);
   }
 
+  // .strtab string table header. Currently emitted empty.
+  StringTableBuilder DotStrTab;
+  Elf_Shdr DotStrTabSHeader;
+  zero(DotStrTabSHeader);
+  DotStrTabSHeader.sh_name = SHStrTab.addString(StringRef(".strtab"));
+  createStringTableSectionHeader(DotStrTabSHeader, DotStrTab, CBA);
+
   // Section header string table header.
   Elf_Shdr SHStrTabSHeader;
   zero(SHStrTabSHeader);
@@ -237,6 +244,7 @@ static int writeELF(raw_ostream &OS, const ELFYAML::Object &Doc) {
 
   OS.write((const char *)&Header, sizeof(Header));
   writeVectorData(OS, SHeaders);
+  OS.write((const char *)&DotStrTabSHeader, sizeof(DotStrTabSHeader));
   OS.write((const char *)&SHStrTabSHeader, sizeof(SHStrTabSHeader));
   CBA.writeBlobToStream(OS);
   return 0;