3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-22 08:35:32 +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

@ -24,6 +24,7 @@ DISABLE_VERIFIC_VHDL := 0
ENABLE_COVER := 1
ENABLE_LIBYOSYS := 0
ENABLE_ZLIB := 1
ENABLE_BACKTRACE := 0
# python wrappers
ENABLE_PYOSYS := 0
@ -68,6 +69,8 @@ ifeq ($(ENABLE_PYOSYS),1)
ENABLE_LIBYOSYS := 1
endif
BINDIR := $(PREFIX)/bin
LIBDIR := $(PREFIX)/lib/$(PROGRAM_PREFIX)yosys
DATDIR := $(PREFIX)/share/$(PROGRAM_PREFIX)yosys
@ -125,6 +128,11 @@ PKG_CONFIG_PATH := $(BREW_PREFIX)/libffi/lib/pkgconfig:$(PKG_CONFIG_PATH)
PKG_CONFIG_PATH := $(BREW_PREFIX)/tcl-tk/lib/pkgconfig:$(PKG_CONFIG_PATH)
export PATH := $(BREW_PREFIX)/bison/bin:$(BREW_PREFIX)/gettext/bin:$(BREW_PREFIX)/flex/bin:$(PATH)
ifeq ($(ENABLE_BACKTRACE),1)
CXXFLAGS += -DYOSYS_BACKTRACE
endif
# macports search paths
else ifneq ($(shell :; command -v port),)
PORT_PREFIX := $(patsubst %/bin/port,%,$(shell :; command -v port))

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__