summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/ObjectYAML/MachOYAML.cpp6
-rw-r--r--llvm/test/ObjectYAML/MachO/mach_header.yaml1
-rw-r--r--llvm/test/ObjectYAML/MachO/mach_header_32_malformed.yaml15
-rw-r--r--llvm/tools/yaml2obj/yaml2macho.cpp4
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);
OpenPOWER on IntegriCloud