summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/Unix
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Support/Unix')
-rw-r--r--llvm/lib/Support/Unix/Path.inc41
-rw-r--r--llvm/lib/Support/Unix/Process.inc36
-rw-r--r--llvm/lib/Support/Unix/Program.inc29
-rw-r--r--llvm/lib/Support/Unix/Signals.inc53
-rw-r--r--llvm/lib/Support/Unix/ThreadLocal.inc12
-rw-r--r--llvm/lib/Support/Unix/Unix.h8
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
OpenPOWER on IntegriCloud