diff options
-rw-r--r-- | llvm/lib/ObjectYAML/MachOYAML.cpp | 6 | ||||
-rw-r--r-- | llvm/test/ObjectYAML/MachO/mach_header.yaml | 1 | ||||
-rw-r--r-- | llvm/test/ObjectYAML/MachO/mach_header_32_malformed.yaml | 15 | ||||
-rw-r--r-- | llvm/tools/yaml2obj/yaml2macho.cpp | 4 |
4 files changed, 20 insertions, 6 deletions
diff --git a/llvm/lib/ObjectYAML/MachOYAML.cpp b/llvm/lib/ObjectYAML/MachOYAML.cpp index b4e808552df..d13c84eb04f 100644 --- a/llvm/lib/ObjectYAML/MachOYAML.cpp +++ b/llvm/lib/ObjectYAML/MachOYAML.cpp @@ -14,6 +14,7 @@ #include "llvm/ObjectYAML/MachOYAML.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Format.h" +#include "llvm/Support/MachO.h" #include <string.h> // For memcpy, memset and strnlen. @@ -79,8 +80,9 @@ void MappingTraits<MachOYAML::FileHeader>::mapping( IO.mapRequired("ncmds", FileHdr.ncmds); IO.mapRequired("sizeofcmds", FileHdr.sizeofcmds); IO.mapRequired("flags", FileHdr.flags); - IO.mapOptional("reserved", FileHdr.reserved, - static_cast<llvm::yaml::Hex32>(0xDEADBEEFu)); + if (FileHdr.magic == MachO::MH_MAGIC_64 || + FileHdr.magic == MachO::MH_CIGAM_64) + IO.mapRequired("reserved", FileHdr.reserved); } void MappingTraits<MachOYAML::Object>::mapping(IO &IO, diff --git a/llvm/test/ObjectYAML/MachO/mach_header.yaml b/llvm/test/ObjectYAML/MachO/mach_header.yaml index 722a00be6f8..8af3187011e 100644 --- a/llvm/test/ObjectYAML/MachO/mach_header.yaml +++ b/llvm/test/ObjectYAML/MachO/mach_header.yaml @@ -20,4 +20,5 @@ FileHeader: # CHECK: ncmds: 0 # CHECK: sizeofcmds: 0 # CHECK: flags: 0x00218085 +# CHECK-NOT: reserved: # CHECK: ... diff --git a/llvm/test/ObjectYAML/MachO/mach_header_32_malformed.yaml b/llvm/test/ObjectYAML/MachO/mach_header_32_malformed.yaml new file mode 100644 index 00000000000..33946f3bde5 --- /dev/null +++ b/llvm/test/ObjectYAML/MachO/mach_header_32_malformed.yaml @@ -0,0 +1,15 @@ +# RUN: not yaml2obj -format=macho %s 2>&1 | FileCheck %s + +--- !mach-o +FileHeader: + magic: 0xFEEDFACE + cputype: 0x00000007 + cpusubtype: 0x80000003 + filetype: 0x00000002 + ncmds: 0 + sizeofcmds: 0 + flags: 0x00218085 + reserved: 0 +... + +# CHECK: error: unknown key 'reserved' diff --git a/llvm/tools/yaml2obj/yaml2macho.cpp b/llvm/tools/yaml2obj/yaml2macho.cpp index 510f7609b75..7821e63cf88 100644 --- a/llvm/tools/yaml2obj/yaml2macho.cpp +++ b/llvm/tools/yaml2obj/yaml2macho.cpp @@ -32,10 +32,6 @@ public: is64Bit = Obj.Header.magic == MachO::MH_MAGIC_64 || Obj.Header.magic == MachO::MH_CIGAM_64; memset(reinterpret_cast<void *>(&Header), 0, sizeof(MachO::mach_header_64)); - assert((is64Bit || Obj.Header.reserved == 0xDEADBEEFu) && - "32-bit MachO has reserved in header"); - assert((!is64Bit || Obj.Header.reserved != 0xDEADBEEFu) && - "64-bit MachO has missing reserved in header"); } Error writeMachO(raw_ostream &OS); |