From daa53da594d04925d10e792df804110d6a7bf2a2 Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Fri, 4 Dec 2015 00:12:58 +0000 Subject: sim: Add support for generating back traces on errors Add functionality to generate a back trace if gem5 crashes (SIGABRT or SIGSEGV). The current implementation uses glibc's stack traversal support if available and stubs out the call to print_backtrace() otherwise. --- src/base/atomicio.hh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/base') diff --git a/src/base/atomicio.hh b/src/base/atomicio.hh index 5e703f315..bfd1e35e5 100644 --- a/src/base/atomicio.hh +++ b/src/base/atomicio.hh @@ -41,4 +41,28 @@ ssize_t atomic_read(int fd, void *s, size_t n); ssize_t atomic_write(int fd, const void *s, size_t n); +/** + * Statically allocate a string and write it to a file descriptor. + * + * @warning The return value will from atomic_write will be ignored + * which means that errors will be ignored. This is normally fine as + * this macro is intended to be used in fatal signal handlers where + * error handling might not be feasible. + */ +#define STATIC_MSG(fd, m) \ + do { \ + static const char msg[] = m; \ + atomic_write(fd, msg, sizeof(msg) - 1); \ + } while(0) + +/** + * Statically allocate a string and write it to STDERR. + * + * @warning The return value will from atomic_write will be ignored + * which means that errors will be ignored. This is normally fine as + * this macro is intended to be used in fatal signal handlers where + * error handling might not be feasible. + */ +#define STATIC_ERR(m) STATIC_MSG(STDERR_FILENO, m) + #endif // __BASE_ATOMICIO_HH__ -- cgit v1.2.3