summaryrefslogtreecommitdiff
path: root/tools/yaml2obj
diff options
context:
space:
mode:
authorSean Silva <silvas@purdue.edu>2013-06-18 01:11:27 +0000
committerSean Silva <silvas@purdue.edu>2013-06-18 01:11:27 +0000
commitc60c86dcaee929840ac5ad16d1adffa20ba46494 (patch)
tree31f1a842952678b4ee5c30e8c487063d03b3820b /tools/yaml2obj
parent7dc89c1f3ab870e5f517aa201d98befd6249ed5f (diff)
downloadllvm-c60c86dcaee929840ac5ad16d1adffa20ba46494.tar.gz
llvm-c60c86dcaee929840ac5ad16d1adffa20ba46494.tar.bz2
llvm-c60c86dcaee929840ac5ad16d1adffa20ba46494.tar.xz
[yaml2obj][ELF] Factor out string table section creation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184162 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/yaml2obj')
-rw-r--r--tools/yaml2obj/yaml2elf.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/tools/yaml2obj/yaml2elf.cpp b/tools/yaml2obj/yaml2elf.cpp
index 2ae6e152de..3a4f5e0450 100644
--- a/tools/yaml2obj/yaml2elf.cpp
+++ b/tools/yaml2obj/yaml2elf.cpp
@@ -120,6 +120,19 @@ static void zero(T &Obj) {
memset(&Obj, 0, sizeof(Obj));
}
+/// \brief Create a string table in `SHeader`, which we assume is already
+/// zero'd.
+template <class Elf_Shdr>
+static void createStringTableSectionHeader(Elf_Shdr &SHeader,
+ StringTableBuilder &STB,
+ ContiguousBlobAccumulator &CBA) {
+ SHeader.sh_type = ELF::SHT_STRTAB;
+ SHeader.sh_offset = CBA.currentOffset();
+ SHeader.sh_size = STB.size();
+ STB.writeToStream(CBA.getOS());
+ SHeader.sh_addralign = 1;
+}
+
template <class ELFT>
static int writeELF(raw_ostream &OS, const ELFYAML::Object &Doc) {
using namespace llvm::ELF;
@@ -220,17 +233,7 @@ static int writeELF(raw_ostream &OS, const ELFYAML::Object &Doc) {
// Section header string table header.
Elf_Shdr SHStrTabSHeader;
zero(SHStrTabSHeader);
- SHStrTabSHeader.sh_name = 0;
- SHStrTabSHeader.sh_type = SHT_STRTAB;
- SHStrTabSHeader.sh_flags = 0;
- SHStrTabSHeader.sh_addr = 0;
- SHStrTabSHeader.sh_offset = CBA.currentOffset();
- SHStrTabSHeader.sh_size = SHStrTab.size();
- SHStrTab.writeToStream(CBA.getOS());
- SHStrTabSHeader.sh_link = 0;
- SHStrTabSHeader.sh_info = 0;
- SHStrTabSHeader.sh_addralign = 1;
- SHStrTabSHeader.sh_entsize = 0;
+ createStringTableSectionHeader(SHStrTabSHeader, SHStrTab, CBA);
OS.write((const char *)&Header, sizeof(Header));
writeVectorData(OS, SHeaders);