Don't fetch pointers from a InMemoryStruct.

InMemoryStruct is extremely dangerous as it returns data from an internal
buffer when the endiannes doesn't match. This should fix the tests on big
endian hosts.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@178875 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp
index 6501df9..9ab3599 100644
--- a/lib/Object/MachOObjectFile.cpp
+++ b/lib/Object/MachOObjectFile.cpp
@@ -481,8 +481,7 @@
   return StringRef(P, 16);
 }
 
-error_code MachOObjectFile::getSectionName(DataRefImpl DRI,
-                                           StringRef &Result) const {
+ArrayRef<char> MachOObjectFile::getSectionRawName(DataRefImpl DRI) const {
   if (is64BitLoadCommand(MachOObj.get(), DRI)) {
     LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(DRI.d.a);
     unsigned SectionOffset = LCI.Offset + sizeof(macho::Segment64LoadCommand) +
@@ -490,7 +489,7 @@
     StringRef Data = MachOObj->getData(SectionOffset, sizeof(macho::Section64));
     const macho::Section64 *sec =
       reinterpret_cast<const macho::Section64*>(Data.data());
-    Result = parseSegmentOrSectionName(sec->Name);
+    return ArrayRef<char>(sec->Name, 16);
   } else {
     LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(DRI.d.a);
     unsigned SectionOffset = LCI.Offset + sizeof(macho::SegmentLoadCommand) +
@@ -498,13 +497,19 @@
     StringRef Data = MachOObj->getData(SectionOffset, sizeof(macho::Section));
     const macho::Section *sec =
       reinterpret_cast<const macho::Section*>(Data.data());
-    Result = parseSegmentOrSectionName(sec->Name);
+    return ArrayRef<char>(sec->Name, 16);
   }
+}
+
+error_code MachOObjectFile::getSectionName(DataRefImpl DRI,
+                                           StringRef &Result) const {
+  ArrayRef<char> Raw = getSectionRawName(DRI);
+  Result = parseSegmentOrSectionName(Raw.data());
   return object_error::success;
 }
 
-error_code MachOObjectFile::getSectionFinalSegmentName(DataRefImpl Sec,
-                                                       StringRef &Res) const {
+ArrayRef<char>
+MachOObjectFile::getSectionRawFinalSegmentName(DataRefImpl Sec) const {
   if (is64BitLoadCommand(MachOObj.get(), Sec)) {
     LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(Sec.d.a);
     unsigned SectionOffset = LCI.Offset + sizeof(macho::Segment64LoadCommand) +
@@ -512,7 +517,7 @@
     StringRef Data = MachOObj->getData(SectionOffset, sizeof(macho::Section64));
     const macho::Section64 *sec =
       reinterpret_cast<const macho::Section64*>(Data.data());
-    Res = parseSegmentOrSectionName(sec->SegmentName);
+    return ArrayRef<char>(sec->SegmentName, 16);
   } else {
     LoadCommandInfo LCI = MachOObj->getLoadCommandInfo(Sec.d.a);
     unsigned SectionOffset = LCI.Offset + sizeof(macho::SegmentLoadCommand) +
@@ -520,9 +525,13 @@
     StringRef Data = MachOObj->getData(SectionOffset, sizeof(macho::Section));
     const macho::Section *sec =
       reinterpret_cast<const macho::Section*>(Data.data());
-    Res = parseSegmentOrSectionName(sec->SegmentName);
+    return ArrayRef<char>(sec->SegmentName);
   }
-  return object_error::success;
+}
+
+StringRef MachOObjectFile::getSectionFinalSegmentName(DataRefImpl DRI) const {
+  ArrayRef<char> Raw = getSectionRawFinalSegmentName(DRI);
+  return parseSegmentOrSectionName(Raw.data());
 }
 
 error_code MachOObjectFile::getSectionAddress(DataRefImpl DRI,