mirror of
https://github.com/RPCSX/llvm.git
synced 2025-04-02 16:21:36 +00:00
[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
This commit is contained in:
parent
7dc89c1f3a
commit
c60c86dcae
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user