}
#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
* 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
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();
}