[Lldb-commits] [PATCH] D70272: [-gmodules] Let LLDB log a warning if the Clang module hash mismatches.
Pavel Labath via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Nov 15 01:54:55 PST 2019
labath added inline comments.
================
Comment at: lldb/include/lldb/Symbol/SymbolFile.h:283-285
+ /// Return a hash for this symbol file, such as a dwo_id.
+ virtual llvm::Optional<uint64_t> GetSymbolHash() { return {}; }
+
----------------
Can we remove this and put a cast in `SymbolFileDWARF::UpdateExternalModuleListIfNeeded` instead? It looks like that function should check that it has really found a dwarf file (and not a pdb for instance) anyway...
================
Comment at: lldb/source/Host/common/Host.cpp:304
+ if (log)
+ log->VAPrintf(format, args);
}
----------------
Are you sure it's legal to recycle the `va_list` this way? Should you maybe re-initialize it?
================
Comment at: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:1570
+static uint64_t GetDWOId(DWARFCompileUnit &dwarf_cu,
+ DWARFDebugInfoEntry cu_die) {
+ uint64_t dwo_id =
----------------
`DWARFDebugInfoEntry` objects assume that they are living in one big vector and do pointer arithmetic on their `this` pointers. I don't think it's wise to copy them even if that happens to work in this case...
================
Comment at: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:1579
+llvm::Optional<uint64_t> SymbolFileDWARF::GetSymbolHash() {
+ if (auto comp_unit = GetCompileUnitAtIndex(0)) {
+ if (DWARFCompileUnit *cu = llvm::dyn_cast_or_null<DWARFCompileUnit>(
----------------
With this implementation, the function will return the dwo id of the first skeleton unit in the main module in the dwo scenario. I think this is very unexpected and not very useful. I think this should check that the file contains a just a single compile unit, at least.
================
Comment at: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp:1724-1725
+
+ // Verify the DWO hash.
+ // FIXME: Technically "0" is a valid hash.
+ uint64_t dwo_id = GetDWOId(*dwarf_cu, *die.GetDIE());
----------------
Maybe you could have GetDWOId return Optional<uint>. That way, the FIXME will be inside that function, and not in all of it's callers.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70272/new/
https://reviews.llvm.org/D70272
More information about the lldb-commits
mailing list