本文整理汇总了C++中ProcessInstanceInfo::GetArchitecture方法的典型用法代码示例。如果您正苦于以下问题:C++ ProcessInstanceInfo::GetArchitecture方法的具体用法?C++ ProcessInstanceInfo::GetArchitecture怎么用?C++ ProcessInstanceInfo::GetArchitecture使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProcessInstanceInfo
的用法示例。
在下文中一共展示了ProcessInstanceInfo::GetArchitecture方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
static bool
GetNetBSDProcessCPUType (ProcessInstanceInfo &process_info)
{
if (process_info.ProcessIDIsValid())
{
process_info.GetArchitecture() = HostInfo::GetArchitecture(HostInfo::eArchKindDefault);
return true;
}
process_info.GetArchitecture().Clear();
return false;
}
示例2:
static bool
GetFreeBSDProcessCPUType (ProcessInstanceInfo &process_info)
{
if (process_info.ProcessIDIsValid())
{
process_info.GetArchitecture() = Host::GetArchitecture (Host::eSystemDefaultArchitecture);
return true;
}
process_info.GetArchitecture().Clear();
return false;
}
示例3: filespec
static bool
GetELFProcessCPUType (const char *exe_path, ProcessInstanceInfo &process_info)
{
// Clear the architecture.
process_info.GetArchitecture().Clear();
ModuleSpecList specs;
FileSpec filespec (exe_path, false);
const size_t num_specs = ObjectFile::GetModuleSpecifications (filespec, 0, 0, specs);
// GetModuleSpecifications() could fail if the executable has been deleted or is locked.
// But it shouldn't return more than 1 architecture.
assert(num_specs <= 1 && "Linux plugin supports only a single architecture");
if (num_specs == 1)
{
ModuleSpec module_spec;
if (specs.GetModuleSpecAtIndex (0, module_spec) && module_spec.GetArchitecture().IsValid())
{
process_info.GetArchitecture () = module_spec.GetArchitecture();
return true;
}
}
return false;
}
示例4: CreateProcessInfoResponse
void GDBRemoteCommunicationServerCommon::CreateProcessInfoResponse(
const ProcessInstanceInfo &proc_info, StreamString &response) {
response.Printf(
"pid:%" PRIu64 ";ppid:%" PRIu64 ";uid:%i;gid:%i;euid:%i;egid:%i;",
proc_info.GetProcessID(), proc_info.GetParentProcessID(),
proc_info.GetUserID(), proc_info.GetGroupID(),
proc_info.GetEffectiveUserID(), proc_info.GetEffectiveGroupID());
response.PutCString("name:");
response.PutCStringAsRawHex8(proc_info.GetExecutableFile().GetCString());
response.PutChar(';');
const ArchSpec &proc_arch = proc_info.GetArchitecture();
if (proc_arch.IsValid()) {
const llvm::Triple &proc_triple = proc_arch.GetTriple();
response.PutCString("triple:");
response.PutCStringAsRawHex8(proc_triple.getTriple().c_str());
response.PutChar(';');
}
}
示例5:
static void
CreateProcessInfoResponse (const ProcessInstanceInfo &proc_info, StreamString &response)
{
response.Printf ("pid:%llu;ppid:%llu;uid:%i;gid:%i;euid:%i;egid:%i;",
proc_info.GetProcessID(),
proc_info.GetParentProcessID(),
proc_info.GetUserID(),
proc_info.GetGroupID(),
proc_info.GetEffectiveUserID(),
proc_info.GetEffectiveGroupID());
response.PutCString ("name:");
response.PutCStringAsRawHex8(proc_info.GetName());
response.PutChar(';');
const ArchSpec &proc_arch = proc_info.GetArchitecture();
if (proc_arch.IsValid())
{
const llvm::Triple &proc_triple = proc_arch.GetTriple();
response.PutCString("triple:");
response.PutCStringAsRawHex8(proc_triple.getTriple().c_str());
response.PutChar(';');
}
}
示例6: defined
void GDBRemoteCommunicationServerCommon::
CreateProcessInfoResponse_DebugServerStyle(
const ProcessInstanceInfo &proc_info, StreamString &response) {
response.Printf("pid:%" PRIx64 ";parent-pid:%" PRIx64
";real-uid:%x;real-gid:%x;effective-uid:%x;effective-gid:%x;",
proc_info.GetProcessID(), proc_info.GetParentProcessID(),
proc_info.GetUserID(), proc_info.GetGroupID(),
proc_info.GetEffectiveUserID(),
proc_info.GetEffectiveGroupID());
const ArchSpec &proc_arch = proc_info.GetArchitecture();
if (proc_arch.IsValid()) {
const llvm::Triple &proc_triple = proc_arch.GetTriple();
#if defined(__APPLE__)
// We'll send cputype/cpusubtype.
const uint32_t cpu_type = proc_arch.GetMachOCPUType();
if (cpu_type != 0)
response.Printf("cputype:%" PRIx32 ";", cpu_type);
const uint32_t cpu_subtype = proc_arch.GetMachOCPUSubType();
if (cpu_subtype != 0)
response.Printf("cpusubtype:%" PRIx32 ";", cpu_subtype);
const std::string vendor = proc_triple.getVendorName();
if (!vendor.empty())
response.Printf("vendor:%s;", vendor.c_str());
#else
// We'll send the triple.
response.PutCString("triple:");
response.PutCStringAsRawHex8(proc_triple.getTriple().c_str());
response.PutChar(';');
#endif
std::string ostype = proc_triple.getOSName();
// Adjust so ostype reports ios for Apple/ARM and Apple/ARM64.
if (proc_triple.getVendor() == llvm::Triple::Apple) {
switch (proc_triple.getArch()) {
case llvm::Triple::arm:
case llvm::Triple::thumb:
case llvm::Triple::aarch64:
ostype = "ios";
break;
default:
// No change.
break;
}
}
response.Printf("ostype:%s;", ostype.c_str());
switch (proc_arch.GetByteOrder()) {
case lldb::eByteOrderLittle:
response.PutCString("endian:little;");
break;
case lldb::eByteOrderBig:
response.PutCString("endian:big;");
break;
case lldb::eByteOrderPDP:
response.PutCString("endian:pdp;");
break;
default:
// Nothing.
break;
}
// In case of MIPS64, pointer size is depend on ELF ABI
// For N32 the pointer size is 4 and for N64 it is 8
std::string abi = proc_arch.GetTargetABI();
if (!abi.empty())
response.Printf("elf_abi:%s;", abi.c_str());
response.Printf("ptrsize:%d;", proc_arch.GetAddressByteSize());
}
}
示例7: GetProcessAndStatInfo
static bool GetProcessAndStatInfo(::pid_t pid,
ProcessInstanceInfo &process_info,
ProcessState &State, ::pid_t &tracerpid) {
tracerpid = 0;
process_info.Clear();
Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS));
// We can't use getProcFile here because proc/[pid]/exe is a symbolic link.
llvm::SmallString<64> ProcExe;
(llvm::Twine("/proc/") + llvm::Twine(pid) + "/exe").toVector(ProcExe);
std::string ExePath(PATH_MAX, '\0');
ssize_t len = readlink(ProcExe.c_str(), &ExePath[0], PATH_MAX);
if (len <= 0) {
LLDB_LOG(log, "failed to read link exe link for {0}: {1}", pid,
Status(errno, eErrorTypePOSIX));
return false;
}
ExePath.resize(len);
// If the binary has been deleted, the link name has " (deleted)" appended.
// Remove if there.
llvm::StringRef PathRef = ExePath;
PathRef.consume_back(" (deleted)");
GetELFProcessCPUType(PathRef, process_info);
// Get the process environment.
auto BufferOrError = getProcFile(pid, "environ");
if (!BufferOrError)
return false;
std::unique_ptr<llvm::MemoryBuffer> Environ = std::move(*BufferOrError);
// Get the command line used to start the process.
BufferOrError = getProcFile(pid, "cmdline");
if (!BufferOrError)
return false;
std::unique_ptr<llvm::MemoryBuffer> Cmdline = std::move(*BufferOrError);
// Get User and Group IDs and get tracer pid.
if (!GetStatusInfo(pid, process_info, State, tracerpid))
return false;
process_info.SetProcessID(pid);
process_info.GetExecutableFile().SetFile(PathRef, false);
process_info.GetArchitecture().MergeFrom(HostInfo::GetArchitecture());
llvm::StringRef Rest = Environ->getBuffer();
while (!Rest.empty()) {
llvm::StringRef Var;
std::tie(Var, Rest) = Rest.split('\0');
process_info.GetEnvironmentEntries().AppendArgument(Var);
}
llvm::StringRef Arg0;
std::tie(Arg0, Rest) = Cmdline->getBuffer().split('\0');
process_info.SetArg0(Arg0);
while (!Rest.empty()) {
llvm::StringRef Arg;
std::tie(Arg, Rest) = Rest.split('\0');
process_info.GetArguments().AppendArgument(Arg);
}
return true;
}