[llvm] r288990 - [yaml2obj] Refactor and abstract yaml2dwarf functions

Chris Bieneman via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 7 14:30:16 PST 2016


Author: cbieneman
Date: Wed Dec  7 16:30:15 2016
New Revision: 288990

URL: http://llvm.org/viewvc/llvm-project?rev=288990&view=rev
Log:
[yaml2obj] Refactor and abstract yaml2dwarf functions

This abstracts the code for emitting DWARF binary from the DWARFYAML types into reusable interfaces that could be used by ELF and COFF.

Added:
    llvm/trunk/tools/yaml2obj/yaml2dwarf.cpp
Modified:
    llvm/trunk/tools/yaml2obj/CMakeLists.txt
    llvm/trunk/tools/yaml2obj/yaml2macho.cpp
    llvm/trunk/tools/yaml2obj/yaml2obj.h

Modified: llvm/trunk/tools/yaml2obj/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/CMakeLists.txt?rev=288990&r1=288989&r2=288990&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/CMakeLists.txt (original)
+++ llvm/trunk/tools/yaml2obj/CMakeLists.txt Wed Dec  7 16:30:15 2016
@@ -8,6 +8,7 @@ set(LLVM_LINK_COMPONENTS
 add_llvm_tool(yaml2obj
   yaml2obj.cpp
   yaml2coff.cpp
+  yaml2dwarf.cpp
   yaml2elf.cpp
   yaml2macho.cpp
   )

Added: llvm/trunk/tools/yaml2obj/yaml2dwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2dwarf.cpp?rev=288990&view=auto
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2dwarf.cpp (added)
+++ llvm/trunk/tools/yaml2obj/yaml2dwarf.cpp Wed Dec  7 16:30:15 2016
@@ -0,0 +1,41 @@
+//===- yaml2dwarf - Convert YAML to DWARF binary data ---------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// \brief The DWARF component of yaml2obj.
+///
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ObjectYAML/DWARFYAML.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/LEB128.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+void yaml2debug_str(raw_ostream &OS, const DWARFYAML::DWARFData &DI) {
+  for (auto Str : DI.DebugStrings) {
+    OS.write(Str.data(), Str.size());
+    OS.write('\0');
+  }
+}
+
+void yaml2debug_abbrev(raw_ostream &OS, const DWARFYAML::DWARFData &DI) {
+  for (auto AbbrevDecl : DI.AbbrevDecls) {
+    encodeULEB128(AbbrevDecl.Code, OS);
+    encodeULEB128(AbbrevDecl.Tag, OS);
+    OS.write(AbbrevDecl.Children);
+    for (auto Attr : AbbrevDecl.Attributes) {
+      encodeULEB128(Attr.Attribute, OS);
+      encodeULEB128(Attr.Form, OS);
+    }
+    encodeULEB128(0, OS);
+    encodeULEB128(0, OS);
+  }
+}

Modified: llvm/trunk/tools/yaml2obj/yaml2macho.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2macho.cpp?rev=288990&r1=288989&r2=288990&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2macho.cpp (original)
+++ llvm/trunk/tools/yaml2obj/yaml2macho.cpp Wed Dec  7 16:30:15 2016
@@ -389,22 +389,9 @@ Error MachOWriter::writeDWARFData(raw_os
   for(auto Section : Sections) {
     ZeroToOffset(OS, Section.offset);
     if (0 == strncmp(&Section.sectname[0], "__debug_str", 16)) {
-      for (auto Str : Obj.DWARF.DebugStrings) {
-        OS.write(Str.data(), Str.size());
-        OS.write('\0');
-      }
+      yaml2debug_str(OS, Obj.DWARF);
     } else if (0 == strncmp(&Section.sectname[0], "__debug_abbrev", 16)) {
-      for (auto AbbrevDecl : Obj.DWARF.AbbrevDecls) {
-        encodeULEB128(AbbrevDecl.Code, OS);
-        encodeULEB128(AbbrevDecl.Tag, OS);
-        OS.write(AbbrevDecl.Children);
-        for (auto Attr : AbbrevDecl.Attributes) {
-          encodeULEB128(Attr.Attribute, OS);
-          encodeULEB128(Attr.Form, OS);
-        }
-        encodeULEB128(0, OS);
-        encodeULEB128(0, OS);
-      }
+      yaml2debug_abbrev(OS, Obj.DWARF);
     }
   }
   return Error::success();

Modified: llvm/trunk/tools/yaml2obj/yaml2obj.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2obj.h?rev=288990&r1=288989&r2=288990&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2obj.h (original)
+++ llvm/trunk/tools/yaml2obj/yaml2obj.h Wed Dec  7 16:30:15 2016
@@ -23,6 +23,10 @@ namespace ELFYAML {
 struct Object;
 }
 
+namespace DWARFYAML {
+struct DWARFData;
+}
+
 namespace yaml {
 class Input;
 struct YamlObjectFile;
@@ -33,4 +37,9 @@ int yaml2coff(llvm::COFFYAML::Object &Do
 int yaml2elf(llvm::ELFYAML::Object &Doc, llvm::raw_ostream &Out);
 int yaml2macho(llvm::yaml::YamlObjectFile &Doc, llvm::raw_ostream &Out);
 
+void yaml2debug_abbrev(llvm::raw_ostream &OS,
+                       const llvm::DWARFYAML::DWARFData &DI);
+void yaml2debug_str(llvm::raw_ostream &OS,
+                    const llvm::DWARFYAML::DWARFData &DI);
+
 #endif




More information about the llvm-commits mailing list