diff --git a/include/haproxy/bug.h b/include/haproxy/bug.h index b89ed2224..f43dbad2b 100644 --- a/include/haproxy/bug.h +++ b/include/haproxy/bug.h @@ -123,9 +123,16 @@ static __attribute__((noinline,noreturn,unused)) void abort_with_line(uint line) } #define __ABORT_NOW(file, line, ...) do { \ + extern ssize_t write(int, const void *, size_t); \ + const char *msg; \ if (sizeof("" __VA_ARGS__) > 1) \ complain(NULL, "\nABORT at " file ":" #line ": " __VA_ARGS__ "\n", 1); \ DUMP_TRACE(); \ + msg = "\n" \ + "Hint: when reporting this bug to developers, please check if a core file was\n" \ + " produced, open it with 'gdb', issue 'bt' to produce a backtrace for the\n" \ + " current thread only, then join it with the bug report.\n"; \ + DISGUISE(write(2, msg, strlen(msg))); \ abort_with_line(__LINE__); \ } while (0) #else @@ -133,9 +140,16 @@ static __attribute__((noinline,noreturn,unused)) void abort_with_line(uint line) * stack and stops at the exact location we need. */ #define __ABORT_NOW(file, line, ...) do { \ + extern ssize_t write(int, const void *, size_t); \ + const char *msg; \ if (sizeof("" __VA_ARGS__) > 1) \ complain(NULL, "\nABORT at " file ":" #line ": " __VA_ARGS__ "\n", 1); \ DUMP_TRACE(); \ + msg = "\n" \ + "Hint: when reporting this bug to developers, please check if a core file was\n" \ + " produced, open it with 'gdb', issue 'bt' to produce a backtrace for the\n" \ + " current thread only, then join it with the bug report.\n"; \ + DISGUISE(write(2, msg, strlen(msg))); \ ha_crash_now(); \ } while (0) #endif diff --git a/src/debug.c b/src/debug.c index 522c78af5..dfd44f5a2 100644 --- a/src/debug.c +++ b/src/debug.c @@ -680,6 +680,15 @@ void ha_panic() DISGUISE(write(2, trash.area, trash.data)); } + chunk_printf(&trash, + "\n" + "Hint: when reporting this bug to developers, please check if a core file was\n" + " produced, open it with 'gdb', issue 't a a bt full', check that the\n" + " output does not contain sensitive data, then join it with the bug report.\n" + " For more info, please see https://github.com/haproxy/haproxy/issues/2374\n"); + + DISGUISE(write(2, trash.area, trash.data)); + for (;;) abort(); }