<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Rafael, Object/obj2yaml.test is failing now on some of our buildbots. It passes on OS X if you build with libstdc++ but fails if you use libc++. The output shows the SectionData with a bunch of binary characters when using libc++.<div><br></div><div>I've temporarily disabled the test in svn r182212. Let me know if you need help reproducing the issue.<br><div><br><div><div>On May 17, 2013, at 3:58 PM, Rafael Espindola <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Author: rafael<br>Date: Fri May 17 17:58:42 2013<br>New Revision: 182169<br><br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=182169&view=rev">http://llvm.org/viewvc/llvm-project?rev=182169&view=rev</a><br>Log:<br>Convert obj2yaml to use yamlio.<br><br>Added:<br> llvm/trunk/include/llvm/Object/COFFYaml.h<br> llvm/trunk/lib/Object/COFFYAML.cpp<br>Modified:<br> llvm/trunk/lib/Object/CMakeLists.txt<br> llvm/trunk/test/Object/obj2yaml.test<br> llvm/trunk/tools/obj2yaml/coff2yaml.cpp<br> llvm/trunk/tools/yaml2obj/CMakeLists.txt<br> llvm/trunk/tools/yaml2obj/yaml2obj.cpp<br><br>Added: llvm/trunk/include/llvm/Object/COFFYaml.h<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFFYaml.h?rev=182169&view=auto">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFFYaml.h?rev=182169&view=auto</a><br>==============================================================================<br>--- llvm/trunk/include/llvm/Object/COFFYaml.h (added)<br>+++ llvm/trunk/include/llvm/Object/COFFYaml.h Fri May 17 17:58:42 2013<br>@@ -0,0 +1,136 @@<br>+//===- COFFYAML.h - COFF YAMLIO implementation ------------------*- C++ -*-===//<br>+//<br>+// The LLVM Compiler Infrastructure<br>+//<br>+// This file is distributed under the University of Illinois Open Source<br>+// License. See LICENSE.TXT for details.<br>+//<br>+//===----------------------------------------------------------------------===//<br>+//<br>+// This file declares classes for handling the YAML representation of COFF.<br>+//<br>+//===----------------------------------------------------------------------===//<br>+<br>+#ifndef LLVM_OBJECT_COFFYAML_H<br>+#define LLVM_OBJECT_COFFYAML_H<br>+<br>+<br>+#include "llvm/Support/COFF.h"<br>+#include "llvm/Support/YAMLTraits.h"<br>+<br>+namespace llvm {<br>+<br>+namespace COFF {<br>+inline Characteristics operator|(Characteristics a, Characteristics b) {<br>+ uint32_t Ret = static_cast<uint32_t>(a) | static_cast<uint32_t>(b);<br>+ return static_cast<Characteristics>(Ret);<br>+}<br>+<br>+inline SectionCharacteristics operator|(SectionCharacteristics a,<br>+ SectionCharacteristics b) {<br>+ uint32_t Ret = static_cast<uint32_t>(a) | static_cast<uint32_t>(b);<br>+ return static_cast<SectionCharacteristics>(Ret);<br>+}<br>+}<br>+<br>+// The structure of the yaml files is not an exact 1:1 match to COFF. In order<br>+// to use yaml::IO, we use these structures which are closer to the source.<br>+namespace COFFYAML {<br>+ struct Section {<br>+ COFF::section Header;<br>+ unsigned Alignment;<br>+ StringRef SectionData;<br>+ std::vector<COFF::relocation> Relocations;<br>+ StringRef Name;<br>+ Section();<br>+ };<br>+<br>+ struct Symbol {<br>+ COFF::symbol Header;<br>+ COFF::SymbolBaseType SimpleType;<br>+ COFF::SymbolComplexType ComplexType;<br>+ StringRef AuxiliaryData;<br>+ StringRef Name;<br>+ Symbol();<br>+ };<br>+<br>+ struct Object {<br>+ COFF::header Header;<br>+ std::vector<Section> Sections;<br>+ std::vector<Symbol> Symbols;<br>+ Object();<br>+ };<br>+}<br>+}<br>+<br>+LLVM_YAML_IS_SEQUENCE_VECTOR(COFFYAML::Section)<br>+LLVM_YAML_IS_SEQUENCE_VECTOR(COFFYAML::Symbol)<br>+LLVM_YAML_IS_SEQUENCE_VECTOR(COFF::relocation)<br>+<br>+namespace llvm {<br>+namespace yaml {<br>+<br>+template <><br>+struct ScalarEnumerationTraits<COFF::MachineTypes> {<br>+ static void enumeration(IO &IO, COFF::MachineTypes &Value);<br>+};<br>+<br>+template <><br>+struct ScalarEnumerationTraits<COFF::SymbolBaseType> {<br>+ static void enumeration(IO &IO, COFF::SymbolBaseType &Value);<br>+};<br>+<br>+template <><br>+struct ScalarEnumerationTraits<COFF::SymbolStorageClass> {<br>+ static void enumeration(IO &IO, COFF::SymbolStorageClass &Value);<br>+};<br>+<br>+template <><br>+struct ScalarEnumerationTraits<COFF::SymbolComplexType> {<br>+ static void enumeration(IO &IO, COFF::SymbolComplexType &Value);<br>+};<br>+<br>+template <><br>+struct ScalarEnumerationTraits<COFF::RelocationTypeX86> {<br>+ static void enumeration(IO &IO, COFF::RelocationTypeX86 &Value);<br>+};<br>+<br>+template <><br>+struct ScalarBitSetTraits<COFF::Characteristics> {<br>+ static void bitset(IO &IO, COFF::Characteristics &Value);<br>+};<br>+<br>+template <><br>+struct ScalarBitSetTraits<COFF::SectionCharacteristics> {<br>+ static void bitset(IO &IO, COFF::SectionCharacteristics &Value);<br>+};<br>+<br>+template <><br>+struct MappingTraits<COFF::relocation> {<br>+ static void mapping(IO &IO, COFF::relocation &Rel);<br>+};<br>+<br>+template <><br>+struct MappingTraits<COFF::header> {<br>+ static void mapping(IO &IO, COFF::header &H);<br>+};<br>+<br>+template <><br>+struct MappingTraits<COFFYAML::Symbol> {<br>+ static void mapping(IO &IO, COFFYAML::Symbol &S);<br>+};<br>+<br>+template <><br>+struct MappingTraits<COFFYAML::Section> {<br>+ static void mapping(IO &IO, COFFYAML::Section &Sec);<br>+};<br>+<br>+template <><br>+struct MappingTraits<COFFYAML::Object> {<br>+ static void mapping(IO &IO, COFFYAML::Object &Obj);<br>+};<br>+<br>+} // end namespace yaml<br>+} // end namespace llvm<br>+<br>+#endif<br><br>Modified: llvm/trunk/lib/Object/CMakeLists.txt<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/CMakeLists.txt?rev=182169&r1=182168&r2=182169&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/CMakeLists.txt?rev=182169&r1=182168&r2=182169&view=diff</a><br>==============================================================================<br>--- llvm/trunk/lib/Object/CMakeLists.txt (original)<br>+++ llvm/trunk/lib/Object/CMakeLists.txt Fri May 17 17:58:42 2013<br>@@ -2,6 +2,7 @@ add_llvm_library(LLVMObject<br> Archive.cpp<br> Binary.cpp<br> COFFObjectFile.cpp<br>+ COFFYAML.cpp<br> ELFObjectFile.cpp<br> Error.cpp<br> MachOObjectFile.cpp<br><br>Added: llvm/trunk/lib/Object/COFFYAML.cpp<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFYAML.cpp?rev=182169&view=auto">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFYAML.cpp?rev=182169&view=auto</a><br>==============================================================================<br>--- llvm/trunk/lib/Object/COFFYAML.cpp (added)<br>+++ llvm/trunk/lib/Object/COFFYAML.cpp Fri May 17 17:58:42 2013<br>@@ -0,0 +1,279 @@<br>+//===- COFFYAML.cpp - COFF YAMLIO implementation --------------------------===//<br>+//<br>+// The LLVM Compiler Infrastructure<br>+//<br>+// This file is distributed under the University of Illinois Open Source<br>+// License. See LICENSE.TXT for details.<br>+//<br>+//===----------------------------------------------------------------------===//<br>+//<br>+// This file defines classes for handling the YAML representation of COFF.<br>+//<br>+//===----------------------------------------------------------------------===//<br>+<br>+#include "llvm/Object/COFFYaml.h"<br>+<br>+#define ECase(X) IO.enumCase(Value, #X, COFF::X);<br>+namespace llvm {<br>+<br>+namespace COFFYAML {<br>+Section::Section() { memset(&Header, 0, sizeof(COFF::section)); }<br>+Symbol::Symbol() { memset(&Header, 0, sizeof(COFF::symbol)); }<br>+Object::Object() { memset(&Header, 0, sizeof(COFF::header)); }<br>+}<br>+<br>+namespace yaml {<br>+void ScalarEnumerationTraits<COFF::MachineTypes>::enumeration(<br>+ IO &IO, COFF::MachineTypes &Value) {<br>+ ECase(IMAGE_FILE_MACHINE_UNKNOWN);<br>+ ECase(IMAGE_FILE_MACHINE_AM33);<br>+ ECase(IMAGE_FILE_MACHINE_AMD64);<br>+ ECase(IMAGE_FILE_MACHINE_ARM);<br>+ ECase(IMAGE_FILE_MACHINE_ARMV7);<br>+ ECase(IMAGE_FILE_MACHINE_EBC);<br>+ ECase(IMAGE_FILE_MACHINE_I386);<br>+ ECase(IMAGE_FILE_MACHINE_IA64);<br>+ ECase(IMAGE_FILE_MACHINE_M32R);<br>+ ECase(IMAGE_FILE_MACHINE_MIPS16);<br>+ ECase(IMAGE_FILE_MACHINE_MIPSFPU);<br>+ ECase(IMAGE_FILE_MACHINE_MIPSFPU16);<br>+ ECase(IMAGE_FILE_MACHINE_POWERPC);<br>+ ECase(IMAGE_FILE_MACHINE_POWERPCFP);<br>+ ECase(IMAGE_FILE_MACHINE_R4000);<br>+ ECase(IMAGE_FILE_MACHINE_SH3);<br>+ ECase(IMAGE_FILE_MACHINE_SH3DSP);<br>+ ECase(IMAGE_FILE_MACHINE_SH4);<br>+ ECase(IMAGE_FILE_MACHINE_SH5);<br>+ ECase(IMAGE_FILE_MACHINE_THUMB);<br>+ ECase(IMAGE_FILE_MACHINE_WCEMIPSV2);<br>+}<br>+<br>+void ScalarEnumerationTraits<COFF::SymbolBaseType>::enumeration(<br>+ IO &IO, COFF::SymbolBaseType &Value) {<br>+ ECase(IMAGE_SYM_TYPE_NULL);<br>+ ECase(IMAGE_SYM_TYPE_VOID);<br>+ ECase(IMAGE_SYM_TYPE_CHAR);<br>+ ECase(IMAGE_SYM_TYPE_SHORT);<br>+ ECase(IMAGE_SYM_TYPE_INT);<br>+ ECase(IMAGE_SYM_TYPE_LONG);<br>+ ECase(IMAGE_SYM_TYPE_FLOAT);<br>+ ECase(IMAGE_SYM_TYPE_DOUBLE);<br>+ ECase(IMAGE_SYM_TYPE_STRUCT);<br>+ ECase(IMAGE_SYM_TYPE_UNION);<br>+ ECase(IMAGE_SYM_TYPE_ENUM);<br>+ ECase(IMAGE_SYM_TYPE_MOE);<br>+ ECase(IMAGE_SYM_TYPE_BYTE);<br>+ ECase(IMAGE_SYM_TYPE_WORD);<br>+ ECase(IMAGE_SYM_TYPE_UINT);<br>+ ECase(IMAGE_SYM_TYPE_DWORD);<br>+}<br>+<br>+void ScalarEnumerationTraits<COFF::SymbolStorageClass>::enumeration(<br>+ IO &IO, COFF::SymbolStorageClass &Value) {<br>+ ECase(IMAGE_SYM_CLASS_END_OF_FUNCTION);<br>+ ECase(IMAGE_SYM_CLASS_NULL);<br>+ ECase(IMAGE_SYM_CLASS_AUTOMATIC);<br>+ ECase(IMAGE_SYM_CLASS_EXTERNAL);<br>+ ECase(IMAGE_SYM_CLASS_STATIC);<br>+ ECase(IMAGE_SYM_CLASS_REGISTER);<br>+ ECase(IMAGE_SYM_CLASS_EXTERNAL_DEF);<br>+ ECase(IMAGE_SYM_CLASS_LABEL);<br>+ ECase(IMAGE_SYM_CLASS_UNDEFINED_LABEL);<br>+ ECase(IMAGE_SYM_CLASS_MEMBER_OF_STRUCT);<br>+ ECase(IMAGE_SYM_CLASS_ARGUMENT);<br>+ ECase(IMAGE_SYM_CLASS_STRUCT_TAG);<br>+ ECase(IMAGE_SYM_CLASS_MEMBER_OF_UNION);<br>+ ECase(IMAGE_SYM_CLASS_UNION_TAG);<br>+ ECase(IMAGE_SYM_CLASS_TYPE_DEFINITION);<br>+ ECase(IMAGE_SYM_CLASS_UNDEFINED_STATIC);<br>+ ECase(IMAGE_SYM_CLASS_ENUM_TAG);<br>+ ECase(IMAGE_SYM_CLASS_MEMBER_OF_ENUM);<br>+ ECase(IMAGE_SYM_CLASS_REGISTER_PARAM);<br>+ ECase(IMAGE_SYM_CLASS_BIT_FIELD);<br>+ ECase(IMAGE_SYM_CLASS_BLOCK);<br>+ ECase(IMAGE_SYM_CLASS_FUNCTION);<br>+ ECase(IMAGE_SYM_CLASS_END_OF_STRUCT);<br>+ ECase(IMAGE_SYM_CLASS_FILE);<br>+ ECase(IMAGE_SYM_CLASS_SECTION);<br>+ ECase(IMAGE_SYM_CLASS_WEAK_EXTERNAL);<br>+ ECase(IMAGE_SYM_CLASS_CLR_TOKEN);<br>+}<br>+<br>+void ScalarEnumerationTraits<COFF::SymbolComplexType>::enumeration(<br>+ IO &IO, COFF::SymbolComplexType &Value) {<br>+ ECase(IMAGE_SYM_DTYPE_NULL);<br>+ ECase(IMAGE_SYM_DTYPE_POINTER);<br>+ ECase(IMAGE_SYM_DTYPE_FUNCTION);<br>+ ECase(IMAGE_SYM_DTYPE_ARRAY);<br>+}<br>+<br>+void ScalarEnumerationTraits<COFF::RelocationTypeX86>::enumeration(<br>+ IO &IO, COFF::RelocationTypeX86 &Value) {<br>+ ECase(IMAGE_REL_I386_ABSOLUTE);<br>+ ECase(IMAGE_REL_I386_DIR16);<br>+ ECase(IMAGE_REL_I386_REL16);<br>+ ECase(IMAGE_REL_I386_DIR32);<br>+ ECase(IMAGE_REL_I386_DIR32NB);<br>+ ECase(IMAGE_REL_I386_SEG12);<br>+ ECase(IMAGE_REL_I386_SECTION);<br>+ ECase(IMAGE_REL_I386_SECREL);<br>+ ECase(IMAGE_REL_I386_TOKEN);<br>+ ECase(IMAGE_REL_I386_SECREL7);<br>+ ECase(IMAGE_REL_I386_REL32);<br>+ ECase(IMAGE_REL_AMD64_ABSOLUTE);<br>+ ECase(IMAGE_REL_AMD64_ADDR64);<br>+ ECase(IMAGE_REL_AMD64_ADDR32);<br>+ ECase(IMAGE_REL_AMD64_ADDR32NB);<br>+ ECase(IMAGE_REL_AMD64_REL32);<br>+ ECase(IMAGE_REL_AMD64_REL32_1);<br>+ ECase(IMAGE_REL_AMD64_REL32_2);<br>+ ECase(IMAGE_REL_AMD64_REL32_3);<br>+ ECase(IMAGE_REL_AMD64_REL32_4);<br>+ ECase(IMAGE_REL_AMD64_REL32_5);<br>+ ECase(IMAGE_REL_AMD64_SECTION);<br>+ ECase(IMAGE_REL_AMD64_SECREL);<br>+ ECase(IMAGE_REL_AMD64_SECREL7);<br>+ ECase(IMAGE_REL_AMD64_TOKEN);<br>+ ECase(IMAGE_REL_AMD64_SREL32);<br>+ ECase(IMAGE_REL_AMD64_PAIR);<br>+ ECase(IMAGE_REL_AMD64_SSPAN32);<br>+}<br>+#undef ECase<br>+<br>+#define BCase(X) IO.bitSetCase(Value, #X, COFF::X);<br>+void ScalarBitSetTraits<COFF::Characteristics>::bitset(<br>+ IO &IO, COFF::Characteristics &Value) {<br>+ BCase(IMAGE_FILE_RELOCS_STRIPPED);<br>+ BCase(IMAGE_FILE_EXECUTABLE_IMAGE);<br>+ BCase(IMAGE_FILE_LINE_NUMS_STRIPPED);<br>+ BCase(IMAGE_FILE_LOCAL_SYMS_STRIPPED);<br>+ BCase(IMAGE_FILE_AGGRESSIVE_WS_TRIM);<br>+ BCase(IMAGE_FILE_LARGE_ADDRESS_AWARE);<br>+ BCase(IMAGE_FILE_BYTES_REVERSED_LO);<br>+ BCase(IMAGE_FILE_32BIT_MACHINE);<br>+ BCase(IMAGE_FILE_DEBUG_STRIPPED);<br>+ BCase(IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP);<br>+ BCase(IMAGE_FILE_NET_RUN_FROM_SWAP);<br>+ BCase(IMAGE_FILE_SYSTEM);<br>+ BCase(IMAGE_FILE_DLL);<br>+ BCase(IMAGE_FILE_UP_SYSTEM_ONLY);<br>+ BCase(IMAGE_FILE_BYTES_REVERSED_HI);<br>+}<br>+<br>+void ScalarBitSetTraits<COFF::SectionCharacteristics>::bitset(<br>+ IO &IO, COFF::SectionCharacteristics &Value) {<br>+ BCase(IMAGE_SCN_TYPE_NO_PAD);<br>+ BCase(IMAGE_SCN_CNT_CODE);<br>+ BCase(IMAGE_SCN_CNT_INITIALIZED_DATA);<br>+ BCase(IMAGE_SCN_CNT_UNINITIALIZED_DATA);<br>+ BCase(IMAGE_SCN_LNK_OTHER);<br>+ BCase(IMAGE_SCN_LNK_INFO);<br>+ BCase(IMAGE_SCN_LNK_REMOVE);<br>+ BCase(IMAGE_SCN_LNK_COMDAT);<br>+ BCase(IMAGE_SCN_GPREL);<br>+ BCase(IMAGE_SCN_MEM_PURGEABLE);<br>+ BCase(IMAGE_SCN_MEM_16BIT);<br>+ BCase(IMAGE_SCN_MEM_LOCKED);<br>+ BCase(IMAGE_SCN_MEM_PRELOAD);<br>+ BCase(IMAGE_SCN_LNK_NRELOC_OVFL);<br>+ BCase(IMAGE_SCN_MEM_DISCARDABLE);<br>+ BCase(IMAGE_SCN_MEM_NOT_CACHED);<br>+ BCase(IMAGE_SCN_MEM_NOT_PAGED);<br>+ BCase(IMAGE_SCN_MEM_SHARED);<br>+ BCase(IMAGE_SCN_MEM_EXECUTE);<br>+ BCase(IMAGE_SCN_MEM_READ);<br>+ BCase(IMAGE_SCN_MEM_WRITE);<br>+}<br>+#undef BCase<br>+<br>+namespace {<br>+struct NSectionCharacteristics {<br>+ NSectionCharacteristics(IO &)<br>+ : Characteristics(COFF::SectionCharacteristics(0)) {}<br>+ NSectionCharacteristics(IO &, uint32_t C)<br>+ : Characteristics(COFF::SectionCharacteristics(C)) {}<br>+ uint32_t denormalize(IO &) { return Characteristics; }<br>+ COFF::SectionCharacteristics Characteristics;<br>+};<br>+<br>+struct NStorageClass {<br>+ NStorageClass(IO &) : StorageClass(COFF::SymbolStorageClass(0)) {}<br>+ NStorageClass(IO &, uint8_t S) : StorageClass(COFF::SymbolStorageClass(S)) {}<br>+ uint8_t denormalize(IO &) { return StorageClass; }<br>+<br>+ COFF::SymbolStorageClass StorageClass;<br>+};<br>+<br>+struct NMachine {<br>+ NMachine(IO &) : Machine(COFF::MachineTypes(0)) {}<br>+ NMachine(IO &, uint16_t M) : Machine(COFF::MachineTypes(M)) {}<br>+ uint16_t denormalize(IO &) { return Machine; }<br>+ COFF::MachineTypes Machine;<br>+};<br>+<br>+struct NHeaderCharacteristics {<br>+ NHeaderCharacteristics(IO &) : Characteristics(COFF::Characteristics(0)) {}<br>+ NHeaderCharacteristics(IO &, uint16_t C)<br>+ : Characteristics(COFF::Characteristics(C)) {}<br>+ uint16_t denormalize(IO &) { return Characteristics; }<br>+<br>+ COFF::Characteristics Characteristics;<br>+};<br>+<br>+struct NType {<br>+ NType(IO &) : Type(COFF::RelocationTypeX86(0)) {}<br>+ NType(IO &, uint16_t T) : Type(COFF::RelocationTypeX86(T)) {}<br>+ uint16_t denormalize(IO &) { return Type; }<br>+ COFF::RelocationTypeX86 Type;<br>+};<br>+<br>+}<br>+<br>+void MappingTraits<COFF::relocation>::mapping(IO &IO, COFF::relocation &Rel) {<br>+ MappingNormalization<NType, uint16_t> NT(IO, Rel.Type);<br>+<br>+ IO.mapRequired("VirtualAddress", Rel.VirtualAddress);<br>+ IO.mapRequired("SymbolTableIndex", Rel.SymbolTableIndex);<br>+ IO.mapRequired("Type", NT->Type);<br>+}<br>+<br>+void MappingTraits<COFF::header>::mapping(IO &IO, COFF::header &H) {<br>+ MappingNormalization<NMachine, uint16_t> NM(IO, H.Machine);<br>+ MappingNormalization<NHeaderCharacteristics, uint16_t> NC(IO,<br>+ H.Characteristics);<br>+<br>+ IO.mapRequired("Machine", NM->Machine);<br>+ IO.mapOptional("Characteristics", NC->Characteristics);<br>+}<br>+<br>+void MappingTraits<COFFYAML::Symbol>::mapping(IO &IO, COFFYAML::Symbol &S) {<br>+ MappingNormalization<NStorageClass, uint8_t> NS(IO, S.Header.StorageClass);<br>+<br>+ IO.mapRequired("Name", S.Name);<br>+ IO.mapRequired("Value", S.Header.Value);<br>+ IO.mapRequired("SectionNumber", S.Header.SectionNumber);<br>+ IO.mapRequired("SimpleType", S.SimpleType);<br>+ IO.mapRequired("ComplexType", S.ComplexType);<br>+ IO.mapRequired("StorageClass", NS->StorageClass);<br>+ IO.mapOptional("NumberOfAuxSymbols", S.Header.NumberOfAuxSymbols);<br>+ IO.mapOptional("AuxiliaryData", S.AuxiliaryData);<br>+}<br>+<br>+void MappingTraits<COFFYAML::Section>::mapping(IO &IO, COFFYAML::Section &Sec) {<br>+ MappingNormalization<NSectionCharacteristics, uint32_t> NC(<br>+ IO, Sec.Header.Characteristics);<br>+ IO.mapRequired("Name", Sec.Name);<br>+ IO.mapRequired("Characteristics", NC->Characteristics);<br>+ IO.mapOptional("Alignment", Sec.Alignment);<br>+ IO.mapRequired("SectionData", Sec.SectionData);<br>+ IO.mapOptional("Relocations", Sec.Relocations);<br>+}<br>+<br>+void MappingTraits<COFFYAML::Object>::mapping(IO &IO, COFFYAML::Object &Obj) {<br>+ IO.mapRequired("header", Obj.Header);<br>+ IO.mapRequired("sections", Obj.Sections);<br>+ IO.mapRequired("symbols", Obj.Symbols);<br>+}<br>+<br>+}<br>+}<br><br>Modified: llvm/trunk/test/Object/obj2yaml.test<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/obj2yaml.test?rev=182169&r1=182168&r2=182169&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/obj2yaml.test?rev=182169&r1=182168&r2=182169&view=diff</a><br>==============================================================================<br>--- llvm/trunk/test/Object/obj2yaml.test (original)<br>+++ llvm/trunk/test/Object/obj2yaml.test Fri May 17 17:58:42 2013<br>@@ -2,169 +2,151 @@ RUN: obj2yaml %p/Inputs/trivial-object-t<br>RUN: obj2yaml %p/Inputs/trivial-object-test.coff-x86-64 | FileCheck %s --check-prefix COFF-X86-64<br><br><br>-COFF-I386: header: !Header<br>-COFF-I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386 # (0x14c)<br>+COFF-I386: header:<br>+COFF-I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386<br><br>COFF-I386: sections:<br>-COFF-I386-NEXT: - !Section<br>-COFF-I386-NEXT: Name: .text<br>-COFF-I386-NEXT: Characteristics: [IMAGE_SCN_CNT_CODE, IMAGE_SCN_ALIGN_16BYTES, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ, ] # 0x60500020<br>-COFF-I386-NEXT: SectionData: !hex "83EC0CC744240800000000C7042400000000E800000000E8000000008B44240883C40CC3" # |....D$.......$...............D$.....|<br>+COFF-I386-NEXT: - Name: .text<br>+COFF-I386-NEXT: Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]<br>+COFF-I386-NEXT: Alignment: 16<br>+COFF-I386-NEXT: SectionData: 83EC0CC744240800000000C7042400000000E800000000E8000000008B44240883C40CC3<br><br>COFF-I386: Relocations:<br>-COFF-I386-NEXT: - !Relocation<br>-COFF-I386-NEXT: VirtualAddress: 0xe<br>+COFF-I386-NEXT: - VirtualAddress: 14<br>COFF-I386-NEXT: SymbolTableIndex: 5<br>COFF-I386-NEXT: Type: IMAGE_REL_I386_DIR32<br><br>-COFF-I386: - !Relocation<br>-COFF-I386-NEXT: VirtualAddress: 0x13<br>+COFF-I386: - VirtualAddress: 19<br>COFF-I386-NEXT: SymbolTableIndex: 6<br>COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32<br><br>-COFF-I386: - !Relocation<br>-COFF-I386-NEXT: VirtualAddress: 0x18<br>+COFF-I386: - VirtualAddress: 24<br>COFF-I386-NEXT: SymbolTableIndex: 7<br>COFF-I386-NEXT: Type: IMAGE_REL_I386_REL32<br><br>-COFF-I386: - !Section<br>-COFF-I386-NEXT: Name: .data<br>-COFF-I386-NEXT: Characteristics: [IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_ALIGN_1BYTES, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, ] # 0xc0100040<br>-COFF-I386-NEXT: SectionData: !hex "48656C6C6F20576F726C642100" # |Hello World!.|<br>+COFF-I386: - Name: .data<br>+COFF-I386-NEXT: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]<br>+COFF-I386-NEXT: Alignment: 1<br>+COFF-I386-NEXT: SectionData: 48656C6C6F20576F726C642100<br><br>COFF-I386: symbols:<br>-COFF-I386-NEXT: - !Symbol<br>-COFF-I386-NEXT: Name: .text<br>+COFF-I386-NEXT: - Name: .text<br>COFF-I386-NEXT: Value: 0<br>COFF-I386-NEXT: SectionNumber: 1<br>-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)<br>+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC<br>COFF-I386-NEXT: NumberOfAuxSymbols: 1<br>-COFF-I386-NEXT: AuxillaryData: !hex "240000000300000000000000010000000000" # |$.................|<br>+COFF-I386-NEXT: AuxiliaryData: 240000000300000000000000010000000000<br><br>-COFF-I386: - !Symbol<br>-COFF-I386-NEXT: Name: .data<br>+COFF-I386: - Name: .data<br>COFF-I386-NEXT: Value: 0<br>COFF-I386-NEXT: SectionNumber: 2<br>-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)<br>+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC<br>COFF-I386-NEXT: NumberOfAuxSymbols: 1<br>-COFF-I386-NEXT: AuxillaryData: !hex "0D0000000000000000000000020000000000" # |..................|<br>+COFF-I386-NEXT: AuxiliaryData: 0D0000000000000000000000020000000000<br><br>-COFF-I386: - !Symbol<br>-COFF-I386-NEXT: Name: _main<br>+COFF-I386: - Name: _main<br>COFF-I386-NEXT: Value: 0<br>COFF-I386-NEXT: SectionNumber: 1<br>-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_FUNCTION # (2)<br>-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)<br>+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_FUNCTION<br>+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL<br><br>-COFF-I386: - !Symbol<br>-COFF-I386-NEXT: Name: L_.str<br>+COFF-I386: - Name: L_.str<br>COFF-I386-NEXT: Value: 0<br>COFF-I386-NEXT: SectionNumber: 2<br>-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)<br>+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC<br><br>-COFF-I386: - !Symbol<br>-COFF-I386-NEXT: Name: _puts<br>+COFF-I386: - Name: _puts<br>COFF-I386-NEXT: Value: 0<br>COFF-I386-NEXT: SectionNumber: 0<br>-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)<br>+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL<br><br>-COFF-I386: - !Symbol<br>-COFF-I386-NEXT: Name: _SomeOtherFunction<br>+COFF-I386: - Name: _SomeOtherFunction<br>COFF-I386-NEXT: Value: 0<br>COFF-I386-NEXT: SectionNumber: 0<br>-COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)<br>+COFF-I386-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-I386-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-I386-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL<br><br><br>-COFF-X86-64: header: !Header<br>-COFF-X86-64-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 # (0x8664)<br>+COFF-X86-64: header:<br>+COFF-X86-64-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64<br><br>COFF-X86-64: sections:<br>-COFF-X86-64-NEXT: - !Section<br>-COFF-X86-64-NEXT: Name: .text<br>-COFF-X86-64-NEXT: Characteristics: [IMAGE_SCN_CNT_CODE, IMAGE_SCN_ALIGN_16BYTES, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ, ] # 0x60500020<br>-COFF-X86-64-NEXT: SectionData: !hex "4883EC28C744242400000000488D0D00000000E800000000E8000000008B4424244883C428C3" # |H..(.D$$....H.................D$$H..(.|<br>+COFF-X86-64-NEXT: - Name: .text<br>+COFF-X86-64-NEXT: Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]<br>+COFF-X86-64-NEXT: Alignment: 16<br>+COFF-X86-64-NEXT: SectionData: 4883EC28C744242400000000488D0D00000000E800000000E8000000008B4424244883C428C3<br><br>COFF-X86-64: Relocations:<br>-COFF-X86-64-NEXT: - !Relocation<br>-COFF-X86-64-NEXT: VirtualAddress: 0xf<br>+COFF-X86-64-NEXT: - VirtualAddress: 15<br>COFF-X86-64-NEXT: SymbolTableIndex: 5<br>COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32<br><br>-COFF-X86-64: - !Relocation<br>-COFF-X86-64-NEXT: VirtualAddress: 0x14<br>+COFF-X86-64: - VirtualAddress: 20<br>COFF-X86-64-NEXT: SymbolTableIndex: 6<br>COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32<br><br>-COFF-X86-64: - !Relocation<br>-COFF-X86-64-NEXT: VirtualAddress: 0x19<br>+COFF-X86-64: - VirtualAddress: 25<br>COFF-X86-64-NEXT: SymbolTableIndex: 7<br>COFF-X86-64-NEXT: Type: IMAGE_REL_AMD64_REL32<br><br>-COFF-X86-64: - !Section<br>-COFF-X86-64-NEXT: Name: .data<br>-COFF-X86-64-NEXT: Characteristics: [IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_ALIGN_1BYTES, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE, ] # 0xc0100040<br>-COFF-X86-64-NEXT: SectionData: !hex "48656C6C6F20576F726C642100" # |Hello World!.|<br>+COFF-X86-64: - Name: .data<br>+COFF-X86-64-NEXT: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]<br>+COFF-X86-64-NEXT: Alignment: 1<br>+COFF-X86-64-NEXT: SectionData: 48656C6C6F20576F726C642100<br><br>COFF-X86-64: symbols:<br>-COFF-X86-64-NEXT: - !Symbol<br>-COFF-X86-64-NEXT: Name: .text<br>+COFF-X86-64-NEXT: - Name: .text<br>COFF-X86-64-NEXT: Value: 0<br>COFF-X86-64-NEXT: SectionNumber: 1<br>-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)<br>+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC<br>COFF-X86-64-NEXT: NumberOfAuxSymbols: 1<br>-COFF-X86-64-NEXT: AuxillaryData: !hex "260000000300000000000000010000000000" # |&.................|<br>+COFF-X86-64-NEXT: AuxiliaryData: 260000000300000000000000010000000000<br><br>-COFF-X86-64: - !Symbol<br>-COFF-X86-64-NEXT: Name: .data<br>+COFF-X86-64: - Name: .data<br>COFF-X86-64-NEXT: Value: 0<br>COFF-X86-64-NEXT: SectionNumber: 2<br>-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)<br>+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC<br>COFF-X86-64-NEXT: NumberOfAuxSymbols: 1<br>-COFF-X86-64-NEXT: AuxillaryData: !hex "0D0000000000000000000000020000000000" # |..................|<br>+COFF-X86-64-NEXT: AuxiliaryData: 0D0000000000000000000000020000000000<br><br>-COFF-X86-64: - !Symbol<br>-COFF-X86-64-NEXT: Name: main<br>+COFF-X86-64: - Name: main<br>COFF-X86-64-NEXT: Value: 0<br>COFF-X86-64-NEXT: SectionNumber: 1<br>-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)<br>+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL<br><br>-COFF-X86-64: - !Symbol<br>-COFF-X86-64-NEXT: Name: L.str<br>+COFF-X86-64: - Name: L.str<br>COFF-X86-64-NEXT: Value: 0<br>COFF-X86-64-NEXT: SectionNumber: 2<br>-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC # (3)<br>+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_STATIC<br><br>-COFF-X86-64: - !Symbol<br>-COFF-X86-64-NEXT: Name: puts<br>+COFF-X86-64: - Name: puts<br>COFF-X86-64-NEXT: Value: 0<br>COFF-X86-64-NEXT: SectionNumber: 0<br>-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)<br>+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL<br><br>-COFF-X86-64: - !Symbol<br>-COFF-X86-64-NEXT: Name: SomeOtherFunction<br>+COFF-X86-64: - Name: SomeOtherFunction<br>COFF-X86-64-NEXT: Value: 0<br>COFF-X86-64-NEXT: SectionNumber: 0<br>-COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL # (0)<br>-COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL # (0)<br>-COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL # (2)<br>+COFF-X86-64-NEXT: SimpleType: IMAGE_SYM_TYPE_NULL<br>+COFF-X86-64-NEXT: ComplexType: IMAGE_SYM_DTYPE_NULL<br>+COFF-X86-64-NEXT: StorageClass: IMAGE_SYM_CLASS_EXTERNAL<br><br>Modified: llvm/trunk/tools/obj2yaml/coff2yaml.cpp<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/coff2yaml.cpp?rev=182169&r1=182168&r2=182169&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/coff2yaml.cpp?rev=182169&r1=182168&r2=182169&view=diff</a><br>==============================================================================<br>--- llvm/trunk/tools/obj2yaml/coff2yaml.cpp (original)<br>+++ llvm/trunk/tools/obj2yaml/coff2yaml.cpp Fri May 17 17:58:42 2013<br>@@ -9,346 +9,124 @@<br><br>#include "obj2yaml.h"<br>#include "llvm/Object/COFF.h"<br>+#include "llvm/Object/COFFYaml.h"<br>+#include "llvm/Support/ErrorHandling.h"<br>+#include "llvm/Support/YAMLTraits.h"<br><br>using namespace llvm;<br><br>-template <typename One, typename Two><br>-struct pod_pair { // I'd much rather use std::pair, but it's not a POD<br>- One first;<br>- Two second;<br>-};<br>-<br>-#define STRING_PAIR(x) {COFF::x, #x}<br>-static const pod_pair<COFF::MachineTypes, const char *><br>-MachineTypePairs [] = {<br>- STRING_PAIR(IMAGE_FILE_MACHINE_UNKNOWN),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_AM33),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_AMD64),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_ARM),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_ARMV7),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_EBC),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_I386),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_IA64),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_M32R),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_MIPS16),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_MIPSFPU),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_MIPSFPU16),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_POWERPC),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_POWERPCFP),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_R4000),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_SH3),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_SH3DSP),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_SH4),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_SH5),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_THUMB),<br>- STRING_PAIR(IMAGE_FILE_MACHINE_WCEMIPSV2)<br>-};<br>-<br>-static const pod_pair<COFF::SectionCharacteristics, const char *><br>-SectionCharacteristicsPairs1 [] = {<br>- STRING_PAIR(IMAGE_SCN_TYPE_NO_PAD),<br>- STRING_PAIR(IMAGE_SCN_CNT_CODE),<br>- STRING_PAIR(IMAGE_SCN_CNT_INITIALIZED_DATA),<br>- STRING_PAIR(IMAGE_SCN_CNT_UNINITIALIZED_DATA),<br>- STRING_PAIR(IMAGE_SCN_LNK_OTHER),<br>- STRING_PAIR(IMAGE_SCN_LNK_INFO),<br>- STRING_PAIR(IMAGE_SCN_LNK_REMOVE),<br>- STRING_PAIR(IMAGE_SCN_LNK_COMDAT),<br>- STRING_PAIR(IMAGE_SCN_GPREL),<br>- STRING_PAIR(IMAGE_SCN_MEM_PURGEABLE),<br>- STRING_PAIR(IMAGE_SCN_MEM_16BIT),<br>- STRING_PAIR(IMAGE_SCN_MEM_LOCKED),<br>- STRING_PAIR(IMAGE_SCN_MEM_PRELOAD)<br>-};<br>-<br>-static const pod_pair<COFF::SectionCharacteristics, const char *><br>-SectionCharacteristicsPairsAlignment [] = {<br>- STRING_PAIR(IMAGE_SCN_ALIGN_1BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_2BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_4BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_8BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_16BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_32BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_64BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_128BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_256BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_512BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_1024BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_2048BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_4096BYTES),<br>- STRING_PAIR(IMAGE_SCN_ALIGN_8192BYTES)<br>-};<br>-<br>-static const pod_pair<COFF::SectionCharacteristics, const char *><br>-SectionCharacteristicsPairs2 [] = {<br>- STRING_PAIR(IMAGE_SCN_LNK_NRELOC_OVFL),<br>- STRING_PAIR(IMAGE_SCN_MEM_DISCARDABLE),<br>- STRING_PAIR(IMAGE_SCN_MEM_NOT_CACHED),<br>- STRING_PAIR(IMAGE_SCN_MEM_NOT_PAGED),<br>- STRING_PAIR(IMAGE_SCN_MEM_SHARED),<br>- STRING_PAIR(IMAGE_SCN_MEM_EXECUTE),<br>- STRING_PAIR(IMAGE_SCN_MEM_READ),<br>- STRING_PAIR(IMAGE_SCN_MEM_WRITE)<br>-};<br>-<br>-static const pod_pair<COFF::SymbolBaseType, const char *><br>-SymbolBaseTypePairs [] = {<br>- STRING_PAIR(IMAGE_SYM_TYPE_NULL),<br>- STRING_PAIR(IMAGE_SYM_TYPE_VOID),<br>- STRING_PAIR(IMAGE_SYM_TYPE_CHAR),<br>- STRING_PAIR(IMAGE_SYM_TYPE_SHORT),<br>- STRING_PAIR(IMAGE_SYM_TYPE_INT),<br>- STRING_PAIR(IMAGE_SYM_TYPE_LONG),<br>- STRING_PAIR(IMAGE_SYM_TYPE_FLOAT),<br>- STRING_PAIR(IMAGE_SYM_TYPE_DOUBLE),<br>- STRING_PAIR(IMAGE_SYM_TYPE_STRUCT),<br>- STRING_PAIR(IMAGE_SYM_TYPE_UNION),<br>- STRING_PAIR(IMAGE_SYM_TYPE_ENUM),<br>- STRING_PAIR(IMAGE_SYM_TYPE_MOE),<br>- STRING_PAIR(IMAGE_SYM_TYPE_BYTE),<br>- STRING_PAIR(IMAGE_SYM_TYPE_WORD),<br>- STRING_PAIR(IMAGE_SYM_TYPE_UINT),<br>- STRING_PAIR(IMAGE_SYM_TYPE_DWORD)<br>-};<br>-<br>-static const pod_pair<COFF::SymbolComplexType, const char *><br>-SymbolComplexTypePairs [] = {<br>- STRING_PAIR(IMAGE_SYM_DTYPE_NULL),<br>- STRING_PAIR(IMAGE_SYM_DTYPE_POINTER),<br>- STRING_PAIR(IMAGE_SYM_DTYPE_FUNCTION),<br>- STRING_PAIR(IMAGE_SYM_DTYPE_ARRAY),<br>-};<br>-<br>-static const pod_pair<COFF::SymbolStorageClass, const char *><br>-SymbolStorageClassPairs [] = {<br>- STRING_PAIR(IMAGE_SYM_CLASS_END_OF_FUNCTION),<br>- STRING_PAIR(IMAGE_SYM_CLASS_NULL),<br>- STRING_PAIR(IMAGE_SYM_CLASS_AUTOMATIC),<br>- STRING_PAIR(IMAGE_SYM_CLASS_EXTERNAL),<br>- STRING_PAIR(IMAGE_SYM_CLASS_STATIC),<br>- STRING_PAIR(IMAGE_SYM_CLASS_REGISTER),<br>- STRING_PAIR(IMAGE_SYM_CLASS_EXTERNAL_DEF),<br>- STRING_PAIR(IMAGE_SYM_CLASS_LABEL),<br>- STRING_PAIR(IMAGE_SYM_CLASS_UNDEFINED_LABEL),<br>- STRING_PAIR(IMAGE_SYM_CLASS_MEMBER_OF_STRUCT),<br>- STRING_PAIR(IMAGE_SYM_CLASS_ARGUMENT),<br>- STRING_PAIR(IMAGE_SYM_CLASS_STRUCT_TAG),<br>- STRING_PAIR(IMAGE_SYM_CLASS_MEMBER_OF_UNION),<br>- STRING_PAIR(IMAGE_SYM_CLASS_UNION_TAG),<br>- STRING_PAIR(IMAGE_SYM_CLASS_TYPE_DEFINITION),<br>- STRING_PAIR(IMAGE_SYM_CLASS_UNDEFINED_STATIC),<br>- STRING_PAIR(IMAGE_SYM_CLASS_ENUM_TAG),<br>- STRING_PAIR(IMAGE_SYM_CLASS_MEMBER_OF_ENUM),<br>- STRING_PAIR(IMAGE_SYM_CLASS_REGISTER_PARAM),<br>- STRING_PAIR(IMAGE_SYM_CLASS_BIT_FIELD),<br>- STRING_PAIR(IMAGE_SYM_CLASS_BLOCK),<br>- STRING_PAIR(IMAGE_SYM_CLASS_FUNCTION),<br>- STRING_PAIR(IMAGE_SYM_CLASS_END_OF_STRUCT),<br>- STRING_PAIR(IMAGE_SYM_CLASS_FILE),<br>- STRING_PAIR(IMAGE_SYM_CLASS_SECTION),<br>- STRING_PAIR(IMAGE_SYM_CLASS_WEAK_EXTERNAL),<br>- STRING_PAIR(IMAGE_SYM_CLASS_CLR_TOKEN),<br>-};<br>+namespace {<br><br>-static const pod_pair<COFF::RelocationTypeX86, const char *><br>-RelocationTypeX86Pairs [] = {<br>- STRING_PAIR(IMAGE_REL_I386_ABSOLUTE),<br>- STRING_PAIR(IMAGE_REL_I386_DIR16),<br>- STRING_PAIR(IMAGE_REL_I386_REL16),<br>- STRING_PAIR(IMAGE_REL_I386_DIR32),<br>- STRING_PAIR(IMAGE_REL_I386_DIR32NB),<br>- STRING_PAIR(IMAGE_REL_I386_SEG12),<br>- STRING_PAIR(IMAGE_REL_I386_SECTION),<br>- STRING_PAIR(IMAGE_REL_I386_SECREL),<br>- STRING_PAIR(IMAGE_REL_I386_TOKEN),<br>- STRING_PAIR(IMAGE_REL_I386_SECREL7),<br>- STRING_PAIR(IMAGE_REL_I386_REL32),<br>- STRING_PAIR(IMAGE_REL_AMD64_ABSOLUTE),<br>- STRING_PAIR(IMAGE_REL_AMD64_ADDR64),<br>- STRING_PAIR(IMAGE_REL_AMD64_ADDR32),<br>- STRING_PAIR(IMAGE_REL_AMD64_ADDR32NB),<br>- STRING_PAIR(IMAGE_REL_AMD64_REL32),<br>- STRING_PAIR(IMAGE_REL_AMD64_REL32_1),<br>- STRING_PAIR(IMAGE_REL_AMD64_REL32_2),<br>- STRING_PAIR(IMAGE_REL_AMD64_REL32_3),<br>- STRING_PAIR(IMAGE_REL_AMD64_REL32_4),<br>- STRING_PAIR(IMAGE_REL_AMD64_REL32_5),<br>- STRING_PAIR(IMAGE_REL_AMD64_SECTION),<br>- STRING_PAIR(IMAGE_REL_AMD64_SECREL),<br>- STRING_PAIR(IMAGE_REL_AMD64_SECREL7),<br>- STRING_PAIR(IMAGE_REL_AMD64_TOKEN),<br>- STRING_PAIR(IMAGE_REL_AMD64_SREL32),<br>- STRING_PAIR(IMAGE_REL_AMD64_PAIR),<br>- STRING_PAIR(IMAGE_REL_AMD64_SSPAN32)<br>-};<br>+class COFFDumper {<br>+ const object::COFFObjectFile &Obj;<br>+ COFFYAML::Object YAMLObj;<br>+ void dumpHeader(const object::coff_file_header *Header);<br>+ void dumpSections(unsigned numSections);<br>+ void dumpSymbols(unsigned numSymbols);<br>+ StringRef getHexString(ArrayRef<uint8_t> Data);<br>+ std::vector<std::string> Strings;<br><br>-static const pod_pair<COFF::RelocationTypesARM, const char *><br>-RelocationTypesARMPairs [] = {<br>- STRING_PAIR(IMAGE_REL_ARM_ABSOLUTE),<br>- STRING_PAIR(IMAGE_REL_ARM_ADDR32),<br>- STRING_PAIR(IMAGE_REL_ARM_ADDR32NB),<br>- STRING_PAIR(IMAGE_REL_ARM_BRANCH24),<br>- STRING_PAIR(IMAGE_REL_ARM_BRANCH11),<br>- STRING_PAIR(IMAGE_REL_ARM_TOKEN),<br>- STRING_PAIR(IMAGE_REL_ARM_BLX24),<br>- STRING_PAIR(IMAGE_REL_ARM_BLX11),<br>- STRING_PAIR(IMAGE_REL_ARM_SECTION),<br>- STRING_PAIR(IMAGE_REL_ARM_SECREL),<br>- STRING_PAIR(IMAGE_REL_ARM_MOV32A),<br>- STRING_PAIR(IMAGE_REL_ARM_MOV32T),<br>- STRING_PAIR(IMAGE_REL_ARM_BRANCH20T),<br>- STRING_PAIR(IMAGE_REL_ARM_BRANCH24T),<br>- STRING_PAIR(IMAGE_REL_ARM_BLX23T)<br>+public:<br>+ COFFDumper(const object::COFFObjectFile &Obj);<br>+ COFFYAML::Object &getYAMLObj();<br>};<br>-#undef STRING_PAIR<br><br>-static raw_ostream &writeName(raw_ostream &Out,<br>- const char *Name, std::size_t NameSize) {<br>- for (std::size_t i = 0; i < NameSize; ++i) {<br>- if (!Name[i]) break;<br>- Out << Name[i];<br>- }<br>- return Out;<br>}<br><br>-// Given an array of pod_pair<enum, const char *>, write all enums that match<br>-template <typename T, std::size_t N><br>-static raw_ostream &writeBitMask(raw_ostream &Out,<br>- const pod_pair<T, const char *> (&Arr)[N],<br>- unsigned long Val) {<br>- for (std::size_t i = 0; i < N; ++i)<br>- if (Val & Arr[i].first)<br>- Out << Arr[i].second << ", ";<br>- return Out;<br>+static void check(error_code ec) {<br>+ if (ec)<br>+ report_fatal_error(ec.message());<br>}<br><br>-// Given an array of pod_pair<enum, const char *>, look up a value<br>-template <typename T, std::size_t N><br>-const char *nameLookup(const pod_pair<T, const char *> (&Arr)[N],<br>- unsigned long Val, const char *NotFound = NULL) {<br>- T n = static_cast<T>(Val);<br>- for (std::size_t i = 0; i < N; ++i)<br>- if (n == Arr[i].first)<br>- return Arr[i].second;<br>- return NotFound;<br>+COFFDumper::COFFDumper(const object::COFFObjectFile &Obj) : Obj(Obj) {<br>+ const object::coff_file_header *Header;<br>+ check(Obj.getHeader(Header));<br>+ dumpHeader(Header);<br>+ dumpSections(Header->NumberOfSections);<br>+ dumpSymbols(Header->NumberOfSymbols);<br>}<br><br>-static void yamlCOFFHeader(const object::coff_file_header *Header,<br>- raw_ostream &Out) {<br>- Out << "header: !Header\n";<br>- Out << " Machine: ";<br>- Out << nameLookup(MachineTypePairs, Header->Machine, "# Unknown_MachineTypes")<br>- << " # (";<br>- objyaml::writeHexNumber(Out, Header->Machine) << ")\n\n";<br>+void COFFDumper::dumpHeader(const object::coff_file_header *Header) {<br>+ YAMLObj.Header.Machine = Header->Machine;<br>+ YAMLObj.Header.Characteristics = Header->Characteristics;<br>}<br><br>-<br>-static void yamlCOFFSections(object::COFFObjectFile &Obj,<br>- std::size_t NumSections, raw_ostream &Out) {<br>+void COFFDumper::dumpSections(unsigned NumSections) {<br>+ std::vector<COFFYAML::Section> &Sections = YAMLObj.Sections;<br> error_code ec;<br>- Out << "sections:\n";<br> for (object::section_iterator iter = Obj.begin_sections();<br> iter != Obj.end_sections(); iter.increment(ec)) {<br>- const object::coff_section *sect = Obj.getCOFFSection(iter);<br>-<br>- Out << " - !Section\n";<br>- Out << " Name: ";<br>- writeName(Out, sect->Name, sizeof(sect->Name)) << '\n';<br>-<br>- Out << " Characteristics: [";<br>- writeBitMask(Out, SectionCharacteristicsPairs1, sect->Characteristics);<br>- Out << nameLookup(SectionCharacteristicsPairsAlignment,<br>- sect->Characteristics & 0x00F00000, "# Unrecognized_IMAGE_SCN_ALIGN")<br>- << ", ";<br>- writeBitMask(Out, SectionCharacteristicsPairs2, sect->Characteristics);<br>- Out << "] # ";<br>- objyaml::writeHexNumber(Out, sect->Characteristics) << '\n';<br>+ check(ec);<br>+ const object::coff_section *Sect = Obj.getCOFFSection(iter);<br>+ COFFYAML::Section Sec;<br>+ Sec.Name = Sect->Name; // FIXME: check the null termination!<br>+ uint32_t Characteristics = Sect->Characteristics;<br>+ Sec.Header.Characteristics = Characteristics;<br>+ Sec.Alignment = 1 << (((Characteristics >> 20) & 0xf) - 1);<br><br> ArrayRef<uint8_t> sectionData;<br>- Obj.getSectionContents(sect, sectionData);<br>- Out << " SectionData: ";<br>- objyaml::writeHexStream(Out, sectionData) << '\n';<br>- if (iter->begin_relocations() != iter->end_relocations())<br>- Out << " Relocations:\n";<br>+ Obj.getSectionContents(Sect, sectionData);<br>+ Sec.SectionData = getHexString(sectionData);<br>+<br>+ std::vector<COFF::relocation> Relocations;<br> for (object::relocation_iterator rIter = iter->begin_relocations();<br> rIter != iter->end_relocations(); rIter.increment(ec)) {<br> const object::coff_relocation *reloc = Obj.getCOFFRelocation(rIter);<br>-<br>- Out << " - !Relocation\n";<br>- Out << " VirtualAddress: " ;<br>- objyaml::writeHexNumber(Out, reloc->VirtualAddress) << '\n';<br>- Out << " SymbolTableIndex: " << reloc->SymbolTableIndex << '\n';<br>- Out << " Type: "<br>- << nameLookup(RelocationTypeX86Pairs, reloc->Type) << '\n';<br>- // TODO: Use the correct reloc type for the machine.<br>- Out << '\n';<br>- }<br>-<br>+ COFF::relocation Rel;<br>+ Rel.VirtualAddress = reloc->VirtualAddress;<br>+ Rel.SymbolTableIndex = reloc->SymbolTableIndex;<br>+ Rel.Type = reloc->Type;<br>+ Relocations.push_back(Rel);<br>+ }<br>+ Sec.Relocations = Relocations;<br>+ Sections.push_back(Sec);<br> }<br>}<br><br>-static void yamlCOFFSymbols(object::COFFObjectFile &Obj, std::size_t NumSymbols,<br>- raw_ostream &Out) {<br>+void COFFDumper::dumpSymbols(unsigned NumSymbols) {<br> error_code ec;<br>- Out << "symbols:\n";<br>+ std::vector<COFFYAML::Symbol> &Symbols = YAMLObj.Symbols;<br> for (object::symbol_iterator iter = Obj.begin_symbols();<br> iter != Obj.end_symbols(); iter.increment(ec)) {<br>- // Gather all the info that we need<br>- StringRef str;<br>- const object::coff_symbol *symbol = Obj.getCOFFSymbol(iter);<br>- Obj.getSymbolName(symbol, str);<br>- std::size_t simpleType = symbol->getBaseType();<br>- std::size_t complexType = symbol->getComplexType();<br>- std::size_t storageClass = symbol->StorageClass;<br>-<br>- Out << " - !Symbol\n";<br>- Out << " Name: " << str << '\n';<br>-<br>- Out << " Value: " << symbol->Value << '\n';<br>- Out << " SectionNumber: " << symbol->SectionNumber << '\n';<br>-<br>- Out << " SimpleType: "<br>- << nameLookup(SymbolBaseTypePairs, simpleType,<br>- "# Unknown_SymbolBaseType")<br>- << " # (" << simpleType << ")\n";<br>-<br>- Out << " ComplexType: "<br>- << nameLookup(SymbolComplexTypePairs, complexType,<br>- "# Unknown_SymbolComplexType")<br>- << " # (" << complexType << ")\n";<br>-<br>- Out << " StorageClass: "<br>- << nameLookup(SymbolStorageClassPairs, storageClass,<br>- "# Unknown_StorageClass")<br>- << " # (" << (int) storageClass << ")\n";<br>-<br>- if (symbol->NumberOfAuxSymbols > 0) {<br>- ArrayRef<uint8_t> aux = Obj.getSymbolAuxData(symbol);<br>- Out << " NumberOfAuxSymbols: "<br>- << (int) symbol->NumberOfAuxSymbols << '\n';<br>- Out << " AuxillaryData: ";<br>- objyaml::writeHexStream(Out, aux);<br>- }<br>+ check(ec);<br>+ const object::coff_symbol *Symbol = Obj.getCOFFSymbol(iter);<br>+ COFFYAML::Symbol Sym;<br>+ Obj.getSymbolName(Symbol, Sym.Name);<br>+ Sym.SimpleType = COFF::SymbolBaseType(Symbol->getBaseType());<br>+ Sym.ComplexType = COFF::SymbolComplexType(Symbol->getComplexType());<br>+ Sym.Header.StorageClass = Symbol->StorageClass;<br>+ Sym.Header.Value = Symbol->Value;<br>+ Sym.Header.SectionNumber = Symbol->SectionNumber;<br>+ Sym.Header.NumberOfAuxSymbols = Symbol->NumberOfAuxSymbols;<br>+ Sym.AuxiliaryData = getHexString(Obj.getSymbolAuxData(Symbol));<br>+ Symbols.push_back(Sym);<br>+ }<br>+}<br><br>- Out << '\n';<br>+StringRef COFFDumper::getHexString(ArrayRef<uint8_t> Data) {<br>+ std::string S;<br>+ for (ArrayRef<uint8_t>::iterator I = Data.begin(), E = Data.end(); I != E;<br>+ ++I) {<br>+ uint8_t Byte = *I;<br>+ S.push_back(hexdigit(Byte >> 4));<br>+ S.push_back(hexdigit(Byte & 0xf));<br> }<br>+ Strings.push_back(S);<br>+ return Strings.back();<br>}<br><br>+COFFYAML::Object &COFFDumper::getYAMLObj() {<br>+ return YAMLObj;<br>+}<br><br>-error_code coff2yaml(raw_ostream &Out, MemoryBuffer *TheObj) {<br>+error_code coff2yaml(raw_ostream &Out, MemoryBuffer *Buff) {<br> error_code ec;<br>- object::COFFObjectFile obj(TheObj, ec);<br>- if (ec)<br>- return ec;<br>-<br>- const object::coff_file_header *hd;<br>- ec = obj.getHeader(hd);<br>- if (ec)<br>- return ec;<br>+ object::COFFObjectFile Obj(Buff, ec);<br>+ check(ec);<br>+ COFFDumper Dumper(Obj);<br><br>- yamlCOFFHeader(hd, Out);<br>- yamlCOFFSections(obj, hd->NumberOfSections, Out);<br>- yamlCOFFSymbols(obj, hd->NumberOfSymbols, Out);<br>+ yaml::Output Yout(Out);<br>+ Yout << Dumper.getYAMLObj();<br><br>- return ec;<br>+ return object::object_error::success;<br>}<br><br>Modified: llvm/trunk/tools/yaml2obj/CMakeLists.txt<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/CMakeLists.txt?rev=182169&r1=182168&r2=182169&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/CMakeLists.txt?rev=182169&r1=182168&r2=182169&view=diff</a><br>==============================================================================<br>--- llvm/trunk/tools/yaml2obj/CMakeLists.txt (original)<br>+++ llvm/trunk/tools/yaml2obj/CMakeLists.txt Fri May 17 17:58:42 2013<br>@@ -1,3 +1,5 @@<br>+set(LLVM_LINK_COMPONENTS object)<br>+<br>add_llvm_utility(yaml2obj<br> yaml2obj.cpp<br> )<br><br>Modified: llvm/trunk/tools/yaml2obj/yaml2obj.cpp<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2obj.cpp?rev=182169&r1=182168&r2=182169&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2obj.cpp?rev=182169&r1=182168&r2=182169&view=diff</a><br>==============================================================================<br>--- llvm/trunk/tools/yaml2obj/yaml2obj.cpp (original)<br>+++ llvm/trunk/tools/yaml2obj/yaml2obj.cpp Fri May 17 17:58:42 2013<br>@@ -18,7 +18,7 @@<br>#include "llvm/ADT/StringExtras.h"<br>#include "llvm/ADT/StringMap.h"<br>#include "llvm/ADT/StringSwitch.h"<br>-#include "llvm/Support/COFF.h"<br>+#include "llvm/Object/COFFYaml.h"<br>#include "llvm/Support/Casting.h"<br>#include "llvm/Support/CommandLine.h"<br>#include "llvm/Support/Endian.h"<br>@@ -27,7 +27,6 @@<br>#include "llvm/Support/PrettyStackTrace.h"<br>#include "llvm/Support/Signals.h"<br>#include "llvm/Support/SourceMgr.h"<br>-#include "llvm/Support/YAMLTraits.h"<br>#include "llvm/Support/raw_ostream.h"<br>#include "llvm/Support/system_error.h"<br>#include <vector><br>@@ -37,41 +36,6 @@ using namespace llvm;<br>static cl::opt<std::string><br> Input(cl::Positional, cl::desc("<input>"), cl::init("-"));<br><br>-// The structure of the yaml files is not an exact 1:1 match to COFF. In order<br>-// to use yaml::IO, we use these structures which are closer to the source.<br>-namespace COFFYAML {<br>- struct Section {<br>- COFF::section Header;<br>- unsigned Alignment;<br>- StringRef SectionData;<br>- std::vector<COFF::relocation> Relocations;<br>- StringRef Name;<br>- Section() {<br>- memset(&Header, 0, sizeof(COFF::section));<br>- }<br>- };<br>-<br>- struct Symbol {<br>- COFF::symbol Header;<br>- COFF::SymbolBaseType SimpleType;<br>- COFF::SymbolComplexType ComplexType;<br>- StringRef AuxiliaryData;<br>- StringRef Name;<br>- Symbol() {<br>- memset(&Header, 0, sizeof(COFF::symbol));<br>- }<br>- };<br>-<br>- struct Object {<br>- COFF::header Header;<br>- std::vector<Section> Sections;<br>- std::vector<Symbol> Symbols;<br>- Object() {<br>- memset(&Header, 0, sizeof(COFF::header));<br>- }<br>- };<br>-}<br>-<br>/// This parses a yaml stream that represents a COFF object file.<br>/// See docs/yaml2obj for the yaml scheema.<br>struct COFFParser {<br>@@ -322,329 +286,6 @@ bool writeCOFF(COFFParser &CP, raw_ostre<br> return true;<br>}<br><br>-LLVM_YAML_IS_SEQUENCE_VECTOR(COFF::relocation)<br>-LLVM_YAML_IS_SEQUENCE_VECTOR(COFFYAML::Section)<br>-LLVM_YAML_IS_SEQUENCE_VECTOR(COFFYAML::Symbol)<br>-<br>-namespace llvm {<br>-<br>-namespace COFF {<br>- Characteristics operator|(Characteristics a, Characteristics b) {<br>- uint32_t Ret = static_cast<uint32_t>(a) | static_cast<uint32_t>(b);<br>- return static_cast<Characteristics>(Ret);<br>- }<br>-<br>- SectionCharacteristics<br>- operator|(SectionCharacteristics a, SectionCharacteristics b) {<br>- uint32_t Ret = static_cast<uint32_t>(a) | static_cast<uint32_t>(b);<br>- return static_cast<SectionCharacteristics>(Ret);<br>- }<br>-}<br>-<br>-namespace yaml {<br>-<br>-#define BCase(X) IO.bitSetCase(Value, #X, COFF::X);<br>-<br>-template <><br>-struct ScalarBitSetTraits<COFF::SectionCharacteristics> {<br>- static void bitset(IO &IO, COFF::SectionCharacteristics &Value) {<br>- BCase(IMAGE_SCN_TYPE_NO_PAD);<br>- BCase(IMAGE_SCN_CNT_CODE);<br>- BCase(IMAGE_SCN_CNT_INITIALIZED_DATA);<br>- BCase(IMAGE_SCN_CNT_UNINITIALIZED_DATA);<br>- BCase(IMAGE_SCN_LNK_OTHER);<br>- BCase(IMAGE_SCN_LNK_INFO);<br>- BCase(IMAGE_SCN_LNK_REMOVE);<br>- BCase(IMAGE_SCN_LNK_COMDAT);<br>- BCase(IMAGE_SCN_GPREL);<br>- BCase(IMAGE_SCN_MEM_PURGEABLE);<br>- BCase(IMAGE_SCN_MEM_16BIT);<br>- BCase(IMAGE_SCN_MEM_LOCKED);<br>- BCase(IMAGE_SCN_MEM_PRELOAD);<br>- BCase(IMAGE_SCN_LNK_NRELOC_OVFL);<br>- BCase(IMAGE_SCN_MEM_DISCARDABLE);<br>- BCase(IMAGE_SCN_MEM_NOT_CACHED);<br>- BCase(IMAGE_SCN_MEM_NOT_PAGED);<br>- BCase(IMAGE_SCN_MEM_SHARED);<br>- BCase(IMAGE_SCN_MEM_EXECUTE);<br>- BCase(IMAGE_SCN_MEM_READ);<br>- BCase(IMAGE_SCN_MEM_WRITE);<br>- }<br>-};<br>-<br>-template <><br>-struct ScalarBitSetTraits<COFF::Characteristics> {<br>- static void bitset(IO &IO, COFF::Characteristics &Value) {<br>- BCase(IMAGE_FILE_RELOCS_STRIPPED);<br>- BCase(IMAGE_FILE_EXECUTABLE_IMAGE);<br>- BCase(IMAGE_FILE_LINE_NUMS_STRIPPED);<br>- BCase(IMAGE_FILE_LOCAL_SYMS_STRIPPED);<br>- BCase(IMAGE_FILE_AGGRESSIVE_WS_TRIM);<br>- BCase(IMAGE_FILE_LARGE_ADDRESS_AWARE);<br>- BCase(IMAGE_FILE_BYTES_REVERSED_LO);<br>- BCase(IMAGE_FILE_32BIT_MACHINE);<br>- BCase(IMAGE_FILE_DEBUG_STRIPPED);<br>- BCase(IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP);<br>- BCase(IMAGE_FILE_NET_RUN_FROM_SWAP);<br>- BCase(IMAGE_FILE_SYSTEM);<br>- BCase(IMAGE_FILE_DLL);<br>- BCase(IMAGE_FILE_UP_SYSTEM_ONLY);<br>- BCase(IMAGE_FILE_BYTES_REVERSED_HI);<br>- }<br>-};<br>-#undef BCase<br>-<br>-#define ECase(X) IO.enumCase(Value, #X, COFF::X);<br>-<br>-template <><br>-struct ScalarEnumerationTraits<COFF::SymbolComplexType> {<br>- static void enumeration(IO &IO, COFF::SymbolComplexType &Value) {<br>- ECase(IMAGE_SYM_DTYPE_NULL);<br>- ECase(IMAGE_SYM_DTYPE_POINTER);<br>- ECase(IMAGE_SYM_DTYPE_FUNCTION);<br>- ECase(IMAGE_SYM_DTYPE_ARRAY);<br>- }<br>-};<br>-<br>-template <><br>-struct ScalarEnumerationTraits<COFF::SymbolStorageClass> {<br>- static void enumeration(IO &IO, COFF::SymbolStorageClass &Value) {<br>- ECase(IMAGE_SYM_CLASS_END_OF_FUNCTION);<br>- ECase(IMAGE_SYM_CLASS_NULL);<br>- ECase(IMAGE_SYM_CLASS_AUTOMATIC);<br>- ECase(IMAGE_SYM_CLASS_EXTERNAL);<br>- ECase(IMAGE_SYM_CLASS_STATIC);<br>- ECase(IMAGE_SYM_CLASS_REGISTER);<br>- ECase(IMAGE_SYM_CLASS_EXTERNAL_DEF);<br>- ECase(IMAGE_SYM_CLASS_LABEL);<br>- ECase(IMAGE_SYM_CLASS_UNDEFINED_LABEL);<br>- ECase(IMAGE_SYM_CLASS_MEMBER_OF_STRUCT);<br>- ECase(IMAGE_SYM_CLASS_ARGUMENT);<br>- ECase(IMAGE_SYM_CLASS_STRUCT_TAG);<br>- ECase(IMAGE_SYM_CLASS_MEMBER_OF_UNION);<br>- ECase(IMAGE_SYM_CLASS_UNION_TAG);<br>- ECase(IMAGE_SYM_CLASS_TYPE_DEFINITION);<br>- ECase(IMAGE_SYM_CLASS_UNDEFINED_STATIC);<br>- ECase(IMAGE_SYM_CLASS_ENUM_TAG);<br>- ECase(IMAGE_SYM_CLASS_MEMBER_OF_ENUM);<br>- ECase(IMAGE_SYM_CLASS_REGISTER_PARAM);<br>- ECase(IMAGE_SYM_CLASS_BIT_FIELD);<br>- ECase(IMAGE_SYM_CLASS_BLOCK);<br>- ECase(IMAGE_SYM_CLASS_FUNCTION);<br>- ECase(IMAGE_SYM_CLASS_END_OF_STRUCT);<br>- ECase(IMAGE_SYM_CLASS_FILE);<br>- ECase(IMAGE_SYM_CLASS_SECTION);<br>- ECase(IMAGE_SYM_CLASS_WEAK_EXTERNAL);<br>- ECase(IMAGE_SYM_CLASS_CLR_TOKEN);<br>- }<br>-};<br>-<br>-template <><br>-struct ScalarEnumerationTraits<COFF::SymbolBaseType> {<br>- static void enumeration(IO &IO, COFF::SymbolBaseType &Value) {<br>- ECase(IMAGE_SYM_TYPE_NULL);<br>- ECase(IMAGE_SYM_TYPE_VOID);<br>- ECase(IMAGE_SYM_TYPE_CHAR);<br>- ECase(IMAGE_SYM_TYPE_SHORT);<br>- ECase(IMAGE_SYM_TYPE_INT);<br>- ECase(IMAGE_SYM_TYPE_LONG);<br>- ECase(IMAGE_SYM_TYPE_FLOAT);<br>- ECase(IMAGE_SYM_TYPE_DOUBLE);<br>- ECase(IMAGE_SYM_TYPE_STRUCT);<br>- ECase(IMAGE_SYM_TYPE_UNION);<br>- ECase(IMAGE_SYM_TYPE_ENUM);<br>- ECase(IMAGE_SYM_TYPE_MOE);<br>- ECase(IMAGE_SYM_TYPE_BYTE);<br>- ECase(IMAGE_SYM_TYPE_WORD);<br>- ECase(IMAGE_SYM_TYPE_UINT);<br>- ECase(IMAGE_SYM_TYPE_DWORD);<br>- }<br>-};<br>-<br>-template <><br>-struct ScalarEnumerationTraits<COFF::MachineTypes> {<br>- static void enumeration(IO &IO, COFF::MachineTypes &Value) {<br>- ECase(IMAGE_FILE_MACHINE_UNKNOWN);<br>- ECase(IMAGE_FILE_MACHINE_AM33);<br>- ECase(IMAGE_FILE_MACHINE_AMD64);<br>- ECase(IMAGE_FILE_MACHINE_ARM);<br>- ECase(IMAGE_FILE_MACHINE_ARMV7);<br>- ECase(IMAGE_FILE_MACHINE_EBC);<br>- ECase(IMAGE_FILE_MACHINE_I386);<br>- ECase(IMAGE_FILE_MACHINE_IA64);<br>- ECase(IMAGE_FILE_MACHINE_M32R);<br>- ECase(IMAGE_FILE_MACHINE_MIPS16);<br>- ECase(IMAGE_FILE_MACHINE_MIPSFPU);<br>- ECase(IMAGE_FILE_MACHINE_MIPSFPU16);<br>- ECase(IMAGE_FILE_MACHINE_POWERPC);<br>- ECase(IMAGE_FILE_MACHINE_POWERPCFP);<br>- ECase(IMAGE_FILE_MACHINE_R4000);<br>- ECase(IMAGE_FILE_MACHINE_SH3);<br>- ECase(IMAGE_FILE_MACHINE_SH3DSP);<br>- ECase(IMAGE_FILE_MACHINE_SH4);<br>- ECase(IMAGE_FILE_MACHINE_SH5);<br>- ECase(IMAGE_FILE_MACHINE_THUMB);<br>- ECase(IMAGE_FILE_MACHINE_WCEMIPSV2);<br>- }<br>-};<br>-<br>-template <><br>-struct ScalarEnumerationTraits<COFF::RelocationTypeX86> {<br>- static void enumeration(IO &IO, COFF::RelocationTypeX86 &Value) {<br>- ECase(IMAGE_REL_I386_ABSOLUTE);<br>- ECase(IMAGE_REL_I386_DIR16);<br>- ECase(IMAGE_REL_I386_REL16);<br>- ECase(IMAGE_REL_I386_DIR32);<br>- ECase(IMAGE_REL_I386_DIR32NB);<br>- ECase(IMAGE_REL_I386_SEG12);<br>- ECase(IMAGE_REL_I386_SECTION);<br>- ECase(IMAGE_REL_I386_SECREL);<br>- ECase(IMAGE_REL_I386_TOKEN);<br>- ECase(IMAGE_REL_I386_SECREL7);<br>- ECase(IMAGE_REL_I386_REL32);<br>- ECase(IMAGE_REL_AMD64_ABSOLUTE);<br>- ECase(IMAGE_REL_AMD64_ADDR64);<br>- ECase(IMAGE_REL_AMD64_ADDR32);<br>- ECase(IMAGE_REL_AMD64_ADDR32NB);<br>- ECase(IMAGE_REL_AMD64_REL32);<br>- ECase(IMAGE_REL_AMD64_REL32_1);<br>- ECase(IMAGE_REL_AMD64_REL32_2);<br>- ECase(IMAGE_REL_AMD64_REL32_3);<br>- ECase(IMAGE_REL_AMD64_REL32_4);<br>- ECase(IMAGE_REL_AMD64_REL32_5);<br>- ECase(IMAGE_REL_AMD64_SECTION);<br>- ECase(IMAGE_REL_AMD64_SECREL);<br>- ECase(IMAGE_REL_AMD64_SECREL7);<br>- ECase(IMAGE_REL_AMD64_TOKEN);<br>- ECase(IMAGE_REL_AMD64_SREL32);<br>- ECase(IMAGE_REL_AMD64_PAIR);<br>- ECase(IMAGE_REL_AMD64_SSPAN32);<br>- }<br>-};<br>-<br>-#undef ECase<br>-<br>-template <><br>-struct MappingTraits<COFFYAML::Symbol> {<br>- struct NStorageClass {<br>- NStorageClass(IO&) : StorageClass(COFF::SymbolStorageClass(0)) {<br>- }<br>- NStorageClass(IO&, uint8_t S) : StorageClass(COFF::SymbolStorageClass(S)) {<br>- }<br>- uint8_t denormalize(IO &) {<br>- return StorageClass;<br>- }<br>-<br>- COFF::SymbolStorageClass StorageClass;<br>- };<br>-<br>- static void mapping(IO &IO, COFFYAML::Symbol &S) {<br>- MappingNormalization<NStorageClass, uint8_t> NS(IO, S.Header.StorageClass);<br>-<br>- IO.mapRequired("SimpleType", S.SimpleType);<br>- IO.mapOptional("NumberOfAuxSymbols", S.Header.NumberOfAuxSymbols);<br>- IO.mapRequired("Name", S.Name);<br>- IO.mapRequired("StorageClass", NS->StorageClass);<br>- IO.mapOptional("AuxiliaryData", S.AuxiliaryData);<br>- IO.mapRequired("ComplexType", S.ComplexType);<br>- IO.mapRequired("Value", S.Header.Value);<br>- IO.mapRequired("SectionNumber", S.Header.SectionNumber);<br>- }<br>-};<br>-<br>-template <><br>-struct MappingTraits<COFF::header> {<br>- struct NMachine {<br>- NMachine(IO&) : Machine(COFF::MachineTypes(0)) {<br>- }<br>- NMachine(IO&, uint16_t M) : Machine(COFF::MachineTypes(M)) {<br>- }<br>- uint16_t denormalize(IO &) {<br>- return Machine;<br>- }<br>- COFF::MachineTypes Machine;<br>- };<br>-<br>- struct NCharacteristics {<br>- NCharacteristics(IO&) : Characteristics(COFF::Characteristics(0)) {<br>- }<br>- NCharacteristics(IO&, uint16_t C) :<br>- Characteristics(COFF::Characteristics(C)) {<br>- }<br>- uint16_t denormalize(IO &) {<br>- return Characteristics;<br>- }<br>-<br>- COFF::Characteristics Characteristics;<br>- };<br>-<br>- static void mapping(IO &IO, COFF::header &H) {<br>- MappingNormalization<NMachine, uint16_t> NM(IO, H.Machine);<br>- MappingNormalization<NCharacteristics, uint16_t> NC(IO, H.Characteristics);<br>-<br>- IO.mapRequired("Machine", NM->Machine);<br>- IO.mapOptional("Characteristics", NC->Characteristics);<br>- }<br>-};<br>-<br>-template <><br>-struct MappingTraits<COFF::relocation> {<br>- struct NType {<br>- NType(IO &) : Type(COFF::RelocationTypeX86(0)) {<br>- }<br>- NType(IO &, uint16_t T) : Type(COFF::RelocationTypeX86(T)) {<br>- }<br>- uint16_t denormalize(IO &) {<br>- return Type;<br>- }<br>- COFF::RelocationTypeX86 Type;<br>- };<br>-<br>- static void mapping(IO &IO, COFF::relocation &Rel) {<br>- MappingNormalization<NType, uint16_t> NT(IO, Rel.Type);<br>-<br>- IO.mapRequired("Type", NT->Type);<br>- IO.mapRequired("VirtualAddress", Rel.VirtualAddress);<br>- IO.mapRequired("SymbolTableIndex", Rel.SymbolTableIndex);<br>- }<br>-};<br>-<br>-template <><br>-struct MappingTraits<COFFYAML::Section> {<br>- struct NCharacteristics {<br>- NCharacteristics(IO &) : Characteristics(COFF::SectionCharacteristics(0)) {<br>- }<br>- NCharacteristics(IO &, uint32_t C) :<br>- Characteristics(COFF::SectionCharacteristics(C)) {<br>- }<br>- uint32_t denormalize(IO &) {<br>- return Characteristics;<br>- }<br>- COFF::SectionCharacteristics Characteristics;<br>- };<br>-<br>- static void mapping(IO &IO, COFFYAML::Section &Sec) {<br>- MappingNormalization<NCharacteristics, uint32_t> NC(IO,<br>- Sec.Header.Characteristics);<br>- IO.mapOptional("Relocations", Sec.Relocations);<br>- IO.mapRequired("SectionData", Sec.SectionData);<br>- IO.mapRequired("Characteristics", NC->Characteristics);<br>- IO.mapRequired("Name", Sec.Name);<br>- IO.mapOptional("Alignment", Sec.Alignment);<br>- }<br>-};<br>-<br>-template <><br>-struct MappingTraits<COFFYAML::Object> {<br>- static void mapping(IO &IO, COFFYAML::Object &Obj) {<br>- IO.mapRequired("sections", Obj.Sections);<br>- IO.mapRequired("header", Obj.Header);<br>- IO.mapRequired("symbols", Obj.Symbols);<br>- }<br>-};<br>-} // end namespace yaml<br>-} // end namespace llvm<br>-<br>int main(int argc, char **argv) {<br> cl::ParseCommandLineOptions(argc, argv);<br> sys::PrintStackTraceOnErrorSignal();<br><br><br>_______________________________________________<br>llvm-commits mailing list<br><a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a></div></blockquote></div><br></div></div></body></html>