Commit 8db414a5 authored by Guillaume Quintard's avatar Guillaume Quintard Committed by guillaume quintard

Offer a configure --with-unwind switch

parent ad731128
......@@ -18,9 +18,10 @@ jobs:
- nghttp2
- python3-docutils
- python3-sphinx
- libunwind-dev
before_script:
- ./autogen.sh
- ./configure
- ./configure --with-unwind
script: &script-common
- |
if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then
......@@ -51,7 +52,7 @@ jobs:
export UBSAN_OPTIONS=halt_on_error=1,print_stacktrace=1,use_sigaltstack=0,suppressions=$(pwd)/tools/ubsan.suppr
export CC=clang-8
- ./autogen.sh
- ./configure --enable-developer-warnings --enable-debugging-symbols --disable-stack-protector --with-persistent-storage --enable-asan --enable-ubsan
- ./configure --with-unwind --enable-developer-warnings --enable-debugging-symbols --disable-stack-protector --with-persistent-storage --enable-asan --enable-ubsan
- stage: test
os: osx
osx_image: xcode10.2
......@@ -80,7 +81,7 @@ jobs:
- export PATH=$PATH:$(echo $(pwd)/cov-analysis-*/bin)
script:
- ./autogen.sh
- ./configure
- ./configure --with-unwind
- cov-build --dir cov-int make
- tar cfz varnish.tgz cov-int
- curl --form token="$COVTOKEN"
......
......@@ -177,6 +177,11 @@ varnishd_LDADD = \
@PCRE_LIBS@ \
${DL_LIBS} ${PTHREAD_LIBS} ${NET_LIBS} ${RT_LIBS} ${LIBM}
if WITH_UNWIND
varnishd_CFLAGS += -DUNW_LOCAL_ONLY
varnishd_LDADD += ${LIBUNWIND_LIBS}
endif
noinst_PROGRAMS = vhp_gen_hufdec
vhp_gen_hufdec_SOURCES = hpack/vhp_gen_hufdec.c
vhp_gen_hufdec_CFLAGS = @SAN_CFLAGS@ \
......
......@@ -29,7 +29,11 @@
#include "config.h"
#ifdef WITH_UNWIND
#include <libunwind.h>
#else
#include <execinfo.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
......@@ -609,6 +613,47 @@ pan_sess(struct vsb *vsb, const struct sess *sp)
/*--------------------------------------------------------------------*/
#ifdef WITH_UNWIND
static void
pan_backtrace(struct vsb *vsb)
{
unw_cursor_t cursor; unw_context_t uc;
unw_word_t ip, sp;
unw_word_t offp;
char fname[1024];
int ret;
VSB_printf(vsb, "Backtrace:\n");
VSB_indent(vsb, 2);
ret = unw_getcontext(&uc);
if (ret != 0) {
VSB_printf(vsb, "Backtrace not available "
"(unw_getcontext returned %d)\n", ret);
return;
}
unw_init_local(&cursor, &uc);
if (ret != 0) {
VSB_printf(vsb, "Backtrace not available "
"(unw_init_local returned %d)\n", ret);
return;
}
while (unw_step(&cursor) > 0) {
fname[0] = '\0';
ip = sp = 0;
unw_get_reg(&cursor, UNW_REG_IP, &ip);
unw_get_reg(&cursor, UNW_REG_SP, &sp);
unw_get_proc_name(&cursor, fname, sizeof(fname), &offp);
VSB_printf(vsb, "ip=0x%lx, sp=0x%lx <%s+0x%lx>\n", (long) ip,
(long) sp, fname[0] ? fname : "???", offp);
}
VSB_indent(vsb, -2);
}
#else /* WITH_UNWIND */
#define BACKTRACE_LEVELS 10
static void
......@@ -651,6 +696,8 @@ pan_backtrace(struct vsb *vsb)
VSB_indent(vsb, -2);
}
#endif /* WITH_UNWIND */
#ifdef HAVE_PTHREAD_GETATTR_NP
static void
pan_threadattr(struct vsb *vsb)
......
......@@ -342,9 +342,25 @@ esac
AC_SUBST(JEMALLOC_LDADD)
AC_CHECK_FUNCS([setproctitle])
AC_SEARCH_LIBS(backtrace, [execinfo], [], [
AC_MSG_ERROR([Could not find backtrace() support])
])
# if the default libexecinfo on alpine causes issues, you can use libunwind
AC_ARG_WITH([unwind],
[AS_HELP_STRING([--with-unwind],
[use libunwind to print stacktraces (use libexecinfo otherwise). Recommended on alpine linux. Defaults to no.])])
if test "$with_unwind" = yes; then
PKG_CHECK_MODULES([LIBUNWIND], [libunwind])
AC_DEFINE([WITH_UNWIND], [1],
[Define to 1 to use libunwind instead of libexecinfo])
else
AC_SEARCH_LIBS(backtrace, [execinfo], [], [
AC_MSG_ERROR([Could not find backtrace() support])
])
fi
AM_CONDITIONAL([WITH_UNWIND],
[test "$with_unwind" = yes])
# white lie - we don't actually test it
AC_MSG_CHECKING([whether daemon() works])
case $target in
......
......@@ -32,6 +32,11 @@ NEXT (2020-03-15)
* The ``MAIN.sess_drop`` counter is gone.
* New configure switch: --with-unwind. Alpine linux appears to offer a
`libexecinfo` implementation that crashes when called by Varnish, this
offers the alternative of using `libunwind` instead.
================================
Varnish Cache 6.3.0 (2019-09-15)
================================
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment