diff options
Diffstat (limited to 'llvm/lib/Support/Unix')
-rw-r--r-- | llvm/lib/Support/Unix/Path.inc | 41 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/Process.inc | 36 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/Program.inc | 29 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/Signals.inc | 53 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/ThreadLocal.inc | 12 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/Unix.h | 8 |
6 files changed, 115 insertions, 64 deletions
diff --git a/llvm/lib/Support/Unix/Path.inc b/llvm/lib/Support/Unix/Path.inc index 3cedf64d4b0..8d1dfc76aea 100644 --- a/llvm/lib/Support/Unix/Path.inc +++ b/llvm/lib/Support/Unix/Path.inc @@ -17,8 +17,9 @@ //===----------------------------------------------------------------------===// #include "Unix.h" -#include <limits.h> -#include <stdio.h> +#include <cassert> +#include <climits> +#include <cstdio> #if HAVE_SYS_STAT_H #include <sys/stat.h> #endif @@ -86,7 +87,10 @@ namespace fs { #if defined(__FreeBSD__) || defined (__NetBSD__) || defined(__Bitrig__) || \ defined(__OpenBSD__) || defined(__minix) || defined(__FreeBSD_kernel__) || \ defined(__linux__) || defined(__CYGWIN__) || defined(__DragonFly__) -static int + +namespace { + +int test_dir(char ret[PATH_MAX], const char *dir, const char *bin) { struct stat sb; @@ -101,7 +105,7 @@ test_dir(char ret[PATH_MAX], const char *dir, const char *bin) return 0; } -static char * +char * getprogpath(char ret[PATH_MAX], const char *bin) { char *pv, *s, *t; @@ -138,6 +142,9 @@ getprogpath(char ret[PATH_MAX], const char *bin) free(pv); return nullptr; } + +} // end anonymous namespace + #endif // __FreeBSD__ || __NetBSD__ || __FreeBSD_kernel__ /// GetMainExecutable - Return the path to the main executable, given the @@ -330,7 +337,9 @@ std::error_code resize_file(int FD, uint64_t Size) { return std::error_code(); } -static int convertAccessMode(AccessMode Mode) { +namespace { + +int convertAccessMode(AccessMode Mode) { switch (Mode) { case AccessMode::Exist: return F_OK; @@ -342,6 +351,8 @@ static int convertAccessMode(AccessMode Mode) { llvm_unreachable("invalid enum"); } +} // end anonymous namespace + std::error_code access(const Twine &Path, AccessMode Mode) { SmallString<128> PathStorage; StringRef P = Path.toNullTerminatedStringRef(PathStorage); @@ -381,8 +392,10 @@ std::error_code equivalent(const Twine &A, const Twine &B, bool &result) { return std::error_code(); } -static std::error_code fillStatus(int StatRet, const struct stat &Status, - file_status &Result) { +namespace { + +std::error_code fillStatus(int StatRet, const struct stat &Status, + file_status &Result) { if (StatRet != 0) { std::error_code ec(errno, std::generic_category()); if (ec == errc::no_such_file_or_directory) @@ -416,6 +429,8 @@ static std::error_code fillStatus(int StatRet, const struct stat &Status, return std::error_code(); } +} // end anonymous namespace + std::error_code status(const Twine &Path, file_status &Result) { SmallString<128> PathStorage; StringRef P = Path.toNullTerminatedStringRef(PathStorage); @@ -597,7 +612,9 @@ bool home_directory(SmallVectorImpl<char> &result) { return false; } -static bool getDarwinConfDir(bool TempDir, SmallVectorImpl<char> &Result) { +namespace { + +bool getDarwinConfDir(bool TempDir, SmallVectorImpl<char> &Result) { #if defined(_CS_DARWIN_USER_TEMP_DIR) && defined(_CS_DARWIN_USER_CACHE_DIR) // On Darwin, use DARWIN_USER_TEMP_DIR or DARWIN_USER_CACHE_DIR. // macros defined in <unistd.h> on darwin >= 9 @@ -622,7 +639,7 @@ static bool getDarwinConfDir(bool TempDir, SmallVectorImpl<char> &Result) { return false; } -static bool getUserCacheDir(SmallVectorImpl<char> &Result) { +bool getUserCacheDir(SmallVectorImpl<char> &Result) { // First try using XDG_CACHE_HOME env variable, // as specified in XDG Base Directory Specification at // http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html @@ -645,7 +662,7 @@ static bool getUserCacheDir(SmallVectorImpl<char> &Result) { return false; } -static const char *getEnvTempDir() { +const char *getEnvTempDir() { // Check whether the temporary directory is specified by an environment // variable. const char *EnvironmentVariables[] = {"TMPDIR", "TMP", "TEMP", "TEMPDIR"}; @@ -657,7 +674,7 @@ static const char *getEnvTempDir() { return nullptr; } -static const char *getDefaultTempDir(bool ErasedOnReboot) { +const char *getDefaultTempDir(bool ErasedOnReboot) { #ifdef P_tmpdir if ((bool)P_tmpdir) return P_tmpdir; @@ -668,6 +685,8 @@ static const char *getDefaultTempDir(bool ErasedOnReboot) { return "/var/tmp"; } +} // end anonymous namespace + void system_temp_directory(bool ErasedOnReboot, SmallVectorImpl<char> &Result) { Result.clear(); diff --git a/llvm/lib/Support/Unix/Process.inc b/llvm/lib/Support/Unix/Process.inc index cad81f8074f..350b145c28c 100644 --- a/llvm/lib/Support/Unix/Process.inc +++ b/llvm/lib/Support/Unix/Process.inc @@ -30,9 +30,7 @@ #ifdef HAVE_SYS_STAT_H #include <sys/stat.h> #endif -#if HAVE_SIGNAL_H -#include <signal.h> -#endif +#include <csignal> // DragonFlyBSD, OpenBSD, and Bitrig have deprecated <malloc.h> for // <stdlib.h> instead. Unix.h includes this for us already. #if defined(HAVE_MALLOC_H) && !defined(__DragonFly__) && \ @@ -60,7 +58,9 @@ using namespace llvm; using namespace sys; -static std::pair<TimeValue, TimeValue> getRUsageTimes() { +namespace { + +std::pair<TimeValue, TimeValue> getRUsageTimes() { #if defined(HAVE_GETRUSAGE) struct rusage RU; ::getrusage(RUSAGE_SELF, &RU); @@ -79,6 +79,8 @@ static std::pair<TimeValue, TimeValue> getRUsageTimes() { #endif } +} // end anonymous namespace + // On Cygwin, getpagesize() returns 64k(AllocationGranularity) and // offset in mmap(3) should be aligned to the AllocationGranularity. unsigned Process::getPageSize() { @@ -189,6 +191,7 @@ Process::GetArgumentVector(SmallVectorImpl<const char *> &ArgsOut, } namespace { + class FDCloser { public: FDCloser(int &FD) : FD(FD), KeepOpen(false) {} @@ -205,7 +208,8 @@ private: int &FD; bool KeepOpen; }; -} + +} // end anonymous namespace std::error_code Process::FixupStandardFileDescriptors() { int NullFD = -1; @@ -300,7 +304,9 @@ bool Process::FileDescriptorIsDisplayed(int fd) { #endif } -static unsigned getColumns(int FileID) { +namespace { + +unsigned getColumns(int FileID) { // If COLUMNS is defined in the environment, wrap to that many columns. if (const char *ColumnsStr = std::getenv("COLUMNS")) { int Columns = std::atoi(ColumnsStr); @@ -320,6 +326,8 @@ static unsigned getColumns(int FileID) { return Columns; } +} // end anonymous namespace + unsigned Process::StandardOutColumns() { if (!StandardOutIsDisplayed()) return 0; @@ -344,11 +352,13 @@ extern "C" int del_curterm(struct term *termp); extern "C" int tigetnum(char *capname); #endif +namespace { + #ifdef HAVE_TERMINFO -static ManagedStatic<sys::Mutex> TermColorMutex; +ManagedStatic<sys::Mutex> TermColorMutex; #endif -static bool terminalHasColors(int fd) { +bool terminalHasColors(int fd) { #ifdef HAVE_TERMINFO // First, acquire a global lock because these C routines are thread hostile. MutexGuard G(*TermColorMutex); @@ -388,6 +398,8 @@ static bool terminalHasColors(int fd) { return false; } +} // end anonymous namespace + bool Process::FileDescriptorHasColors(int fd) { // A file descriptor has colors if it is displayed and the terminal has // colors. @@ -428,7 +440,10 @@ const char *Process::ResetColor() { } #if !defined(HAVE_DECL_ARC4RANDOM) || !HAVE_DECL_ARC4RANDOM -static unsigned GetRandomNumberSeed() { + +namespace { + +unsigned GetRandomNumberSeed() { // Attempt to get the initial seed from /dev/urandom, if possible. int urandomFD = open("/dev/urandom", O_RDONLY); @@ -450,6 +465,9 @@ static unsigned GetRandomNumberSeed() { TimeValue Now = TimeValue::now(); return hash_combine(Now.seconds(), Now.nanoseconds(), ::getpid()); } + +} // end anonymous namespace + #endif unsigned llvm::sys::Process::GetRandomNumber() { diff --git a/llvm/lib/Support/Unix/Program.inc b/llvm/lib/Support/Unix/Program.inc index 7d3537e2072..ee7df0a86b8 100644 --- a/llvm/lib/Support/Unix/Program.inc +++ b/llvm/lib/Support/Unix/Program.inc @@ -1,4 +1,4 @@ -//===- llvm/Support/Unix/Program.cpp -----------------------------*- C++ -*-===// +//===- llvm/Support/Unix/Program.cpp ----------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -30,9 +30,7 @@ #if HAVE_SYS_RESOURCE_H #include <sys/resource.h> #endif -#if HAVE_SIGNAL_H -#include <signal.h> -#endif +#include <csignal> #if HAVE_FCNTL_H #include <fcntl.h> #endif @@ -96,7 +94,9 @@ ErrorOr<std::string> sys::findProgramByName(StringRef Name, return errc::no_such_file_or_directory; } -static bool RedirectIO(const StringRef *Path, int FD, std::string* ErrMsg) { +namespace { + +bool RedirectIO(const StringRef *Path, int FD, std::string* ErrMsg) { if (!Path) // Noop return false; std::string File; @@ -125,8 +125,8 @@ static bool RedirectIO(const StringRef *Path, int FD, std::string* ErrMsg) { } #ifdef HAVE_POSIX_SPAWN -static bool RedirectIO_PS(const std::string *Path, int FD, std::string *ErrMsg, - posix_spawn_file_actions_t *FileActions) { +bool RedirectIO_PS(const std::string *Path, int FD, std::string *ErrMsg, + posix_spawn_file_actions_t *FileActions) { if (!Path) // Noop return false; const char *File; @@ -144,10 +144,10 @@ static bool RedirectIO_PS(const std::string *Path, int FD, std::string *ErrMsg, } #endif -static void TimeOutHandler(int Sig) { +void TimeOutHandler(int Sig) { } -static void SetMemoryLimits (unsigned size) +void SetMemoryLimits (unsigned size) { #if HAVE_SYS_RESOURCE_H && HAVE_GETRLIMIT && HAVE_SETRLIMIT struct rlimit r; @@ -176,7 +176,9 @@ static void SetMemoryLimits (unsigned size) #endif } -} +} // end anonymous namespace + +} // end namespace llvm static bool Execute(ProcessInfo &PI, StringRef Program, const char **args, const char **envp, const StringRef **redirects, @@ -419,12 +421,12 @@ ProcessInfo sys::Wait(const ProcessInfo &PI, unsigned SecondsToWait, return WaitResult; } - std::error_code sys::ChangeStdinToBinary(){ +std::error_code sys::ChangeStdinToBinary() { // Do nothing, as Unix doesn't differentiate between text and binary. return std::error_code(); } - std::error_code sys::ChangeStdoutToBinary(){ +std::error_code sys::ChangeStdoutToBinary() { // Do nothing, as Unix doesn't differentiate between text and binary. return std::error_code(); } @@ -466,4 +468,5 @@ bool llvm::sys::commandLineFitsWithinSystemLimits(StringRef Program, ArrayRef<co } return true; } -} + +} // end namespace llvm diff --git a/llvm/lib/Support/Unix/Signals.inc b/llvm/lib/Support/Unix/Signals.inc index 061cdb3da21..8be91cd5fb8 100644 --- a/llvm/lib/Support/Unix/Signals.inc +++ b/llvm/lib/Support/Unix/Signals.inc @@ -1,4 +1,4 @@ -//===- Signals.cpp - Generic Unix Signals Implementation -----*- C++ -*-===// +//===- Signals.cpp - Generic Unix Signals Implementation --------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -27,9 +27,7 @@ #if HAVE_EXECINFO_H # include <execinfo.h> // For backtrace(). #endif -#if HAVE_SIGNAL_H -#include <signal.h> -#endif +#include <csignal> #if HAVE_SYS_STAT_H #include <sys/stat.h> #endif @@ -48,25 +46,27 @@ using namespace llvm; -static RETSIGTYPE SignalHandler(int Sig); // defined below. +namespace { + +RETSIGTYPE SignalHandler(int Sig); // defined below. -static ManagedStatic<SmartMutex<true> > SignalsMutex; +ManagedStatic<SmartMutex<true> > SignalsMutex; /// InterruptFunction - The function to call if ctrl-c is pressed. -static void (*InterruptFunction)() = nullptr; +void (*InterruptFunction)() = nullptr; -static ManagedStatic<std::vector<std::string>> FilesToRemove; +ManagedStatic<std::vector<std::string>> FilesToRemove; // IntSigs - Signals that represent requested termination. There's no bug // or failure, or if there is, it's not our direct responsibility. For whatever // reason, our continued execution is no longer desirable. -static const int IntSigs[] = { +const int IntSigs[] = { SIGHUP, SIGINT, SIGPIPE, SIGTERM, SIGUSR1, SIGUSR2 }; // KillSigs - Signals that represent that we have a bug, and our prompt // termination has been ordered. -static const int KillSigs[] = { +const int KillSigs[] = { SIGILL, SIGTRAP, SIGABRT, SIGFPE, SIGBUS, SIGSEGV, SIGQUIT #ifdef SIGSYS , SIGSYS @@ -82,14 +82,13 @@ static const int KillSigs[] = { #endif }; -static unsigned NumRegisteredSignals = 0; -static struct { +unsigned NumRegisteredSignals = 0; +struct { struct sigaction SA; int SigNo; } RegisteredSignalInfo[array_lengthof(IntSigs) + array_lengthof(KillSigs)]; - -static void RegisterHandler(int Signal) { +void RegisterHandler(int Signal) { assert(NumRegisteredSignals < array_lengthof(RegisteredSignalInfo) && "Out of space for signal handlers!"); @@ -106,7 +105,7 @@ static void RegisterHandler(int Signal) { ++NumRegisteredSignals; } -static void RegisterHandlers() { +void RegisterHandlers() { // We need to dereference the signals mutex during handler registration so // that we force its construction. This is to prevent the first use being // during handling an actual signal because you can't safely call new in a @@ -120,7 +119,7 @@ static void RegisterHandlers() { for (auto S : KillSigs) RegisterHandler(S); } -static void UnregisterHandlers() { +void UnregisterHandlers() { // Restore all of the signal handlers to how they were before we showed up. for (unsigned i = 0, e = NumRegisteredSignals; i != e; ++i) sigaction(RegisteredSignalInfo[i].SigNo, @@ -128,12 +127,11 @@ static void UnregisterHandlers() { NumRegisteredSignals = 0; } - /// RemoveFilesToRemove - Process the FilesToRemove list. This function /// should be called with the SignalsMutex lock held. /// NB: This must be an async signal safe function. It cannot allocate or free /// memory, even in debug builds. -static void RemoveFilesToRemove() { +void RemoveFilesToRemove() { // Avoid constructing ManagedStatic in the signal handler. // If FilesToRemove is not constructed, there are no files to remove. if (!FilesToRemove.isConstructed()) @@ -164,7 +162,7 @@ static void RemoveFilesToRemove() { } // SignalHandler - The signal handler that runs. -static RETSIGTYPE SignalHandler(int Sig) { +RETSIGTYPE SignalHandler(int Sig) { // Restore the signal behavior to default, so that the program actually // crashes when we return and the signal reissues. This also ensures that if // we crash in our signal handler that the program will terminate immediately @@ -209,6 +207,8 @@ static RETSIGTYPE SignalHandler(int Sig) { #endif } +} // end anonymous namespace + void llvm::sys::RunInterruptHandlers() { sys::SmartScopedLock<true> Guard(*SignalsMutex); RemoveFilesToRemove(); @@ -264,7 +264,9 @@ struct DlIteratePhdrData { const char *main_exec_name; }; -static int dl_iterate_phdr_cb(dl_phdr_info *info, size_t size, void *arg) { +namespace { + +int dl_iterate_phdr_cb(dl_phdr_info *info, size_t size, void *arg) { DlIteratePhdrData *data = (DlIteratePhdrData*)arg; const char *name = data->first ? data->main_exec_name : info->dlpi_name; data->first = false; @@ -287,6 +289,8 @@ static int dl_iterate_phdr_cb(dl_phdr_info *info, size_t size, void *arg) { return 0; } +} // end anonymous namespace + /// If this is an ELF platform, we can find all loaded modules and their virtual /// addresses with dl_iterate_phdr. static bool findModulesAndOffsets(void **StackTrace, int Depth, @@ -375,10 +379,14 @@ void llvm::sys::PrintStackTrace(raw_ostream &OS) { #endif } -static void PrintStackTraceSignalHandler(void *) { +namespace { + +void PrintStackTraceSignalHandler(void *) { PrintStackTrace(llvm::errs()); } +} // end anonymous namespace + void llvm::sys::DisableSystemDialogsOnCrash() {} /// PrintStackTraceOnErrorSignal - When an error signal (such as SIGABRT or @@ -403,9 +411,6 @@ void llvm::sys::PrintStackTraceOnErrorSignal(bool DisableCrashReporting) { #endif } - -/***/ - // On Darwin, raise sends a signal to the main thread instead of the current // thread. This has the unfortunate effect that assert() and abort() will end up // bypassing our crash recovery attempts. We work around this for anything in diff --git a/llvm/lib/Support/Unix/ThreadLocal.inc b/llvm/lib/Support/Unix/ThreadLocal.inc index 31c3f3835b2..78c694c908d 100644 --- a/llvm/lib/Support/Unix/ThreadLocal.inc +++ b/llvm/lib/Support/Unix/ThreadLocal.inc @@ -19,10 +19,11 @@ #if defined(HAVE_PTHREAD_H) && defined(HAVE_PTHREAD_GETSPECIFIC) #include <cassert> +#include <cstdlib> #include <pthread.h> -#include <stdlib.h> namespace llvm { + using namespace sys; ThreadLocalImpl::ThreadLocalImpl() : data() { @@ -56,14 +57,19 @@ void ThreadLocalImpl::removeInstance() { setInstance(nullptr); } -} +} // end namespace llvm #else + namespace llvm { + using namespace sys; + ThreadLocalImpl::ThreadLocalImpl() : data() { } ThreadLocalImpl::~ThreadLocalImpl() { } void ThreadLocalImpl::setInstance(const void* d) { data = const_cast<void*>(d);} void *ThreadLocalImpl::getInstance() { return data; } void ThreadLocalImpl::removeInstance() { setInstance(0); } -} + +} // end namespace llvm + #endif diff --git a/llvm/lib/Support/Unix/Unix.h b/llvm/lib/Support/Unix/Unix.h index 871e612f6c1..832d65bcc3a 100644 --- a/llvm/lib/Support/Unix/Unix.h +++ b/llvm/lib/Support/Unix/Unix.h @@ -1,4 +1,4 @@ -//===- llvm/Support/Unix/Unix.h - Common Unix Include File -------*- C++ -*-===// +//===- llvm/Support/Unix/Unix.h - Common Unix Include File ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -22,7 +22,7 @@ #include "llvm/Config/config.h" // Get autoconf configuration settings #include "llvm/Support/Errno.h" #include <algorithm> -#include <assert.h> +#include <cassert> #include <cerrno> #include <cstdio> #include <cstdlib> @@ -42,7 +42,7 @@ #ifdef HAVE_SYS_TIME_H # include <sys/time.h> #endif -#include <time.h> +#include <ctime> #ifdef HAVE_DLFCN_H # include <dlfcn.h> @@ -65,4 +65,4 @@ static inline bool MakeErrMsg( return true; } -#endif +#endif // LLVM_LIB_SUPPORT_UNIX_UNIX_H |