diff options
author | Vedant Kumar <vsk@apple.com> | 2017-12-14 18:50:13 +0000 |
---|---|---|
committer | Vedant Kumar <vsk@apple.com> | 2017-12-14 18:50:13 +0000 |
commit | e8e8599adee0fad6365b058cf801718f0414fdb7 (patch) | |
tree | fd8ff4546ebff32585c2c65203e082d6cd9f9555 /compiler-rt | |
parent | a1cedd6c46705aac4d78e827c6ca6a365fbafa32 (diff) | |
download | llvm-e8e8599adee0fad6365b058cf801718f0414fdb7.zip llvm-e8e8599adee0fad6365b058cf801718f0414fdb7.tar.gz llvm-e8e8599adee0fad6365b058cf801718f0414fdb7.tar.bz2 |
Revert "(HEAD -> master, origin/master, origin/HEAD) [profile] Port the runtime to Solaris"
This reverts commit r320726. It looks like flock isn't available on
Windows:
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/21317/steps/build%20compiler-rt/logs/stdio
llvm-svn: 320728
Diffstat (limited to 'compiler-rt')
-rw-r--r-- | compiler-rt/cmake/config-ix.cmake | 2 | ||||
-rw-r--r-- | compiler-rt/lib/profile/CMakeLists.txt | 14 | ||||
-rw-r--r-- | compiler-rt/lib/profile/GCDAProfiling.c | 16 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfiling.c | 6 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingFile.c | 10 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingInternal.h | 3 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingPlatformLinux.c | 6 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingPlatformOther.c | 7 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingPort.h | 14 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingUtil.c | 66 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingUtil.h | 3 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingValue.c | 8 | ||||
-rw-r--r-- | compiler-rt/lib/profile/InstrProfilingWriter.c | 5 | ||||
-rw-r--r-- | compiler-rt/lib/profile/WindowsMMap.c | 3 | ||||
-rw-r--r-- | compiler-rt/test/profile/lit.cfg | 2 |
15 files changed, 49 insertions, 116 deletions
diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake index ada4719..58d4cb5 100644 --- a/compiler-rt/cmake/config-ix.cmake +++ b/compiler-rt/cmake/config-ix.cmake @@ -542,7 +542,7 @@ else() endif() if (PROFILE_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND - OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android|SunOS") + OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android") set(COMPILER_RT_HAS_PROFILE TRUE) else() set(COMPILER_RT_HAS_PROFILE FALSE) diff --git a/compiler-rt/lib/profile/CMakeLists.txt b/compiler-rt/lib/profile/CMakeLists.txt index 91d67ec..342f8ee 100644 --- a/compiler-rt/lib/profile/CMakeLists.txt +++ b/compiler-rt/lib/profile/CMakeLists.txt @@ -38,14 +38,6 @@ int main() { " COMPILER_RT_TARGET_HAS_FCNTL_LCK) -CHECK_CXX_SOURCE_COMPILES(" -#include <sys/utsname.h> -int main() { - return 0; -} - -" COMPILER_RT_TARGET_HAS_UNAME) - add_compiler_rt_component(profile) set(PROFILE_SOURCES @@ -86,12 +78,6 @@ if(COMPILER_RT_TARGET_HAS_FCNTL_LCK) -DCOMPILER_RT_HAS_FCNTL_LCK=1) endif() -if(COMPILER_RT_TARGET_HAS_UNAME) - set(EXTRA_FLAGS - ${EXTRA_FLAGS} - -DCOMPILER_RT_HAS_UNAME=1) -endif() - # This appears to be a C-only warning banning the use of locals in aggregate # initializers. All other compilers accept this, though. # nonstandard extension used : 'identifier' : cannot be initialized using address of automatic variable diff --git a/compiler-rt/lib/profile/GCDAProfiling.c b/compiler-rt/lib/profile/GCDAProfiling.c index ef299f0..8c92546 100644 --- a/compiler-rt/lib/profile/GCDAProfiling.c +++ b/compiler-rt/lib/profile/GCDAProfiling.c @@ -20,6 +20,9 @@ |* \*===----------------------------------------------------------------------===*/ +#include "InstrProfilingPort.h" +#include "InstrProfilingUtil.h" + #include <errno.h> #include <fcntl.h> #include <stdio.h> @@ -31,6 +34,12 @@ #else #include <sys/mman.h> #include <sys/file.h> +#ifndef MAP_FILE +#define MAP_FILE 0 +#endif +#ifndef O_BINARY +#define O_BINARY 0 +#endif #endif #if defined(__FreeBSD__) && defined(__i386__) @@ -56,9 +65,6 @@ typedef unsigned int uint32_t; typedef unsigned long long uint64_t; #endif -#include "InstrProfiling.h" -#include "InstrProfilingUtil.h" - /* #define DEBUG_GCDAPROFILING */ /* @@ -260,7 +266,7 @@ void llvm_gcda_start_file(const char *orig_filename, const char version[4], * same GCDA. This can fail if the filesystem doesn't support it, but in that * case we'll just carry on with the old racy behaviour and hope for the best. */ - lprofLockFd(fd); + flock(fd, LOCK_EX); output_file = fdopen(fd, mode); /* Initialize the write buffer. */ @@ -459,7 +465,7 @@ void llvm_gcda_end_file() { unmap_file(); } - lprofUnlockFd(fd); + flock(fd, LOCK_UN); fclose(output_file); output_file = NULL; write_buffer = NULL; diff --git a/compiler-rt/lib/profile/InstrProfiling.c b/compiler-rt/lib/profile/InstrProfiling.c index 00b31e1..fe66fec 100644 --- a/compiler-rt/lib/profile/InstrProfiling.c +++ b/compiler-rt/lib/profile/InstrProfiling.c @@ -7,14 +7,12 @@ |* \*===----------------------------------------------------------------------===*/ +#include "InstrProfiling.h" +#include "InstrProfilingInternal.h" #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> - -#include "InstrProfiling.h" -#include "InstrProfilingInternal.h" - #define INSTR_PROF_VALUE_PROF_DATA #include "InstrProfData.inc" diff --git a/compiler-rt/lib/profile/InstrProfilingFile.c b/compiler-rt/lib/profile/InstrProfilingFile.c index d7c0abb..8ae2b7d 100644 --- a/compiler-rt/lib/profile/InstrProfilingFile.c +++ b/compiler-rt/lib/profile/InstrProfilingFile.c @@ -7,6 +7,9 @@ |* \*===----------------------------------------------------------------------===*/ +#include "InstrProfiling.h" +#include "InstrProfilingInternal.h" +#include "InstrProfilingUtil.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> @@ -28,10 +31,6 @@ #endif #endif -#include "InstrProfiling.h" -#include "InstrProfilingInternal.h" -#include "InstrProfilingUtil.h" - /* From where is profile name specified. * The order the enumerators define their * precedence. Re-order them may lead to @@ -86,6 +85,7 @@ typedef struct lprofFilename { COMPILER_RT_WEAK lprofFilename lprofCurFilename = {0, 0, 0, {0}, {0}, 0, 0, 0, PNS_unknown}; +int getpid(void); static int getCurFilenameLength(); static const char *getCurFilename(char *FilenameBuf); static unsigned doMerging() { return lprofCurFilename.MergePoolSize; } @@ -325,7 +325,7 @@ static int parseFilenamePattern(const char *FilenamePat, if (FilenamePat[I] == '%') { if (FilenamePat[++I] == 'p') { if (!NumPids++) { - if (snprintf(PidChars, MAX_PID_SIZE, "%ld", (long)getpid()) <= 0) { + if (snprintf(PidChars, MAX_PID_SIZE, "%d", getpid()) <= 0) { PROF_WARN("Unable to get pid for filename pattern %s. Using the " "default name.", FilenamePat); diff --git a/compiler-rt/lib/profile/InstrProfilingInternal.h b/compiler-rt/lib/profile/InstrProfilingInternal.h index 40540ab..36490ef 100644 --- a/compiler-rt/lib/profile/InstrProfilingInternal.h +++ b/compiler-rt/lib/profile/InstrProfilingInternal.h @@ -10,9 +10,8 @@ #ifndef PROFILE_INSTRPROFILING_INTERNALH_ #define PROFILE_INSTRPROFILING_INTERNALH_ -#include <stddef.h> - #include "InstrProfiling.h" +#include "stddef.h" /*! * \brief Write instrumentation data to the given buffer, given explicit diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c index 89f1ab4..b6c780f 100644 --- a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c +++ b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c @@ -7,13 +7,11 @@ |* \*===----------------------------------------------------------------------===*/ -#if defined(__linux__) || defined(__FreeBSD__) || \ - (defined(__sun__) && defined(__svr4__)) +#include "InstrProfiling.h" +#if defined(__linux__) || defined(__FreeBSD__) #include <stdlib.h> -#include "InstrProfiling.h" - #define PROF_DATA_START INSTR_PROF_SECT_START(INSTR_PROF_DATA_SECT_NAME) #define PROF_DATA_STOP INSTR_PROF_SECT_STOP(INSTR_PROF_DATA_SECT_NAME) #define PROF_NAME_START INSTR_PROF_SECT_START(INSTR_PROF_NAME_SECT_NAME) diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformOther.c b/compiler-rt/lib/profile/InstrProfilingPlatformOther.c index a339abc..b259664 100644 --- a/compiler-rt/lib/profile/InstrProfilingPlatformOther.c +++ b/compiler-rt/lib/profile/InstrProfilingPlatformOther.c @@ -7,12 +7,11 @@ |* \*===----------------------------------------------------------------------===*/ -#if !defined(__APPLE__) && !defined(__linux__) && !defined(__FreeBSD__) && \ - !(defined(__sun__) && defined(__svr4__)) +#include "InstrProfiling.h" -#include <stdlib.h> +#if !defined(__APPLE__) && !defined(__linux__) && !defined(__FreeBSD__) -#include "InstrProfiling.h" +#include <stdlib.h> static const __llvm_profile_data *DataFirst = NULL; static const __llvm_profile_data *DataLast = NULL; diff --git a/compiler-rt/lib/profile/InstrProfilingPort.h b/compiler-rt/lib/profile/InstrProfilingPort.h index cd1264b..5789351 100644 --- a/compiler-rt/lib/profile/InstrProfilingPort.h +++ b/compiler-rt/lib/profile/InstrProfilingPort.h @@ -7,9 +7,6 @@ |* \*===----------------------------------------------------------------------===*/ -/* This header must be included after all others so it can provide fallback - definitions for stuff missing in system headers. */ - #ifndef PROFILE_INSTRPROFILING_PORT_H_ #define PROFILE_INSTRPROFILING_PORT_H_ @@ -47,6 +44,9 @@ #define COMPILER_RT_GETHOSTNAME(Name, Len) ((void)(Name), (void)(Len), (-1)) #else #define COMPILER_RT_GETHOSTNAME(Name, Len) lprofGetHostName(Name, Len) +#ifndef _MSC_VER +#define COMPILER_RT_HAS_UNAME 1 +#endif #endif #if COMPILER_RT_HAS_ATOMICS == 1 @@ -107,14 +107,6 @@ #define PROF_NOTE(Format, ...) \ fprintf(stderr, "LLVM Profile Note: " Format, __VA_ARGS__); -#ifndef MAP_FILE -#define MAP_FILE 0 -#endif - -#ifndef O_BINARY -#define O_BINARY 0 -#endif - #if defined(__FreeBSD__) #include <inttypes.h> diff --git a/compiler-rt/lib/profile/InstrProfilingUtil.c b/compiler-rt/lib/profile/InstrProfilingUtil.c index 9ae1613..fb68f30 100644 --- a/compiler-rt/lib/profile/InstrProfilingUtil.c +++ b/compiler-rt/lib/profile/InstrProfilingUtil.c @@ -7,6 +7,9 @@ |* \*===----------------------------------------------------------------------===*/ +#include "InstrProfilingUtil.h" +#include "InstrProfiling.h" + #ifdef _WIN32 #include <direct.h> #include <io.h> @@ -31,9 +34,6 @@ #include <sys/prctl.h> #endif -#include "InstrProfiling.h" -#include "InstrProfilingUtil.h" - COMPILER_RT_VISIBILITY void __llvm_profile_recursive_mkdir(char *path) { int i; @@ -86,16 +86,16 @@ COMPILER_RT_VISIBILITY int lprofGetHostName(char *Name, int Len) { #elif defined(COMPILER_RT_HAS_UNAME) COMPILER_RT_VISIBILITY int lprofGetHostName(char *Name, int Len) { struct utsname N; - int R = uname(&N); - if (R >= 0) { + int R; + if (!(R = uname(&N))) strncpy(Name, N.nodename, Len); - return 0; - } return R; } #endif -COMPILER_RT_VISIBILITY int lprofLockFd(int fd) { +COMPILER_RT_VISIBILITY FILE *lprofOpenFileEx(const char *ProfileName) { + FILE *f; + int fd; #ifdef COMPILER_RT_HAS_FCNTL_LCK struct flock s_flock; @@ -103,59 +103,21 @@ COMPILER_RT_VISIBILITY int lprofLockFd(int fd) { s_flock.l_start = 0; s_flock.l_len = 0; /* Until EOF. */ s_flock.l_pid = getpid(); - s_flock.l_type = F_WRLCK; - while (fcntl(fd, F_SETLKW, &s_flock) == -1) { - if (errno != EINTR) { - if (errno == ENOLCK) { - return -1; - } - break; - } - } - return 0; -#else - flock(fd, LOCK_EX); - return 0; -#endif -} - -COMPILER_RT_VISIBILITY int lprofUnlockFd(int fd) { -#ifdef COMPILER_RT_HAS_FCNTL_LCK - struct flock s_flock; - - s_flock.l_whence = SEEK_SET; - s_flock.l_start = 0; - s_flock.l_len = 0; /* Until EOF. */ - s_flock.l_pid = getpid(); - s_flock.l_type = F_UNLCK; + s_flock.l_type = F_WRLCK; + fd = open(ProfileName, O_RDWR | O_CREAT, 0666); + if (fd < 0) + return NULL; while (fcntl(fd, F_SETLKW, &s_flock) == -1) { if (errno != EINTR) { if (errno == ENOLCK) { - return -1; + PROF_WARN("Data may be corrupted during profile merging : %s\n", + "Fail to obtain file lock due to system limit."); } break; } } - return 0; -#else - flock(fd, LOCK_UN); - return 0; -#endif -} - -COMPILER_RT_VISIBILITY FILE *lprofOpenFileEx(const char *ProfileName) { - FILE *f; - int fd; -#ifdef COMPILER_RT_HAS_FCNTL_LCK - fd = open(ProfileName, O_RDWR | O_CREAT, 0666); - if (fd < 0) - return NULL; - - if (lprofLockFd(fd) != 0) - PROF_WARN("Data may be corrupted during profile merging : %s\n", - "Fail to obtain file lock due to system limit."); f = fdopen(fd, "r+b"); #elif defined(_WIN32) diff --git a/compiler-rt/lib/profile/InstrProfilingUtil.h b/compiler-rt/lib/profile/InstrProfilingUtil.h index 2f2ea1b..9698599 100644 --- a/compiler-rt/lib/profile/InstrProfilingUtil.h +++ b/compiler-rt/lib/profile/InstrProfilingUtil.h @@ -16,9 +16,6 @@ /*! \brief Create a directory tree. */ void __llvm_profile_recursive_mkdir(char *Pathname); -int lprofLockFd(int fd); -int lprofUnlockFd(int fd); - /*! Open file \c Filename for read+write with write * lock for exclusive access. The caller will block * if the lock is already held by another process. */ diff --git a/compiler-rt/lib/profile/InstrProfilingValue.c b/compiler-rt/lib/profile/InstrProfilingValue.c index 3db0de8..4bc7bb6 100644 --- a/compiler-rt/lib/profile/InstrProfilingValue.c +++ b/compiler-rt/lib/profile/InstrProfilingValue.c @@ -7,15 +7,13 @@ |* \*===----------------------------------------------------------------------===*/ +#include "InstrProfiling.h" +#include "InstrProfilingInternal.h" +#include "InstrProfilingUtil.h" /* For PS4 getenv shim. */ #include <limits.h> #include <stdio.h> #include <stdlib.h> #include <string.h> - -#include "InstrProfiling.h" -#include "InstrProfilingInternal.h" -#include "InstrProfilingUtil.h" - #define INSTR_PROF_VALUE_PROF_DATA #define INSTR_PROF_COMMON_API_IMPL #include "InstrProfData.inc" diff --git a/compiler-rt/lib/profile/InstrProfilingWriter.c b/compiler-rt/lib/profile/InstrProfilingWriter.c index 7c6061d..d4c9b9b 100644 --- a/compiler-rt/lib/profile/InstrProfilingWriter.c +++ b/compiler-rt/lib/profile/InstrProfilingWriter.c @@ -7,15 +7,14 @@ |* \*===----------------------------------------------------------------------===*/ +#include "InstrProfiling.h" +#include "InstrProfilingInternal.h" #ifdef _MSC_VER /* For _alloca */ #include <malloc.h> #endif #include <string.h> -#include "InstrProfiling.h" -#include "InstrProfilingInternal.h" - #define INSTR_PROF_VALUE_PROF_DATA #include "InstrProfData.inc" diff --git a/compiler-rt/lib/profile/WindowsMMap.c b/compiler-rt/lib/profile/WindowsMMap.c index dc87a88..0c53471 100644 --- a/compiler-rt/lib/profile/WindowsMMap.c +++ b/compiler-rt/lib/profile/WindowsMMap.c @@ -18,12 +18,11 @@ #if defined(_WIN32) #include "WindowsMMap.h" +#include "InstrProfiling.h" #define WIN32_LEAN_AND_MEAN #include <windows.h> -#include "InstrProfiling.h" - #ifdef __USE_FILE_OFFSET64 # define DWORD_HI(x) (x >> 32) # define DWORD_LO(x) ((x) & 0xffffffff) diff --git a/compiler-rt/test/profile/lit.cfg b/compiler-rt/test/profile/lit.cfg index 1cd2509..2686207 100644 --- a/compiler-rt/test/profile/lit.cfg +++ b/compiler-rt/test/profile/lit.cfg @@ -67,7 +67,7 @@ config.substitutions.append( ("%clangxx_profuse=", build_invocation(clang_cxxfla config.substitutions.append( ("%clang_lto_profgen=", build_invocation(clang_cflags, True) + " -fprofile-instr-generate=") ) -if config.host_os not in ['Darwin', 'FreeBSD', 'Linux', 'SunOS']: +if config.host_os not in ['Darwin', 'FreeBSD', 'Linux']: config.unsupported = True if config.target_arch in ['armv7l']: |