summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/ObjectYAML/MachOYAML.h2
-rw-r--r--llvm/lib/ObjectYAML/MachOYAML.cpp2
-rw-r--r--llvm/test/ObjectYAML/MachO/mach_header_64.yaml2
-rw-r--r--llvm/tools/yaml2obj/yaml2macho.cpp8
4 files changed, 12 insertions, 2 deletions
diff --git a/llvm/include/llvm/ObjectYAML/MachOYAML.h b/llvm/include/llvm/ObjectYAML/MachOYAML.h
index 5eaeb58739a..00d7ab2d377 100644
--- a/llvm/include/llvm/ObjectYAML/MachOYAML.h
+++ b/llvm/include/llvm/ObjectYAML/MachOYAML.h
@@ -30,7 +30,7 @@ struct FileHeader {
uint32_t ncmds;
uint32_t sizeofcmds;
llvm::yaml::Hex32 flags;
- // TODO: Need to handle the reserved field in mach_header_64
+ llvm::yaml::Hex32 reserved;
};
struct Object {
diff --git a/llvm/lib/ObjectYAML/MachOYAML.cpp b/llvm/lib/ObjectYAML/MachOYAML.cpp
index c33f54f9c50..d54140b6794 100644
--- a/llvm/lib/ObjectYAML/MachOYAML.cpp
+++ b/llvm/lib/ObjectYAML/MachOYAML.cpp
@@ -27,6 +27,8 @@ 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));
}
void MappingTraits<MachOYAML::Object>::mapping(IO &IO,
diff --git a/llvm/test/ObjectYAML/MachO/mach_header_64.yaml b/llvm/test/ObjectYAML/MachO/mach_header_64.yaml
index a9ea82e1a84..a76997004ea 100644
--- a/llvm/test/ObjectYAML/MachO/mach_header_64.yaml
+++ b/llvm/test/ObjectYAML/MachO/mach_header_64.yaml
@@ -9,6 +9,7 @@ FileHeader:
ncmds: 0
sizeofcmds: 0
flags: 0x00218085
+ reserved: 0x00000000
...
# CHECK: --- !mach-o
@@ -20,4 +21,5 @@ FileHeader:
# CHECK: ncmds: 0
# CHECK: sizeofcmds: 0
# CHECK: flags: 0x00218085
+# CHECK: reserved: 0x00000000
# CHECK: ...
diff --git a/llvm/tools/yaml2obj/yaml2macho.cpp b/llvm/tools/yaml2obj/yaml2macho.cpp
index d5d9642916f..8437475a411 100644
--- a/llvm/tools/yaml2obj/yaml2macho.cpp
+++ b/llvm/tools/yaml2obj/yaml2macho.cpp
@@ -30,6 +30,10 @@ public:
Obj.Header.magic == MachO::MH_CIGAM_64;
memset(reinterpret_cast<void *>(&Header64), 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);
@@ -60,9 +64,11 @@ Error MachOWriter::writeHeader(raw_ostream &OS) {
Header.ncmds = Obj.Header.ncmds;
Header.sizeofcmds = Obj.Header.sizeofcmds;
Header.flags = Obj.Header.flags;
+ Header64.reserved = Obj.Header.reserved;
- if (is64Bit)
+ if (is64Bit) {
OS.write((const char *)&Header64, sizeof(MachO::mach_header_64));
+ }
else
OS.write((const char *)&Header, sizeof(MachO::mach_header));
OpenPOWER on IntegriCloud