diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:33 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:33 +0000 | 
| commit | 7d6988fdd2aee0e033034e147f16fe05594a60e4 (patch) | |
| tree | 8aa90abd4e0cce6f71fd338ee32e9957135bc642 /unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp | |
| parent | e2fd426bdafe9f5c10066d3926ece6e342184a67 (diff) | |
Notes
Diffstat (limited to 'unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp')
| -rw-r--r-- | unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp | 754 | 
1 files changed, 0 insertions, 754 deletions
diff --git a/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp b/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp deleted file mode 100644 index 336bbdba6269..000000000000 --- a/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp +++ /dev/null @@ -1,754 +0,0 @@ -//===- lld/unittest/MachOTests/MachONormalizedFileBinaryReaderTests.cpp ---===// -// -//                     The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "../../lib/ReaderWriter/MachO/MachONormalizedFile.h" -#include "lld/ReaderWriter/MachOLinkingContext.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/BinaryFormat/MachO.h" -#include "llvm/Support/Error.h" -#include "llvm/Support/FileSystem.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/YAMLTraits.h" -#include "gtest/gtest.h" -#include <cstdint> -#include <memory> - -using llvm::SmallString; -using llvm::StringRef; -using llvm::MemoryBuffer; -using llvm::Twine; - -using namespace lld::mach_o::normalized; -using namespace llvm::MachO; - -static std::unique_ptr<NormalizedFile> -fromBinary(const uint8_t bytes[], unsigned length, StringRef archStr) { -  StringRef sr((const char*)bytes, length); -  std::unique_ptr<MemoryBuffer> mb(MemoryBuffer::getMemBuffer(sr, "", false)); -  llvm::Expected<std::unique_ptr<NormalizedFile>> r = -      lld::mach_o::normalized::readBinary( -          mb, lld::MachOLinkingContext::archFromName(archStr)); -  EXPECT_FALSE(!r); -  return std::move(*r); -} - -// The Mach-O object reader uses functions such as read32 or read64 -// which don't allow unaligned access. Our in-memory object file -// needs to be aligned to a larger boundary than uint8_t's. -#if _MSC_VER -#define FILEBYTES __declspec(align(64)) const uint8_t fileBytes[] -#else -#define FILEBYTES const uint8_t fileBytes[] __attribute__((aligned(64))) -#endif - -TEST(BinaryReaderTest, empty_obj_x86_64) { -  FILEBYTES = { -      0xcf, 0xfa, 0xed, 0xfe, 0x07, 0x00, 0x00, 0x01, -      0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -      0x01, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, -      0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x19, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -      0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x5f, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x5f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "x86_64"); -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_x86_64); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_TRUE(f->localSymbols.empty()); -  EXPECT_TRUE(f->globalSymbols.empty()); -  EXPECT_TRUE(f->undefinedSymbols.empty()); -} - -TEST(BinaryReaderTest, empty_obj_x86) { -  FILEBYTES = { -      0xce, 0xfa, 0xed, 0xfe, 0x07, 0x00, 0x00, 0x00, -      0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -      0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, -      0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -      0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -      0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x74, 0x65, -      0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x54, 0x45, -      0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "i386"); -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_x86); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_TRUE(f->localSymbols.empty()); -  EXPECT_TRUE(f->globalSymbols.empty()); -  EXPECT_TRUE(f->undefinedSymbols.empty()); -} - -TEST(BinaryReaderTest, empty_obj_ppc) { -  FILEBYTES = { -      0xfe, 0xed, 0xfa, 0xce, 0x00, 0x00, 0x00, 0x12, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -      0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7c, -      0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, -      0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -      0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, -      0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x74, 0x65, -      0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x54, 0x45, -      0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "ppc"); -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_ppc); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_TRUE(f->localSymbols.empty()); -  EXPECT_TRUE(f->globalSymbols.empty()); -  EXPECT_TRUE(f->undefinedSymbols.empty()); -} - -TEST(BinaryReaderTest, empty_obj_armv7) { -  FILEBYTES = { -      0xce, 0xfa, 0xed, 0xfe, 0x0c, 0x00, 0x00, 0x00, -      0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -      0x01, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, -      0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -      0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -      0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x74, 0x65, -      0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x54, 0x45, -      0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, -      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "armv7"); -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_armv7); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_TRUE(f->localSymbols.empty()); -  EXPECT_TRUE(f->globalSymbols.empty()); -  EXPECT_TRUE(f->undefinedSymbols.empty()); -} - -TEST(BinaryReaderTest, empty_obj_x86_64_arm7) { -  FILEBYTES = { -#include "empty_obj_x86_armv7.txt" -  }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "x86_64"); -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_x86_64); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_TRUE(f->localSymbols.empty()); -  EXPECT_TRUE(f->globalSymbols.empty()); -  EXPECT_TRUE(f->undefinedSymbols.empty()); - -  std::unique_ptr<NormalizedFile> f2 = -      fromBinary(fileBytes, sizeof(fileBytes), "armv7"); -  EXPECT_EQ(f2->arch, lld::MachOLinkingContext::arch_armv7); -  EXPECT_EQ((int)(f2->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f2->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_TRUE(f2->localSymbols.empty()); -  EXPECT_TRUE(f2->globalSymbols.empty()); -  EXPECT_TRUE(f2->undefinedSymbols.empty()); -} - -TEST(BinaryReaderTest, hello_obj_x86_64) { -  FILEBYTES = { -    0xCF, 0xFA, 0xED, 0xFE, 0x07, 0x00, 0x00, 0x01, -    0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x03, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, -    0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x19, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x74, 0x65, 0x78, 0x74, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x54, 0x45, 0x58, 0x54, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x70, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, -    0xA4, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -    0x00, 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x63, 0x73, 0x74, 0x72, 0x69, 0x6E, -    0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x54, 0x45, 0x58, 0x54, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x9D, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, -    0xB4, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, -    0xE4, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, -    0x0B, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x55, 0x48, 0x89, 0xE5, 0x48, 0x83, 0xEC, 0x10, -    0x48, 0x8D, 0x3D, 0x00, 0x00, 0x00, 0x00, 0xC7, -    0x45, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x00, -    0xE8, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, -    0x00, 0x00, 0x89, 0x45, 0xF8, 0x89, 0xC8, 0x48, -    0x83, 0xC4, 0x10, 0x5D, 0xC3, 0x68, 0x65, 0x6C, -    0x6C, 0x6F, 0x0A, 0x00, 0x19, 0x00, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x2D, 0x0B, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x1D, 0x0F, 0x00, 0x00, 0x00, -    0x0E, 0x02, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x6D, 0x61, -    0x69, 0x6E, 0x00, 0x5F, 0x70, 0x72, 0x69, 0x6E, -    0x74, 0x66, 0x00, 0x4C, 0x5F, 0x2E, 0x73, 0x74, -    0x72, 0x00, 0x00, 0x00 }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "x86_64"); - -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_x86_64); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_EQ(f->sections.size(), 2UL); -  const Section& text = f->sections[0]; -  EXPECT_TRUE(text.segmentName.equals("__TEXT")); -  EXPECT_TRUE(text.sectionName.equals("__text")); -  EXPECT_EQ(text.type, S_REGULAR); -  EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS -                                      | S_ATTR_SOME_INSTRUCTIONS)); -  EXPECT_EQ((uint16_t)text.alignment, 16U); -  EXPECT_EQ(text.address, Hex64(0x0)); -  EXPECT_EQ(text.content.size(), 45UL); -  EXPECT_EQ((int)(text.content[0]), 0x55); -  EXPECT_EQ((int)(text.content[1]), 0x48); -  EXPECT_TRUE(text.indirectSymbols.empty()); -  EXPECT_EQ(text.relocations.size(), 2UL); -  const Relocation& call = text.relocations[0]; -  EXPECT_EQ(call.offset, Hex32(0x19)); -  EXPECT_EQ(call.type, X86_64_RELOC_BRANCH); -  EXPECT_EQ(call.length, 2); -  EXPECT_EQ(call.isExtern, true); -  EXPECT_EQ(call.symbol, 2U); -  const Relocation& str = text.relocations[1]; -  EXPECT_EQ(str.offset, Hex32(0xB)); -  EXPECT_EQ(str.type, X86_64_RELOC_SIGNED); -  EXPECT_EQ(str.length, 2); -  EXPECT_EQ(str.isExtern, true); -  EXPECT_EQ(str.symbol, 0U); - -  const Section& cstring = f->sections[1]; -  EXPECT_TRUE(cstring.segmentName.equals("__TEXT")); -  EXPECT_TRUE(cstring.sectionName.equals("__cstring")); -  EXPECT_EQ(cstring.type, S_CSTRING_LITERALS); -  EXPECT_EQ(cstring.attributes, SectionAttr(0)); -  EXPECT_EQ((uint16_t)cstring.alignment, 1U); -  EXPECT_EQ(cstring.address, Hex64(0x02D)); -  EXPECT_EQ(cstring.content.size(), 7UL); -  EXPECT_EQ((int)(cstring.content[0]), 0x68); -  EXPECT_EQ((int)(cstring.content[1]), 0x65); -  EXPECT_EQ((int)(cstring.content[2]), 0x6c); -  EXPECT_TRUE(cstring.indirectSymbols.empty()); -  EXPECT_TRUE(cstring.relocations.empty()); - -  EXPECT_EQ(f->localSymbols.size(), 1UL); -  const Symbol& strLabel = f->localSymbols[0]; -  EXPECT_EQ(strLabel.type, N_SECT); -  EXPECT_EQ(strLabel.sect, 2); -  EXPECT_EQ(strLabel.value, Hex64(0x2D)); -  EXPECT_EQ(f->globalSymbols.size(), 1UL); -  const Symbol& mainLabel = f->globalSymbols[0]; -  EXPECT_TRUE(mainLabel.name.equals("_main")); -  EXPECT_EQ(mainLabel.type, N_SECT); -  EXPECT_EQ(mainLabel.sect, 1); -  EXPECT_EQ(mainLabel.scope, SymbolScope(N_EXT)); -  EXPECT_EQ(mainLabel.value, Hex64(0x0)); -  EXPECT_EQ(f->undefinedSymbols.size(), 1UL); -  const Symbol& printfLabel = f->undefinedSymbols[0]; -  EXPECT_TRUE(printfLabel.name.equals("_printf")); -  EXPECT_EQ(printfLabel.type, N_UNDF); -  EXPECT_EQ(printfLabel.scope, SymbolScope(N_EXT)); -} - -TEST(BinaryReaderTest, hello_obj_x86) { -  FILEBYTES = { -    0xCE, 0xFA, 0xED, 0xFE, 0x07, 0x00, 0x00, 0x00, -    0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x03, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, -    0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x37, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, -    0x37, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -    0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x74, 0x65, -    0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x54, 0x45, -    0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x30, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, -    0x04, 0x00, 0x00, 0x00, 0x7C, 0x01, 0x00, 0x00, -    0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x63, 0x73, 0x74, 0x72, 0x69, 0x6E, -    0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x54, 0x45, 0x58, 0x54, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x30, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -    0x74, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -    0x18, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0xAC, 0x01, 0x00, 0x00, -    0x10, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, -    0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x55, 0x89, 0xE5, 0x83, -    0xEC, 0x18, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x58, -    0x8D, 0x80, 0x25, 0x00, 0x00, 0x00, 0xC7, 0x45, -    0xFC, 0x00, 0x00, 0x00, 0x00, 0x89, 0x04, 0x24, -    0xE8, 0xDF, 0xFF, 0xFF, 0xFF, 0xB9, 0x00, 0x00, -    0x00, 0x00, 0x89, 0x45, 0xF8, 0x89, 0xC8, 0x83, -    0xC4, 0x18, 0x5D, 0xC3, 0x68, 0x65, 0x6C, 0x6C, -    0x6F, 0x0A, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x0D, 0x0E, 0x00, 0x00, 0xA4, -    0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, -    0x0B, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x6D, 0x61, -    0x69, 0x6E, 0x00, 0x5F, 0x70, 0x72, 0x69, 0x6E, -    0x74, 0x66, 0x00, 0x00 -  }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "i386"); - -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_x86); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_EQ(f->sections.size(), 2UL); -  const Section& text = f->sections[0]; -  EXPECT_TRUE(text.segmentName.equals("__TEXT")); -  EXPECT_TRUE(text.sectionName.equals("__text")); -  EXPECT_EQ(text.type, S_REGULAR); -  EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS -                                      | S_ATTR_SOME_INSTRUCTIONS)); -  EXPECT_EQ((uint16_t)text.alignment, 16U); -  EXPECT_EQ(text.address, Hex64(0x0)); -  EXPECT_EQ(text.content.size(), 48UL); -  EXPECT_EQ((int)(text.content[0]), 0x55); -  EXPECT_EQ((int)(text.content[1]), 0x89); -  EXPECT_TRUE(text.indirectSymbols.empty()); -  EXPECT_EQ(text.relocations.size(), 3UL); -  const Relocation& call = text.relocations[0]; -  EXPECT_EQ(call.offset, Hex32(0x1D)); -  EXPECT_EQ(call.scattered, false); -  EXPECT_EQ(call.type, GENERIC_RELOC_VANILLA); -  EXPECT_EQ(call.pcRel, true); -  EXPECT_EQ(call.length, 2); -  EXPECT_EQ(call.isExtern, true); -  EXPECT_EQ(call.symbol, 1U); -  const Relocation& sectDiff = text.relocations[1]; -  EXPECT_EQ(sectDiff.offset, Hex32(0xE)); -  EXPECT_EQ(sectDiff.scattered, true); -  EXPECT_EQ(sectDiff.type, GENERIC_RELOC_LOCAL_SECTDIFF); -  EXPECT_EQ(sectDiff.pcRel, false); -  EXPECT_EQ(sectDiff.length, 2); -  EXPECT_EQ(sectDiff.value, 0x30U); -  const Relocation& pair = text.relocations[2]; -  EXPECT_EQ(pair.offset, Hex32(0x0)); -  EXPECT_EQ(pair.scattered, true); -  EXPECT_EQ(pair.type, GENERIC_RELOC_PAIR); -  EXPECT_EQ(pair.pcRel, false); -  EXPECT_EQ(pair.length, 2); -  EXPECT_EQ(pair.value, 0x0BU); - -  const Section& cstring = f->sections[1]; -  EXPECT_TRUE(cstring.segmentName.equals("__TEXT")); -  EXPECT_TRUE(cstring.sectionName.equals("__cstring")); -  EXPECT_EQ(cstring.type, S_CSTRING_LITERALS); -  EXPECT_EQ(cstring.attributes, SectionAttr(0)); -  EXPECT_EQ((uint16_t)cstring.alignment, 1U); -  EXPECT_EQ(cstring.address, Hex64(0x030)); -  EXPECT_EQ(cstring.content.size(), 7UL); -  EXPECT_EQ((int)(cstring.content[0]), 0x68); -  EXPECT_EQ((int)(cstring.content[1]), 0x65); -  EXPECT_EQ((int)(cstring.content[2]), 0x6c); -  EXPECT_TRUE(cstring.indirectSymbols.empty()); -  EXPECT_TRUE(cstring.relocations.empty()); - -  EXPECT_EQ(f->localSymbols.size(), 0UL); -  EXPECT_EQ(f->globalSymbols.size(), 1UL); -  const Symbol& mainLabel = f->globalSymbols[0]; -  EXPECT_TRUE(mainLabel.name.equals("_main")); -  EXPECT_EQ(mainLabel.type, N_SECT); -  EXPECT_EQ(mainLabel.sect, 1); -  EXPECT_EQ(mainLabel.scope, SymbolScope(N_EXT)); -  EXPECT_EQ(mainLabel.value, Hex64(0x0)); -  EXPECT_EQ(f->undefinedSymbols.size(), 1UL); -  const Symbol& printfLabel = f->undefinedSymbols[0]; -  EXPECT_TRUE(printfLabel.name.equals("_printf")); -  EXPECT_EQ(printfLabel.type, N_UNDF); -  EXPECT_EQ(printfLabel.scope, SymbolScope(N_EXT)); -} - -TEST(BinaryReaderTest, hello_obj_armv7) { -  FILEBYTES = { -    0xCE, 0xFA, 0xED, 0xFE, 0x0C, 0x00, 0x00, 0x00, -    0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x03, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, -    0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x31, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, -    0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -    0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x74, 0x65, -    0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x54, 0x45, -    0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x2A, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, -    0x05, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x63, 0x73, 0x74, 0x72, 0x69, 0x6E, -    0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x54, 0x45, 0x58, 0x54, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x2A, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -    0x6E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, -    0x18, 0x00, 0x00, 0x00, 0xA0, 0x01, 0x00, 0x00, -    0x02, 0x00, 0x00, 0x00, 0xB8, 0x01, 0x00, 0x00, -    0x10, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, -    0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x80, 0xB5, 0x6F, 0x46, -    0x82, 0xB0, 0x40, 0xF2, 0x18, 0x00, 0xC0, 0xF2, -    0x00, 0x00, 0x78, 0x44, 0x00, 0x21, 0xC0, 0xF2, -    0x00, 0x01, 0x01, 0x91, 0xFF, 0xF7, 0xF2, 0xFF, -    0x00, 0x21, 0xC0, 0xF2, 0x00, 0x01, 0x00, 0x90, -    0x08, 0x46, 0x02, 0xB0, 0x80, 0xBD, 0x68, 0x65, -    0x6C, 0x6C, 0x6F, 0x0A, 0x00, 0x00, 0x00, 0x00, -    0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x6D, -    0x0A, 0x00, 0x00, 0xB9, 0x2A, 0x00, 0x00, 0x00, -    0x18, 0x00, 0x00, 0xB1, 0x0E, 0x00, 0x00, 0x00, -    0x06, 0x00, 0x00, 0xA9, 0x2A, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0xA1, 0x0E, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x0F, 0x01, 0x08, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, -    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x5F, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x5F, -    0x70, 0x72, 0x69, 0x6E, 0x74, 0x66, 0x00, 0x00 -  }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "armv7"); - -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_armv7); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_EQ(f->sections.size(), 2UL); -  const Section& text = f->sections[0]; -  EXPECT_TRUE(text.segmentName.equals("__TEXT")); -  EXPECT_TRUE(text.sectionName.equals("__text")); -  EXPECT_EQ(text.type, S_REGULAR); -  EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS -                                      | S_ATTR_SOME_INSTRUCTIONS)); -  EXPECT_EQ((uint16_t)text.alignment, 4U); -  EXPECT_EQ(text.address, Hex64(0x0)); -  EXPECT_EQ(text.content.size(), 42UL); -  EXPECT_EQ((int)(text.content[0]), 0x80); -  EXPECT_EQ((int)(text.content[1]), 0xB5); -  EXPECT_TRUE(text.indirectSymbols.empty()); -  EXPECT_EQ(text.relocations.size(), 5UL); -  const Relocation& call = text.relocations[0]; -  EXPECT_EQ(call.offset, Hex32(0x18)); -  EXPECT_EQ(call.scattered, false); -  EXPECT_EQ(call.type, ARM_THUMB_RELOC_BR22); -  EXPECT_EQ(call.length, 2); -  EXPECT_EQ(call.isExtern, true); -  EXPECT_EQ(call.symbol, 1U); -  const Relocation& movt = text.relocations[1]; -  EXPECT_EQ(movt.offset, Hex32(0xA)); -  EXPECT_EQ(movt.scattered, true); -  EXPECT_EQ(movt.type, ARM_RELOC_HALF_SECTDIFF); -  EXPECT_EQ(movt.length, 3); -  EXPECT_EQ(movt.value, Hex32(0x2A)); -  const Relocation& movtPair = text.relocations[2]; -  EXPECT_EQ(movtPair.offset, Hex32(0x18)); -  EXPECT_EQ(movtPair.scattered, true); -  EXPECT_EQ(movtPair.type, ARM_RELOC_PAIR); -  EXPECT_EQ(movtPair.length, 3); -  EXPECT_EQ(movtPair.value, Hex32(0xE)); -  const Relocation& movw = text.relocations[3]; -  EXPECT_EQ(movw.offset, Hex32(0x6)); -  EXPECT_EQ(movw.scattered, true); -  EXPECT_EQ(movw.type, ARM_RELOC_HALF_SECTDIFF); -  EXPECT_EQ(movw.length, 2); -  EXPECT_EQ(movw.value, Hex32(0x2A)); -  const Relocation& movwPair = text.relocations[4]; -  EXPECT_EQ(movwPair.offset, Hex32(0x0)); -  EXPECT_EQ(movwPair.scattered, true); -  EXPECT_EQ(movwPair.type, ARM_RELOC_PAIR); -  EXPECT_EQ(movwPair.length, 2); -  EXPECT_EQ(movwPair.value, Hex32(0xE)); - -  const Section& cstring = f->sections[1]; -  EXPECT_TRUE(cstring.segmentName.equals("__TEXT")); -  EXPECT_TRUE(cstring.sectionName.equals("__cstring")); -  EXPECT_EQ(cstring.type, S_CSTRING_LITERALS); -  EXPECT_EQ(cstring.attributes, SectionAttr(0)); -  EXPECT_EQ((uint16_t)cstring.alignment, 1U); -  EXPECT_EQ(cstring.address, Hex64(0x02A)); -  EXPECT_EQ(cstring.content.size(), 7UL); -  EXPECT_EQ((int)(cstring.content[0]), 0x68); -  EXPECT_EQ((int)(cstring.content[1]), 0x65); -  EXPECT_EQ((int)(cstring.content[2]), 0x6c); -  EXPECT_TRUE(cstring.indirectSymbols.empty()); -  EXPECT_TRUE(cstring.relocations.empty()); - -  EXPECT_EQ(f->localSymbols.size(), 0UL); -  EXPECT_EQ(f->globalSymbols.size(), 1UL); -  const Symbol& mainLabel = f->globalSymbols[0]; -  EXPECT_TRUE(mainLabel.name.equals("_main")); -  EXPECT_EQ(mainLabel.type, N_SECT); -  EXPECT_EQ(mainLabel.sect, 1); -  EXPECT_EQ(mainLabel.scope, SymbolScope(N_EXT)); -  EXPECT_EQ(mainLabel.value, Hex64(0x0)); -  EXPECT_EQ(f->undefinedSymbols.size(), 1UL); -  const Symbol& printfLabel = f->undefinedSymbols[0]; -  EXPECT_TRUE(printfLabel.name.equals("_printf")); -  EXPECT_EQ(printfLabel.type, N_UNDF); -  EXPECT_EQ(printfLabel.scope, SymbolScope(N_EXT)); -} - -TEST(BinaryReaderTest, hello_obj_ppc) { -  FILEBYTES = { -    0xFE, 0xED, 0xFA, 0xCE, 0x00, 0x00, 0x00, 0x12, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, -    0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x28, -    0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, -    0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x01, 0x44, -    0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x07, -    0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, -    0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x74, 0x65, -    0x78, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x54, 0x45, -    0x58, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x01, 0x44, -    0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x90, -    0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x04, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x63, 0x73, 0x74, 0x72, 0x69, 0x6E, -    0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x5F, 0x5F, 0x54, 0x45, 0x58, 0x54, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x07, -    0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x00, 0x02, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, -    0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x01, 0xB8, -    0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0xD0, -    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0B, -    0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, -    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x7C, 0x08, 0x02, 0xA6, -    0xBF, 0xC1, 0xFF, 0xF8, 0x90, 0x01, 0x00, 0x08, -    0x94, 0x21, 0xFF, 0xB0, 0x7C, 0x3E, 0x0B, 0x78, -    0x42, 0x9F, 0x00, 0x05, 0x7F, 0xE8, 0x02, 0xA6, -    0x3C, 0x5F, 0x00, 0x00, 0x38, 0x62, 0x00, 0x2C, -    0x4B, 0xFF, 0xFF, 0xDD, 0x38, 0x00, 0x00, 0x00, -    0x7C, 0x03, 0x03, 0x78, 0x80, 0x21, 0x00, 0x00, -    0x80, 0x01, 0x00, 0x08, 0x7C, 0x08, 0x03, 0xA6, -    0xBB, 0xC1, 0xFF, 0xF8, 0x4E, 0x80, 0x00, 0x20, -    0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x0A, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x01, 0xD3, -    0xAB, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x44, -    0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, -    0xAC, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x44, -    0xA1, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x18, -    0x00, 0x00, 0x00, 0x01, 0x0F, 0x01, 0x00, 0x00, -    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, -    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -    0x00, 0x5F, 0x6D, 0x61, 0x69, 0x6E, 0x00, 0x5F, -    0x70, 0x72, 0x69, 0x6E, 0x74, 0x66, 0x00, 0x00 -  }; -  std::unique_ptr<NormalizedFile> f = -      fromBinary(fileBytes, sizeof(fileBytes), "ppc"); - -  EXPECT_EQ(f->arch, lld::MachOLinkingContext::arch_ppc); -  EXPECT_EQ((int)(f->fileType), MH_OBJECT); -  EXPECT_EQ((int)(f->flags), MH_SUBSECTIONS_VIA_SYMBOLS); -  EXPECT_EQ(f->sections.size(), 2UL); -  const Section& text = f->sections[0]; -  EXPECT_TRUE(text.segmentName.equals("__TEXT")); -  EXPECT_TRUE(text.sectionName.equals("__text")); -  EXPECT_EQ(text.type, S_REGULAR); -  EXPECT_EQ(text.attributes,SectionAttr(S_ATTR_PURE_INSTRUCTIONS -                                      | S_ATTR_SOME_INSTRUCTIONS)); -  EXPECT_EQ((uint16_t)text.alignment, 4U); -  EXPECT_EQ(text.address, Hex64(0x0)); -  EXPECT_EQ(text.content.size(), 68UL); -  EXPECT_EQ((int)(text.content[0]), 0x7C); -  EXPECT_EQ((int)(text.content[1]), 0x08); -  EXPECT_TRUE(text.indirectSymbols.empty()); -  EXPECT_EQ(text.relocations.size(), 5UL); -  const Relocation& bl = text.relocations[0]; -  EXPECT_EQ(bl.offset, Hex32(0x24)); -  EXPECT_EQ(bl.type, PPC_RELOC_BR24); -  EXPECT_EQ(bl.length, 2); -  EXPECT_EQ(bl.isExtern, true); -  EXPECT_EQ(bl.symbol, 1U); -  const Relocation& lo = text.relocations[1]; -  EXPECT_EQ(lo.offset, Hex32(0x20)); -  EXPECT_EQ(lo.scattered, true); -  EXPECT_EQ(lo.type, PPC_RELOC_LO16_SECTDIFF); -  EXPECT_EQ(lo.length, 2); -  EXPECT_EQ(lo.value, Hex32(0x44)); -  const Relocation& loPair = text.relocations[2]; -  EXPECT_EQ(loPair.offset, Hex32(0x0)); -  EXPECT_EQ(loPair.scattered, true); -  EXPECT_EQ(loPair.type, PPC_RELOC_PAIR); -  EXPECT_EQ(loPair.length, 2); -  EXPECT_EQ(loPair.value, Hex32(0x18)); -  const Relocation& ha = text.relocations[3]; -  EXPECT_EQ(ha.offset, Hex32(0x1C)); -  EXPECT_EQ(ha.scattered, true); -  EXPECT_EQ(ha.type, PPC_RELOC_HA16_SECTDIFF); -  EXPECT_EQ(ha.length, 2); -  EXPECT_EQ(ha.value, Hex32(0x44)); -  const Relocation& haPair = text.relocations[4]; -  EXPECT_EQ(haPair.offset, Hex32(0x2c)); -  EXPECT_EQ(haPair.scattered, true); -  EXPECT_EQ(haPair.type, PPC_RELOC_PAIR); -  EXPECT_EQ(haPair.length, 2); -  EXPECT_EQ(haPair.value, Hex32(0x18)); - -  const Section& cstring = f->sections[1]; -  EXPECT_TRUE(cstring.segmentName.equals("__TEXT")); -  EXPECT_TRUE(cstring.sectionName.equals("__cstring")); -  EXPECT_EQ(cstring.type, S_CSTRING_LITERALS); -  EXPECT_EQ(cstring.attributes, SectionAttr(0)); -  EXPECT_EQ((uint16_t)cstring.alignment, 4U); -  EXPECT_EQ(cstring.address, Hex64(0x044)); -  EXPECT_EQ(cstring.content.size(), 7UL); -  EXPECT_EQ((int)(cstring.content[0]), 0x68); -  EXPECT_EQ((int)(cstring.content[1]), 0x65); -  EXPECT_EQ((int)(cstring.content[2]), 0x6c); -  EXPECT_TRUE(cstring.indirectSymbols.empty()); -  EXPECT_TRUE(cstring.relocations.empty()); - -  EXPECT_EQ(f->localSymbols.size(), 0UL); -  EXPECT_EQ(f->globalSymbols.size(), 1UL); -  const Symbol& mainLabel = f->globalSymbols[0]; -  EXPECT_TRUE(mainLabel.name.equals("_main")); -  EXPECT_EQ(mainLabel.type, N_SECT); -  EXPECT_EQ(mainLabel.sect, 1); -  EXPECT_EQ(mainLabel.scope, SymbolScope(N_EXT)); -  EXPECT_EQ(mainLabel.value, Hex64(0x0)); -  EXPECT_EQ(f->undefinedSymbols.size(), 1UL); -  const Symbol& printfLabel = f->undefinedSymbols[0]; -  EXPECT_TRUE(printfLabel.name.equals("_printf")); -  EXPECT_EQ(printfLabel.type, N_UNDF); -  EXPECT_EQ(printfLabel.scope, SymbolScope(N_EXT)); - -  SmallString<128> tmpFl; -  std::error_code ec = -      llvm::sys::fs::createTemporaryFile(Twine("xx"), "o", tmpFl); -  EXPECT_FALSE(ec); -  llvm::Error ec2 = writeBinary(*f, tmpFl); -  EXPECT_FALSE(ec2); -  llvm::sys::fs::remove(tmpFl); -}  | 
