================ @@ -718,3 +720,40 @@ TEST_F(SymtabTest, TestDecodeCStringMaps) { Symtab::eVisibilityAny); ASSERT_NE(symbol, nullptr); } + +TEST_F(SymtabTest, TestSymtabCreatedOnDemand) { + auto ExpectedFile = TestFile::fromYaml(R"( +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 + Entry: 0x0000000000400180 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + Address: 0x0000000000400180 + AddressAlign: 0x0000000000000010 + Content: 554889E58B042500106000890425041060005DC3 +Symbols: + - Name: _start + Type: STT_FUNC + Section: .text + Value: 0x0000000000400180 + Size: 0x0000000000000014 + Binding: STB_GLOBAL +... +)"); + ASSERT_THAT_EXPECTED(ExpectedFile, llvm::Succeeded()); + auto module_sp = std::make_shared<Module>(ExpectedFile->moduleSpec()); + + // The symbol table should not be loaded by default. + Symtab *module_symtab = module_sp->GetSymtab(/*can_create=*/false); + ASSERT_EQ(module_symtab, nullptr); + + // But it should be created on demand. + module_symtab = module_sp->GetSymtab(/*can_create=*/true); + ASSERT_NE(module_symtab, nullptr); ---------------- clayborg wrote:
Maybe add a test to verify that the symtab gets returns if called again with "can_create = false" to make sure this works as expected, and also to verify the symbol table doesn't change? Something like: ``` Symtab *cached_module_symtab = module_sp->GetSymtab(/*can_create=*/false); ASSERT_EQ(module_symtab, cached_module_symtab); ``` https://github.com/llvm/llvm-project/pull/129593 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits