diff options
author | Walter Erquinigo <a20012251@gmail.com> | 2019-10-14 23:56:54 +0000 |
---|---|---|
committer | Walter Erquinigo <a20012251@gmail.com> | 2019-10-14 23:56:54 +0000 |
commit | 1473b9f2052e99d79f52ad23f837561a55803702 (patch) | |
tree | 323033dfbd32ee460f199c0d51272b982735e980 | |
parent | 4335d8f0e8349025530da72a6881ed53c61947a2 (diff) | |
download | bcm5719-llvm-1473b9f2052e99d79f52ad23f837561a55803702.tar.gz bcm5719-llvm-1473b9f2052e99d79f52ad23f837561a55803702.zip |
Revert "fix"
This reverts commit d8af64c9a0228301f6fd0e1c841e4abe0b6f4801.
llvm-svn: 374852
-rw-r--r-- | lldb/source/Host/linux/Host.cpp | 79 |
1 files changed, 34 insertions, 45 deletions
diff --git a/lldb/source/Host/linux/Host.cpp b/lldb/source/Host/linux/Host.cpp index fe60d1fd8a7..f6a8766a71c 100644 --- a/lldb/source/Host/linux/Host.cpp +++ b/lldb/source/Host/linux/Host.cpp @@ -144,79 +144,68 @@ static ArchSpec GetELFProcessCPUType(llvm::StringRef exe_path) { } } -static void GetProcessArgs(::pid_t pid, ProcessInstanceInfo &process_info) { - auto BufferOrError = getProcFile(pid, "cmdline"); - if (!BufferOrError) - return; - std::unique_ptr<llvm::MemoryBuffer> Cmdline = std::move(*BufferOrError); - - llvm::StringRef Arg0, Rest; - 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); - } -} +static bool GetProcessAndStatInfo(::pid_t pid, + ProcessInstanceInfo &process_info, + ProcessState &State, ::pid_t &tracerpid) { + tracerpid = 0; + process_info.Clear(); -static void GetExePathAndArch(::pid_t pid, ProcessInstanceInfo &process_info) { Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS)); - std::string ExePath(PATH_MAX, '\0'); // 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) { - ExePath.resize(len); - } else { + if (len <= 0) { LLDB_LOG(log, "failed to read link exe link for {0}: {1}", pid, Status(errno, eErrorTypePOSIX)); - ExePath.resize(0); + 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)"); - if (!PathRef.empty()) { - process_info.GetExecutableFile().SetFile(PathRef, FileSpec::Style::native); - process_info.SetArchitecture(GetELFProcessCPUType(PathRef)); - } -} + process_info.SetArchitecture(GetELFProcessCPUType(PathRef)); -static void GetProcessEnviron(::pid_t pid, ProcessInstanceInfo &process_info) { // Get the process environment. auto BufferOrError = getProcFile(pid, "environ"); if (!BufferOrError) - return; - + 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, FileSpec::Style::native); + llvm::StringRef Rest = Environ->getBuffer(); while (!Rest.empty()) { llvm::StringRef Var; std::tie(Var, Rest) = Rest.split('\0'); process_info.GetEnvironment().insert(Var); } -} - -static bool GetProcessAndStatInfo(::pid_t pid, - ProcessInstanceInfo &process_info, - ProcessState &State, ::pid_t &tracerpid) { - tracerpid = 0; - process_info.Clear(); - process_info.SetProcessID(pid); - - GetExePathAndArch(pid, process_info); - GetProcessArgs(pid, process_info); - GetProcessEnviron(pid, process_info); - - // Get User and Group IDs and get tracer pid. - if (!GetStatusInfo(pid, process_info, State, tracerpid)) - return false; + 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; } |