[Lldb-commits] [PATCH] D75750: [lldb] integrate debuginfod
Jan Kratochvil via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue Mar 24 14:34:12 PDT 2020
jankratochvil requested changes to this revision.
jankratochvil added inline comments.
This revision now requires changes to proceed.
================
Comment at: lldb/cmake/modules/FindDebuginfod.cmake:59
+endif()
\ No newline at end of file
----------------
"No newline at end of file", this is what saving this diff, git apply --index and git diff says to me.
================
Comment at: lldb/include/lldb/Host/DebugInfoD.h:27
+// cached version of the file. If there was an error, we return that instead.
+llvm::Expected<std::string> findSource(const UUID &buildID,
+ const std::string &path);
----------------
Describe what does mean a returned `std::string("")` - that no error happened but server does not know this UUID/path.
================
Comment at: lldb/source/Core/SourceManager.cpp:408
+ if ((!file_spec.GetDirectory() && file_spec.GetFilename()) ||
+ !FileSystem::Instance().Exists(m_file_spec)) {
// If this is just a file name, lets see if we can find it in the
----------------
I do not like this extra line as it changes behavior of LLDB unrelated to `debuginfod`. IIUC if the source file with fully specified directory+filename in DWARF does not exist but the same filename exists in a different directory of the sourcetree LLDB will now quietly use the different file. That's a bug.
I think it is there as you needed to initialize `sc.module_sp`.
================
Comment at: lldb/source/Core/SourceManager.cpp:460
+ if (!FileSystem::Instance().Exists(m_file_spec) &&
+ debuginfod::isAvailable() && sc.module_sp) {
+ llvm::Expected<std::string> cache_path = debuginfod::findSource(
----------------
Make the `debuginfod::isAvailable()` check first as it is zero-cost, `FileSystem::Instance().Exists` is expensive filesystem operation.
The problem with that `sc.module_sp` is it is initialized above with some side effects. I think you should be fine without needing any `sc`. The following code does not pass the testcase for me but I guess you may fix it better:
```
// Try finding the file using elfutils' debuginfod
if (!FileSystem::Instance().Exists(m_file_spec) &&
debuginfod::isAvailable())
target->GetImages().ForEach(
[&](const ModuleSP &module_sp) -> bool {
llvm::Expected<std::string> cache_path = debuginfod::findSource(
module_sp->GetUUID(), file_spec.GetCString());
if (!cache_path) {
module_sp->ReportWarning(
"An error occurred while finding the "
"source file %s using debuginfod for build ID %s: %s",
file_spec.GetCString(),
sc.module_sp->GetUUID().GetAsString("").c_str(),
llvm::toString(cache_path.takeError()).c_str());
} else if (!cache_path->empty()) {
m_file_spec = FileSpec(*cache_path);
m_mod_time = FileSystem::Instance().GetModificationTime(*cache_path);
return false;
}
return true;
});
```
================
Comment at: lldb/source/Host/common/DebugInfoD.cpp:50
+ "invalid build ID: %s",
+ buildID.GetAsString("").c_str());
+
----------------
It should not be an error:
```
echo 'int main(void) { return 0; }' >/tmp/main2.c;gcc -o /tmp/main2 /tmp/main2.c -Wall -g -Wl,--build-id=none;rm /tmp/main2.c;DEBUGINFOD_URLS=http://localhost:8002/ ./bin/lldb /tmp/main2 -o 'l main' -o q
(lldb) target create "/tmp/main2"
Current executable set to '/tmp/main2' (x86_64).
(lldb) l main
warning: (x86_64) /tmp/main2 An error occurred while finding the source file /tmp/main2.c using debuginfod for build ID A9C3D738: invalid build ID: A9C3D738
File: /tmp/main2.c
(lldb) q
```
================
Comment at: lldb/test/Shell/SymbolFile/DWARF/source-list.cpp:103
+// TEST-3: File: /my/new/path/test.cpp
+// TEST-3: 123
+// TEST-3-NEXT: {{[0-9]+}} // Some context lines before
----------------
`s/123/{{[0-9]+}}/?`
================
Comment at: lldb/test/Shell/SymbolFile/DWARF/source-list.cpp:136
+// the function.
\ No newline at end of file
----------------
"No newline at end of file", this is what saving this diff, git apply --index and git diff says to me.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D75750/new/
https://reviews.llvm.org/D75750
More information about the lldb-commits
mailing list