diff options
author | Ted Mielczarek <ted@mielczarek.org> | 2015-09-16 06:46:55 -0400 |
---|---|---|
committer | Ted Mielczarek <ted@mielczarek.org> | 2015-09-16 06:46:55 -0400 |
commit | 8079ae192d6465c2fa0f1241f9a0436932509ed6 (patch) | |
tree | 10877e4154da99087e8bc6f8b2c8ba7eefbfcbd5 /src/common/mac/macho_reader_unittest.cc | |
parent | Update gitignore to ignore more GYP things (diff) | |
download | breakpad-8079ae192d6465c2fa0f1241f9a0436932509ed6.tar.xz |
Fix Mac Breakpad host tools to build in Linux cross-compile
We're working on building our Firefox Mac builds as a Linux cross-compile
(https://bugzilla.mozilla.org/show_bug.cgi?id=921040) and we need symbol
dumping to work. This change ports the Mac dump_syms tool to build and work
on Linux. I've tested it and it produces identical output to running the
tool on Mac.
The bulk of the work here was converting src/common/mac/dump_syms.mm and
src/tools/mac/dump_syms/dump_syms_tool.mm from ObjC++ to C++ and removing
their use of Foundation classes in favor of standard C/C++.
This won't compile out-of-the-box on Linux, it requires some Mac system
headers that are not included in this patch. I have those tentatively in
a separate patch to land in Gecko
(http://hg.mozilla.org/users/tmielczarek_mozilla.com/mc/rev/5fb8da23c83c),
but I wasn't sure if you'd be interested in having them in the Breakpad tree.
We could almost certainly pare down the set of headers included there, I
didn't spend too much time trying to minimize them (we primarily just need
the Mach-O structs and a few associated bits).
I just realized that this patch is missing updating the XCode project files
(ugh). I'll fix that up in a bit.
R=mark@chromium.org
BUG=https://bugzilla.mozilla.org/show_bug.cgi?id=543111
Review URL: https://codereview.chromium.org/1340543002 .
Diffstat (limited to 'src/common/mac/macho_reader_unittest.cc')
-rw-r--r-- | src/common/mac/macho_reader_unittest.cc | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/common/mac/macho_reader_unittest.cc b/src/common/mac/macho_reader_unittest.cc index 9bc6d25a..8ceab14b 100644 --- a/src/common/mac/macho_reader_unittest.cc +++ b/src/common/mac/macho_reader_unittest.cc @@ -196,7 +196,7 @@ struct FatReaderFixture { FatReaderFixture() : fat(kBigEndian), reporter("reporter filename"), - reader(&reporter), object_files(), object_files_size() { + reader(&reporter), object_files() { EXPECT_CALL(reporter, BadHeader()).Times(0); EXPECT_CALL(reporter, TooShort()).Times(0); @@ -224,7 +224,12 @@ struct FatReaderFixture { fat_bytes = reinterpret_cast<const uint8_t *>(contents.data()); if (expect_parse_success) { EXPECT_TRUE(reader.Read(fat_bytes, contents.size())); - object_files = reader.object_files(&object_files_size); + size_t fat_files_count; + const SuperFatArch* fat_files = reader.object_files(&fat_files_count); + object_files.resize(fat_files_count); + for (size_t i = 0; i < fat_files_count; ++i) { + EXPECT_TRUE(fat_files[i].ConvertToFatArch(&object_files[i])); + } } else EXPECT_FALSE(reader.Read(fat_bytes, contents.size())); @@ -234,8 +239,7 @@ struct FatReaderFixture { FatReader reader; string contents; const uint8_t *fat_bytes; - const struct fat_arch *object_files; - size_t object_files_size; + vector<struct fat_arch> object_files; }; class FatReaderTest: public FatReaderFixture, public Test { }; @@ -289,7 +293,7 @@ TEST_F(FatReaderTest, NoObjectFiles) { .B32(0xcafebabe) // magic number .B32(0); // number of architectures ReadFat(); - EXPECT_EQ(0U, object_files_size); + EXPECT_EQ(0U, object_files.size()); } TEST_F(FatReaderTest, OneObjectFile) { @@ -304,7 +308,7 @@ TEST_F(FatReaderTest, OneObjectFile) { .Mark(&obj1_offset) .Append(0x42, '*'); // dummy contents ReadFat(); - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x5e3a6e91, object_files[0].cputype); EXPECT_EQ(0x52ccd852, object_files[0].cpusubtype); EXPECT_EQ(obj1_offset.Value(), object_files[0].offset); @@ -334,7 +338,7 @@ TEST_F(FatReaderTest, ThreeObjectFiles) { ReadFat(); - ASSERT_EQ(3U, object_files_size); + ASSERT_EQ(3U, object_files.size()); // First object file. EXPECT_EQ(0x0cb92c30, object_files[0].cputype); @@ -373,7 +377,7 @@ TEST_F(FatReaderTest, BigEndianMachO32) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x1a9d0518, object_files[0].cputype); EXPECT_EQ(0x1b779357, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); @@ -395,7 +399,7 @@ TEST_F(FatReaderTest, BigEndianMachO64) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x5aff8487, object_files[0].cputype); EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); @@ -417,7 +421,7 @@ TEST_F(FatReaderTest, LittleEndianMachO32) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x1a9d0518, object_files[0].cputype); EXPECT_EQ(0x1b779357, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); @@ -439,7 +443,7 @@ TEST_F(FatReaderTest, LittleEndianMachO64) { // FatReader should treat a Mach-O file as if it were a fat binary file // containing one object file --- the whole thing. - ASSERT_EQ(1U, object_files_size); + ASSERT_EQ(1U, object_files.size()); EXPECT_EQ(0x5aff8487, object_files[0].cputype); EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype); EXPECT_EQ(0U, object_files[0].offset); |