diff options
Diffstat (limited to 'llvm/lib/Support')
-rw-r--r-- | llvm/lib/Support/Process.cpp | 22 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/Process.inc | 6 | ||||
-rw-r--r-- | llvm/lib/Support/Windows/Process.inc | 6 |
3 files changed, 33 insertions, 1 deletions
diff --git a/llvm/lib/Support/Process.cpp b/llvm/lib/Support/Process.cpp index 88ca7c3f220..8d1b64897c8 100644 --- a/llvm/lib/Support/Process.cpp +++ b/llvm/lib/Support/Process.cpp @@ -11,8 +11,9 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Support/Process.h" #include "llvm/Config/config.h" +#include "llvm/Support/Process.h" +#include "llvm/Support/ErrorHandling.h" namespace llvm { using namespace sys; @@ -22,6 +23,25 @@ using namespace sys; //=== independent code. //===----------------------------------------------------------------------===// +// Empty virtual destructor to anchor the vtable for the process class. +process::~process() {} + +self_process *process::get_self() { + // Use a function local static for thread safe initialization and allocate it + // as a raw pointer to ensure it is never destroyed. + static self_process *SP = new self_process(); + + return SP; +} + +// The destructor for the self_process subclass must never actually be +// executed. There should be at most one instance of this class, and that +// instance should live until the process terminates to avoid the potential for +// racy accesses during shutdown. +self_process::~self_process() { + llvm_unreachable("This destructor must never be executed!"); +} + } // Include the platform-specific parts of this class. diff --git a/llvm/lib/Support/Unix/Process.inc b/llvm/lib/Support/Unix/Process.inc index 5204147ce31..dedc4430d6f 100644 --- a/llvm/lib/Support/Unix/Process.inc +++ b/llvm/lib/Support/Unix/Process.inc @@ -44,6 +44,12 @@ using namespace llvm; using namespace sys; + +process::id_type self_process::get_id() { + return getpid(); +} + + unsigned Process::GetPageSize() { diff --git a/llvm/lib/Support/Windows/Process.inc b/llvm/lib/Support/Windows/Process.inc index 89dbf2378d0..fc24ceaf07a 100644 --- a/llvm/lib/Support/Windows/Process.inc +++ b/llvm/lib/Support/Windows/Process.inc @@ -38,6 +38,12 @@ namespace llvm { using namespace sys; + +process::id_type self_process::get_id() { + return GetCurrentProcess(); +} + + // This function retrieves the page size using GetSystemInfo and is present // solely so it can be called once in Process::GetPageSize to initialize the // static variable PageSize. |