[Lldb-commits] [PATCH] D70847: [lldb] Set executable module when adding modules to the Target
Anton Kolesov via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Dec 6 02:57:20 PST 2019
anton.kolesov updated this revision to Diff 232512.
anton.kolesov retitled this revision from "[lldb-vscode] Ensure that target matches the executable file" to "[lldb] Set executable module when adding modules to the Target".
anton.kolesov edited the summary of this revision.
anton.kolesov added a comment.
Reimplement the solution based on a comment from Greg.
Tested with testsuite on Linux for x64 - there are no changes in test results. Also manually tested with a proprietary process plugin - currently it is not possible to run existing testsuite with that plugin because it targets embedded systems which has no `cwd`, `exit()` or environment.
I also attemted to test this against Windows hosts and targets. The change, apparently, resolves that launch capability on Windows, however setting of breakpoints doesn't work - it is only possible to stop application on entry, and on resume it will run till the end. Among the existing lldb-vscode tests some of them depend on <unistd.h> unavailable on windows, others fail because of the breakpoints that don't work.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70847/new/
https://reviews.llvm.org/D70847
Files:
lldb/source/Target/Target.cpp
Index: lldb/source/Target/Target.cpp
===================================================================
--- lldb/source/Target/Target.cpp
+++ lldb/source/Target/Target.cpp
@@ -2016,12 +2016,15 @@
// there wasn't an equivalent module in the list already, and if there was,
// let's remove it.
if (module_sp) {
+ bool isExecutable = false;
ObjectFile *objfile = module_sp->GetObjectFile();
if (objfile) {
switch (objfile->GetType()) {
+ case ObjectFile::eTypeExecutable: /// A normal executable
+ isExecutable = true;
+ LLVM_FALLTHROUGH;
case ObjectFile::eTypeCoreFile: /// A core file that has a checkpoint of
/// a program's execution state
- case ObjectFile::eTypeExecutable: /// A normal executable
case ObjectFile::eTypeDynamicLinker: /// The platform's dynamic linker
/// executable
case ObjectFile::eTypeObjectFile: /// An intermediate object file
@@ -2084,6 +2087,16 @@
} else {
m_images.Append(module_sp, notify);
}
+
+ // Ensure that architecture of the Target matches that of the
+ // executable file. Otherwise Target might use a "default" platform
+ // that can't actually debug the executable. For example, if the Target
+ // is created and by default assumes that it should use "gdb-remote"
+ // process, however executable has an architecture that requires a
+ // different Process class - without explicitly set executable module
+ // Target would attempt to use "gdb-remote" created initially.
+ if (isExecutable)
+ SetExecutableModule(module_sp, eLoadDependentsNo);
} else
module_sp.reset();
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D70847.232512.patch
Type: text/x-patch
Size: 1822 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20191206/9090a58f/attachment-0001.bin>
More information about the lldb-commits
mailing list