diff --git a/llvm/include/llvm/Support/Process.h b/llvm/include/llvm/Support/Process.h index d796b7906d37..91b92788f2ce 100644 --- a/llvm/include/llvm/Support/Process.h +++ b/llvm/include/llvm/Support/Process.h @@ -1,4 +1,4 @@ -//===- llvm/Support/Process.h ------------------------------------*- C++ -*-===// +//===- llvm/Support/Process.h -----------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -142,6 +142,10 @@ namespace sys { /// Resets the terminals colors, or returns an escape sequence to do so. static const char *ResetColor(); + + /// Get the result of a process wide random number generator. The + /// generator will be automatically seeded in non-deterministic fashion. + static unsigned GetRandomNumber(); /// @} }; } diff --git a/llvm/lib/Support/Process.cpp b/llvm/lib/Support/Process.cpp index 88ca7c3f220f..c65cb454046b 100644 --- a/llvm/lib/Support/Process.cpp +++ b/llvm/lib/Support/Process.cpp @@ -22,6 +22,15 @@ using namespace sys; //=== independent code. //===----------------------------------------------------------------------===// +unsigned llvm::sys::Process::GetRandomNumber() { +#if defined(HAVE_ARC4RANDOM) + return arc4random(); +#else + static int x = (::srand(::time(NULL)), 0); + return rand(); +#endif +} + } // Include the platform-specific parts of this class.