Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions source/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ ifneq (,$(findstring clang,$(CXX)))
else
CXXFLAGS= -O3 -fomit-frame-pointer
override CXXFLAGS+= -Wall -fsigned-char -ffast-math -rdynamic -Wno-format-zero-length

ifneq ($(wildcard /usr/include/execinfo.h),)
override CXXFLAGS+= -DHAS_EXECINFO
endif

ifeq "$(shell expr 'gcc -dumpversion' \>= 8)" "1"
override CXXFLAGS+= -Wno-stringop-truncation
endif
Expand Down
11 changes: 9 additions & 2 deletions source/src/tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,14 +381,18 @@ void stackdumper(unsigned int type, EXCEPTION_POINTERS *ep)
}
#elif defined(linux) || defined(__linux) || defined(__linux__)

// Add support for musl systems (eg., alpine, void)
#if defined(HAS_EXECINFO)
#include <execinfo.h>
#endif

// stack dumping on linux, inspired by Sachin Agrawal's sample code

struct signalbinder
{
static void stackdumper(int sig)
{
#if defined(HAS_EXECINFO)
printf("stacktrace:\n");
#if !defined(STANDALONE)
if(clientlogfile) clientlogfile->printf("stacktrace\n");
Expand All @@ -397,17 +401,20 @@ struct signalbinder
void *array[BTSIZE];
int n = backtrace(array, BTSIZE);
char **symbols = backtrace_symbols(array, n);

for(int i = 0; i < n; i++)
{
printf("%s\n", symbols[i]);
#if !defined(STANDALONE)
if(clientlogfile) clientlogfile->printf("%s\n", symbols[i]);
#endif
}
free(symbols);

free(symbols);
#else
printf("Stacktrace not available!\n");
#endif
fatal("AssaultCube error (%d)", sig);

}

signalbinder()
Expand Down