diff options
author | Sean Silva <silvas@purdue.edu> | 2013-06-18 01:11:27 +0000 |
---|---|---|
committer | Sean Silva <silvas@purdue.edu> | 2013-06-18 01:11:27 +0000 |
commit | c60c86dcaee929840ac5ad16d1adffa20ba46494 (patch) | |
tree | 31f1a842952678b4ee5c30e8c487063d03b3820b /tools/yaml2obj | |
parent | 7dc89c1f3ab870e5f517aa201d98befd6249ed5f (diff) | |
download | llvm-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.cpp | 25 |
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); |