3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-06-13 17:36:16 +00:00

[Backtrace] enable compile flag to trigger on at-exit; 6 frame minimum shows clean atexit when there is not much of a stack

Obtained 6 stack frames.
1 | ./yosys(_Z17yosys_print_tracev+0x2e) [0x55c7a207830a]
2 | ./yosys(_Z12yosys_atexitv+0x9) [0x55c7a2078386]
3 | ./yosys(main+0x1c33) [0x55c7a207a020]
4 | /lib/x86_64-linux-gnu/libc.so.6(+0x23510) [0x7fae3a623510]
5 | /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x89) [0x7fae3a6235c9]
6 | ./yosys(_start+0x25) [0x55c7a2078215]
This commit is contained in:
Muthu Annamalai 2023-05-10 17:54:36 +00:00
parent a52aeb0396
commit 7c4609aa7a
3 changed files with 37 additions and 0 deletions

View file

@ -83,6 +83,32 @@ int getopt(int argc, char **argv, const char *optstring)
}
#endif
#if !defined(_WIN32) || defined(__MINGW32__) || defined(YOSYS_BACKTRACE)
#include <execinfo.h>
void yosys_print_trace (void)
{
void *array[32] = {0,};
char **strings;
int size = backtrace (array, 32);
strings = backtrace_symbols (array, size);
if (strings != NULL && size > 6)
{
fprintf (stderr,"Obtained %d stack frames.\n", size);
for (int i = 0; i < size; i++)
fprintf(stderr,"%d | %s\n", i+1, strings[i]);
free (strings);
}
}
#else
void yosys_print_trace()
{
fprintf(stderr,"Backtrace not available on this platform,\n");
}
#endif
USING_YOSYS_NAMESPACE
@ -174,6 +200,8 @@ extern "C" {
void yosys_atexit()
{
yosys_print_trace();
#if defined(YOSYS_ENABLE_READLINE) || defined(YOSYS_ENABLE_EDITLINE)
if (!yosys_history_file.empty()) {
#if defined(YOSYS_ENABLE_READLINE)

View file

@ -43,6 +43,7 @@
# endif
#endif
#if defined(_MSC_VER)
// At least this is not in MSVC++ 2013.
# define __PRETTY_FUNCTION__ __FUNCTION__