summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSean Silva <silvas@purdue.edu>2013-06-13 22:19:48 +0000
committerSean Silva <silvas@purdue.edu>2013-06-13 22:19:48 +0000
commit274264ce2ba93d26702f7ebfe6aea121df44113f (patch)
tree44a76d6f75e02f3ac8013c109ccb9524b631bc4e /include
parent26d36ab0ccaad16044f40dc44650ede2d78adf4f (diff)
downloadllvm-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.h26
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);
};