[llvm-commits] [llvm] r74621 - in /llvm/trunk: autoconf/configure.ac cmake/config-ix.cmake include/llvm/Config/config.h.cmake include/llvm/System/Errno.h lib/System/CMakeLists.txt lib/System/Errno.cpp lib/System/Unix/Unix.h tools/gold/gold-plugin
Howard Su
howard0su at gmail.com
Thu Jul 2 04:35:48 PDT 2009
this break windows build. Please apply the following patch:Index: Errno.cpp
===================================================================
--- Errno.cpp (revision 74696)
+++ Errno.cpp (working copy)
@@ -47,10 +47,10 @@
# else
strerror_r(errnum,buffer,MaxErrStrLen-1);
# endif
-#elif HAVE_STRERROR_S // Windows.
+#elif defined(HAVE_STRERROR_S) // Windows.
if (errnum)
strerror_s(buffer, errnum);
-#elif HAVE_STRERROR
+#elif defined(HAVE_STRERROR)
// Copy the thread un-safe result of strerror into
// the buffer as fast as possible to minimize impact
// of collision of strerror in multiple threads.
On Thu, Jul 2, 2009 at 2:11 AM, Jeffrey Yasskin <jyasskin at google.com> wrote:
> Author: jyasskin
> Date: Wed Jul 1 13:11:20 2009
> New Revision: 74621
>
> URL: http://llvm.org/viewvc/llvm-project?rev=74621&view=rev
> Log:
> Add a portable strerror*() wrapper, llvm::sys::StrError(). This includes
> the
> Windows variant, strerror_s, but I couldn't test that.
>
> I'll update configure and config.h.in in a subsequent patch.
>
> Added:
> llvm/trunk/include/llvm/System/Errno.h
> llvm/trunk/lib/System/Errno.cpp
> Modified:
> llvm/trunk/autoconf/configure.ac
> llvm/trunk/cmake/config-ix.cmake
> llvm/trunk/include/llvm/Config/config.h.cmake
> llvm/trunk/lib/System/CMakeLists.txt
> llvm/trunk/lib/System/Unix/Unix.h
> llvm/trunk/tools/gold/gold-plugin.cpp
>
> Modified: llvm/trunk/autoconf/configure.ac
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/autoconf/configure.ac?rev=74621&r1=74620&r2=74621&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/autoconf/configure.ac (original)
> +++ llvm/trunk/autoconf/configure.ac Wed Jul 1 13:11:20 2009
> @@ -914,7 +914,8 @@
> 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 realpath sbrk setrlimit strdup strerror strerror_r
> ])
> +AC_CHECK_FUNCS([mktemp realpath sbrk setrlimit strdup ])
> +AC_CHECK_FUNCS([strerror strerror_r strerror_s ])
> AC_CHECK_FUNCS([strtoll strtoq sysconf malloc_zone_statistics ])
> AC_CHECK_FUNCS([setjmp longjmp sigsetjmp siglongjmp])
> AC_C_PRINTF_A
>
> Modified: llvm/trunk/cmake/config-ix.cmake
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=74621&r1=74620&r2=74621&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/cmake/config-ix.cmake (original)
> +++ llvm/trunk/cmake/config-ix.cmake Wed Jul 1 13:11:20 2009
> @@ -67,6 +67,9 @@
> HAVE_MALLOC_ZONE_STATISTICS)
> check_symbol_exists(pthread_mutex_lock pthread.h HAVE_PTHREAD_MUTEX_LOCK)
> check_symbol_exists(strtoll stdlib.h HAVE_STRTOLL)
> +check_symbol_exists(strerror string.h HAVE_STRERROR)
> +check_symbol_exists(strerror_r string.h HAVE_STRERROR_R)
> +check_symbol_exists(strerror_s string.h HAVE_STRERROR_S)
>
> check_symbol_exists(__GLIBC__ stdio.h LLVM_USING_GLIBC)
> if( LLVM_USING_GLIBC )
>
> Modified: llvm/trunk/include/llvm/Config/config.h.cmake
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Config/config.h.cmake?rev=74621&r1=74620&r2=74621&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Config/config.h.cmake (original)
> +++ llvm/trunk/include/llvm/Config/config.h.cmake Wed Jul 1 13:11:20 2009
> @@ -364,10 +364,13 @@
> #undef HAVE_STRDUP
>
> /* Define to 1 if you have the `strerror' function. */
> -#undef HAVE_STRERROR
> +#cmakedefine HAVE_STRERROR
>
> /* Define to 1 if you have the `strerror_r' function. */
> -#undef HAVE_STRERROR_R
> +#cmakedefine HAVE_STRERROR_R
> +
> +/* Define to 1 if you have the `strerror_s' function. */
> +#cmakedefine HAVE_STRERROR_S
>
> /* Define to 1 if you have the <strings.h> header file. */
> #undef HAVE_STRINGS_H
>
> Added: llvm/trunk/include/llvm/System/Errno.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/System/Errno.h?rev=74621&view=auto
>
>
> ==============================================================================
> --- llvm/trunk/include/llvm/System/Errno.h (added)
> +++ llvm/trunk/include/llvm/System/Errno.h Wed Jul 1 13:11:20 2009
> @@ -0,0 +1,34 @@
> +//===- llvm/System/Errno.h - Portable+convenient errno handling -*- C++
> -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +// This file declares some portable and convenient functions to deal with
> errno.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_SYSTEM_ERRNO_H
> +#define LLVM_SYSTEM_ERRNO_H
> +
> +#include <string>
> +
> +namespace llvm {
> +namespace sys {
> +
> +/// Returns a string representation of the errno value, using whatever
> +/// thread-safe variant of strerror() is available. Be sure to call this
> +/// immediately after the function that set errno, or errno may have been
> +/// overwritten by an intervening call.
> +std::string StrError();
> +
> +/// Like the no-argument version above, but uses \p errnum instead of
> errno.
> +std::string StrError(int errnum);
> +
> +} // namespace sys
> +} // namespace llvm
> +
> +#endif // LLVM_SYSTEM_ERRNO_H
>
> Modified: llvm/trunk/lib/System/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/CMakeLists.txt?rev=74621&r1=74620&r2=74621&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/lib/System/CMakeLists.txt (original)
> +++ llvm/trunk/lib/System/CMakeLists.txt Wed Jul 1 13:11:20 2009
> @@ -3,6 +3,7 @@
> Atomic.cpp
> Disassembler.cpp
> DynamicLibrary.cpp
> + Errno.cpp
> Host.cpp
> IncludeFile.cpp
> Memory.cpp
>
> Added: llvm/trunk/lib/System/Errno.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Errno.cpp?rev=74621&view=auto
>
>
> ==============================================================================
> --- llvm/trunk/lib/System/Errno.cpp (added)
> +++ llvm/trunk/lib/System/Errno.cpp Wed Jul 1 13:11:20 2009
> @@ -0,0 +1,71 @@
> +//===- Errno.cpp - errno support --------------------------------*- C++
> -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +// This file implements the errno wrappers.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/System/Errno.h"
> +#include "llvm/Config/config.h" // Get autoconf configuration settings
> +
> +#if HAVE_STRING_H
> +#include <string.h>
> +
>
> +//===----------------------------------------------------------------------===//
> +//=== WARNING: Implementation here must contain only TRULY operating
> system
> +//=== independent code.
>
> +//===----------------------------------------------------------------------===//
> +
> +namespace llvm {
> +namespace sys {
> +
> +#if HAVE_ERRNO_H
> +#include <errno.h>
> +std::string StrError() {
> + return StrError(errno);
> +}
> +#endif // HAVE_ERRNO_H
> +
> +std::string StrError(int errnum) {
> + const int MaxErrStrLen = 2000;
> + char buffer[MaxErrStrLen];
> + buffer[0] = '\0';
> + char* str = buffer;
> +#ifdef HAVE_STRERROR_R
> + // strerror_r is thread-safe.
> + if (errnum)
> +# if defined(__GLIBC__) && defined(_GNU_SOURCE)
> + // glibc defines its own incompatible version of strerror_r
> + // which may not use the buffer supplied.
> + str = strerror_r(errnum,buffer,MaxErrStrLen-1);
> +# else
> + strerror_r(errnum,buffer,MaxErrStrLen-1);
> +# endif
> +#elif HAVE_STRERROR_S // Windows.
> + if (errnum)
> + strerror_s(buffer, errnum);
> +#elif HAVE_STRERROR
> + // Copy the thread un-safe result of strerror into
> + // the buffer as fast as possible to minimize impact
> + // of collision of strerror in multiple threads.
> + if (errnum)
> + strncpy(buffer,strerror(errnum),MaxErrStrLen-1);
> + buffer[MaxErrStrLen-1] = '\0';
> +#else
> + // Strange that this system doesn't even have strerror
> + // but, oh well, just use a generic message
> + sprintf(buffer, "Error #%d", errnum);
> +#endif
> + return str;
> +}
> +
> +} // namespace sys
> +} // namespace llvm
> +
> +#endif // HAVE_STRING_H
>
> Modified: llvm/trunk/lib/System/Unix/Unix.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Unix/Unix.h?rev=74621&r1=74620&r2=74621&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/lib/System/Unix/Unix.h (original)
> +++ llvm/trunk/lib/System/Unix/Unix.h Wed Jul 1 13:11:20 2009
> @@ -20,6 +20,7 @@
>
> //===----------------------------------------------------------------------===//
>
> #include "llvm/Config/config.h" // Get autoconf configuration settings
> +#include "llvm/System/Errno.h"
> #include <cstdlib>
> #include <cstdio>
> #include <cstring>
> @@ -77,34 +78,9 @@
> std::string* ErrMsg, const std::string& prefix, int errnum = -1) {
> if (!ErrMsg)
> return true;
> - char buffer[MAXPATHLEN];
> - buffer[0] = 0;
> - char* str = buffer;
> if (errnum == -1)
> errnum = errno;
> -#ifdef HAVE_STRERROR_R
> - // strerror_r is thread-safe.
> - if (errnum)
> -# if defined(__GLIBC__) && defined(_GNU_SOURCE)
> - // glibc defines its own incompatible version of strerror_r
> - // which may not use the buffer supplied.
> - str = strerror_r(errnum,buffer,MAXPATHLEN-1);
> -# else
> - strerror_r(errnum,buffer,MAXPATHLEN-1);
> -# endif
> -#elif HAVE_STRERROR
> - // Copy the thread un-safe result of strerror into
> - // the buffer as fast as possible to minimize impact
> - // of collision of strerror in multiple threads.
> - if (errnum)
> - strncpy(buffer,strerror(errnum),MAXPATHLEN-1);
> - buffer[MAXPATHLEN-1] = 0;
> -#else
> - // Strange that this system doesn't even have strerror
> - // but, oh well, just use a generic message
> - sprintf(buffer, "Error #%d", errnum);
> -#endif
> - *ErrMsg = prefix + ": " + str;
> + *ErrMsg = prefix + ": " + llvm::sys::StrError(errnum);
> return true;
> }
>
>
> Modified: llvm/trunk/tools/gold/gold-plugin.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/gold/gold-plugin.cpp?rev=74621&r1=74620&r2=74621&view=diff
>
>
> ==============================================================================
> --- llvm/trunk/tools/gold/gold-plugin.cpp (original)
> +++ llvm/trunk/tools/gold/gold-plugin.cpp Wed Jul 1 13:11:20 2009
> @@ -17,6 +17,7 @@
> #include "llvm-c/lto.h"
>
> #include "llvm/Support/raw_ostream.h"
> +#include "llvm/System/Errno.h"
> #include "llvm/System/Path.h"
> #include "llvm/System/Program.h"
>
> @@ -183,7 +184,7 @@
> (*message)(LDPL_ERROR,
> "Failed to seek to archive member of %s at offset %d:
> %s\n",
> file->name,
> - file->offset, strerror(errno));
> + file->offset, sys::StrError(errno).c_str());
> return LDPS_ERR;
> }
> buf = malloc(file->filesize);
> @@ -198,7 +199,7 @@
> "Failed to read archive member of %s at offset %d: %s\n",
> file->name,
> file->offset,
> - strerror(errno));
> + sys::StrError(errno).c_str());
> free(buf);
> return LDPS_ERR;
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
-Howard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20090702/e89cc312/attachment.html>
More information about the llvm-commits
mailing list