[llvm] r269313 - [obj2yaml] Include all mach_header fields in yaml

Chris Bieneman via llvm-commits llvm-commits at lists.llvm.org
Thu May 12 10:44:44 PDT 2016


Author: cbieneman
Date: Thu May 12 12:44:43 2016
New Revision: 269313

URL: http://llvm.org/viewvc/llvm-project?rev=269313&view=rev
Log:
[obj2yaml] Include all mach_header fields in yaml

Since we want to be able to use yaml to describe degenerate object files as well as valid ones, we need to be explicit of some fields in your yaml definitions.

Modified:
    llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h
    llvm/trunk/lib/ObjectYAML/MachOYAML.cpp
    llvm/trunk/tools/obj2yaml/macho2yaml.cpp

Modified: llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h?rev=269313&r1=269312&r2=269313&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h (original)
+++ llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h Thu May 12 12:44:43 2016
@@ -23,11 +23,14 @@ namespace llvm {
 namespace MachOYAML {
 
 struct FileHeader {
+  llvm::yaml::Hex32 magic;
   llvm::yaml::Hex32 cputype;
   llvm::yaml::Hex32 cpusubtype;
   llvm::yaml::Hex32 filetype;
   uint32_t ncmds;
+  uint32_t sizeofcmds;
   llvm::yaml::Hex32 flags;
+  // TODO: Need to handle the reserved field in mach_header_64
 };
 
 struct Object {

Modified: llvm/trunk/lib/ObjectYAML/MachOYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/MachOYAML.cpp?rev=269313&r1=269312&r2=269313&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/MachOYAML.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/MachOYAML.cpp Thu May 12 12:44:43 2016
@@ -20,10 +20,12 @@ namespace yaml {
 
 void MappingTraits<MachOYAML::FileHeader>::mapping(
     IO &IO, MachOYAML::FileHeader &FileHdr) {
+  IO.mapRequired("magic", FileHdr.magic);
   IO.mapRequired("cputype", FileHdr.cputype);
   IO.mapRequired("cpusubtype", FileHdr.cpusubtype);
   IO.mapOptional("filetype", FileHdr.filetype);
   IO.mapRequired("ncmds", FileHdr.ncmds);
+  IO.mapRequired("sizeofcmds", FileHdr.sizeofcmds);
   IO.mapRequired("flags", FileHdr.flags);
 }
 
@@ -31,7 +33,7 @@ void MappingTraits<MachOYAML::Object>::m
                                                MachOYAML::Object &Object) {
   // If the context isn't already set, tag the document as !mach-o.
   // For Fat files there will be a different tag so they can be differentiated.
-  if(!IO.getContext()) {
+  if (!IO.getContext()) {
     IO.setContext(&Object);
     IO.mapTag("!mach-o", true);
   }

Modified: llvm/trunk/tools/obj2yaml/macho2yaml.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/macho2yaml.cpp?rev=269313&r1=269312&r2=269313&view=diff
==============================================================================
--- llvm/trunk/tools/obj2yaml/macho2yaml.cpp (original)
+++ llvm/trunk/tools/obj2yaml/macho2yaml.cpp Thu May 12 12:44:43 2016
@@ -26,10 +26,12 @@ public:
 
 Expected<MachOYAML::Object *> MachODumper::dump() {
   auto Y = make_unique<MachOYAML::Object>();
+  Y->Header.magic = Obj.getHeader().magic;
   Y->Header.cputype = Obj.getHeader().cputype;
   Y->Header.cpusubtype = Obj.getHeader().cpusubtype;
   Y->Header.filetype = Obj.getHeader().filetype;
   Y->Header.ncmds = Obj.getHeader().ncmds;
+  Y->Header.sizeofcmds = Obj.getHeader().sizeofcmds;
   Y->Header.flags = Obj.getHeader().flags;
 
   return Y.release();




More information about the llvm-commits mailing list