<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;" class="">Good call. Revised in r271942.<div class=""><br class=""></div><div class="">-Chris</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jun 4, 2016, at 1:51 AM, Sean Silva <<a href="mailto:chisophugis@gmail.com" class="">chisophugis@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><br class="Apple-interchange-newline"><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;" class=""><div class="gmail_quote" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; 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;">On Thu, May 12, 2016 at 11:21 AM, Chris Bieneman via llvm-commits<span class="Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>></span><span class="Apple-converted-space"> </span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">Author: cbieneman<br class="">Date: Thu May 12 13:21:09 2016<br class="">New Revision: 269320<br class=""><br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=269320&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=269320&view=rev</a><br class="">Log:<br class="">[yaml2macho] Handle mach_header_64 reserved field<br class=""><br class="">I've added the reserved field as an "optional" in YAML, but I've added asserts in the yaml2macho code to enforce that the field is present in mach_header_64, but not in mach_header.<br class=""><br class="">Modified:<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/lib/ObjectYAML/MachOYAML.cpp<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/test/ObjectYAML/MachO/mach_header_64.yaml<br class="">   <span class="Apple-converted-space"> </span>llvm/trunk/tools/yaml2obj/yaml2macho.cpp<br class=""><br class="">Modified: llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h?rev=269320&r1=269319&r2=269320&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h?rev=269320&r1=269319&r2=269320&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h (original)<br class="">+++ llvm/trunk/include/llvm/ObjectYAML/MachOYAML.h Thu May 12 13:21:09 2016<br class="">@@ -30,7 +30,7 @@ struct FileHeader {<br class="">   uint32_t ncmds;<br class="">   uint32_t sizeofcmds;<br class="">   llvm::yaml::Hex32 flags;<br class="">-  // TODO: Need to handle the reserved field in mach_header_64<br class="">+  llvm::yaml::Hex32 reserved;<br class=""> };<br class=""><br class=""> struct Object {<br class=""><br class="">Modified: llvm/trunk/lib/ObjectYAML/MachOYAML.cpp<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/MachOYAML.cpp?rev=269320&r1=269319&r2=269320&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/MachOYAML.cpp?rev=269320&r1=269319&r2=269320&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/lib/ObjectYAML/MachOYAML.cpp (original)<br class="">+++ llvm/trunk/lib/ObjectYAML/MachOYAML.cpp Thu May 12 13:21:09 2016<br class="">@@ -27,6 +27,8 @@ void MappingTraits<MachOYAML::FileHeader<br class="">   IO.mapRequired("ncmds", FileHdr.ncmds);<br class="">   IO.mapRequired("sizeofcmds", FileHdr.sizeofcmds);<br class="">   IO.mapRequired("flags", FileHdr.flags);<br class="">+  IO.mapOptional("reserved", FileHdr.reserved,<br class="">+                 static_cast<llvm::yaml::Hex32>(0xDEADBEEFu));<br class=""> }<br class=""><br class=""> void MappingTraits<MachOYAML::Object>::mapping(IO &IO,<br class=""><br class="">Modified: llvm/trunk/test/ObjectYAML/MachO/mach_header_64.yaml<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/mach_header_64.yaml?rev=269320&r1=269319&r2=269320&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/mach_header_64.yaml?rev=269320&r1=269319&r2=269320&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/test/ObjectYAML/MachO/mach_header_64.yaml (original)<br class="">+++ llvm/trunk/test/ObjectYAML/MachO/mach_header_64.yaml Thu May 12 13:21:09 2016<br class="">@@ -9,6 +9,7 @@ FileHeader:<br class="">   ncmds:           0<br class="">   sizeofcmds:      0<br class="">   flags:           0x00218085<br class="">+  reserved:        0x00000000<br class=""> ...<br class=""><br class=""> # CHECK: --- !mach-o<br class="">@@ -20,4 +21,5 @@ FileHeader:<br class=""> # CHECK:   ncmds:           0<br class=""> # CHECK:   sizeofcmds:      0<br class=""> # CHECK:   flags:           0x00218085<br class="">+# CHECK:   reserved:        0x00000000<br class=""> # CHECK: ...<br class=""><br class="">Modified: llvm/trunk/tools/yaml2obj/yaml2macho.cpp<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2macho.cpp?rev=269320&r1=269319&r2=269320&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2macho.cpp?rev=269320&r1=269319&r2=269320&view=diff</a><br class="">==============================================================================<br class="">--- llvm/trunk/tools/yaml2obj/yaml2macho.cpp (original)<br class="">+++ llvm/trunk/tools/yaml2obj/yaml2macho.cpp Thu May 12 13:21:09 2016<br class="">@@ -30,6 +30,10 @@ public:<br class="">               Obj.Header.magic == MachO::MH_CIGAM_64;<br class="">     memset(reinterpret_cast<void *>(&Header64), 0,<br class="">           <span class="Apple-converted-space"> </span>sizeof(MachO::mach_header_64));<br class="">+    assert((is64Bit || Obj.Header.reserved == 0xDEADBEEFu) &&<br class="">+           "32-bit MachO has reserved in header");<br class="">+    assert((!is64Bit || Obj.Header.reserved != 0xDEADBEEFu) &&<br class="">+           "64-bit MachO has missing reserved in header");<br class="">   }<br class=""><br class="">   Error writeMachO(raw_ostream &OS);<br class="">@@ -60,9 +64,11 @@ Error MachOWriter::writeHeader(raw_ostre<br class="">   Header.ncmds = Obj.Header.ncmds;<br class="">   Header.sizeofcmds = Obj.Header.sizeofcmds;<br class="">   Header.flags = Obj.Header.flags;<br class="">+  Header64.reserved = Obj.Header.reserved;<br class=""></blockquote><div class=""><br class=""></div><div class="">Why not just use a single Header64 object instead of the union? That avoids this dubious stuff where you're reading from the non-active part of the union below. I.e. you write into Header64, then try to read from Header after that without having all the fields of Header64.</div><div class=""><br class=""></div><div class="">-- Sean Silva</div><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><br class="">-  if (is64Bit)<br class="">+  if (is64Bit) {<br class="">     OS.write((const char *)&Header64, sizeof(MachO::mach_header_64));<br class="">+  }<br class="">   else<br class="">     OS.write((const char *)&Header, sizeof(MachO::mach_header));<br class=""><br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a></blockquote></div></div></blockquote></div><br class=""></div></body></html>