diff options
author | Sean Silva <silvas@purdue.edu> | 2013-06-13 22:19:48 +0000 |
---|---|---|
committer | Sean Silva <silvas@purdue.edu> | 2013-06-13 22:19:48 +0000 |
commit | 274264ce2ba93d26702f7ebfe6aea121df44113f (patch) | |
tree | 44a76d6f75e02f3ac8013c109ccb9524b631bc4e /include | |
parent | 26d36ab0ccaad16044f40dc44650ede2d78adf4f (diff) | |
download | llvm-274264ce2ba93d26702f7ebfe6aea121df44113f.tar.gz llvm-274264ce2ba93d26702f7ebfe6aea121df44113f.tar.bz2 llvm-274264ce2ba93d26702f7ebfe6aea121df44113f.tar.xz |
[yaml2obj] Initial ELF section support.
The current functionality is extremely basic and a bit rough around the
edges, but it will flesh out in future commits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183953 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Object/ELFYAML.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/include/llvm/Object/ELFYAML.h b/include/llvm/Object/ELFYAML.h index 029a8ab2e5..dd9625e99e 100644 --- a/include/llvm/Object/ELFYAML.h +++ b/include/llvm/Object/ELFYAML.h @@ -36,6 +36,9 @@ LLVM_YAML_STRONG_TYPEDEF(uint16_t, ELF_ET) LLVM_YAML_STRONG_TYPEDEF(uint32_t, ELF_EM) LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_ELFCLASS) LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_ELFDATA) +LLVM_YAML_STRONG_TYPEDEF(uint32_t, ELF_SHT) +// Just use 64, since it can hold 32-bit values too. +LLVM_YAML_STRONG_TYPEDEF(uint64_t, ELF_SHF) // For now, hardcode 64 bits everywhere that 32 or 64 would be needed // since 64-bit can hold 32-bit values too. @@ -46,13 +49,21 @@ struct FileHeader { ELF_EM Machine; llvm::yaml::Hex64 Entry; }; +struct Section { + StringRef Name; + ELF_SHT Type; + ELF_SHF Flags; +}; struct Object { FileHeader Header; + std::vector<Section> Sections; }; } // end namespace ELFYAML } // end namespace llvm +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::Section) + namespace llvm { namespace yaml { @@ -77,11 +88,26 @@ struct ScalarEnumerationTraits<ELFYAML::ELF_ELFDATA> { }; template <> +struct ScalarEnumerationTraits<ELFYAML::ELF_SHT> { + static void enumeration(IO &IO, ELFYAML::ELF_SHT &Value); +}; + +template <> +struct ScalarBitSetTraits<ELFYAML::ELF_SHF> { + static void bitset(IO &IO, ELFYAML::ELF_SHF &Value); +}; + +template <> struct MappingTraits<ELFYAML::FileHeader> { static void mapping(IO &IO, ELFYAML::FileHeader &FileHdr); }; template <> +struct MappingTraits<ELFYAML::Section> { + static void mapping(IO &IO, ELFYAML::Section &Section); +}; + +template <> struct MappingTraits<ELFYAML::Object> { static void mapping(IO &IO, ELFYAML::Object &Object); }; |