[Lldb-commits] [PATCH] D90454: [lldb] [Host/{free, net}bsd] Fix process matching by name
Michał Górny via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 30 04:07:36 PDT 2020
mgorny created this revision.
mgorny added reviewers: labath, krytarowski, emaste.
Herald added a subscriber: arichardson.
mgorny requested review of this revision.
Fix process matching by name to make 'process attach -n ...' work.
The process finding code has an optimization that defers getting
the process name and executable format after the numeric (PID, UID...)
parameters are tested. However, the ProcessInstanceInfoMatch.Matches()
method has been matching process name against the incomplete process
information as well, and effectively no process ever matched.
In order to fix this, create a copy of ProcessInstanceInfoMatch, set
it to ignore process name and se this copy for the initial match.
The same fix applies to FreeBSD and NetBSD host code.
https://reviews.llvm.org/D90454
Files:
lldb/source/Host/freebsd/Host.cpp
lldb/source/Host/netbsd/HostNetBSD.cpp
Index: lldb/source/Host/netbsd/HostNetBSD.cpp
===================================================================
--- lldb/source/Host/netbsd/HostNetBSD.cpp
+++ lldb/source/Host/netbsd/HostNetBSD.cpp
@@ -200,6 +200,9 @@
return 0;
}
+ ProcessInstanceInfoMatch match_info_noname{match_info};
+ match_info_noname.SetNameMatchType(NameMatch::Ignore);
+
for (int i = 0; i < nproc; i++) {
if (proc_kinfo[i].p_pid < 1)
continue; /* not valid */
@@ -237,7 +240,7 @@
process_info.SetEffectiveUserID(proc_kinfo[i].p_uid);
process_info.SetEffectiveGroupID(proc_kinfo[i].p_gid);
// Make sure our info matches before we go fetch the name and cpu type
- if (match_info.Matches(process_info) &&
+ if (match_info_noname.Matches(process_info) &&
GetNetBSDProcessArgs(&match_info, process_info)) {
GetNetBSDProcessCPUType(process_info);
if (match_info.Matches(process_info))
Index: lldb/source/Host/freebsd/Host.cpp
===================================================================
--- lldb/source/Host/freebsd/Host.cpp
+++ lldb/source/Host/freebsd/Host.cpp
@@ -175,6 +175,9 @@
const size_t actual_pid_count = (pid_data_size / sizeof(struct kinfo_proc));
+ ProcessInstanceInfoMatch match_info_noname{match_info};
+ match_info_noname.SetNameMatchType(NameMatch::Ignore);
+
for (size_t i = 0; i < actual_pid_count; i++) {
const struct kinfo_proc &kinfo = kinfos[i];
@@ -212,7 +215,7 @@
process_info.SetEffectiveGroupID(kinfo.ki_svgid);
// Make sure our info matches before we go fetch the name and cpu type
- if (match_info.Matches(process_info) &&
+ if (match_info_noname.Matches(process_info) &&
GetFreeBSDProcessArgs(&match_info, process_info)) {
GetFreeBSDProcessCPUType(process_info);
if (match_info.Matches(process_info))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90454.301853.patch
Type: text/x-patch
Size: 1841 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20201030/3f4b55ad/attachment.bin>
More information about the lldb-commits
mailing list