[Lldb-commits] [lldb] [lldb][NativePDB] Route expression function calls through FunctionCallLabel (PR #227021)
Charles Zablit via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 2 08:57:20 PDT 2026
================
@@ -3182,6 +3163,149 @@ SymbolFileNativePDB::StripMangledFunctionName(const llvm::StringRef mangled,
return mangled;
}
+std::optional<std::string>
+SymbolFileNativePDB::MakeFunctionCallLabel(PdbSymUid uid,
+ llvm::StringRef lookup_name) {
+ if (lookup_name.empty())
+ return std::nullopt;
+
+ lldb::ModuleSP module_sp = m_objfile_sp->GetModule();
+ if (!module_sp)
+ return std::nullopt;
+
+ return FunctionCallLabel{/*discriminator=*/{},
+ /*module_id=*/module_sp->GetID(),
+ /*symbol_id=*/uid.toOpaqueId(),
+ /*lookup_name=*/lookup_name}
+ .toString();
+}
+
+std::optional<std::string>
+SymbolFileNativePDB::GetFunctionCallLabel(PdbCompilandSymId id) {
+ const CompilandIndexItem *cci = m_index->compilands().GetCompiland(id.modi);
+ if (!cci)
+ return std::nullopt;
+
+ CVSymbol sym_record = cci->m_debug_stream.readSymbolAtOffset(id.offset);
+ if (sym_record.kind() != S_LPROC32 && sym_record.kind() != S_GPROC32)
+ return std::nullopt;
+
+ ProcSym proc(static_cast<SymbolRecordKind>(sym_record.kind()));
+ if (auto err = SymbolDeserializer::deserializeAs<ProcSym>(sym_record, proc)) {
+ LLDB_LOG_ERROR(GetLog(LLDBLog::Symbols), std::move(err),
+ "Failed to deserialize ProcSym record: {0}");
+ return std::nullopt;
+ }
+
+ // Functions with internal linkage have no public symbol, so fall back to the
+ // name in the procedure record.
+ llvm::StringRef lookup_name =
+ FindMangledSymbol(SegmentOffset(proc.Segment, proc.CodeOffset),
+ proc.FunctionType)
+ .value_or(proc.Name);
+ return MakeFunctionCallLabel(id, lookup_name);
+}
+
+std::optional<std::string>
+SymbolFileNativePDB::GetMethodCallLabel(TypeIndex method_type,
+ llvm::StringRef qualified_name) {
+ if (std::optional<PdbCompilandSymId> func_id =
+ FindMethodDefinition(qualified_name, method_type))
+ return GetFunctionCallLabel(*func_id);
+ return std::nullopt;
+}
+
+std::optional<PdbCompilandSymId>
+SymbolFileNativePDB::FindMethodDefinition(llvm::StringRef qualified_name,
+ TypeIndex method_type) {
+ CacheGlobalBaseNames();
----------------
charles-zablit wrote:
Done
I think I found a bug here: `GSIHashTable` leaves `BucketMap` uninitialized when the table has no records. I don't think that's intended.
https://github.com/llvm/llvm-project/pull/227021
More information about the lldb-commits
mailing list