summaryrefslogtreecommitdiffstats
path: root/lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp
diff options
context:
space:
mode:
authorJoey Gouly <joey.gouly@gmail.com>2014-01-14 22:32:38 +0000
committerJoey Gouly <joey.gouly@gmail.com>2014-01-14 22:32:38 +0000
commit010b37691ddeb161f824bc3013e72deb090fc29a (patch)
tree6b2fd0066c2b45471c1ab98def2b6c0e50fedc52 /lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp
parent39c17a8f3006f4e4733d28d6e830623a223744a8 (diff)
downloadbcm5719-llvm-010b37691ddeb161f824bc3013e72deb090fc29a.tar.gz
bcm5719-llvm-010b37691ddeb161f824bc3013e72deb090fc29a.zip
[MachO] Begin support for reading fat binaries.
llvm-svn: 199259
Diffstat (limited to 'lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp')
-rw-r--r--lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp53
1 files changed, 41 insertions, 12 deletions
diff --git a/lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp b/lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp
index 2b7d0c78cd7..05c0b9f1dc9 100644
--- a/lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp
+++ b/lld/unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp
@@ -23,12 +23,12 @@ using namespace lld::mach_o::normalized;
using namespace llvm::MachO;
static std::unique_ptr<NormalizedFile>
-fromBinary(const uint8_t bytes[], unsigned length) {
-
+fromBinary(const uint8_t bytes[], unsigned length, StringRef archStr) {
StringRef sr((const char*)bytes, length);
std::unique_ptr<MemoryBuffer> mb(MemoryBuffer::getMemBuffer(sr, "", false));
- ErrorOr<std::unique_ptr<NormalizedFile>> r
- = lld::mach_o::normalized::readBinary(mb);
+ ErrorOr<std::unique_ptr<NormalizedFile>> r =
+ lld::mach_o::normalized::readBinary(
+ mb, lld::MachOLinkingContext::archFromName(archStr));
EXPECT_FALSE(!r);
return std::move(*r);
}
@@ -59,7 +59,8 @@ TEST(BinaryReaderTest, empty_obj_x86_64) {
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));
+ 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);
@@ -90,7 +91,8 @@ TEST(BinaryReaderTest, empty_obj_x86) {
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));
+ 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);
@@ -121,7 +123,8 @@ TEST(BinaryReaderTest, empty_obj_ppc) {
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));
+ 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);
@@ -152,7 +155,8 @@ TEST(BinaryReaderTest, empty_obj_armv7) {
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));
+ 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);
@@ -161,7 +165,28 @@ TEST(BinaryReaderTest, empty_obj_armv7) {
EXPECT_TRUE(f->undefinedSymbols.empty());
}
+TEST(BinaryReaderTest, empty_obj_x86_64_arm7) {
+ const uint8_t 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) {
const uint8_t fileBytes[] = {
@@ -229,7 +254,8 @@ TEST(BinaryReaderTest, hello_obj_x86_64) {
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));
+ 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);
@@ -354,7 +380,8 @@ TEST(BinaryReaderTest, hello_obj_x86) {
0x69, 0x6E, 0x00, 0x5F, 0x70, 0x72, 0x69, 0x6E,
0x74, 0x66, 0x00, 0x00
};
- std::unique_ptr<NormalizedFile> f = fromBinary(fileBytes, sizeof(fileBytes));
+ 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);
@@ -486,7 +513,8 @@ TEST(BinaryReaderTest, hello_obj_armv7) {
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));
+ 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);
@@ -630,7 +658,8 @@ TEST(BinaryReaderTest, hello_obj_ppc) {
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));
+ 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);
OpenPOWER on IntegriCloud