Move BinaryRef to a new include/llvm/Object/YAML.h file.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 5 Jun 2013 02:32:26 +0000 (02:32 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 5 Jun 2013 02:32:26 +0000 (02:32 +0000)
It will be used for ELF dumping too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183287 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/COFFYAML.h
include/llvm/Object/YAML.h [new file with mode: 0644]
lib/Object/CMakeLists.txt
lib/Object/COFFYAML.cpp
lib/Object/YAML.cpp [new file with mode: 0644]
tools/obj2yaml/coff2yaml.cpp

index 4c20260222f325b5860637d2436537b1d10d68f6..7e8aefa0500ccfec418135a1df82cb2b21ee4318 100644 (file)
@@ -14,9 +14,8 @@
 #ifndef LLVM_OBJECT_COFFYAML_H
 #define LLVM_OBJECT_COFFYAML_H
 
-
+#include "llvm/Object/YAML.h"
 #include "llvm/Support/COFF.h"
-#include "llvm/Support/YAMLTraits.h"
 
 namespace llvm {
 
@@ -36,32 +35,10 @@ inline SectionCharacteristics operator|(SectionCharacteristics a,
 // The structure of the yaml files is not an exact 1:1 match to COFF. In order
 // to use yaml::IO, we use these structures which are closer to the source.
 namespace COFFYAML {
-  /// In an object file this is just a binary blob. In an yaml file it is an hex
-  /// string. Using this avoid having to allocate temporary strings.
-  /// FIXME: not COFF specific.
-  class BinaryRef {
-    ArrayRef<uint8_t> Data;
-    bool isBinary;
-  public:
-    BinaryRef(ArrayRef<uint8_t> Data) : Data(Data), isBinary(true) {}
-    BinaryRef(StringRef Data)
-        : Data(reinterpret_cast<const uint8_t *>(Data.data()), Data.size()),
-          isBinary(false) {}
-    BinaryRef() : isBinary(false) {}
-    StringRef getHex() const {
-      assert(!isBinary);
-      return StringRef(reinterpret_cast<const char*>(Data.data()), Data.size());
-    }
-    ArrayRef<uint8_t> getBinary() const {
-      assert(isBinary);
-      return Data;
-    }
-  };
-
   struct Section {
     COFF::section Header;
     unsigned Alignment;
-    BinaryRef SectionData;
+    object::yaml::BinaryRef SectionData;
     std::vector<COFF::relocation> Relocations;
     StringRef Name;
     Section();
@@ -71,7 +48,7 @@ namespace COFFYAML {
     COFF::symbol Header;
     COFF::SymbolBaseType SimpleType;
     COFF::SymbolComplexType ComplexType;
-    BinaryRef AuxiliaryData;
+    object::yaml::BinaryRef AuxiliaryData;
     StringRef Name;
     Symbol();
   };
@@ -92,12 +69,6 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(COFF::relocation)
 namespace llvm {
 namespace yaml {
 
-template<>
-struct ScalarTraits<COFFYAML::BinaryRef> {
-  static void output(const COFFYAML::BinaryRef &, void*, llvm::raw_ostream &);
-  static StringRef input(StringRef, void*, COFFYAML::BinaryRef &);
-};
-
 template <>
 struct ScalarEnumerationTraits<COFF::MachineTypes> {
   static void enumeration(IO &IO, COFF::MachineTypes &Value);
diff --git a/include/llvm/Object/YAML.h b/include/llvm/Object/YAML.h
new file mode 100644 (file)
index 0000000..44d387b
--- /dev/null
@@ -0,0 +1,59 @@
+//===- YAML.h - YAMLIO utilities for object files ---------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares utility classes for handling the YAML representation of
+// object files.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_OBJECT_YAML_H
+#define LLVM_OBJECT_YAML_H
+
+#include "llvm/Support/YAMLTraits.h"
+
+namespace llvm {
+namespace object {
+namespace yaml {
+
+/// In an object file this is just a binary blob. In an yaml file it is an hex
+/// string. Using this avoid having to allocate temporary strings.
+class BinaryRef {
+  ArrayRef<uint8_t> Data;
+  bool isBinary;
+
+public:
+  BinaryRef(ArrayRef<uint8_t> Data) : Data(Data), isBinary(true) {}
+  BinaryRef(StringRef Data)
+      : Data(reinterpret_cast<const uint8_t *>(Data.data()), Data.size()),
+        isBinary(false) {}
+  BinaryRef() : isBinary(false) {}
+  StringRef getHex() const {
+    assert(!isBinary);
+    return StringRef(reinterpret_cast<const char *>(Data.data()), Data.size());
+  }
+  ArrayRef<uint8_t> getBinary() const {
+    assert(isBinary);
+    return Data;
+  }
+};
+
+}
+}
+
+namespace yaml {
+template <> struct ScalarTraits<object::yaml::BinaryRef> {
+  static void output(const object::yaml::BinaryRef &, void *,
+                     llvm::raw_ostream &);
+  static StringRef input(StringRef, void *, object::yaml::BinaryRef &);
+};
+}
+
+}
+
+#endif
index 0ca0c324014c045e4a4ffebfa9caba7914882a0f..e24f78a598d5f9c9d8d5cc4f558e9ac7eb203a32 100644 (file)
@@ -8,4 +8,5 @@ add_llvm_library(LLVMObject
   MachOObjectFile.cpp
   Object.cpp
   ObjectFile.cpp
+  YAML.cpp
   )
index f3883afede48481585eae14cc410958f96c57e06..6e8dad41f9a788ada6f92c28b48f65922461c7df 100644 (file)
@@ -229,23 +229,6 @@ struct NType {
 
 }
 
-void ScalarTraits<COFFYAML::BinaryRef>::output(const COFFYAML::BinaryRef &Val,
-                                               void *, llvm::raw_ostream &Out) {
-  ArrayRef<uint8_t> Data = Val.getBinary();
-  for (ArrayRef<uint8_t>::iterator I = Data.begin(), E = Data.end(); I != E;
-       ++I) {
-    uint8_t Byte = *I;
-    Out << hexdigit(Byte >> 4);
-    Out << hexdigit(Byte & 0xf);
-  }
-}
-
-StringRef ScalarTraits<COFFYAML::BinaryRef>::input(StringRef Scalar, void *,
-                                                   COFFYAML::BinaryRef &Val) {
-  Val = COFFYAML::BinaryRef(Scalar);
-  return StringRef();
-}
-
 void MappingTraits<COFF::relocation>::mapping(IO &IO, COFF::relocation &Rel) {
   MappingNormalization<NType, uint16_t> NT(IO, Rel.Type);
 
diff --git a/lib/Object/YAML.cpp b/lib/Object/YAML.cpp
new file mode 100644 (file)
index 0000000..36b1997
--- /dev/null
@@ -0,0 +1,34 @@
+//===- YAML.cpp - YAMLIO utilities for object files -----------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines utility classes for handling the YAML representation of
+// object files.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Object/YAML.h"
+
+using namespace llvm;
+
+void yaml::ScalarTraits<object::yaml::BinaryRef>::output(
+    const object::yaml::BinaryRef &Val, void *, llvm::raw_ostream &Out) {
+  ArrayRef<uint8_t> Data = Val.getBinary();
+  for (ArrayRef<uint8_t>::iterator I = Data.begin(), E = Data.end(); I != E;
+       ++I) {
+    uint8_t Byte = *I;
+    Out << hexdigit(Byte >> 4);
+    Out << hexdigit(Byte & 0xf);
+  }
+}
+
+StringRef yaml::ScalarTraits<object::yaml::BinaryRef>::input(
+    StringRef Scalar, void *, object::yaml::BinaryRef &Val) {
+  Val = object::yaml::BinaryRef(Scalar);
+  return StringRef();
+}
index d1c4d01b68d895668f006affea0af5cb493359c9..909b269385bfacdb24ad290430d5a0a24f1680d9 100644 (file)
@@ -64,7 +64,7 @@ void COFFDumper::dumpSections(unsigned NumSections) {
 
     ArrayRef<uint8_t> sectionData;
     Obj.getSectionContents(Sect, sectionData);
-    Sec.SectionData = COFFYAML::BinaryRef(sectionData);
+    Sec.SectionData = object::yaml::BinaryRef(sectionData);
 
     std::vector<COFF::relocation> Relocations;
     for (object::relocation_iterator rIter = iter->begin_relocations();
@@ -96,7 +96,7 @@ void COFFDumper::dumpSymbols(unsigned NumSymbols) {
     Sym.Header.Value = Symbol->Value;
     Sym.Header.SectionNumber = Symbol->SectionNumber;
     Sym.Header.NumberOfAuxSymbols = Symbol->NumberOfAuxSymbols;
-    Sym.AuxiliaryData = COFFYAML::BinaryRef(Obj.getSymbolAuxData(Symbol));
+    Sym.AuxiliaryData = object::yaml::BinaryRef(Obj.getSymbolAuxData(Symbol));
     Symbols.push_back(Sym);
   }
 }