diff options
author | Zachary Turner <zturner@google.com> | 2018-06-08 15:16:25 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2018-06-08 15:16:25 +0000 |
commit | 66ef5d3cd6c343f1be29c863b94156ebddbc2802 (patch) | |
tree | 85d2ac192aa1791709067906a40a014de2e3b1c2 | |
parent | 6edfecb88380862166c72e0ac5dbcaba6538ec58 (diff) | |
download | bcm5719-llvm-66ef5d3cd6c343f1be29c863b94156ebddbc2802.tar.gz bcm5719-llvm-66ef5d3cd6c343f1be29c863b94156ebddbc2802.zip |
Clean up some code in Program.
NFC here, this just raises some platform specific ifdef hackery
out of a class and creates proper platform-independent typedefs
for the relevant things. This allows these typedefs to be
reused in other places without having to reinvent this preprocessor
logic.
llvm-svn: 334294
-rw-r--r-- | llvm/include/llvm/Support/Program.h | 31 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/Program.inc | 2 | ||||
-rw-r--r-- | llvm/lib/Support/Windows/Program.inc | 20 | ||||
-rw-r--r-- | llvm/tools/llvm-xray/xray-account.h | 8 | ||||
-rw-r--r-- | llvm/tools/llvm-xray/xray-graph.h | 2 |
5 files changed, 30 insertions, 33 deletions
diff --git a/llvm/include/llvm/Support/Program.h b/llvm/include/llvm/Support/Program.h index 8f8a6a6f29b..381b0d4902d 100644 --- a/llvm/include/llvm/Support/Program.h +++ b/llvm/include/llvm/Support/Program.h @@ -32,29 +32,26 @@ namespace sys { const char EnvPathSeparator = ';'; #endif -/// This struct encapsulates information about a process. -struct ProcessInfo { -#if defined(LLVM_ON_UNIX) - typedef pid_t ProcessId; -#elif defined(_WIN32) - typedef unsigned long ProcessId; // Must match the type of DWORD on Windows. - typedef void * HANDLE; // Must match the type of HANDLE on Windows. - /// The handle to the process (available on Windows only). - HANDLE ProcessHandle; +#if defined(_WIN32) + typedef unsigned long procid_t; // Must match the type of DWORD on Windows. + typedef void *process_t; // Must match the type of HANDLE on Windows. #else -#error "ProcessInfo is not defined for this platform!" + typedef pid_t procid_t; + typedef procid_t process_t; #endif - enum : ProcessId { InvalidPid = 0 }; + /// This struct encapsulates information about a process. + struct ProcessInfo { + enum : procid_t { InvalidPid = 0 }; - /// The process identifier. - ProcessId Pid; + procid_t Pid; /// The process identifier. + process_t Process; /// Platform-dependent process object. - /// The return code, set after execution. - int ReturnCode; + /// The return code, set after execution. + int ReturnCode; - ProcessInfo(); -}; + ProcessInfo(); + }; /// Find the first executable file \p Name in \p Paths. /// diff --git a/llvm/lib/Support/Unix/Program.inc b/llvm/lib/Support/Unix/Program.inc index 03599c44b69..5344adf9c3f 100644 --- a/llvm/lib/Support/Unix/Program.inc +++ b/llvm/lib/Support/Unix/Program.inc @@ -237,6 +237,7 @@ static bool Execute(ProcessInfo &PI, StringRef Program, const char **Args, return !MakeErrMsg(ErrMsg, "posix_spawn failed", Err); PI.Pid = PID; + PI.Process = PID; return true; } @@ -300,6 +301,7 @@ static bool Execute(ProcessInfo &PI, StringRef Program, const char **Args, } PI.Pid = child; + PI.Process = child; return true; } diff --git a/llvm/lib/Support/Windows/Program.inc b/llvm/lib/Support/Windows/Program.inc index 0dcd305d1eb..183b66ce2c0 100644 --- a/llvm/lib/Support/Windows/Program.inc +++ b/llvm/lib/Support/Windows/Program.inc @@ -31,7 +31,7 @@ namespace llvm { -ProcessInfo::ProcessInfo() : ProcessHandle(0), Pid(0), ReturnCode(0) {} +ProcessInfo::ProcessInfo() : Process(0), Pid(0), ReturnCode(0) {} ErrorOr<std::string> sys::findProgramByName(StringRef Name, ArrayRef<StringRef> Paths) { @@ -381,7 +381,7 @@ static bool Execute(ProcessInfo &PI, StringRef Program, const char **Args, } PI.Pid = pi.dwProcessId; - PI.ProcessHandle = pi.hProcess; + PI.Process = pi.hProcess; // Make sure these get closed no matter what. ScopedCommonHandle hThread(pi.hThread); @@ -418,7 +418,7 @@ namespace llvm { ProcessInfo sys::Wait(const ProcessInfo &PI, unsigned SecondsToWait, bool WaitUntilChildTerminates, std::string *ErrMsg) { assert(PI.Pid && "invalid pid to wait on, process not started?"); - assert(PI.ProcessHandle && + assert((PI.Process && PI.Process != INVALID_HANDLE_VALUE) && "invalid process handle to wait on, process not started?"); DWORD milliSecondsToWait = 0; if (WaitUntilChildTerminates) @@ -427,20 +427,20 @@ ProcessInfo sys::Wait(const ProcessInfo &PI, unsigned SecondsToWait, milliSecondsToWait = SecondsToWait * 1000; ProcessInfo WaitResult = PI; - DWORD WaitStatus = WaitForSingleObject(PI.ProcessHandle, milliSecondsToWait); + DWORD WaitStatus = WaitForSingleObject(PI.Process, milliSecondsToWait); if (WaitStatus == WAIT_TIMEOUT) { if (SecondsToWait) { - if (!TerminateProcess(PI.ProcessHandle, 1)) { + if (!TerminateProcess(PI.Process, 1)) { if (ErrMsg) MakeErrMsg(ErrMsg, "Failed to terminate timed-out program"); // -2 indicates a crash or timeout as opposed to failure to execute. WaitResult.ReturnCode = -2; - CloseHandle(PI.ProcessHandle); + CloseHandle(PI.Process); return WaitResult; } - WaitForSingleObject(PI.ProcessHandle, INFINITE); - CloseHandle(PI.ProcessHandle); + WaitForSingleObject(PI.Process, INFINITE); + CloseHandle(PI.Process); } else { // Non-blocking wait. return ProcessInfo(); @@ -449,10 +449,10 @@ ProcessInfo sys::Wait(const ProcessInfo &PI, unsigned SecondsToWait, // Get its exit status. DWORD status; - BOOL rc = GetExitCodeProcess(PI.ProcessHandle, &status); + BOOL rc = GetExitCodeProcess(PI.Process, &status); DWORD err = GetLastError(); if (err != ERROR_INVALID_HANDLE) - CloseHandle(PI.ProcessHandle); + CloseHandle(PI.Process); if (!rc) { SetLastError(err); diff --git a/llvm/tools/llvm-xray/xray-account.h b/llvm/tools/llvm-xray/xray-account.h index cc9ba897e53..5c457f17816 100644 --- a/llvm/tools/llvm-xray/xray-account.h +++ b/llvm/tools/llvm-xray/xray-account.h @@ -29,12 +29,11 @@ namespace xray { class LatencyAccountant { public: typedef std::map<int32_t, std::vector<uint64_t>> FunctionLatencyMap; - typedef std::map<llvm::sys::ProcessInfo::ProcessId, - std::pair<uint64_t, uint64_t>> + typedef std::map<llvm::sys::procid_t, std::pair<uint64_t, uint64_t>> PerThreadMinMaxTSCMap; typedef std::map<uint8_t, std::pair<uint64_t, uint64_t>> PerCPUMinMaxTSCMap; typedef std::vector<std::pair<int32_t, uint64_t>> FunctionStack; - typedef std::map<llvm::sys::ProcessInfo::ProcessId, FunctionStack> + typedef std::map<llvm::sys::procid_t, FunctionStack> PerThreadFunctionStackMap; private: @@ -79,8 +78,7 @@ public: /// bool accountRecord(const XRayRecord &Record); - const FunctionStack * - getThreadFunctionStack(llvm::sys::ProcessInfo::ProcessId TId) const { + const FunctionStack *getThreadFunctionStack(llvm::sys::procid_t TId) const { auto I = PerThreadFunctionStack.find(TId); if (I == PerThreadFunctionStack.end()) return nullptr; diff --git a/llvm/tools/llvm-xray/xray-graph.h b/llvm/tools/llvm-xray/xray-graph.h index a43df265d0e..fc7f8bb470f 100644 --- a/llvm/tools/llvm-xray/xray-graph.h +++ b/llvm/tools/llvm-xray/xray-graph.h @@ -80,7 +80,7 @@ public: using FunctionStack = SmallVector<FunctionAttr, 4>; using PerThreadFunctionStackMap = - DenseMap<llvm::sys::ProcessInfo::ProcessId, FunctionStack>; + DenseMap<llvm::sys::procid_t, FunctionStack>; class GraphT : public Graph<FunctionStats, CallStats, int32_t> { public: |