[llvm] r184263 - [yaml2obj][ELF] Support st_info through `Binding` and `Type` YAML keys.

Sean Silva silvas at purdue.edu
Tue Jun 18 17:11:59 PDT 2013


Author: silvas
Date: Tue Jun 18 19:11:59 2013
New Revision: 184263

URL: http://llvm.org/viewvc/llvm-project?rev=184263&view=rev
Log:
[yaml2obj][ELF] Support st_info through `Binding` and `Type` YAML keys.

Modified:
    llvm/trunk/include/llvm/Object/ELFYAML.h
    llvm/trunk/lib/Object/ELFYAML.cpp
    llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml
    llvm/trunk/tools/yaml2obj/yaml2elf.cpp

Modified: llvm/trunk/include/llvm/Object/ELFYAML.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFYAML.h?rev=184263&r1=184262&r2=184263&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELFYAML.h (original)
+++ llvm/trunk/include/llvm/Object/ELFYAML.h Tue Jun 18 19:11:59 2013
@@ -39,6 +39,8 @@ LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_EL
 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)
+LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STB)
+LLVM_YAML_STRONG_TYPEDEF(uint8_t, ELF_STT)
 
 // For now, hardcode 64 bits everywhere that 32 or 64 would be needed
 // since 64-bit can hold 32-bit values too.
@@ -51,6 +53,8 @@ struct FileHeader {
 };
 struct Symbol {
   StringRef Name;
+  ELF_STB Binding;
+  ELF_STT Type;
 };
 struct Section {
   StringRef Name;
@@ -108,6 +112,16 @@ struct ScalarBitSetTraits<ELFYAML::ELF_S
 };
 
 template <>
+struct ScalarEnumerationTraits<ELFYAML::ELF_STB> {
+  static void enumeration(IO &IO, ELFYAML::ELF_STB &Value);
+};
+
+template <>
+struct ScalarEnumerationTraits<ELFYAML::ELF_STT> {
+  static void enumeration(IO &IO, ELFYAML::ELF_STT &Value);
+};
+
+template <>
 struct MappingTraits<ELFYAML::FileHeader> {
   static void mapping(IO &IO, ELFYAML::FileHeader &FileHdr);
 };

Modified: llvm/trunk/lib/Object/ELFYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFYAML.cpp?rev=184263&r1=184262&r2=184263&view=diff
==============================================================================
--- llvm/trunk/lib/Object/ELFYAML.cpp (original)
+++ llvm/trunk/lib/Object/ELFYAML.cpp Tue Jun 18 19:11:59 2013
@@ -251,6 +251,29 @@ void ScalarBitSetTraits<ELFYAML::ELF_SHF
 #undef BCase
 }
 
+void ScalarEnumerationTraits<ELFYAML::ELF_STB>::enumeration(
+    IO &IO, ELFYAML::ELF_STB &Value) {
+#define ECase(X) IO.enumCase(Value, #X, ELF::X);
+  ECase(STB_LOCAL)
+  ECase(STB_GLOBAL)
+  ECase(STB_WEAK)
+#undef ECase
+}
+
+void ScalarEnumerationTraits<ELFYAML::ELF_STT>::enumeration(
+    IO &IO, ELFYAML::ELF_STT &Value) {
+#define ECase(X) IO.enumCase(Value, #X, ELF::X);
+  ECase(STT_NOTYPE)
+  ECase(STT_OBJECT)
+  ECase(STT_FUNC)
+  ECase(STT_SECTION)
+  ECase(STT_FILE)
+  ECase(STT_COMMON)
+  ECase(STT_TLS)
+  ECase(STT_GNU_IFUNC)
+#undef ECase
+}
+
 void MappingTraits<ELFYAML::FileHeader>::mapping(IO &IO,
                                                  ELFYAML::FileHeader &FileHdr) {
   IO.mapRequired("Class", FileHdr.Class);
@@ -262,6 +285,8 @@ void MappingTraits<ELFYAML::FileHeader>:
 
 void MappingTraits<ELFYAML::Symbol>::mapping(IO &IO, ELFYAML::Symbol &Symbol) {
   IO.mapOptional("Name", Symbol.Name, StringRef());
+  IO.mapOptional("Binding", Symbol.Binding, ELFYAML::ELF_STB(0));
+  IO.mapOptional("Type", Symbol.Type, ELFYAML::ELF_STT(0));
 }
 
 void MappingTraits<ELFYAML::Section>::mapping(IO &IO,

Modified: llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml?rev=184263&r1=184262&r2=184263&view=diff
==============================================================================
--- llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml (original)
+++ llvm/trunk/test/Object/yaml2obj-elf-symbol-basic.yaml Tue Jun 18 19:11:59 2013
@@ -13,9 +13,13 @@ Sections:
     Type: SHT_SYMTAB
     Symbols:
     - Name: main
+      Binding: STB_GLOBAL
+      Type: STT_FUNC
 
 # CHECK:      Symbols [
 # CHECK-NEXT:   Symbol {
 # CHECK-NEXT:     Name:  (0)
 # CHECK:        Symbol {
 # CHECK-NEXT:     Name: main
+# CHECK:          Binding: Global
+# CHECK-NEXT:     Type: Function

Modified: llvm/trunk/tools/yaml2obj/yaml2elf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=184263&r1=184262&r2=184263&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2elf.cpp (original)
+++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp Tue Jun 18 19:11:59 2013
@@ -166,6 +166,7 @@ static void handleSymtabSectionHeader(
     zero(Symbol);
     if (!Sym.Name.empty())
       Symbol.st_name = StrTab.addString(Sym.Name);
+    Symbol.setBindingAndType(Sym.Binding, Sym.Type);
     Syms.push_back(Symbol);
   }
 





More information about the llvm-commits mailing list