[llvm] r273623 - [yaml2macho] Removing asserts in favor of explicit yaml parse error
Chris Bieneman via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 23 15:36:32 PDT 2016
Author: cbieneman
Date: Thu Jun 23 17:36:31 2016
New Revision: 273623
URL: http://llvm.org/viewvc/llvm-project?rev=273623&view=rev
Log:
[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.
Added:
llvm/trunk/test/ObjectYAML/MachO/mach_header_32_malformed.yaml
Modified:
llvm/trunk/lib/ObjectYAML/MachOYAML.cpp
llvm/trunk/test/ObjectYAML/MachO/mach_header.yaml
llvm/trunk/tools/yaml2obj/yaml2macho.cpp
Modified: llvm/trunk/lib/ObjectYAML/MachOYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/MachOYAML.cpp?rev=273623&r1=273622&r2=273623&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/MachOYAML.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/MachOYAML.cpp Thu Jun 23 17:36:31 2016
@@ -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
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,
Modified: llvm/trunk/test/ObjectYAML/MachO/mach_header.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/mach_header.yaml?rev=273623&r1=273622&r2=273623&view=diff
==============================================================================
--- llvm/trunk/test/ObjectYAML/MachO/mach_header.yaml (original)
+++ llvm/trunk/test/ObjectYAML/MachO/mach_header.yaml Thu Jun 23 17:36:31 2016
@@ -20,4 +20,5 @@ FileHeader:
# CHECK: ncmds: 0
# CHECK: sizeofcmds: 0
# CHECK: flags: 0x00218085
+# CHECK-NOT: reserved:
# CHECK: ...
Added: llvm/trunk/test/ObjectYAML/MachO/mach_header_32_malformed.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ObjectYAML/MachO/mach_header_32_malformed.yaml?rev=273623&view=auto
==============================================================================
--- llvm/trunk/test/ObjectYAML/MachO/mach_header_32_malformed.yaml (added)
+++ llvm/trunk/test/ObjectYAML/MachO/mach_header_32_malformed.yaml Thu Jun 23 17:36:31 2016
@@ -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'
Modified: llvm/trunk/tools/yaml2obj/yaml2macho.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2macho.cpp?rev=273623&r1=273622&r2=273623&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2macho.cpp (original)
+++ llvm/trunk/tools/yaml2obj/yaml2macho.cpp Thu Jun 23 17:36:31 2016
@@ -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);
More information about the llvm-commits
mailing list