[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