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.
This commit is contained in:
Andreas Sandberg
2015-12-04 00:12:58 +00:00
parent a1aeff27ce
commit daa53da594
7 changed files with 286 additions and 19 deletions

View File

@@ -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__