summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Erquinigo <a20012251@gmail.com>2019-10-14 23:56:54 +0000
committerWalter Erquinigo <a20012251@gmail.com>2019-10-14 23:56:54 +0000
commit1473b9f2052e99d79f52ad23f837561a55803702 (patch)
tree323033dfbd32ee460f199c0d51272b982735e980
parent4335d8f0e8349025530da72a6881ed53c61947a2 (diff)
downloadbcm5719-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.cpp79
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;
}
OpenPOWER on IntegriCloud