From: François Dumont Date: Tue, 8 May 2018 20:00:52 +0000 (+0000) Subject: debug.cc [...]: Include execinfo.h. X-Git-Tag: basepoints/gcc-10~6923 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e95a74fda222c1de9586d46b758afdc8dc50c394;p=thirdparty%2Fgcc.git debug.cc [...]: Include execinfo.h. 2018-05-08 François Dumont * src/c++11/debug.cc [_GLIBCXX_HAVE_EXECINFO_H]: Include execinfo.h. [_GLIBCXX_HAVE_EXECINFO_H](_Error_formatter::_M_error): Render backtrace. From-SVN: r260054 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bf1e80333beb..25430fd9e512 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,9 @@ 2018-05-08 François Dumont + * src/c++11/debug.cc [_GLIBCXX_HAVE_EXECINFO_H]: Include execinfo.h. + [_GLIBCXX_HAVE_EXECINFO_H](_Error_formatter::_M_error): Render + backtrace. + * include/debug/macros.h (__glibcxx_check_valid_range_at): New. * include/debug/functions.h (__check_valid_range): Use latter. * include/debug/macros.h (__glibcxx_check_valid_constructor_range): New, diff --git a/libstdc++-v3/src/c++11/debug.cc b/libstdc++-v3/src/c++11/debug.cc index 89d387cdea56..ede6b703aae4 100644 --- a/libstdc++-v3/src/c++11/debug.cc +++ b/libstdc++-v3/src/c++11/debug.cc @@ -40,6 +40,10 @@ #include // for __cxa_demangle +#if defined _GLIBCXX_HAVE_EXECINFO_H +# include // for backtrace +#endif + #include "mutex_pool.h" using namespace std; @@ -1043,6 +1047,29 @@ namespace __gnu_debug print_literal(ctx, "\n"); } +#if defined _GLIBCXX_HAVE_EXECINFO_H + { + void* stack[32]; + int nb = backtrace(stack, 32); + + // Note that we skip current method symbol. + if (nb > 1) + { + print_literal(ctx, "Backtrace:\n"); + auto symbols = backtrace_symbols(stack, nb); + for (int i = 1; i < nb; ++i) + { + print_word(ctx, symbols[i]); + print_literal(ctx, "\n"); + } + + free(symbols); + ctx._M_first_line = true; + print_literal(ctx, "\n"); + } + } +#endif + print_literal(ctx, "Error: "); // Print the error message