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:
parent
a52aeb0396
commit
7c4609aa7a
3 changed files with 37 additions and 0 deletions
8
Makefile
8
Makefile
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
// At least this is not in MSVC++ 2013.
|
||||
# define __PRETTY_FUNCTION__ __FUNCTION__
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue