mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
Add configure checking for pread(2) and use it to save a syscall when reading files.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145061 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1293,7 +1293,7 @@ AC_CHECK_FUNCS([backtrace ceilf floorf roundf rintf nearbyintf getcwd ])
|
|||||||
AC_CHECK_FUNCS([powf fmodf strtof round ])
|
AC_CHECK_FUNCS([powf fmodf strtof round ])
|
||||||
AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
|
AC_CHECK_FUNCS([getpagesize getrusage getrlimit setrlimit gettimeofday ])
|
||||||
AC_CHECK_FUNCS([isatty mkdtemp mkstemp ])
|
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([strerror strerror_r setenv ])
|
||||||
AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
|
AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
|
||||||
AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
|
AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp writev])
|
||||||
|
@@ -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(getcwd unistd.h HAVE_GETCWD)
|
||||||
check_symbol_exists(gettimeofday sys/time.h HAVE_GETTIMEOFDAY)
|
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(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(rindex strings.h HAVE_RINDEX)
|
||||||
check_symbol_exists(strchr string.h HAVE_STRCHR)
|
check_symbol_exists(strchr string.h HAVE_STRCHR)
|
||||||
check_symbol_exists(strcmp string.h HAVE_STRCMP)
|
check_symbol_exists(strcmp string.h HAVE_STRCMP)
|
||||||
|
3
configure
vendored
3
configure
vendored
@@ -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
|
do
|
||||||
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
|
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
|
||||||
|
@@ -297,6 +297,9 @@
|
|||||||
/* Define to 1 if you have the `powf' function. */
|
/* Define to 1 if you have the `powf' function. */
|
||||||
#cmakedefine HAVE_POWF ${HAVE_POWF}
|
#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. */
|
/* Define if libtool can extract symbol lists from object files. */
|
||||||
#undef HAVE_PRELOADED_SYMBOLS
|
#undef HAVE_PRELOADED_SYMBOLS
|
||||||
|
|
||||||
|
@@ -295,6 +295,9 @@
|
|||||||
/* Define to 1 if you have the `powf' function. */
|
/* Define to 1 if you have the `powf' function. */
|
||||||
#undef HAVE_POWF
|
#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. */
|
/* Define if libtool can extract symbol lists from object files. */
|
||||||
#undef HAVE_PRELOADED_SYMBOLS
|
#undef HAVE_PRELOADED_SYMBOLS
|
||||||
|
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
#include "llvm/Support/MemoryBuffer.h"
|
#include "llvm/Support/MemoryBuffer.h"
|
||||||
#include "llvm/ADT/OwningPtr.h"
|
#include "llvm/ADT/OwningPtr.h"
|
||||||
#include "llvm/ADT/SmallString.h"
|
#include "llvm/ADT/SmallString.h"
|
||||||
|
#include "llvm/Config/config.h"
|
||||||
#include "llvm/Support/MathExtras.h"
|
#include "llvm/Support/MathExtras.h"
|
||||||
#include "llvm/Support/Errno.h"
|
#include "llvm/Support/Errno.h"
|
||||||
#include "llvm/Support/Path.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());
|
char *BufPtr = const_cast<char*>(SB->getBufferStart());
|
||||||
|
|
||||||
size_t BytesLeft = MapSize;
|
size_t BytesLeft = MapSize;
|
||||||
|
#ifndef HAVE_PREAD
|
||||||
if (lseek(FD, Offset, SEEK_SET) == -1)
|
if (lseek(FD, Offset, SEEK_SET) == -1)
|
||||||
return error_code(errno, posix_category());
|
return error_code(errno, posix_category());
|
||||||
|
#endif
|
||||||
|
|
||||||
while (BytesLeft) {
|
while (BytesLeft) {
|
||||||
|
#ifdef HAVE_PREAD
|
||||||
|
ssize_t NumRead = ::pread(FD, BufPtr, BytesLeft, MapSize-BytesLeft+Offset);
|
||||||
|
#else
|
||||||
ssize_t NumRead = ::read(FD, BufPtr, BytesLeft);
|
ssize_t NumRead = ::read(FD, BufPtr, BytesLeft);
|
||||||
|
#endif
|
||||||
if (NumRead == -1) {
|
if (NumRead == -1) {
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
|
Reference in New Issue
Block a user