summaryrefslogtreecommitdiff
path: root/lldb/source/Host/netbsd
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2020-07-26 19:36:28 +0000
committerDimitry Andric <dim@FreeBSD.org>2020-07-26 19:36:28 +0000
commitcfca06d7963fa0909f90483b42a6d7d194d01e08 (patch)
tree209fb2a2d68f8f277793fc8df46c753d31bc853b /lldb/source/Host/netbsd
parent706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff)
Notes
Diffstat (limited to 'lldb/source/Host/netbsd')
-rw-r--r--lldb/source/Host/netbsd/HostInfoNetBSD.cpp2
-rw-r--r--lldb/source/Host/netbsd/HostNetBSD.cpp (renamed from lldb/source/Host/netbsd/Host.cpp)44
2 files changed, 34 insertions, 12 deletions
diff --git a/lldb/source/Host/netbsd/HostInfoNetBSD.cpp b/lldb/source/Host/netbsd/HostInfoNetBSD.cpp
index 99d413922327..cc01ec35a5bc 100644
--- a/lldb/source/Host/netbsd/HostInfoNetBSD.cpp
+++ b/lldb/source/Host/netbsd/HostInfoNetBSD.cpp
@@ -1,4 +1,4 @@
-//===-- HostInfoNetBSD.cpp -------------------------------------*- C++ -*-===//
+//===-- HostInfoNetBSD.cpp ------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/lldb/source/Host/netbsd/Host.cpp b/lldb/source/Host/netbsd/HostNetBSD.cpp
index 20f3db3c22c1..4708fb45deed 100644
--- a/lldb/source/Host/netbsd/Host.cpp
+++ b/lldb/source/Host/netbsd/HostNetBSD.cpp
@@ -1,4 +1,4 @@
-//===-- source/Host/netbsd/Host.cpp -----------------------------*- C++ -*-===//
+//===-- source/Host/netbsd/HostNetBSD.cpp ---------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -15,11 +15,11 @@
#include <limits.h>
-#include <elf.h>
#include <kvm.h>
#include <sys/exec.h>
#include <sys/ptrace.h>
+#include "lldb/Host/FileSystem.h"
#include "lldb/Host/Host.h"
#include "lldb/Host/HostInfo.h"
#include "lldb/Utility/DataBufferHeap.h"
@@ -31,6 +31,7 @@
#include "lldb/Utility/Status.h"
#include "lldb/Utility/StreamString.h"
+#include "llvm/Object/ELF.h"
#include "llvm/Support/Host.h"
extern "C" {
@@ -100,10 +101,31 @@ static bool GetNetBSDProcessArgs(const ProcessInstanceInfoMatch *match_info_ptr,
}
static bool GetNetBSDProcessCPUType(ProcessInstanceInfo &process_info) {
+ Log *log = GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST);
+
if (process_info.ProcessIDIsValid()) {
- process_info.GetArchitecture() =
- HostInfo::GetArchitecture(HostInfo::eArchKindDefault);
- return true;
+ auto buffer_sp = FileSystem::Instance().CreateDataBuffer(
+ process_info.GetExecutableFile(), 0x20, 0);
+ if (buffer_sp) {
+ uint8_t exe_class =
+ llvm::object::getElfArchType(
+ {buffer_sp->GetChars(), size_t(buffer_sp->GetByteSize())})
+ .first;
+
+ switch (exe_class) {
+ case llvm::ELF::ELFCLASS32:
+ process_info.GetArchitecture() =
+ HostInfo::GetArchitecture(HostInfo::eArchKind32);
+ return true;
+ case llvm::ELF::ELFCLASS64:
+ process_info.GetArchitecture() =
+ HostInfo::GetArchitecture(HostInfo::eArchKind64);
+ return true;
+ default:
+ LLDB_LOG(log, "Unknown elf class ({0}) in file {1}", exe_class,
+ process_info.GetExecutableFile());
+ }
+ }
}
process_info.GetArchitecture().Clear();
return false;
@@ -154,8 +176,8 @@ error:
return false;
}
-uint32_t Host::FindProcesses(const ProcessInstanceInfoMatch &match_info,
- ProcessInstanceInfoList &process_infos) {
+uint32_t Host::FindProcessesImpl(const ProcessInstanceInfoMatch &match_info,
+ ProcessInstanceInfoList &process_infos) {
const ::pid_t our_pid = ::getpid();
const ::uid_t our_uid = ::getuid();
@@ -197,8 +219,8 @@ uint32_t Host::FindProcesses(const ProcessInstanceInfoMatch &match_info,
// list if a process with given identifier is already registered there.
if (proc_kinfo[i].p_nlwps > 1) {
bool already_registered = false;
- for (size_t pi = 0; pi < process_infos.GetSize(); pi++) {
- if (process_infos.GetProcessIDAtIndex(pi) == proc_kinfo[i].p_pid) {
+ for (size_t pi = 0; pi < process_infos.size(); pi++) {
+ if (process_infos[pi].GetProcessID() == proc_kinfo[i].p_pid) {
already_registered = true;
break;
}
@@ -219,13 +241,13 @@ uint32_t Host::FindProcesses(const ProcessInstanceInfoMatch &match_info,
GetNetBSDProcessArgs(&match_info, process_info)) {
GetNetBSDProcessCPUType(process_info);
if (match_info.Matches(process_info))
- process_infos.Append(process_info);
+ process_infos.push_back(process_info);
}
}
kvm_close(kdp); /* XXX: we don't check for error here */
- return process_infos.GetSize();
+ return process_infos.size();
}
bool Host::GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &process_info) {