diff options
Diffstat (limited to 'simpleperf/dso_test.cpp')
-rw-r--r-- | simpleperf/dso_test.cpp | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/simpleperf/dso_test.cpp b/simpleperf/dso_test.cpp index 02958ce6..77537d46 100644 --- a/simpleperf/dso_test.cpp +++ b/simpleperf/dso_test.cpp @@ -20,14 +20,11 @@ #include <android-base/file.h> #include <android-base/stringprintf.h> -#include <android-base/test_utils.h> #include "get_test_data.h" #include "read_apk.h" -#include "thread_tree.h" #include "utils.h" -using namespace simpleperf; using namespace simpleperf_dso_impl; TEST(DebugElfFileFinder, use_build_id_list) { @@ -136,19 +133,6 @@ TEST(DebugElfFileFinder, find_basename_in_symfs_dir) { symfs_dir + OS_PATH_SEPARATOR + "elf"); } -TEST(DebugElfFileFinder, build_id_mismatch) { - DebugElfFileFinder finder; - finder.SetSymFsDir(GetTestDataDir()); - CapturedStderr capture; - capture.Start(); - BuildId mismatch_build_id("0c12a384a9f4a3f3659b7171ca615dbec3a81f71"); - std::string debug_file = finder.FindDebugFile(ELF_FILE, false, mismatch_build_id); - capture.Stop(); - std::string stderr_output = capture.str(); - ASSERT_EQ(debug_file, ELF_FILE); - ASSERT_NE(stderr_output.find("build id mismatch"), std::string::npos); -} - TEST(dso, dex_file_dso) { #if defined(__linux__) for (DsoType dso_type : {DSO_DEX_FILE, DSO_ELF_FILE}) { @@ -211,93 +195,3 @@ TEST(dso, IpToVaddrInFile) { ASSERT_TRUE(dso); ASSERT_EQ(0xa5140, dso->IpToVaddrInFile(0xe9201140, 0xe9201000, 0xa5000)); } - -TEST(dso, kernel_address_randomization) { - // Use ELF_FILE as a fake kernel vmlinux. - const std::string vmlinux_path = GetTestData(ELF_FILE); - Dso::SetVmlinux(vmlinux_path); - std::unique_ptr<Dso> dso = Dso::CreateDso(DSO_KERNEL, DEFAULT_KERNEL_MMAP_NAME); - ASSERT_TRUE(dso); - ASSERT_EQ(dso->GetDebugFilePath(), vmlinux_path); - // When map_start = 0, can't fix kernel address randomization. So vmlinux isn't used. - ASSERT_EQ(dso->IpToVaddrInFile(0x800500, 0, 0), 0x800500); - ASSERT_FALSE(dso->IpToFileOffset(0x800500, 0, 0)); - ASSERT_TRUE(dso->FindSymbol(0x400510) == nullptr); - - dso = Dso::CreateDso(DSO_KERNEL, DEFAULT_KERNEL_MMAP_NAME); - ASSERT_TRUE(dso); - ASSERT_EQ(dso->GetDebugFilePath(), vmlinux_path); - // When map_start != 0, can fix kernel address randomization. So vmlinux is used. - ASSERT_EQ(dso->IpToVaddrInFile(0x800500, 0x800400, 0), 0x400500); - ASSERT_EQ(dso->IpToFileOffset(0x800500, 0x800400, 0).value(), 0x500); - const Symbol* symbol = dso->FindSymbol(0x400510); - ASSERT_TRUE(symbol != nullptr); - ASSERT_STREQ(symbol->Name(), "GlobalFunc"); -} - -TEST(dso, find_vmlinux_in_symdirs) { - // Create a symdir. - TemporaryDir tmpdir; - std::string vmlinux_path = std::string(tmpdir.path) + OS_PATH_SEPARATOR + "elf"; - std::string data; - ASSERT_TRUE(android::base::ReadFileToString(GetTestData(ELF_FILE), &data)); - ASSERT_TRUE(android::base::WriteStringToFile(data, vmlinux_path)); - - // Find vmlinux in symbol dirs. - Dso::SetVmlinux(""); - Dso::AddSymbolDir(tmpdir.path); - Dso::SetBuildIds({std::make_pair(DEFAULT_KERNEL_MMAP_NAME, BuildId(ELF_FILE_BUILD_ID))}); - std::unique_ptr<Dso> dso = Dso::CreateDso(DSO_KERNEL, DEFAULT_KERNEL_MMAP_NAME); - ASSERT_TRUE(dso); - ASSERT_EQ(dso->GetDebugFilePath(), vmlinux_path); -} - -TEST(dso, kernel_module) { - // Test finding debug files for kernel modules. - Dso::SetSymFsDir(GetTestDataDir()); - std::vector<std::pair<std::string, BuildId>> build_ids; - build_ids.emplace_back(ELF_FILE, BuildId(ELF_FILE_BUILD_ID)); - Dso::SetBuildIds(build_ids); - std::unique_ptr<Dso> kernel_dso = Dso::CreateDso(DSO_KERNEL, DEFAULT_KERNEL_MMAP_NAME); - ASSERT_TRUE(kernel_dso); - std::unique_ptr<Dso> dso = Dso::CreateKernelModuleDso(ELF_FILE, 0, 0, kernel_dso.get()); - ASSERT_EQ(dso->GetDebugFilePath(), GetTestData(ELF_FILE)); -} - -TEST(dso, kernel_module_CalculateMinVaddr) { - // Create fake Dso objects. - auto kernel_dso = Dso::CreateDso(DSO_KERNEL, DEFAULT_KERNEL_MMAP_NAME); - ASSERT_TRUE(kernel_dso); - const uint64_t module_memory_start = 0xffffffa9bc790000ULL; - const uint64_t module_memory_size = 0x8d7000ULL; - auto module_dso = - Dso::CreateKernelModuleDso("fake_module.ko", module_memory_start, - module_memory_start + module_memory_size, kernel_dso.get()); - ASSERT_TRUE(module_dso); - - // Provide symbol info for calculating min vaddr. - std::vector<Symbol> kernel_symbols; - kernel_symbols.emplace_back("fake_module_function [fake_module]", 0xffffffa9bc7a64e8ULL, 0x60c); - kernel_dso->SetSymbols(&kernel_symbols); - std::vector<Symbol> module_symbols; - module_symbols.emplace_back("fake_module_function", 0x144e8, 0x60c); - module_dso->SetSymbols(&module_symbols); - - // Calculate min vaddr. - uint64_t min_vaddr; - uint64_t memory_offset; - module_dso->GetMinExecutableVaddr(&min_vaddr, &memory_offset); - ASSERT_EQ(min_vaddr, 0x144e8); - ASSERT_EQ(memory_offset, 0x164e8); - - // Use min vaddr in IpToVaddrInFile(). - ASSERT_EQ(module_dso->IpToVaddrInFile(0xffffffa9bc7a64e8ULL, module_memory_start, 0), 0x144e8); -} - -TEST(dso, symbol_map_file) { - auto dso = Dso::CreateDso(DSO_SYMBOL_MAP_FILE, "perf-123.map"); - ASSERT_TRUE(dso); - ASSERT_EQ(DSO_SYMBOL_MAP_FILE, dso->type()); - ASSERT_EQ(0x12345678, dso->IpToVaddrInFile(0x12345678, 0x0, 0x0)); - ASSERT_EQ(0x12345678, dso->IpToVaddrInFile(0x12345678, 0xe9201000, 0xa5000)); -} |