Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add backtraces on supported platforms
Baptiste Daroussin committed 11 years ago
commit 72ead285e7ec9cc87bdc3c27a2812808fd6ad6b5
parent 6078fa4
6 files changed +32 -1
modified configure.ac
@@ -185,6 +185,14 @@ AC_CHECK_HEADER([sys/sbuf.h], [
	LIBSBUF_INCLUDE="-I\$(top_srcdir)/external/libsbuf"
])

+
AC_CHECK_HEADER([execinfo.h], [
+
	AC_DEFINE(HAVE_EXECINFO_H, 1, [Define to 1 if you have the <execinfo.h> header file.])
+
	AC_CHECK_LIB(execinfo, backtrace, [
+
		AC_DEFINE(HAVE_LIBEXECINFO, 1, [Define to 1 if you have the 'execinfo' library (-lexecinfo).])
+
		LIBEXECINFO_LIB="-lexecinfo"
+
	])
+
],)
+

AC_CHECK_HEADER([atf-c.h], [
	 TESTS="\$(test_program)"
 ])
@@ -196,7 +204,6 @@ AC_CHECK_HEADER([sys/capability.h], [

])

-

AC_SUBST([LIBELF_LIB])
AC_SUBST([LIBELF_BUNDLED])
AC_SUBST([LIBELF_INCLUDE])
@@ -204,6 +211,7 @@ AC_SUBST([LIBSBUF_LIB])
AC_SUBST([LIBSBUF_BUNDLED])
AC_SUBST([LIBSBUF_INCLUDE])
AC_SUBST([LIBJAIL_LIB])
+
AC_SUBST([LIBEXECINFO_LIB])
AC_SUBST([TESTS])

AC_CONFIG_FILES(Makefile \
modified libpkg/Makefile.am
@@ -52,6 +52,7 @@ libpkg_la_LIBADD= $(top_builddir)/external/libucl.la \
			$(top_builddir)/external/libexpat.la \
			@LIBELF_LIB@ \
			@LIBSBUF_LIB@ \
+
			@LIBEXECINFO_LIB@ \
			-larchive \
			-lfetch \
			-lutil \
modified libpkg/pkg_event.c
@@ -408,6 +408,7 @@ pkg_emit_error(const char *fmt, ...)

	pkg_emit_event(&ev);
	free(ev.e_pkg_error.msg);
+
	print_trace();
}

void
@@ -453,6 +454,7 @@ pkg_emit_errno(const char *func, const char *arg)
	ev.e_errno.no = errno;

	pkg_emit_event(&ev);
+
	print_trace();
}

void
modified libpkg/private/utils.h
@@ -115,6 +115,7 @@ int set_nameserver(const char *nsname);
ucl_object_t *yaml_to_ucl(const char *file, const char *buffer, size_t len);
void set_blocking(int fd);
void set_nonblocking(int fd);
+
void print_trace(void);

pid_t process_spawn_pipe(FILE *inout[2], const char *command);

modified libpkg/utils.c
@@ -32,6 +32,7 @@

#include <assert.h>
#include <errno.h>
+
#include <execinfo.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
@@ -849,3 +850,20 @@ ucl_object_emit_sbuf(const ucl_object_t *obj, enum ucl_emitter emit_type,

	return (ret);
}
+

+
void
+
print_trace(void)
+
{
+
	void *array[10];
+
	size_t size;
+
	char **strings;
+
	size_t i;
+

+
	size = backtrace(array, 10);
+
	strings = backtrace_symbols(array, size);
+

+
	for (i = 0; i < size; i++)
+
		fprintf(stderr, "%s\n", strings[i]);
+

+
	free(strings);
+
}
modified src/Makefile.am
@@ -48,6 +48,7 @@ pkg_static_LDADD= $(top_builddir)/libpkg/libpkg_static.la \
			$(pkg_OBJECTS) \
			@LIBJAIL_LIB@ \
			@LIBSBUF_LIB@ \
+
			@LIBEXECINFO_LIB@ \
			@LIBELF_LIB@ \
			-lfetch \
			-larchive \