diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/autoconf/configure.ac | 2 | ||||
| -rwxr-xr-x | llvm/cmake/config-ix.cmake | 2 | ||||
| -rwxr-xr-x | llvm/configure | 3 | ||||
| -rw-r--r-- | llvm/include/llvm/Config/config.h.cmake | 3 | ||||
| -rw-r--r-- | llvm/include/llvm/Config/config.h.in | 3 | ||||
| -rw-r--r-- | llvm/lib/Support/MemoryBuffer.cpp | 7 | 
6 files changed, 18 insertions, 2 deletions
diff --git a/llvm/autoconf/configure.ac b/llvm/autoconf/configure.ac index 090f5dc12d6..d7775533e56 100644 --- a/llvm/autoconf/configure.ac +++ b/llvm/autoconf/configure.ac @@ -1293,7 +1293,7 @@ AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])  AC_CHECK_FUNCS([powf fmodf strtof round ])  AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])  AC_CHECK_FUNCS([isatty mkdtemp mkstemp ]) -AC_CHECK_FUNCS([mktemp posix_spawn realpath sbrk setrlimit strdup ]) +AC_CHECK_FUNCS([mktemp posix_spawn pread realpath sbrk setrlimit strdup ])  AC_CHECK_FUNCS([strerror strerror_r setenv ])  AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])  AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev]) diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake index 62699fa5aaf..0943ae71b83 100755 --- a/llvm/cmake/config-ix.cmake +++ b/llvm/cmake/config-ix.cmake @@ -126,6 +126,8 @@ check_symbol_exists(readdir "sys/types.h;dirent.h" HAVE_READDIR)  check_symbol_exists(getcwd unistd.h HAVE_GETCWD)  check_symbol_exists(gettimeofday sys/time.h HAVE_GETTIMEOFDAY)  check_symbol_exists(getrlimit "sys/types.h;sys/time.h;sys/resource.h" HAVE_GETRLIMIT) +check_symbol_exists(posix_spawn spawn.h HAVE_POSIX_SPAWN) +check_symbol_exists(pread unistd.h HAVE_PREAD)  check_symbol_exists(rindex strings.h HAVE_RINDEX)  check_symbol_exists(strchr string.h HAVE_STRCHR)  check_symbol_exists(strcmp string.h HAVE_STRCMP) diff --git a/llvm/configure b/llvm/configure index 09173d257f3..bfd61dd5e3e 100755 --- a/llvm/configure +++ b/llvm/configure @@ -17151,7 +17151,8 @@ done -for ac_func in mktemp posix_spawn realpath sbrk setrlimit strdup + +for ac_func in mktemp posix_spawn pread realpath sbrk setrlimit strdup  do  as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`  { echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/llvm/include/llvm/Config/config.h.cmake b/llvm/include/llvm/Config/config.h.cmake index 69e3eefb116..11e5b5a8d03 100644 --- a/llvm/include/llvm/Config/config.h.cmake +++ b/llvm/include/llvm/Config/config.h.cmake @@ -297,6 +297,9 @@  /* Define to 1 if you have the `powf' function. */  #cmakedefine HAVE_POWF ${HAVE_POWF} +/* Define to 1 if you have the `pread' function. */ +#cmakedefine HAVE_PREAD ${HAVE_PREAD} +  /* Define if libtool can extract symbol lists from object files. */  #undef HAVE_PRELOADED_SYMBOLS diff --git a/llvm/include/llvm/Config/config.h.in b/llvm/include/llvm/Config/config.h.in index 813c6ebc383..b3a95908047 100644 --- a/llvm/include/llvm/Config/config.h.in +++ b/llvm/include/llvm/Config/config.h.in @@ -295,6 +295,9 @@  /* Define to 1 if you have the `powf' function. */  #undef HAVE_POWF +/* Define to 1 if you have the `pread' function. */ +#undef HAVE_PREAD +  /* Define if libtool can extract symbol lists from object files. */  #undef HAVE_PRELOADED_SYMBOLS diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index 580338117b8..1a409720c02 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -14,6 +14,7 @@  #include "llvm/Support/MemoryBuffer.h"  #include "llvm/ADT/OwningPtr.h"  #include "llvm/ADT/SmallString.h" +#include "llvm/Config/config.h"  #include "llvm/Support/MathExtras.h"  #include "llvm/Support/Errno.h"  #include "llvm/Support/Path.h" @@ -320,11 +321,17 @@ error_code MemoryBuffer::getOpenFile(int FD, const char *Filename,    char *BufPtr = const_cast<char*>(SB->getBufferStart());    size_t BytesLeft = MapSize; +#ifndef HAVE_PREAD    if (lseek(FD, Offset, SEEK_SET) == -1)      return error_code(errno, posix_category()); +#endif    while (BytesLeft) { +#ifdef HAVE_PREAD +    ssize_t NumRead = ::pread(FD, BufPtr, BytesLeft, MapSize-BytesLeft+Offset); +#else      ssize_t NumRead = ::read(FD, BufPtr, BytesLeft); +#endif      if (NumRead == -1) {        if (errno == EINTR)          continue;  | 

