diff --git a/debuggerd/debuggerd_test.cpp b/debuggerd/debuggerd_test.cpp index e4e2f99cc..baddf6578 100644 --- a/debuggerd/debuggerd_test.cpp +++ b/debuggerd/debuggerd_test.cpp @@ -332,12 +332,7 @@ TEST_F(CrasherTest, smoke) { std::string result; ConsumeFd(std::move(output_fd), &result); -#ifdef __LP64__ - ASSERT_MATCH(result, - R"(signal 11 \(SIGSEGV\), code 1 \(SEGV_MAPERR\), fault addr 0x000000000000dead)"); -#else - ASSERT_MATCH(result, R"(signal 11 \(SIGSEGV\), code 1 \(SEGV_MAPERR\), fault addr 0x0000dead)"); -#endif + ASSERT_MATCH(result, R"(signal 11 \(SIGSEGV\), code 1 \(SEGV_MAPERR\), fault addr 0x0+dead)"); if (mte_supported()) { // Test that the default TAGGED_ADDR_CTRL value is set. @@ -1829,10 +1824,14 @@ GwpAsanTestParameters gwp_asan_tests[] = { "Use After Free, 0 bytes into a 7-byte allocation"}, {/* alloc_size */ 15, /* free_before_access */ true, /* access_offset */ 1, "Use After Free, 1 byte into a 15-byte allocation"}, - {/* alloc_size */ 4096, /* free_before_access */ false, /* access_offset */ 4098, - "Buffer Overflow, 2 bytes right of a 4096-byte allocation"}, - {/* alloc_size */ 4096, /* free_before_access */ false, /* access_offset */ -1, - "Buffer Underflow, 1 byte left of a 4096-byte allocation"}, + {/* alloc_size */ static_cast(getpagesize()), /* free_before_access */ false, + /* access_offset */ getpagesize() + 2, + android::base::StringPrintf("Buffer Overflow, 2 bytes right of a %d-byte allocation", + getpagesize())}, + {/* alloc_size */ static_cast(getpagesize()), /* free_before_access */ false, + /* access_offset */ -1, + android::base::StringPrintf("Buffer Underflow, 1 byte left of a %d-byte allocation", + getpagesize())}, }; INSTANTIATE_TEST_SUITE_P( @@ -2977,30 +2976,34 @@ TEST_F(CrasherTest, verify_map_format) { std::string match_str; // Verify none. match_str = android::base::StringPrintf( - " %s-%s --- 0 1000\\n", + " %s-%s --- 0 %x\\n", format_map_pointer(reinterpret_cast(none_map)).c_str(), - format_map_pointer(reinterpret_cast(none_map) + getpagesize() - 1).c_str()); + format_map_pointer(reinterpret_cast(none_map) + getpagesize() - 1).c_str(), + getpagesize()); ASSERT_MATCH(result, match_str); // Verify read-only. match_str = android::base::StringPrintf( - " %s-%s r-- 0 1000\\n", + " %s-%s r-- 0 %x\\n", format_map_pointer(reinterpret_cast(r_map)).c_str(), - format_map_pointer(reinterpret_cast(r_map) + getpagesize() - 1).c_str()); + format_map_pointer(reinterpret_cast(r_map) + getpagesize() - 1).c_str(), + getpagesize()); ASSERT_MATCH(result, match_str); // Verify write-only. match_str = android::base::StringPrintf( - " %s-%s -w- 0 1000\\n", + " %s-%s -w- 0 %x\\n", format_map_pointer(reinterpret_cast(w_map)).c_str(), - format_map_pointer(reinterpret_cast(w_map) + getpagesize() - 1).c_str()); + format_map_pointer(reinterpret_cast(w_map) + getpagesize() - 1).c_str(), + getpagesize()); ASSERT_MATCH(result, match_str); // Verify exec-only. match_str = android::base::StringPrintf( - " %s-%s --x 0 1000\\n", + " %s-%s --x 0 %x\\n", format_map_pointer(reinterpret_cast(x_map)).c_str(), - format_map_pointer(reinterpret_cast(x_map) + getpagesize() - 1).c_str()); + format_map_pointer(reinterpret_cast(x_map) + getpagesize() - 1).c_str(), + getpagesize()); ASSERT_MATCH(result, match_str); // Verify file map with non-zero offset and a name. diff --git a/debuggerd/libdebuggerd/test/dump_memory_test.cpp b/debuggerd/libdebuggerd/test/dump_memory_test.cpp index 5be145aad..dee7b4827 100644 --- a/debuggerd/libdebuggerd/test/dump_memory_test.cpp +++ b/debuggerd/libdebuggerd/test/dump_memory_test.cpp @@ -20,6 +20,8 @@ #include #include +#include +#include #include #include @@ -27,61 +29,64 @@ #include "log_fake.h" -const char g_expected_full_dump[] = -"\nmemory near r1:\n" -#if defined(__LP64__) -" 0000000012345650 0706050403020100 0f0e0d0c0b0a0908 ................\n" -" 0000000012345660 1716151413121110 1f1e1d1c1b1a1918 ................\n" -" 0000000012345670 2726252423222120 2f2e2d2c2b2a2928 !\"#$%&'()*+,-./\n" -" 0000000012345680 3736353433323130 3f3e3d3c3b3a3938 0123456789:;<=>?\n" -" 0000000012345690 4746454443424140 4f4e4d4c4b4a4948 @ABCDEFGHIJKLMNO\n" -" 00000000123456a0 5756555453525150 5f5e5d5c5b5a5958 PQRSTUVWXYZ[\\]^_\n" -" 00000000123456b0 6766656463626160 6f6e6d6c6b6a6968 `abcdefghijklmno\n" -" 00000000123456c0 7776757473727170 7f7e7d7c7b7a7978 pqrstuvwxyz{|}~.\n" -" 00000000123456d0 8786858483828180 8f8e8d8c8b8a8988 ................\n" -" 00000000123456e0 9796959493929190 9f9e9d9c9b9a9998 ................\n" -" 00000000123456f0 a7a6a5a4a3a2a1a0 afaeadacabaaa9a8 ................\n" -" 0000000012345700 b7b6b5b4b3b2b1b0 bfbebdbcbbbab9b8 ................\n" -" 0000000012345710 c7c6c5c4c3c2c1c0 cfcecdcccbcac9c8 ................\n" -" 0000000012345720 d7d6d5d4d3d2d1d0 dfdedddcdbdad9d8 ................\n" -" 0000000012345730 e7e6e5e4e3e2e1e0 efeeedecebeae9e8 ................\n" -" 0000000012345740 f7f6f5f4f3f2f1f0 fffefdfcfbfaf9f8 ................\n"; -#else -" 12345650 03020100 07060504 0b0a0908 0f0e0d0c ................\n" -" 12345660 13121110 17161514 1b1a1918 1f1e1d1c ................\n" -" 12345670 23222120 27262524 2b2a2928 2f2e2d2c !\"#$%&'()*+,-./\n" -" 12345680 33323130 37363534 3b3a3938 3f3e3d3c 0123456789:;<=>?\n" -" 12345690 43424140 47464544 4b4a4948 4f4e4d4c @ABCDEFGHIJKLMNO\n" -" 123456a0 53525150 57565554 5b5a5958 5f5e5d5c PQRSTUVWXYZ[\\]^_\n" -" 123456b0 63626160 67666564 6b6a6968 6f6e6d6c `abcdefghijklmno\n" -" 123456c0 73727170 77767574 7b7a7978 7f7e7d7c pqrstuvwxyz{|}~.\n" -" 123456d0 83828180 87868584 8b8a8988 8f8e8d8c ................\n" -" 123456e0 93929190 97969594 9b9a9998 9f9e9d9c ................\n" -" 123456f0 a3a2a1a0 a7a6a5a4 abaaa9a8 afaeadac ................\n" -" 12345700 b3b2b1b0 b7b6b5b4 bbbab9b8 bfbebdbc ................\n" -" 12345710 c3c2c1c0 c7c6c5c4 cbcac9c8 cfcecdcc ................\n" -" 12345720 d3d2d1d0 d7d6d5d4 dbdad9d8 dfdedddc ................\n" -" 12345730 e3e2e1e0 e7e6e5e4 ebeae9e8 efeeedec ................\n" -" 12345740 f3f2f1f0 f7f6f5f4 fbfaf9f8 fffefdfc ................\n"; -#endif +std::string GetMemoryString(uintptr_t addr, const std::vector& data) { + // Must be even number of data values. + CHECK((data.size() & 1) == 0); -const char g_expected_partial_dump[] = \ -"\nmemory near pc:\n" + std::string str; + for (size_t i = 0; i < data.size(); i += 2) { + str += " "; + std::string ascii_str = ""; + for (size_t j = 0; j < 2; j++) { + for (size_t k = 0; k < 8; k++) { + uint8_t c = (data[i + j] >> (k * 8)) & 0xff; + if (c >= 0x20 && c < 0x7f) { + ascii_str += c; + } else { + ascii_str += '.'; + } + } + } #if defined(__LP64__) -" 00000000123455e0 0706050403020100 0f0e0d0c0b0a0908 ................\n" -" 00000000123455f0 1716151413121110 1f1e1d1c1b1a1918 ................\n" -" 0000000012345600 2726252423222120 2f2e2d2c2b2a2928 !\"#$%&'()*+,-./\n" -" 0000000012345610 3736353433323130 3f3e3d3c3b3a3938 0123456789:;<=>?\n" -" 0000000012345620 4746454443424140 4f4e4d4c4b4a4948 @ABCDEFGHIJKLMNO\n" -" 0000000012345630 5756555453525150 5f5e5d5c5b5a5958 PQRSTUVWXYZ[\\]^_\n"; + str += android::base::StringPrintf("%016zx %016zx %016zx ", addr, data[i], data[i + 1]); #else -" 123455e0 03020100 07060504 0b0a0908 0f0e0d0c ................\n" -" 123455f0 13121110 17161514 1b1a1918 1f1e1d1c ................\n" -" 12345600 23222120 27262524 2b2a2928 2f2e2d2c !\"#$%&'()*+,-./\n" -" 12345610 33323130 37363534 3b3a3938 3f3e3d3c 0123456789:;<=>?\n" -" 12345620 43424140 47464544 4b4a4948 4f4e4d4c @ABCDEFGHIJKLMNO\n" -" 12345630 53525150 57565554 5b5a5958 5f5e5d5c PQRSTUVWXYZ[\\]^_\n"; + str += android::base::StringPrintf( + "%08zx %08zx %08zx %08zx %08zx ", addr, static_cast(data[i] & 0xffffffff), + static_cast(data[i] >> 32), static_cast(data[i + 1] & 0xffffffff), + static_cast(data[i + 1] >> 32)); #endif + str += ascii_str + "\n"; + addr += 0x10; + } + return str; +} + +const std::vector& GetDefaultData() { + static std::vector data( + {0x0706050403020100UL, 0x0f0e0d0c0b0a0908UL, 0x1716151413121110UL, 0x1f1e1d1c1b1a1918UL, + 0x2726252423222120UL, 0x2f2e2d2c2b2a2928UL, 0x3736353433323130UL, 0x3f3e3d3c3b3a3938UL, + 0x4746454443424140UL, 0x4f4e4d4c4b4a4948UL, 0x5756555453525150UL, 0x5f5e5d5c5b5a5958UL, + 0x6766656463626160UL, 0x6f6e6d6c6b6a6968UL, 0x7776757473727170UL, 0x7f7e7d7c7b7a7978UL, + 0x8786858483828180UL, 0x8f8e8d8c8b8a8988UL, 0x9796959493929190UL, 0x9f9e9d9c9b9a9998UL, + 0xa7a6a5a4a3a2a1a0UL, 0xafaeadacabaaa9a8UL, 0xb7b6b5b4b3b2b1b0UL, 0xbfbebdbcbbbab9b8UL, + 0xc7c6c5c4c3c2c1c0UL, 0xcfcecdcccbcac9c8UL, 0xd7d6d5d4d3d2d1d0UL, 0xdfdedddcdbdad9d8UL, + 0xe7e6e5e4e3e2e1e0UL, 0xefeeedecebeae9e8UL, 0xf7f6f5f4f3f2f1f0UL, 0xfffefdfcfbfaf9f8UL}); + return data; +} + +std::string GetFullDumpString() { + std::string str = "\nmemory near r1:\n"; + str += GetMemoryString(0x12345650U, GetDefaultData()); + return str; +} + +std::string GetPartialDumpString() { + std::string str = "\nmemory near pc:\n"; + std::vector data = GetDefaultData(); + data.resize(12); + str += GetMemoryString(0x123455e0U, data); + return str; +} class MemoryMock : public unwindstack::Memory { public: @@ -189,7 +194,7 @@ TEST_F(DumpMemoryTest, aligned_addr) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - ASSERT_STREQ(g_expected_full_dump, tombstone_contents.c_str()); + ASSERT_EQ(GetFullDumpString(), tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str()); @@ -209,7 +214,7 @@ TEST_F(DumpMemoryTest, partial_read) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - ASSERT_STREQ(g_expected_full_dump, tombstone_contents.c_str()); + ASSERT_EQ(GetFullDumpString(), tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str()); @@ -228,7 +233,7 @@ TEST_F(DumpMemoryTest, unaligned_addr) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - ASSERT_STREQ(g_expected_full_dump, tombstone_contents.c_str()); + ASSERT_EQ(GetFullDumpString(), tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str()); @@ -260,7 +265,7 @@ TEST_F(DumpMemoryTest, memory_partially_unreadable) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - ASSERT_STREQ(g_expected_partial_dump, tombstone_contents.c_str()); + ASSERT_EQ(GetPartialDumpString(), tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str()); @@ -280,7 +285,7 @@ TEST_F(DumpMemoryTest, memory_partially_unreadable_unaligned_return) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - ASSERT_STREQ(g_expected_partial_dump, tombstone_contents.c_str()); + ASSERT_EQ(GetPartialDumpString(), tombstone_contents); #if defined(__LP64__) ASSERT_STREQ("6 DEBUG Bytes read 102, is not a multiple of 8\n", getFakeLogPrint().c_str()); @@ -305,7 +310,7 @@ TEST_F(DumpMemoryTest, memory_partially_unreadable_two_unaligned_reads) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - ASSERT_STREQ(g_expected_partial_dump, tombstone_contents.c_str()); + ASSERT_EQ(GetPartialDumpString(), tombstone_contents); #if defined(__LP64__) ASSERT_STREQ("6 DEBUG Bytes read 45, is not a multiple of 8\n" @@ -331,44 +336,9 @@ TEST_F(DumpMemoryTest, address_low_fence) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - const char* expected_dump = \ -"\nmemory near r1:\n" -#if defined(__LP64__) -" 0000000000001000 0000000000000000 0000000000000000 ................\n" -" 0000000000001010 0000000000000000 0000000000000000 ................\n" -" 0000000000001020 0000000000000000 0000000000000000 ................\n" -" 0000000000001030 0000000000000000 0000000000000000 ................\n" -" 0000000000001040 0000000000000000 0000000000000000 ................\n" -" 0000000000001050 0000000000000000 0000000000000000 ................\n" -" 0000000000001060 0000000000000000 0000000000000000 ................\n" -" 0000000000001070 0000000000000000 0000000000000000 ................\n" -" 0000000000001080 0000000000000000 0000000000000000 ................\n" -" 0000000000001090 0000000000000000 0000000000000000 ................\n" -" 00000000000010a0 0000000000000000 0000000000000000 ................\n" -" 00000000000010b0 0000000000000000 0000000000000000 ................\n" -" 00000000000010c0 0000000000000000 0000000000000000 ................\n" -" 00000000000010d0 0000000000000000 0000000000000000 ................\n" -" 00000000000010e0 0000000000000000 0000000000000000 ................\n" -" 00000000000010f0 0000000000000000 0000000000000000 ................\n"; -#else -" 00001000 00000000 00000000 00000000 00000000 ................\n" -" 00001010 00000000 00000000 00000000 00000000 ................\n" -" 00001020 00000000 00000000 00000000 00000000 ................\n" -" 00001030 00000000 00000000 00000000 00000000 ................\n" -" 00001040 00000000 00000000 00000000 00000000 ................\n" -" 00001050 00000000 00000000 00000000 00000000 ................\n" -" 00001060 00000000 00000000 00000000 00000000 ................\n" -" 00001070 00000000 00000000 00000000 00000000 ................\n" -" 00001080 00000000 00000000 00000000 00000000 ................\n" -" 00001090 00000000 00000000 00000000 00000000 ................\n" -" 000010a0 00000000 00000000 00000000 00000000 ................\n" -" 000010b0 00000000 00000000 00000000 00000000 ................\n" -" 000010c0 00000000 00000000 00000000 00000000 ................\n" -" 000010d0 00000000 00000000 00000000 00000000 ................\n" -" 000010e0 00000000 00000000 00000000 00000000 ................\n" -" 000010f0 00000000 00000000 00000000 00000000 ................\n"; -#endif - ASSERT_STREQ(expected_dump, tombstone_contents.c_str()); + std::string expected_dump = "\nmemory near r1:\n"; + expected_dump += GetMemoryString(0x1000, std::vector(32, 0UL)); + ASSERT_EQ(expected_dump, tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str()); @@ -414,61 +384,17 @@ TEST_F(DumpMemoryTest, memory_address_nearly_too_high) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - const char* expected_dump = \ -"\nmemory near r4:\n" + std::string expected_dump = "\nmemory near r4:\n"; + uintptr_t addr; #if defined(__aarch64__) -" 00ffffffffffff00 0706050403020100 0f0e0d0c0b0a0908 ................\n" -" 00ffffffffffff10 1716151413121110 1f1e1d1c1b1a1918 ................\n" -" 00ffffffffffff20 2726252423222120 2f2e2d2c2b2a2928 !\"#$%&'()*+,-./\n" -" 00ffffffffffff30 3736353433323130 3f3e3d3c3b3a3938 0123456789:;<=>?\n" -" 00ffffffffffff40 4746454443424140 4f4e4d4c4b4a4948 @ABCDEFGHIJKLMNO\n" -" 00ffffffffffff50 5756555453525150 5f5e5d5c5b5a5958 PQRSTUVWXYZ[\\]^_\n" -" 00ffffffffffff60 6766656463626160 6f6e6d6c6b6a6968 `abcdefghijklmno\n" -" 00ffffffffffff70 7776757473727170 7f7e7d7c7b7a7978 pqrstuvwxyz{|}~.\n" -" 00ffffffffffff80 8786858483828180 8f8e8d8c8b8a8988 ................\n" -" 00ffffffffffff90 9796959493929190 9f9e9d9c9b9a9998 ................\n" -" 00ffffffffffffa0 a7a6a5a4a3a2a1a0 afaeadacabaaa9a8 ................\n" -" 00ffffffffffffb0 b7b6b5b4b3b2b1b0 bfbebdbcbbbab9b8 ................\n" -" 00ffffffffffffc0 c7c6c5c4c3c2c1c0 cfcecdcccbcac9c8 ................\n" -" 00ffffffffffffd0 d7d6d5d4d3d2d1d0 dfdedddcdbdad9d8 ................\n" -" 00ffffffffffffe0 e7e6e5e4e3e2e1e0 efeeedecebeae9e8 ................\n" -" 00fffffffffffff0 f7f6f5f4f3f2f1f0 fffefdfcfbfaf9f8 ................\n"; + addr = 0x00ffffffffffff00UL; #elif defined(__LP64__) -" ffffffffffffff00 0706050403020100 0f0e0d0c0b0a0908 ................\n" -" ffffffffffffff10 1716151413121110 1f1e1d1c1b1a1918 ................\n" -" ffffffffffffff20 2726252423222120 2f2e2d2c2b2a2928 !\"#$%&'()*+,-./\n" -" ffffffffffffff30 3736353433323130 3f3e3d3c3b3a3938 0123456789:;<=>?\n" -" ffffffffffffff40 4746454443424140 4f4e4d4c4b4a4948 @ABCDEFGHIJKLMNO\n" -" ffffffffffffff50 5756555453525150 5f5e5d5c5b5a5958 PQRSTUVWXYZ[\\]^_\n" -" ffffffffffffff60 6766656463626160 6f6e6d6c6b6a6968 `abcdefghijklmno\n" -" ffffffffffffff70 7776757473727170 7f7e7d7c7b7a7978 pqrstuvwxyz{|}~.\n" -" ffffffffffffff80 8786858483828180 8f8e8d8c8b8a8988 ................\n" -" ffffffffffffff90 9796959493929190 9f9e9d9c9b9a9998 ................\n" -" ffffffffffffffa0 a7a6a5a4a3a2a1a0 afaeadacabaaa9a8 ................\n" -" ffffffffffffffb0 b7b6b5b4b3b2b1b0 bfbebdbcbbbab9b8 ................\n" -" ffffffffffffffc0 c7c6c5c4c3c2c1c0 cfcecdcccbcac9c8 ................\n" -" ffffffffffffffd0 d7d6d5d4d3d2d1d0 dfdedddcdbdad9d8 ................\n" -" ffffffffffffffe0 e7e6e5e4e3e2e1e0 efeeedecebeae9e8 ................\n" -" fffffffffffffff0 f7f6f5f4f3f2f1f0 fffefdfcfbfaf9f8 ................\n"; + addr = 0xffffffffffffff00UL; #else -" ffffff00 03020100 07060504 0b0a0908 0f0e0d0c ................\n" -" ffffff10 13121110 17161514 1b1a1918 1f1e1d1c ................\n" -" ffffff20 23222120 27262524 2b2a2928 2f2e2d2c !\"#$%&'()*+,-./\n" -" ffffff30 33323130 37363534 3b3a3938 3f3e3d3c 0123456789:;<=>?\n" -" ffffff40 43424140 47464544 4b4a4948 4f4e4d4c @ABCDEFGHIJKLMNO\n" -" ffffff50 53525150 57565554 5b5a5958 5f5e5d5c PQRSTUVWXYZ[\\]^_\n" -" ffffff60 63626160 67666564 6b6a6968 6f6e6d6c `abcdefghijklmno\n" -" ffffff70 73727170 77767574 7b7a7978 7f7e7d7c pqrstuvwxyz{|}~.\n" -" ffffff80 83828180 87868584 8b8a8988 8f8e8d8c ................\n" -" ffffff90 93929190 97969594 9b9a9998 9f9e9d9c ................\n" -" ffffffa0 a3a2a1a0 a7a6a5a4 abaaa9a8 afaeadac ................\n" -" ffffffb0 b3b2b1b0 b7b6b5b4 bbbab9b8 bfbebdbc ................\n" -" ffffffc0 c3c2c1c0 c7c6c5c4 cbcac9c8 cfcecdcc ................\n" -" ffffffd0 d3d2d1d0 d7d6d5d4 dbdad9d8 dfdedddc ................\n" -" ffffffe0 e3e2e1e0 e7e6e5e4 ebeae9e8 efeeedec ................\n" -" fffffff0 f3f2f1f0 f7f6f5f4 fbfaf9f8 fffefdfc ................\n"; + addr = 0xffffff00UL; #endif - ASSERT_STREQ(expected_dump, tombstone_contents.c_str()); + expected_dump += GetMemoryString(addr, GetDefaultData()); + ASSERT_EQ(expected_dump, tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str()); @@ -490,30 +416,15 @@ TEST_F(DumpMemoryTest, first_read_empty) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - const char* expected_dump = \ -"\nmemory near r4:\n" -#if defined(__LP64__) -R"( 0000000010001000 8786858483828180 8f8e8d8c8b8a8988 ................ - 0000000010001010 9796959493929190 9f9e9d9c9b9a9998 ................ - 0000000010001020 a7a6a5a4a3a2a1a0 afaeadacabaaa9a8 ................ - 0000000010001030 b7b6b5b4b3b2b1b0 bfbebdbcbbbab9b8 ................ - 0000000010001040 c7c6c5c4c3c2c1c0 cfcecdcccbcac9c8 ................ - 0000000010001050 d7d6d5d4d3d2d1d0 dfdedddcdbdad9d8 ................ - 0000000010001060 e7e6e5e4e3e2e1e0 efeeedecebeae9e8 ................ - 0000000010001070 f7f6f5f4f3f2f1f0 fffefdfcfbfaf9f8 ................ -)"; -#else -R"( 10001000 83828180 87868584 8b8a8988 8f8e8d8c ................ - 10001010 93929190 97969594 9b9a9998 9f9e9d9c ................ - 10001020 a3a2a1a0 a7a6a5a4 abaaa9a8 afaeadac ................ - 10001030 b3b2b1b0 b7b6b5b4 bbbab9b8 bfbebdbc ................ - 10001040 c3c2c1c0 c7c6c5c4 cbcac9c8 cfcecdcc ................ - 10001050 d3d2d1d0 d7d6d5d4 dbdad9d8 dfdedddc ................ - 10001060 e3e2e1e0 e7e6e5e4 ebeae9e8 efeeedec ................ - 10001070 f3f2f1f0 f7f6f5f4 fbfaf9f8 fffefdfc ................ -)"; -#endif - ASSERT_STREQ(expected_dump, tombstone_contents.c_str()); + std::string expected_dump = "\nmemory near r4:\n"; + expected_dump += GetMemoryString( + 0x10000000 + page_size, + std::vector{ + 0x8786858483828180UL, 0x8f8e8d8c8b8a8988UL, 0x9796959493929190UL, 0x9f9e9d9c9b9a9998UL, + 0xa7a6a5a4a3a2a1a0UL, 0xafaeadacabaaa9a8UL, 0xb7b6b5b4b3b2b1b0UL, 0xbfbebdbcbbbab9b8UL, + 0xc7c6c5c4c3c2c1c0UL, 0xcfcecdcccbcac9c8UL, 0xd7d6d5d4d3d2d1d0UL, 0xdfdedddcdbdad9d8UL, + 0xe7e6e5e4e3e2e1e0UL, 0xefeeedecebeae9e8UL, 0xf7f6f5f4f3f2f1f0UL, 0xfffefdfcfbfaf9f8UL}); + ASSERT_EQ(expected_dump, tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str()); @@ -535,16 +446,11 @@ TEST_F(DumpMemoryTest, first_read_empty_second_read_stops) { std::string tombstone_contents; ASSERT_TRUE(lseek(log_.tfd, 0, SEEK_SET) == 0); ASSERT_TRUE(android::base::ReadFdToString(log_.tfd, &tombstone_contents)); - const char* expected_dump = \ -"\nmemory near r4:\n" -#if defined(__LP64__) -" 0000000010001000 c7c6c5c4c3c2c1c0 cfcecdcccbcac9c8 ................\n" -" 0000000010001010 d7d6d5d4d3d2d1d0 dfdedddcdbdad9d8 ................\n"; -#else -" 10001000 c3c2c1c0 c7c6c5c4 cbcac9c8 cfcecdcc ................\n" -" 10001010 d3d2d1d0 d7d6d5d4 dbdad9d8 dfdedddc ................\n"; -#endif - ASSERT_STREQ(expected_dump, tombstone_contents.c_str()); + std::string expected_dump = "\nmemory near r4:\n"; + expected_dump += GetMemoryString( + 0x10000000 + page_size, std::vector{0xc7c6c5c4c3c2c1c0UL, 0xcfcecdcccbcac9c8UL, + 0xd7d6d5d4d3d2d1d0UL, 0xdfdedddcdbdad9d8UL}); + ASSERT_EQ(expected_dump, tombstone_contents); // Verify that the log buf is empty, and no error messages. ASSERT_STREQ("", getFakeLogBuf().c_str());