[llvm-commits] [llvm] r171989 - in /llvm/trunk: include/llvm/Support/Signals.h lib/Support/Unix/Signals.inc lib/Support/Windows/Signals.inc

Alexander Potapenko glider at google.com
Mon Jan 21 03:41:15 PST 2013


BTW GCC complains about %t in Signals.inc:

Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Signals.cpp.o
cc1plus: warnings being treated as errors
In file included from /Users/glider/src/asan/llvm/lib/Support/Signals.cpp:30:
/Users/glider/src/asan/llvm/lib/Support/Unix/Signals.inc: In function
'void llvm::sys::PrintStackTrace(FILE*)':
/Users/glider/src/asan/llvm/lib/Support/Unix/Signals.inc:298: warning:
ISO C++ does not support the 't' printf length modifier
/Users/glider/src/asan/llvm/lib/Support/Unix/Signals.inc:298: warning:
ISO C++ does not support the 't' printf length modifier

Will another length modifier work for you?

On Wed, Jan 9, 2013 at 11:42 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:
> Author: akirtzidis
> Date: Wed Jan  9 13:42:40 2013
> New Revision: 171989
>
> URL: http://llvm.org/viewvc/llvm-project?rev=171989&view=rev
> Log:
> Move the internal PrintStackTrace function that is used for llvm::sys::PrintStackTraceOnErrorSignal(),
> into a new function llvm::sys::PrintStackTrace, so that it's available to clients for logging purposes.
>
> Modified:
>     llvm/trunk/include/llvm/Support/Signals.h
>     llvm/trunk/lib/Support/Unix/Signals.inc
>     llvm/trunk/lib/Support/Windows/Signals.inc
>
> Modified: llvm/trunk/include/llvm/Support/Signals.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Signals.h?rev=171989&r1=171988&r2=171989&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Signals.h (original)
> +++ llvm/trunk/include/llvm/Support/Signals.h Wed Jan  9 13:42:40 2013
> @@ -38,6 +38,9 @@
>    /// @brief Print a stack trace if a fatal signal occurs.
>    void PrintStackTraceOnErrorSignal();
>
> +  /// \brief Print the stack trace using the given \c FILE object.
> +  void PrintStackTrace(FILE *);
> +
>    /// AddSignalHandler - Add a function to be called when an abort/kill signal
>    /// is delivered to the process.  The handler can have a cookie passed to it
>    /// to identify what instance of the handler it is.
>
> Modified: llvm/trunk/lib/Support/Unix/Signals.inc
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Unix/Signals.inc?rev=171989&r1=171988&r2=171989&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Support/Unix/Signals.inc (original)
> +++ llvm/trunk/lib/Support/Unix/Signals.inc Wed Jan  9 13:42:40 2013
> @@ -254,7 +254,7 @@
>  //
>  // On glibc systems we have the 'backtrace' function, which works nicely, but
>  // doesn't demangle symbols.
> -static void PrintStackTrace(void *) {
> +void llvm::sys::PrintStackTrace(FILE *FD) {
>  #if defined(HAVE_BACKTRACE) && defined(ENABLE_BACKTRACES)
>    static void* StackTrace[256];
>    // Use backtrace() to output a backtrace on Linux systems with glibc.
> @@ -278,26 +278,26 @@
>      Dl_info dlinfo;
>      dladdr(StackTrace[i], &dlinfo);
>
> -    fprintf(stderr, "%-2d", i);
> +    fprintf(FD, "%-2d", i);
>
>      const char* name = strrchr(dlinfo.dli_fname, '/');
> -    if (name == NULL) fprintf(stderr, " %-*s", width, dlinfo.dli_fname);
> -    else              fprintf(stderr, " %-*s", width, name+1);
> +    if (name == NULL) fprintf(FD, " %-*s", width, dlinfo.dli_fname);
> +    else              fprintf(FD, " %-*s", width, name+1);
>
> -    fprintf(stderr, " %#0*lx",
> +    fprintf(FD, " %#0*lx",
>              (int)(sizeof(void*) * 2) + 2, (unsigned long)StackTrace[i]);
>
>      if (dlinfo.dli_sname != NULL) {
>        int res;
> -      fputc(' ', stderr);
> +      fputc(' ', FD);
>        char* d = abi::__cxa_demangle(dlinfo.dli_sname, NULL, NULL, &res);
> -      if (d == NULL) fputs(dlinfo.dli_sname, stderr);
> -      else           fputs(d, stderr);
> +      if (d == NULL) fputs(dlinfo.dli_sname, FD);
> +      else           fputs(d, FD);
>        free(d);
>
> -      fprintf(stderr, " + %tu",(char*)StackTrace[i]-(char*)dlinfo.dli_saddr);
> +      fprintf(FD, " + %tu",(char*)StackTrace[i]-(char*)dlinfo.dli_saddr);
>      }
> -    fputc('\n', stderr);
> +    fputc('\n', FD);
>    }
>  #else
>    backtrace_symbols_fd(StackTrace, depth, STDERR_FILENO);
> @@ -305,10 +305,14 @@
>  #endif
>  }
>
> +static void PrintStackTraceSignalHandler(void *) {
> +  PrintStackTrace(stderr);
> +}
> +
>  /// PrintStackTraceOnErrorSignal - When an error signal (such as SIGABRT or
>  /// SIGSEGV) is delivered to the process, print a stack trace and then exit.
>  void llvm::sys::PrintStackTraceOnErrorSignal() {
> -  AddSignalHandler(PrintStackTrace, 0);
> +  AddSignalHandler(PrintStackTraceSignalHandler, 0);
>
>  #if defined(__APPLE__)
>    // Environment variable to disable any kind of crash dialog.
>
> Modified: llvm/trunk/lib/Support/Windows/Signals.inc
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Signals.inc?rev=171989&r1=171988&r2=171989&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Support/Windows/Signals.inc (original)
> +++ llvm/trunk/lib/Support/Windows/Signals.inc Wed Jan  9 13:42:40 2013
> @@ -295,6 +295,10 @@
>    LeaveCriticalSection(&CriticalSection);
>  }
>
> +void llvm::sys::PrintStackTrace(FILE *) {
> +  // FIXME: Implement.
> +}
> +
>
>  void sys::SetInterruptFunction(void (*IF)()) {
>    RegisterHandler();
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



-- 
Alexander Potapenko
Software Engineer
Google Moscow



More information about the llvm-commits mailing list