Index: unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp =================================================================== --- unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp +++ unittests/MachOTests/MachONormalizedFileBinaryReaderTests.cpp @@ -31,9 +31,17 @@ 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 offset 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) { - const uint8_t fileBytes[] = { + 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, @@ -69,7 +77,7 @@ TEST(BinaryReaderTest, empty_obj_x86) { - const uint8_t fileBytes[] = { + 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, @@ -101,7 +109,7 @@ TEST(BinaryReaderTest, empty_obj_ppc) { - const uint8_t fileBytes[] = { + 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, @@ -133,7 +141,7 @@ TEST(BinaryReaderTest, empty_obj_armv7) { - const uint8_t fileBytes[] = { + 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, @@ -164,7 +172,7 @@ } TEST(BinaryReaderTest, empty_obj_x86_64_arm7) { - const uint8_t fileBytes[] = { + FILEBYTES = { #include "empty_obj_x86_armv7.txt" }; std::unique_ptr f = @@ -187,7 +195,7 @@ } TEST(BinaryReaderTest, hello_obj_x86_64) { - const uint8_t fileBytes[] = { + 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, @@ -320,7 +328,7 @@ TEST(BinaryReaderTest, hello_obj_x86) { - const uint8_t fileBytes[] = { + 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, @@ -452,7 +460,7 @@ TEST(BinaryReaderTest, hello_obj_armv7) { - const uint8_t fileBytes[] = { + 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, @@ -594,7 +602,7 @@ TEST(BinaryReaderTest, hello_obj_ppc) { - const uint8_t fileBytes[] = { + 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, @@ -738,4 +746,3 @@ writeBinary(*f, "/tmp/foo.o"); } -