The "CPU architecture" field is being filled from the wrong part of

the microdump. The microdump OS/arch line looks like:
O A arm 04 armv7l 3.4.0-perf-g4d6e88e #1 SMP PREEMPT Mon Mar 30 19:09:30 2015
and currently the field that says "armv7l" or "aarch64" is being used
to fill in the CPU arch field in crash. The problem is that on a
64-bit device this field *always* says "aarch64" even when running in
a 32-bit process, and so currently the crash reports for aarch64 are
a mix of 32-bit and 64-bit crashes. We should be using the first field
instead, which just says "arm" or "arm64" and reflects the actual
version of webview (32-bit or 64-bit) which is running.

BUG=
R=primiano@chromium.org

Review URL: https://codereview.chromium.org/1306983003 .

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1498 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
mmandlis@chromium.org 2015-08-26 16:18:52 +00:00
parent f073540795
commit 3f4d090d70
6 changed files with 106 additions and 25 deletions

View file

@ -230,7 +230,7 @@ Microdump::Microdump(const string& contents)
GetLine(&os_tokens, &os_version);
os_version.erase(0, 1); // remove leading space.
system_info_->cpu = hw_arch;
system_info_->cpu = arch;
system_info_->cpu_count = HexStrToL<uint8_t>(num_cpus);
system_info_->os_version = os_version;

View file

@ -128,7 +128,7 @@ TEST_F(MicrodumpProcessorTest, TestProcess_MissingSymbols) {
AnalyzeDump("microdump-arm64.dmp", &state, true /* omit_symbols */);
ASSERT_EQ(8U, state.modules()->module_count());
ASSERT_EQ("aarch64", state.system_info()->cpu);
ASSERT_EQ("arm64", state.system_info()->cpu);
ASSERT_EQ("OS 64 VERSION INFO", state.system_info()->os_version);
ASSERT_EQ(1U, state.threads()->size());
ASSERT_EQ(12U, state.threads()->at(0)->frames()->size());
@ -158,7 +158,7 @@ TEST_F(MicrodumpProcessorTest, TestProcessArm) {
AnalyzeDump("microdump-arm.dmp", &state, false /* omit_symbols */);
ASSERT_EQ(6U, state.modules()->module_count());
ASSERT_EQ("armv7l", state.system_info()->cpu);
ASSERT_EQ("arm", state.system_info()->cpu);
ASSERT_EQ("OS VERSION INFO", state.system_info()->os_version);
ASSERT_EQ(8U, state.threads()->at(0)->frames()->size());
ASSERT_EQ("MicrodumpWriterTest_Setup_Test::TestBody",
@ -176,7 +176,7 @@ TEST_F(MicrodumpProcessorTest, TestProcessArm64) {
AnalyzeDump("microdump-arm64.dmp", &state, false /* omit_symbols */);
ASSERT_EQ(8U, state.modules()->module_count());
ASSERT_EQ("aarch64", state.system_info()->cpu);
ASSERT_EQ("arm64", state.system_info()->cpu);
ASSERT_EQ("OS 64 VERSION INFO", state.system_info()->os_version);
ASSERT_EQ(9U, state.threads()->at(0)->frames()->size());
ASSERT_EQ("MicrodumpWriterTest_Setup_Test::TestBody",

View file

@ -1,6 +1,6 @@
Operating system: Android
OS VERSION INFO
CPU: armv7l
CPU: arm
2 CPUs
Crash reason:
@ -9,28 +9,45 @@ Process uptime: not available
Thread 0 (crashed)
0 breakpad_unittests!MicrodumpWriterTest_Setup_Test::TestBody [gtest.h : 1481 + 0x1]
r0 = 0x00000000 r1 = 0x00000000 r2 = 0x00000000 r3 = 0x00000000
r4 = 0xffea6900 r5 = 0xffea68f0 r6 = 0xffea68f8 r7 = 0xffea6904
r8 = 0xffea68e0 r9 = 0xffea6900 r10 = 0xffea6930 r12 = 0x00000000
fp = 0x00000ea2 sp = 0xffea68c0 lr = 0xaaaeb307 pc = 0xaaaeb307
Found by: given as instruction pointer in context
1 breakpad_unittests!testing::Test::Run [gtest.cc : 2435 + 0x17]
r4 = 0xaab431dc r5 = 0xab20d7d0 r6 = 0xab203478 r7 = 0x00000149
r8 = 0xab203588 r9 = 0xab20d7d0 r10 = 0xffea6f60 fp = 0xab2034d8
sp = 0xffea6f28 pc = 0xaab0a741
Found by: call frame info
2 breakpad_unittests!testing::TestInfo::Run [gtest.cc : 2610 + 0x5]
r4 = 0xab205448 r5 = 0xab203478 r6 = 0xf6d21cdd r7 = 0x00000149
r8 = 0xab203588 r9 = 0xab20d7d0 r10 = 0xffea6f60 fp = 0xab2034d8
sp = 0xffea6f50 pc = 0xaab0a875
Found by: call frame info
3 breakpad_unittests!testing::TestCase::Run [gtest.cc : 2728 + 0x3]
r4 = 0xab2054c8 r5 = 0x00000000 r6 = 0xf6d21cdd r7 = 0x00000149
r8 = 0xab203478 r9 = 0xab203588 r10 = 0x00000001 fp = 0xab2034d8
sp = 0xffea6f90 pc = 0xaab0a8fd
Found by: call frame info
4 breakpad_unittests!testing::internal::UnitTestImpl::RunAllTests [gtest.cc : 4591 + 0x3]
r4 = 0xab203478 r5 = 0xab203588 r6 = 0x00000000 r7 = 0x00000001
r8 = 0x00000000 r9 = 0xab2047f0 r10 = 0x00000001 fp = 0xab2034d8
sp = 0xffea6fc0 pc = 0xaab0aafd
Found by: call frame info
5 breakpad_unittests!testing::UnitTest::Run [gtest.cc : 2418 + 0x5]
r4 = 0x00000000 r5 = 0xab203478 r6 = 0x00000002 r7 = 0xaaae2c19
r8 = 0x00000000 r9 = 0x00000000 r10 = 0x00000000 fp = 0xffea706c
sp = 0xffea7018 pc = 0xaab09a61
Found by: call frame info
6 breakpad_unittests!main [gtest.h : 2326 + 0x3]
r4 = 0xffea702c r5 = 0xffea7074 r6 = 0x00000002 r7 = 0xaaae2c19
r8 = 0x00000000 r9 = 0x00000000 r10 = 0x00000000 fp = 0xffea706c
sp = 0xffea7028 pc = 0xaaae2c3b
Found by: call frame info
7 libc.so + 0x11e9d
r4 = 0xffea7074 r5 = 0xffea7080 r6 = 0x00000002 r7 = 0xaaae2c19
r8 = 0x00000000 r9 = 0x00000000 r10 = 0x00000000 fp = 0xffea706c
sp = 0xffea7040 pc = 0xf7025e9f
Found by: call frame info
Loaded modules:

View file

@ -1,6 +1,6 @@
Operating system: Android
OS 64 VERSION INFO
CPU: aarch64
CPU: arm64
2 CPUs
Crash reason:
@ -9,31 +9,95 @@ Process uptime: not available
Thread 0 (crashed)
0 breakpad_unittests!MicrodumpWriterTest_Setup_Test::TestBody [microdump_writer_unittest.cc : 77 + 0xc]
x0 = 0x0000000000000000 x1 = 0x0000000000000000
x2 = 0x0000000000000000 x3 = 0x0000000000000000
x4 = 0x0000000000000000 x5 = 0x0000000000000000
x6 = 0x0000000000000000 x7 = 0x0000000000000000
x8 = 0x0000000000000000 x9 = 0x0000000000000000
x10 = 0x0000000000000000 x11 = 0x0000000000000000
x12 = 0x0000000000000000 x13 = 0x0000000000000000
x14 = 0x0000000000000000 x15 = 0x0000000000000000
x16 = 0x0000000000000000 x17 = 0x0000000000000000
x18 = 0x0000000000000000 x19 = 0x0000007fe2ba6a50
x20 = 0x0000007fe2ba65e0 x21 = 0x0000007fe2ba61e0
x22 = 0x000000555f6b4000 x23 = 0x0000007fe2ba6280
x24 = 0x0000007fe2ba6250 x25 = 0x000000555f6b4c51
x26 = 0x0000000000000e91 x27 = 0x0000007fe2ba6220
x28 = 0x0000007fe2ba61f0 fp = 0x0000007fe2ba6120
lr = 0x000000555f636f6c sp = 0x0000007fe2ba6120
pc = 0x000000555f636f6c
Found by: given as instruction pointer in context
1 breakpad_unittests!testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void> [gtest.cc : 2418 + 0x4]
x19 = 0x00000055955022d0 x20 = 0x00000055954ee170
x21 = 0x00000055954ee170 x22 = 0x00000055954ee390
x23 = 0x00000149f6d1624a x24 = 0x000000555f6df000
x25 = 0x0000000000000001 x26 = 0x00000149f6d16249
x27 = 0x0000000000000001 x28 = 0x000000555f6b35c9
fp = 0x0000007fe2ba7a50 sp = 0x0000007fe2ba7a50
pc = 0x000000555f66323c
Found by: call frame info
2 breakpad_unittests!testing::Test::Run [gtest.cc : 2435 + 0x14]
x19 = 0x00000055955022d0 x20 = 0x00000055954ee170
x21 = 0x00000055954ee170 x22 = 0x00000055954ee390
x23 = 0x00000149f6d1624a x24 = 0x000000555f6df000
x25 = 0x0000000000000001 x26 = 0x00000149f6d16249
x27 = 0x0000000000000001 x28 = 0x000000555f6b35c9
fp = 0x0000007fe2ba7a80 sp = 0x0000007fe2ba7a80
pc = 0x000000555f66448c
Found by: call frame info
3 breakpad_unittests!testing::TestInfo::Run [gtest.cc : 2610 + 0x4]
x19 = 0x00000055954f3890 x20 = 0x00000055955022d0
x21 = 0x00000055954ee170 x22 = 0x00000055954ee390
x23 = 0x00000149f6d1624a x24 = 0x000000555f6df000
x25 = 0x0000000000000001 x26 = 0x00000149f6d16249
x27 = 0x0000000000000001 x28 = 0x000000555f6b35c9
fp = 0x0000007fe2ba7aa0 sp = 0x0000007fe2ba7aa0
pc = 0x000000555f6645b8
Found by: call frame info
4 breakpad_unittests!testing::TestCase::Run [gtest.cc : 2728 + 0x0]
x19 = 0x00000055954f39a0 x20 = 0x00000055954ee170
x21 = 0x00000055954ee390 x22 = 0x0000000000000001
x23 = 0x00000149f6d1624a x24 = 0x000000555f6df000
x25 = 0x0000000000000001 x26 = 0x00000149f6d16249
x27 = 0x0000000000000001 x28 = 0x000000555f6b35c9
fp = 0x0000007fe2ba7ae0 sp = 0x0000007fe2ba7ae0
pc = 0x000000555f664674
Found by: call frame info
5 breakpad_unittests!testing::internal::UnitTestImpl::RunAllTests [gtest.cc : 4591 + 0x0]
x19 = 0x00000055954ee170 x20 = 0x0000000000000000
x21 = 0x00000055954ee390 x22 = 0x0000000000000002
x23 = 0x0000000000000000 x24 = 0x000000555f6df000
x25 = 0x0000000000000001 x26 = 0x00000149f6d16249
x27 = 0x0000000000000001 x28 = 0x000000555f6b35c9
fp = 0x0000007fe2ba7b20 sp = 0x0000007fe2ba7b20
pc = 0x000000555f66494c
Found by: call frame info
6 breakpad_unittests!testing::UnitTest::Run [gtest.cc : 2418 + 0x4]
x19 = 0x0000000000000000 x20 = 0x00000055954ee170
x21 = 0x0000000000000002 x22 = 0x000000555f62b360
x23 = 0x0000000000000000 x24 = 0x0000000000000000
x25 = 0x0000000000000000 x26 = 0x0000000000000000
x27 = 0x0000000000000000 x28 = 0x0000000000000000
fp = 0x0000007fe2ba7bc0 sp = 0x0000007fe2ba7bc0
pc = 0x000000555f664b68
Found by: call frame info
7 breakpad_unittests!main [gtest.h : 2326 + 0x0]
x19 = 0x0000007fe2ba7c1c x20 = 0x0000007fe2ba7c88
x21 = 0x0000000000000002 x22 = 0x000000555f62b360
x23 = 0x0000000000000000 x24 = 0x0000000000000000
x25 = 0x0000000000000000 x26 = 0x0000000000000000
x27 = 0x0000000000000000 x28 = 0x0000000000000000
fp = 0x0000007fe2ba7bf0 sp = 0x0000007fe2ba7bf0
pc = 0x000000555f62b398
Found by: call frame info
8 libc.so + 0x17388
x19 = 0x0000007fe2ba7ca0 x20 = 0x0000007fe2ba7c88
x21 = 0x0000000000000002 x22 = 0x000000555f62b360
x23 = 0x0000000000000000 x24 = 0x0000000000000000
x25 = 0x0000000000000000 x26 = 0x0000000000000000
x27 = 0x0000000000000000 x28 = 0x0000000000000000
fp = 0x0000007fe2ba7c20 sp = 0x0000007fe2ba7c20
pc = 0x0000007f802ac38c
Found by: call frame info
Loaded modules:

View file

@ -1,5 +1,5 @@
OS|Android|OS VERSION INFO
CPU|armv7l||2
CPU|arm||2
Crash||0x0|0
Module|breakpad_unittests||breakpad_unittests|DA7778FB66018A4E9B4110ED06E730D00|0xaaacd000|0xaab48fff|0
Module|libnetd_client.so||libnetd_client.so|56B149396A4DAF176E26B4A85DA87BF30|0xf6fca000|0xf6fcdfff|0

View file

@ -1,5 +1,5 @@
OS|Android|OS 64 VERSION INFO
CPU|aarch64||2
CPU|arm64||2
Crash||0x0|0
Module|breakpad_unittests||breakpad_unittests|D6D1FEC9A15DE7F38A236898871A2E770|0x555f608000|0x555f6c7fff|0
Module|libnetd_client.so||libnetd_client.so|7735F44BA6D7C27FD5C3636A43369B7C0|0x7f801f6000|0x7f80208fff|0