MCPcopy Create free account
hub / github.com/chromium/crashpad / ExpectFindModule

Function ExpectFindModule

snapshot/linux/process_reader_linux_test.cc:543–580  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

541}
542
543int ExpectFindModule(dl_phdr_info* info, size_t size, void* data) {
544 SCOPED_TRACE(
545 base::StringPrintf("module %s at 0x%" PRIx64 " phdrs 0x%" PRIx64,
546 info->dlpi_name,
547 LinuxVMAddress{info->dlpi_addr},
548 FromPointerCast<LinuxVMAddress>(info->dlpi_phdr)));
549 auto modules =
550 reinterpret_cast<const std::vector<ProcessReaderLinux::Module>*>(data);
551
552#if BUILDFLAG(IS_ANDROID)
553 // Prior to API 27, Bionic includes a null entry for /system/bin/linker.
554 if (!info->dlpi_name) {
555 EXPECT_EQ(info->dlpi_addr, 0u);
556 EXPECT_EQ(info->dlpi_phnum, 0u);
557 EXPECT_EQ(info->dlpi_phdr, nullptr);
558 return 0;
559 }
560#endif
561
562 // Bionic doesn't always set both of these addresses for the vdso and
563 // /system/bin/linker, but it does always set one of them.
564 VMAddress module_addr = info->dlpi_phdr
565 ? FromPointerCast<LinuxVMAddress>(info->dlpi_phdr)
566 : info->dlpi_addr;
567
568 // TODO(jperaza): This can use a range map when one is available.
569 bool found = false;
570 for (const auto& module : *modules) {
571 if (module.elf_reader && module_addr >= module.elf_reader->Address() &&
572 module_addr <
573 module.elf_reader->Address() + module.elf_reader->Size()) {
574 found = true;
575 break;
576 }
577 }
578 EXPECT_TRUE(found);
579 return 0;
580}
581
582void ExpectModulesFromSelf(
583 const std::vector<ProcessReaderLinux::Module>& modules) {

Callers

nothing calls this directly

Calls 2

AddressMethod · 0.45
SizeMethod · 0.45

Tested by

no test coverage detected