diff options
author | Peter Collingbourne <pcc@google.com> | 2020-03-30 21:40:58 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-03-30 21:40:58 +0000 |
commit | cd63cae6b206a067fab1afe78f7647f1f2cb1513 (patch) | |
tree | 04e72546f2968a86b41a1151a5c8639adb2e852f /debuggerd/debuggerd_test.cpp | |
parent | 5677803cb7e78421f835513d088e24ccd6da6d87 (diff) | |
parent | f03af8844acbd63f257c51577834d2c126a41f47 (diff) |
Merge "Read fault address on arm64 using proposed kernel API."
Diffstat (limited to 'debuggerd/debuggerd_test.cpp')
-rw-r--r-- | debuggerd/debuggerd_test.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/debuggerd/debuggerd_test.cpp b/debuggerd/debuggerd_test.cpp index 6a8cc563d..054f83675 100644 --- a/debuggerd/debuggerd_test.cpp +++ b/debuggerd/debuggerd_test.cpp @@ -305,6 +305,32 @@ TEST_F(CrasherTest, smoke) { ASSERT_MATCH(result, R"(signal 11 \(SIGSEGV\), code 1 \(SEGV_MAPERR\), fault addr 0xdead)"); } +TEST_F(CrasherTest, tagged_fault_addr) { +#if !defined(__aarch64__) + GTEST_SKIP() << "Requires aarch64"; +#endif + int intercept_result; + unique_fd output_fd; + StartProcess([]() { + *reinterpret_cast<volatile char*>(0x100000000000dead) = '1'; + }); + + StartIntercept(&output_fd); + FinishCrasher(); + AssertDeath(SIGSEGV); + FinishIntercept(&intercept_result); + + ASSERT_EQ(1, intercept_result) << "tombstoned reported failure"; + + std::string result; + ConsumeFd(std::move(output_fd), &result); + + // The address can either be tagged (new kernels) or untagged (old kernels). + ASSERT_MATCH( + result, + R"(signal 11 \(SIGSEGV\), code 1 \(SEGV_MAPERR\), fault addr (0x100000000000dead|0xdead))"); +} + TEST_F(CrasherTest, LD_PRELOAD) { int intercept_result; unique_fd output_fd; |