mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-14 09:56: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:
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_COVER := 1
|
||||||
ENABLE_LIBYOSYS := 0
|
ENABLE_LIBYOSYS := 0
|
||||||
ENABLE_ZLIB := 1
|
ENABLE_ZLIB := 1
|
||||||
|
ENABLE_BACKTRACE := 0
|
||||||
|
|
||||||
# python wrappers
|
# python wrappers
|
||||||
ENABLE_PYOSYS := 0
|
ENABLE_PYOSYS := 0
|
||||||
|
@ -68,6 +69,8 @@ ifeq ($(ENABLE_PYOSYS),1)
|
||||||
ENABLE_LIBYOSYS := 1
|
ENABLE_LIBYOSYS := 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BINDIR := $(PREFIX)/bin
|
BINDIR := $(PREFIX)/bin
|
||||||
LIBDIR := $(PREFIX)/lib/$(PROGRAM_PREFIX)yosys
|
LIBDIR := $(PREFIX)/lib/$(PROGRAM_PREFIX)yosys
|
||||||
DATDIR := $(PREFIX)/share/$(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)
|
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)
|
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
|
# macports search paths
|
||||||
else ifneq ($(shell :; command -v port),)
|
else ifneq ($(shell :; command -v port),)
|
||||||
PORT_PREFIX := $(patsubst %/bin/port,%,$(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
|
#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
|
USING_YOSYS_NAMESPACE
|
||||||
|
|
||||||
|
@ -174,6 +200,8 @@ extern "C" {
|
||||||
|
|
||||||
void yosys_atexit()
|
void yosys_atexit()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
yosys_print_trace();
|
||||||
#if defined(YOSYS_ENABLE_READLINE) || defined(YOSYS_ENABLE_EDITLINE)
|
#if defined(YOSYS_ENABLE_READLINE) || defined(YOSYS_ENABLE_EDITLINE)
|
||||||
if (!yosys_history_file.empty()) {
|
if (!yosys_history_file.empty()) {
|
||||||
#if defined(YOSYS_ENABLE_READLINE)
|
#if defined(YOSYS_ENABLE_READLINE)
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
// At least this is not in MSVC++ 2013.
|
// At least this is not in MSVC++ 2013.
|
||||||
# define __PRETTY_FUNCTION__ __FUNCTION__
|
# define __PRETTY_FUNCTION__ __FUNCTION__
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue