summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ObjectYAML/MachOYAML.cpp
diff options
context:
space:
mode:
authorChris Bieneman <beanz@apple.com>2016-06-23 22:36:31 +0000
committerChris Bieneman <beanz@apple.com>2016-06-23 22:36:31 +0000
commit10dcd3bd3b4b688755e9a067ddcf092695953d0f (patch)
tree0e37c915fd63b20558f9e7f763449d3f6689c01a /llvm/lib/ObjectYAML/MachOYAML.cpp
parentc17cb815ac9ff5ff0bd339d5bdf8fd0a492aa8b4 (diff)
downloadbcm5719-llvm-10dcd3bd3b4b688755e9a067ddcf092695953d0f.tar.gz
bcm5719-llvm-10dcd3bd3b4b688755e9a067ddcf092695953d0f.zip
[yaml2macho] Removing asserts in favor of explicit yaml parse error
32-bit Mach headers don't have reserved fields. When generating the mapping for 32-bit headers leaving off the reserved field will result in parse errors if the field is present in the yaml. Added a CHECK-NOT line to ensure that mach_header.yaml isn't adding a reserved field, and a test to ensure that the parser error gets hit with 32-bit headers. llvm-svn: 273623
Diffstat (limited to 'llvm/lib/ObjectYAML/MachOYAML.cpp')
-rw-r--r--llvm/lib/ObjectYAML/MachOYAML.cpp6
1 files changed, 4 insertions, 2 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,
OpenPOWER on IntegriCloud