summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/Object/MachO.h5
-rw-r--r--llvm/lib/Object/MachOObjectFile.cpp10
2 files changed, 6 insertions, 9 deletions
diff --git a/llvm/include/llvm/Object/MachO.h b/llvm/include/llvm/Object/MachO.h
index 2bfde85c21a..6a39e578396 100644
--- a/llvm/include/llvm/Object/MachO.h
+++ b/llvm/include/llvm/Object/MachO.h
@@ -429,7 +429,10 @@ public:
}
private:
- MachO::mach_header_64 Header64;
+ union {
+ MachO::mach_header_64 Header64;
+ MachO::mach_header Header;
+ };
typedef SmallVector<const char*, 1> SectionList;
SectionList Sections;
typedef SmallVector<const char*, 1> LibraryList;
diff --git a/llvm/lib/Object/MachOObjectFile.cpp b/llvm/lib/Object/MachOObjectFile.cpp
index dc7c56c98ac..075d959be1d 100644
--- a/llvm/lib/Object/MachOObjectFile.cpp
+++ b/llvm/lib/Object/MachOObjectFile.cpp
@@ -234,10 +234,7 @@ MachOObjectFile::MachOObjectFile(MemoryBufferRef Object, bool IsLittleEndian,
if (is64Bit())
parseHeader(this, Header64, EC);
else
- // First fields of MachO::mach_header_64 are the same as
- // in MachO::mach_header.
- parseHeader(this, *reinterpret_cast<MachO::mach_header *>(&this->Header64),
- EC);
+ parseHeader(this, Header, EC);
if (EC)
return;
@@ -1251,7 +1248,6 @@ unsigned MachOObjectFile::getArch() const {
Triple MachOObjectFile::getArch(const char **McpuDefault,
Triple *ThumbTriple) const {
- const auto &Header = getHeader();
*ThumbTriple = getThumbArch(Header.cputype, Header.cpusubtype, McpuDefault);
return getArch(Header.cputype, Header.cpusubtype, McpuDefault);
}
@@ -2186,9 +2182,7 @@ MachOObjectFile::getDice(DataRefImpl Rel) const {
}
const MachO::mach_header &MachOObjectFile::getHeader() const {
- // First fields of MachO::mach_header_64 are the same as
- // in MachO::mach_header.
- return *reinterpret_cast<const MachO::mach_header *>(&this->Header64);
+ return Header;
}
const MachO::mach_header_64 &MachOObjectFile::getHeader64() const {
OpenPOWER on IntegriCloud