Browse Source
This is a standalone version of the libbacktrace library that I originally wrote for GCC. This is a copy of libbacktrace from GCC trunk, with all dependencies incorporated here.lib

37 changed files with 44340 additions and 0 deletions
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
# Copyright (C) 2012-2016 Free Software Foundation, Inc. |
||||
|
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
|
||||
# (1) Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
|
||||
# (2) Redistributions in binary form must reproduce the above copyright |
||||
# notice, this list of conditions and the following disclaimer in |
||||
# the documentation and/or other materials provided with the |
||||
# distribution. |
||||
|
||||
# (3) The name of the author may not be used to |
||||
# endorse or promote products derived from this software without |
||||
# specific prior written permission. |
||||
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
# POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,130 @@
@@ -0,0 +1,130 @@
|
||||
# Makefile.am -- Backtrace Makefile.
|
||||
# Copyright (C) 2012-2016 Free Software Foundation, Inc.
|
||||
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
|
||||
# (1) Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
|
||||
# (2) Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
|
||||
# (3) The name of the author may not be used to
|
||||
# endorse or promote products derived from this software without
|
||||
# specific prior written permission.
|
||||
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
AM_CFLAGS = $(EXTRA_FLAGS) $(WARN_FLAGS) $(PIC_FLAG) |
||||
|
||||
lib_LTLIBRARIES = libbacktrace.la |
||||
include_HEADERS = backtrace.h backtrace-supported.h |
||||
|
||||
libbacktrace_la_SOURCES = \
|
||||
backtrace.h \
|
||||
atomic.c \
|
||||
dwarf.c \
|
||||
fileline.c \
|
||||
internal.h \
|
||||
posix.c \
|
||||
print.c \
|
||||
sort.c \
|
||||
state.c |
||||
|
||||
BACKTRACE_FILES = \
|
||||
backtrace.c \
|
||||
simple.c \
|
||||
nounwind.c |
||||
|
||||
FORMAT_FILES = \
|
||||
elf.c \
|
||||
pecoff.c \
|
||||
unknown.c |
||||
|
||||
VIEW_FILES = \
|
||||
read.c \
|
||||
mmapio.c |
||||
|
||||
ALLOC_FILES = \
|
||||
alloc.c \
|
||||
mmap.c |
||||
|
||||
EXTRA_libbacktrace_la_SOURCES = \
|
||||
$(BACKTRACE_FILES) \
|
||||
$(FORMAT_FILES) \
|
||||
$(VIEW_FILES) \
|
||||
$(ALLOC_FILES) |
||||
|
||||
libbacktrace_la_LIBADD = \
|
||||
$(BACKTRACE_FILE) \
|
||||
$(FORMAT_FILE) \
|
||||
$(VIEW_FILE) \
|
||||
$(ALLOC_FILE) |
||||
|
||||
libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD) |
||||
|
||||
# Testsuite.
|
||||
|
||||
check_PROGRAMS = |
||||
|
||||
TESTS = $(check_PROGRAMS) |
||||
|
||||
if NATIVE |
||||
|
||||
btest_SOURCES = btest.c |
||||
btest_CFLAGS = $(AM_CFLAGS) -g -O |
||||
btest_LDADD = libbacktrace.la |
||||
|
||||
check_PROGRAMS += btest |
||||
|
||||
stest_SOURCES = stest.c |
||||
stest_LDADD = libbacktrace.la |
||||
|
||||
check_PROGRAMS += stest |
||||
|
||||
endif NATIVE |
||||
|
||||
# We can't use automake's automatic dependency tracking, because it
|
||||
# breaks when using bootstrap-lean. Automatic dependency tracking
|
||||
# with GCC bootstrap will cause some of the objects to depend on
|
||||
# header files in prev-gcc/include, e.g., stddef.h and stdarg.h. When
|
||||
# using bootstrap-lean, prev-gcc is removed after each stage. When
|
||||
# running "make install", those header files will be gone, causing the
|
||||
# library to be rebuilt at install time. That may not succeed.
|
||||
|
||||
# These manual dependencies do not include dependencies on unwind.h,
|
||||
# even though that is part of GCC, because where to find it depends on
|
||||
# whether we are being built as a host library or a target library.
|
||||
|
||||
alloc.lo: config.h backtrace.h internal.h |
||||
backtrace.lo: config.h backtrace.h internal.h |
||||
btest.lo: backtrace.h backtrace-supported.h |
||||
dwarf.lo: config.h backtrace.h internal.h |
||||
elf.lo: config.h backtrace.h internal.h |
||||
fileline.lo: config.h backtrace.h internal.h |
||||
mmap.lo: config.h backtrace.h internal.h |
||||
mmapio.lo: config.h backtrace.h internal.h |
||||
nounwind.lo: config.h internal.h |
||||
pecoff.lo: config.h backtrace.h internal.h |
||||
posix.lo: config.h backtrace.h internal.h |
||||
print.lo: config.h backtrace.h internal.h |
||||
read.lo: config.h backtrace.h internal.h |
||||
simple.lo: config.h backtrace.h internal.h |
||||
sort.lo: config.h backtrace.h internal.h |
||||
stest.lo: config.h backtrace.h internal.h |
||||
state.lo: config.h backtrace.h backtrace-supported.h internal.h |
||||
unknown.lo: config.h backtrace.h internal.h |
@ -0,0 +1,837 @@
@@ -0,0 +1,837 @@
|
||||
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
|
||||
# Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@ |
||||
|
||||
# Makefile.am -- Backtrace Makefile.
|
||||
# Copyright (C) 2012-2016 Free Software Foundation, Inc.
|
||||
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
|
||||
# (1) Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
|
||||
# (2) Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
|
||||
# (3) The name of the author may not be used to
|
||||
# endorse or promote products derived from this software without
|
||||
# specific prior written permission.
|
||||
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
VPATH = @srcdir@ |
||||
am__make_dryrun = \
|
||||
{ \
|
||||
am__dry=no; \
|
||||
case $$MAKEFLAGS in \
|
||||
*\\[\ \ ]*) \
|
||||
echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
|
||||
| grep '^AM OK$$' >/dev/null || am__dry=yes;; \
|
||||
*) \
|
||||
for am__flg in $$MAKEFLAGS; do \
|
||||
case $$am__flg in \
|
||||
*=*|--*) ;; \
|
||||
*n*) am__dry=yes; break;; \
|
||||
esac; \
|
||||
done;; \
|
||||
esac; \
|
||||
test $$am__dry = yes; \
|
||||
} |
||||
pkgdatadir = $(datadir)/@PACKAGE@ |
||||
pkgincludedir = $(includedir)/@PACKAGE@ |
||||
pkglibdir = $(libdir)/@PACKAGE@ |
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@ |
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd |
||||
install_sh_DATA = $(install_sh) -c -m 644 |
||||
install_sh_PROGRAM = $(install_sh) -c |
||||
install_sh_SCRIPT = $(install_sh) -c |
||||
INSTALL_HEADER = $(INSTALL_DATA) |
||||
transform = $(program_transform_name) |
||||
NORMAL_INSTALL = : |
||||
PRE_INSTALL = : |
||||
POST_INSTALL = : |
||||
NORMAL_UNINSTALL = : |
||||
PRE_UNINSTALL = : |
||||
POST_UNINSTALL = : |
||||
build_triplet = @build@ |
||||
host_triplet = @host@ |
||||
target_triplet = @target@ |
||||
check_PROGRAMS = $(am__EXEEXT_1) |
||||
@NATIVE_TRUE@am__append_1 = btest stest |
||||
subdir = . |
||||
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
||||
$(top_srcdir)/configure $(am__configure_deps) \
|
||||
$(srcdir)/config.h.in $(srcdir)/backtrace-supported.h.in \
|
||||
$(include_HEADERS) |
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 |
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.ac |
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4) |
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno |
||||
mkinstalldirs = $(install_sh) -d |
||||
CONFIG_HEADER = config.h |
||||
CONFIG_CLEAN_FILES = backtrace-supported.h |
||||
CONFIG_CLEAN_VPATH_FILES = |
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; |
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac; |
||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; |
||||
am__install_max = 40 |
||||
am__nobase_strip_setup = \
|
||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` |
||||
am__nobase_strip = \
|
||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" |
||||
am__nobase_list = $(am__nobase_strip_setup); \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
||||
if (++n[$$2] == $(am__install_max)) \
|
||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
||||
END { for (dir in files) print dir, files[dir] }' |
||||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' |
||||
am__uninstall_files_from_dir = { \
|
||||
test -z "$$files" \
|
||||
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
||||
} |
||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" |
||||
LTLIBRARIES = $(lib_LTLIBRARIES) |
||||
am__DEPENDENCIES_1 = |
||||
am_libbacktrace_la_OBJECTS = atomic.lo dwarf.lo fileline.lo posix.lo \
|
||||
print.lo sort.lo state.lo |
||||
libbacktrace_la_OBJECTS = $(am_libbacktrace_la_OBJECTS) |
||||
@NATIVE_TRUE@am__EXEEXT_1 = btest$(EXEEXT) stest$(EXEEXT) |
||||
@NATIVE_TRUE@am_btest_OBJECTS = btest-btest.$(OBJEXT) |
||||
btest_OBJECTS = $(am_btest_OBJECTS) |
||||
@NATIVE_TRUE@btest_DEPENDENCIES = libbacktrace.la |
||||
btest_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(btest_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@ |
||||
@NATIVE_TRUE@am_stest_OBJECTS = stest.$(OBJEXT) |
||||
stest_OBJECTS = $(am_stest_OBJECTS) |
||||
@NATIVE_TRUE@stest_DEPENDENCIES = libbacktrace.la |
||||
DEFAULT_INCLUDES = -I.@am__isrc@ |
||||
depcomp = |
||||
am__depfiles_maybe = |
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) |
||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) |
||||
CCLD = $(CC) |
||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@ |
||||
SOURCES = $(libbacktrace_la_SOURCES) $(EXTRA_libbacktrace_la_SOURCES) \
|
||||
$(btest_SOURCES) $(stest_SOURCES) |
||||
MULTISRCTOP = |
||||
MULTIBUILDTOP = |
||||
MULTIDIRS = |
||||
MULTISUBDIR = |
||||
MULTIDO = true |
||||
MULTICLEAN = true |
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac |
||||
HEADERS = $(include_HEADERS) |
||||
ETAGS = etags |
||||
CTAGS = ctags |
||||
am__tty_colors = \
|
||||
red=; grn=; lgn=; blu=; std= |
||||
ACLOCAL = @ACLOCAL@ |
||||
ALLOC_FILE = @ALLOC_FILE@ |
||||
AMTAR = @AMTAR@ |
||||
AR = @AR@ |
||||
AUTOCONF = @AUTOCONF@ |
||||
AUTOHEADER = @AUTOHEADER@ |
||||
AUTOMAKE = @AUTOMAKE@ |
||||
AWK = @AWK@ |
||||
BACKTRACE_FILE = @BACKTRACE_FILE@ |
||||
BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ |
||||
BACKTRACE_SUPPORTS_DATA = @BACKTRACE_SUPPORTS_DATA@ |
||||
BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ |
||||
BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ |
||||
CC = @CC@ |
||||
CFLAGS = @CFLAGS@ |
||||
CPP = @CPP@ |
||||
CPPFLAGS = @CPPFLAGS@ |
||||
CYGPATH_W = @CYGPATH_W@ |
||||
DEFS = @DEFS@ |
||||
DSYMUTIL = @DSYMUTIL@ |
||||
DUMPBIN = @DUMPBIN@ |
||||
ECHO_C = @ECHO_C@ |
||||
ECHO_N = @ECHO_N@ |
||||
ECHO_T = @ECHO_T@ |
||||
EGREP = @EGREP@ |
||||
EXEEXT = @EXEEXT@ |
||||
EXTRA_FLAGS = @EXTRA_FLAGS@ |
||||
FGREP = @FGREP@ |
||||
FORMAT_FILE = @FORMAT_FILE@ |
||||
GREP = @GREP@ |
||||
INSTALL = @INSTALL@ |
||||
INSTALL_DATA = @INSTALL_DATA@ |
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ |
||||
LD = @LD@ |
||||
LDFLAGS = @LDFLAGS@ |
||||
LIBOBJS = @LIBOBJS@ |
||||
LIBS = @LIBS@ |
||||
LIBTOOL = @LIBTOOL@ |
||||
LIPO = @LIPO@ |
||||
LN_S = @LN_S@ |
||||
LTLIBOBJS = @LTLIBOBJS@ |
||||
MAINT = @MAINT@ |
||||
MAKEINFO = @MAKEINFO@ |
||||
MKDIR_P = @MKDIR_P@ |
||||
NM = @NM@ |
||||
NMEDIT = @NMEDIT@ |
||||
OBJEXT = @OBJEXT@ |
||||
OTOOL = @OTOOL@ |
||||
OTOOL64 = @OTOOL64@ |
||||
PACKAGE = @PACKAGE@ |
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ |
||||
PACKAGE_NAME = @PACKAGE_NAME@ |
||||
PACKAGE_STRING = @PACKAGE_STRING@ |
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@ |
||||
PACKAGE_URL = @PACKAGE_URL@ |
||||
PACKAGE_VERSION = @PACKAGE_VERSION@ |
||||
PATH_SEPARATOR = @PATH_SEPARATOR@ |
||||
PIC_FLAG = @PIC_FLAG@ |
||||
RANLIB = @RANLIB@ |
||||
SED = @SED@ |
||||
SET_MAKE = @SET_MAKE@ |
||||
SHELL = @SHELL@ |
||||
STRIP = @STRIP@ |
||||
VERSION = @VERSION@ |
||||
VIEW_FILE = @VIEW_FILE@ |
||||
WARN_FLAGS = @WARN_FLAGS@ |
||||
abs_builddir = @abs_builddir@ |
||||
abs_srcdir = @abs_srcdir@ |
||||
abs_top_builddir = @abs_top_builddir@ |
||||
abs_top_srcdir = @abs_top_srcdir@ |
||||
ac_ct_CC = @ac_ct_CC@ |
||||
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ |
||||
am__leading_dot = @am__leading_dot@ |
||||
am__tar = @am__tar@ |
||||
am__untar = @am__untar@ |
||||
bindir = @bindir@ |
||||
build = @build@ |
||||
build_alias = @build_alias@ |
||||
build_cpu = @build_cpu@ |
||||
build_os = @build_os@ |
||||
build_vendor = @build_vendor@ |
||||
builddir = @builddir@ |
||||
datadir = @datadir@ |
||||
datarootdir = @datarootdir@ |
||||
docdir = @docdir@ |
||||
dvidir = @dvidir@ |
||||
exec_prefix = @exec_prefix@ |
||||
host = @host@ |
||||
host_alias = @host_alias@ |
||||
host_cpu = @host_cpu@ |
||||
host_os = @host_os@ |
||||
host_vendor = @host_vendor@ |
||||
htmldir = @htmldir@ |
||||
includedir = @includedir@ |
||||
infodir = @infodir@ |
||||
install_sh = @install_sh@ |
||||
libdir = @libdir@ |
||||
libexecdir = @libexecdir@ |
||||
libtool_VERSION = @libtool_VERSION@ |
||||
localedir = @localedir@ |
||||
localstatedir = @localstatedir@ |
||||
lt_ECHO = @lt_ECHO@ |
||||
mandir = @mandir@ |
||||
mkdir_p = @mkdir_p@ |
||||
multi_basedir = @multi_basedir@ |
||||
oldincludedir = @oldincludedir@ |
||||
pdfdir = @pdfdir@ |
||||
prefix = @prefix@ |
||||
program_transform_name = @program_transform_name@ |
||||
psdir = @psdir@ |
||||
sbindir = @sbindir@ |
||||
sharedstatedir = @sharedstatedir@ |
||||
srcdir = @srcdir@ |
||||
sysconfdir = @sysconfdir@ |
||||
target = @target@ |
||||
target_alias = @target_alias@ |
||||
target_cpu = @target_cpu@ |
||||
target_os = @target_os@ |
||||
target_vendor = @target_vendor@ |
||||
top_build_prefix = @top_build_prefix@ |
||||
top_builddir = @top_builddir@ |
||||
top_srcdir = @top_srcdir@ |
||||
AM_CFLAGS = $(EXTRA_FLAGS) $(WARN_FLAGS) $(PIC_FLAG) |
||||
lib_LTLIBRARIES = libbacktrace.la |
||||
include_HEADERS = backtrace.h backtrace-supported.h |
||||
libbacktrace_la_SOURCES = \
|
||||
backtrace.h \
|
||||
atomic.c \
|
||||
dwarf.c \
|
||||
fileline.c \
|
||||
internal.h \
|
||||
posix.c \
|
||||
print.c \
|
||||
sort.c \
|
||||
state.c |
||||
|
||||
BACKTRACE_FILES = \
|
||||
backtrace.c \
|
||||
simple.c \
|
||||
nounwind.c |
||||
|
||||
FORMAT_FILES = \
|
||||
elf.c \
|
||||
pecoff.c \
|
||||
unknown.c |
||||
|
||||
VIEW_FILES = \
|
||||
read.c \
|
||||
mmapio.c |
||||
|
||||
ALLOC_FILES = \
|
||||
alloc.c \
|
||||
mmap.c |
||||
|
||||
EXTRA_libbacktrace_la_SOURCES = \
|
||||
$(BACKTRACE_FILES) \
|
||||
$(FORMAT_FILES) \
|
||||
$(VIEW_FILES) \
|
||||
$(ALLOC_FILES) |
||||
|
||||
libbacktrace_la_LIBADD = \
|
||||
$(BACKTRACE_FILE) \
|
||||
$(FORMAT_FILE) \
|
||||
$(VIEW_FILE) \
|
||||
$(ALLOC_FILE) |
||||
|
||||
libbacktrace_la_DEPENDENCIES = $(libbacktrace_la_LIBADD) |
||||
TESTS = $(check_PROGRAMS) |
||||
@NATIVE_TRUE@btest_SOURCES = btest.c |
||||
@NATIVE_TRUE@btest_CFLAGS = $(AM_CFLAGS) -g -O |
||||
@NATIVE_TRUE@btest_LDADD = libbacktrace.la |
||||
@NATIVE_TRUE@stest_SOURCES = stest.c |
||||
@NATIVE_TRUE@stest_LDADD = libbacktrace.la |
||||
all: config.h |
||||
$(MAKE) $(AM_MAKEFLAGS) all-am |
||||
|
||||
.SUFFIXES: |
||||
.SUFFIXES: .c .lo .o .obj |
||||
am--refresh: Makefile |
||||
@: |
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) |
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign --ignore-deps'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign --ignore-deps \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign --ignore-deps Makefile |
||||
.PRECIOUS: Makefile |
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status |
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac; |
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) |
||||
$(SHELL) ./config.status --recheck |
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) |
||||
$(am__cd) $(srcdir) && $(AUTOCONF) |
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) |
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) |
||||
$(am__aclocal_m4_deps): |
||||
|
||||
config.h: stamp-h1 |
||||
@if test ! -f $@; then rm -f stamp-h1; else :; fi |
||||
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi |
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status |
||||
@rm -f stamp-h1 |
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h |
||||
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) |
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER)) |
||||
rm -f stamp-h1 |
||||
touch $@ |
||||
|
||||
distclean-hdr: |
||||
-rm -f config.h stamp-h1 |
||||
backtrace-supported.h: $(top_builddir)/config.status $(srcdir)/backtrace-supported.h.in |
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ |
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES) |
||||
@$(NORMAL_INSTALL) |
||||
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
list2=; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
list2="$$list2 $$p"; \
|
||||
else :; fi; \
|
||||
done; \
|
||||
test -z "$$list2" || { \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
|
||||
} |
||||
|
||||
uninstall-libLTLIBRARIES: |
||||
@$(NORMAL_UNINSTALL) |
||||
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
for p in $$list; do \
|
||||
$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
|
||||
done |
||||
|
||||
clean-libLTLIBRARIES: |
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) |
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done |
||||
libbacktrace.la: $(libbacktrace_la_OBJECTS) $(libbacktrace_la_DEPENDENCIES) $(EXTRA_libbacktrace_la_DEPENDENCIES) |
||||
$(LINK) -rpath $(libdir) $(libbacktrace_la_OBJECTS) $(libbacktrace_la_LIBADD) $(LIBS) |
||||
|
||||
clean-checkPROGRAMS: |
||||
@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list || exit $$?; \
|
||||
test -n "$(EXEEXT)" || exit 0; \
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list |
||||
btest$(EXEEXT): $(btest_OBJECTS) $(btest_DEPENDENCIES) $(EXTRA_btest_DEPENDENCIES) |
||||
@rm -f btest$(EXEEXT) |
||||
$(btest_LINK) $(btest_OBJECTS) $(btest_LDADD) $(LIBS) |
||||
stest$(EXEEXT): $(stest_OBJECTS) $(stest_DEPENDENCIES) $(EXTRA_stest_DEPENDENCIES) |
||||
@rm -f stest$(EXEEXT) |
||||
$(LINK) $(stest_OBJECTS) $(stest_LDADD) $(LIBS) |
||||
|
||||
mostlyclean-compile: |
||||
-rm -f *.$(OBJEXT) |
||||
|
||||
distclean-compile: |
||||
-rm -f *.tab.c |
||||
|
||||
.c.o: |
||||
$(COMPILE) -c $< |
||||
|
||||
.c.obj: |
||||
$(COMPILE) -c `$(CYGPATH_W) '$<'` |
||||
|
||||
.c.lo: |
||||
$(LTCOMPILE) -c -o $@ $< |
||||
|
||||
btest-btest.o: btest.c |
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_CFLAGS) $(CFLAGS) -c -o btest-btest.o `test -f 'btest.c' || echo '$(srcdir)/'`btest.c |
||||
|
||||
btest-btest.obj: btest.c |
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(btest_CFLAGS) $(CFLAGS) -c -o btest-btest.obj `if test -f 'btest.c'; then $(CYGPATH_W) 'btest.c'; else $(CYGPATH_W) '$(srcdir)/btest.c'; fi` |
||||
|
||||
mostlyclean-libtool: |
||||
-rm -f *.lo |
||||
|
||||
clean-libtool: |
||||
-rm -rf .libs _libs |
||||
|
||||
distclean-libtool: |
||||
-rm -f libtool config.lt |
||||
|
||||
# GNU Make needs to see an explicit $(MAKE) variable in the command it
|
||||
# runs to enable its job server during parallel builds. Hence the
|
||||
# comments below.
|
||||
all-multi: |
||||
$(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) |
||||
install-multi: |
||||
$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE) |
||||
|
||||
mostlyclean-multi: |
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE) |
||||
clean-multi: |
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE) |
||||
distclean-multi: |
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE) |
||||
maintainer-clean-multi: |
||||
$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean # $(MAKE) |
||||
install-includeHEADERS: $(include_HEADERS) |
||||
@$(NORMAL_INSTALL) |
||||
@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
done | $(am__base_list) | \
|
||||
while read files; do \
|
||||
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
|
||||
$(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
|
||||
done |
||||
|
||||
uninstall-includeHEADERS: |
||||
@$(NORMAL_UNINSTALL) |
||||
@list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) |
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) |
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique |
||||
tags: TAGS |
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ |
||||
$(TAGS_FILES) $(LISP) |
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \ |
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi |
||||
ctags: CTAGS |
||||
CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ |
||||
$(TAGS_FILES) $(LISP) |
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique |
||||
|
||||
GTAGS: |
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here" |
||||
|
||||
distclean-tags: |
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags |
||||
|
||||
check-TESTS: $(TESTS) |
||||
@failed=0; all=0; xfail=0; xpass=0; skip=0; \
|
||||
srcdir=$(srcdir); export srcdir; \
|
||||
list=' $(TESTS) '; \
|
||||
$(am__tty_colors); \
|
||||
if test -n "$$list"; then \
|
||||
for tst in $$list; do \
|
||||
if test -f ./$$tst; then dir=./; \
|
||||
elif test -f $$tst; then dir=; \
|
||||
else dir="$(srcdir)/"; fi; \
|
||||
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
|
||||
all=`expr $$all + 1`; \
|
||||
case " $(XFAIL_TESTS) " in \
|
||||
*[\ \ ]$$tst[\ \ ]*) \
|
||||
xpass=`expr $$xpass + 1`; \
|
||||
failed=`expr $$failed + 1`; \
|
||||
col=$$red; res=XPASS; \
|
||||
;; \
|
||||
*) \
|
||||
col=$$grn; res=PASS; \
|
||||
;; \
|
||||
esac; \
|
||||
elif test $$? -ne 77; then \
|
||||
all=`expr $$all + 1`; \
|
||||
case " $(XFAIL_TESTS) " in \
|
||||
*[\ \ ]$$tst[\ \ ]*) \
|
||||
xfail=`expr $$xfail + 1`; \
|
||||
col=$$lgn; res=XFAIL; \
|
||||
;; \
|
||||
*) \
|
||||
failed=`expr $$failed + 1`; \
|
||||
col=$$red; res=FAIL; \
|
||||
;; \
|
||||
esac; \
|
||||
else \
|
||||
skip=`expr $$skip + 1`; \
|
||||
col=$$blu; res=SKIP; \
|
||||
fi; \
|
||||
echo "$${col}$$res$${std}: $$tst"; \
|
||||
done; \
|
||||
if test "$$all" -eq 1; then \
|
||||
tests="test"; \
|
||||
All=""; \
|
||||
else \
|
||||
tests="tests"; \
|
||||
All="All "; \
|
||||
fi; \
|
||||
if test "$$failed" -eq 0; then \
|
||||
if test "$$xfail" -eq 0; then \
|
||||
banner="$$All$$all $$tests passed"; \
|
||||
else \
|
||||
if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
|
||||
banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
|
||||
fi; \
|
||||
else \
|
||||
if test "$$xpass" -eq 0; then \
|
||||
banner="$$failed of $$all $$tests failed"; \
|
||||
else \
|
||||
if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
|
||||
banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dashes="$$banner"; \
|
||||
skipped=""; \
|
||||
if test "$$skip" -ne 0; then \
|
||||
if test "$$skip" -eq 1; then \
|
||||
skipped="($$skip test was not run)"; \
|
||||
else \
|
||||
skipped="($$skip tests were not run)"; \
|
||||
fi; \
|
||||
test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||
dashes="$$skipped"; \
|
||||
fi; \
|
||||
report=""; \
|
||||
if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
|
||||
report="Please report to $(PACKAGE_BUGREPORT)"; \
|
||||
test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||
dashes="$$report"; \
|
||||
fi; \
|
||||
dashes=`echo "$$dashes" | sed s/./=/g`; \
|
||||
if test "$$failed" -eq 0; then \
|
||||
col="$$grn"; \
|
||||
else \
|
||||
col="$$red"; \
|
||||
fi; \
|
||||
echo "$${col}$$dashes$${std}"; \
|
||||
echo "$${col}$$banner$${std}"; \
|
||||
test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
|
||||
test -z "$$report" || echo "$${col}$$report$${std}"; \
|
||||
echo "$${col}$$dashes$${std}"; \
|
||||
test "$$failed" -eq 0; \
|
||||
else :; fi |
||||
check-am: all-am |
||||
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) |
||||
$(MAKE) $(AM_MAKEFLAGS) check-TESTS |
||||
check: check-am |
||||
all-am: Makefile $(LTLIBRARIES) all-multi $(HEADERS) config.h |
||||
installdirs: |
||||
for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done |
||||
install: install-am |
||||
install-exec: install-exec-am |
||||
install-data: install-data-am |
||||
uninstall: uninstall-am |
||||
|
||||
install-am: all-am |
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am |
||||
|
||||
installcheck: installcheck-am |
||||
install-strip: |
||||
if test -z '$(STRIP)'; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
install; \
|
||||
else \
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
|
||||
fi |
||||
mostlyclean-generic: |
||||
|
||||
clean-generic: |
||||
|
||||
distclean-generic: |
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) |
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) |
||||
|
||||
maintainer-clean-generic: |
||||
@echo "This command is intended for maintainers to use" |
||||
@echo "it deletes files that may require special tools to rebuild." |
||||
clean: clean-am clean-multi |
||||
|
||||
clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ |
||||
clean-libtool mostlyclean-am |
||||
|
||||
distclean: distclean-am distclean-multi |
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES) |
||||
-rm -f Makefile |
||||
distclean-am: clean-am distclean-compile distclean-generic \ |
||||
distclean-hdr distclean-libtool distclean-tags |
||||
|
||||
dvi: dvi-am |
||||
|
||||
dvi-am: |
||||
|
||||
html: html-am |
||||
|
||||
html-am: |
||||
|
||||
info: info-am |
||||
|
||||
info-am: |
||||
|
||||
install-data-am: install-includeHEADERS |
||||
|
||||
install-dvi: install-dvi-am |
||||
|
||||
install-dvi-am: |
||||
|
||||
install-exec-am: install-libLTLIBRARIES install-multi |
||||
|
||||
install-html: install-html-am |
||||
|
||||
install-html-am: |
||||
|
||||
install-info: install-info-am |
||||
|
||||
install-info-am: |
||||
|
||||
install-man: |
||||
|
||||
install-pdf: install-pdf-am |
||||
|
||||
install-pdf-am: |
||||
|
||||
install-ps: install-ps-am |
||||
|
||||
install-ps-am: |
||||
|
||||
installcheck-am: |
||||
|
||||
maintainer-clean: maintainer-clean-am maintainer-clean-multi |
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES) |
||||
-rm -rf $(top_srcdir)/autom4te.cache |
||||
-rm -f Makefile |
||||
maintainer-clean-am: distclean-am maintainer-clean-generic |
||||
|
||||
mostlyclean: mostlyclean-am mostlyclean-multi |
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \ |
||||
mostlyclean-libtool |
||||
|
||||
pdf: pdf-am |
||||
|
||||
pdf-am: |
||||
|
||||
ps: ps-am |
||||
|
||||
ps-am: |
||||
|
||||
uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES |
||||
|
||||
.MAKE: all all-multi check-am clean-multi distclean-multi install-am \ |
||||
install-multi install-strip maintainer-clean-multi \
|
||||
mostlyclean-multi |
||||
|
||||
.PHONY: CTAGS GTAGS all all-am all-multi am--refresh check check-TESTS \ |
||||
check-am clean clean-checkPROGRAMS clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool clean-multi ctags distclean \
|
||||
distclean-compile distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-multi distclean-tags dvi dvi-am \
|
||||
html html-am info info-am install install-am install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-html install-html-am \
|
||||
install-includeHEADERS install-info install-info-am \
|
||||
install-libLTLIBRARIES install-man install-multi install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-multi mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
|
||||
mostlyclean-multi pdf pdf-am ps ps-am tags uninstall \
|
||||
uninstall-am uninstall-includeHEADERS uninstall-libLTLIBRARIES |
||||
|
||||
|
||||
# We can't use automake's automatic dependency tracking, because it
|
||||
# breaks when using bootstrap-lean. Automatic dependency tracking
|
||||
# with GCC bootstrap will cause some of the objects to depend on
|
||||
# header files in prev-gcc/include, e.g., stddef.h and stdarg.h. When
|
||||
# using bootstrap-lean, prev-gcc is removed after each stage. When
|
||||
# running "make install", those header files will be gone, causing the
|
||||
# library to be rebuilt at install time. That may not succeed.
|
||||
|
||||
# These manual dependencies do not include dependencies on unwind.h,
|
||||
# even though that is part of GCC, because where to find it depends on
|
||||
# whether we are being built as a host library or a target library.
|
||||
|
||||
alloc.lo: config.h backtrace.h internal.h |
||||
backtrace.lo: config.h backtrace.h internal.h |
||||
btest.lo: backtrace.h backtrace-supported.h |
||||
dwarf.lo: config.h backtrace.h internal.h |
||||
elf.lo: config.h backtrace.h internal.h |
||||
fileline.lo: config.h backtrace.h internal.h |
||||
mmap.lo: config.h backtrace.h internal.h |
||||
mmapio.lo: config.h backtrace.h internal.h |
||||
nounwind.lo: config.h internal.h |
||||
pecoff.lo: config.h backtrace.h internal.h |
||||
posix.lo: config.h backtrace.h internal.h |
||||
print.lo: config.h backtrace.h internal.h |
||||
read.lo: config.h backtrace.h internal.h |
||||
simple.lo: config.h backtrace.h internal.h |
||||
sort.lo: config.h backtrace.h internal.h |
||||
stest.lo: config.h backtrace.h internal.h |
||||
state.lo: config.h backtrace.h backtrace-supported.h internal.h |
||||
unknown.lo: config.h backtrace.h internal.h |
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT: |
@ -1,2 +1,30 @@
@@ -1,2 +1,30 @@
|
||||
# libbacktrace |
||||
A C library that may be linked into a C/C++ program to produce symbolic backtraces |
||||
|
||||
Initially written by Ian Lance Taylor <iant@golang.org> |
||||
|
||||
The libbacktrace library may be linked into a program or library and |
||||
used to produce symbolic backtraces. |
||||
Sample uses would be to print a detailed backtrace when an error |
||||
occurs or to gather detailed profiling information. |
||||
|
||||
The libbacktrace library is provided under a BSD license. |
||||
See the source files for the exact license text. |
||||
|
||||
The public functions are declared and documented in the header file |
||||
backtrace.h, which should be #include'd by a user of the library. |
||||
|
||||
Building libbacktrace will generate a file backtrace-supported.h, |
||||
which a user of the library may use to determine whether backtraces |
||||
will work. |
||||
See the source file backtrace-supported.h.in for the macros that it |
||||
defines. |
||||
|
||||
As of September 2016, libbacktrace only supports ELF and PE/COFF |
||||
executables with DWARF debugging information. |
||||
The library is written to make it straightforward to add support for |
||||
other object file and debugging formats. |
||||
|
||||
The library relies on the C++ unwind API defined at |
||||
http://mentorembedded.github.io/cxx-abi/abi-eh.html. |
||||
This API is provided by GCC. |
||||
|
@ -0,0 +1,71 @@
@@ -0,0 +1,71 @@
|
||||
dnl |
||||
dnl Check whether _Unwind_GetIPInfo is available without doing a link |
||||
dnl test so we can use this with libstdc++-v3 and libjava. Need to |
||||
dnl use $target to set defaults because automatic checking is not possible |
||||
dnl without a link test (and maybe even with a link test). |
||||
dnl |
||||
|
||||
AC_DEFUN([GCC_CHECK_UNWIND_GETIPINFO], [ |
||||
AC_ARG_WITH(system-libunwind, |
||||
[ --with-system-libunwind use installed libunwind]) |
||||
# If system-libunwind was not specifically set, pick a default setting. |
||||
if test x$with_system_libunwind = x; then |
||||
case ${target} in |
||||
ia64-*-hpux*) with_system_libunwind=yes ;; |
||||
*) with_system_libunwind=no ;; |
||||
esac |
||||
fi |
||||
# Based on system-libunwind and target, do we have ipinfo? |
||||
if test x$with_system_libunwind = xyes; then |
||||
case ${target} in |
||||
ia64-*-*) have_unwind_getipinfo=no ;; |
||||
*) have_unwind_getipinfo=yes ;; |
||||
esac |
||||
else |
||||
# Darwin before version 9 does not have _Unwind_GetIPInfo. |
||||
changequote(,) |
||||
case ${target} in |
||||
*-*-darwin[3-8]|*-*-darwin[3-8].*) have_unwind_getipinfo=no ;; |
||||
*) have_unwind_getipinfo=yes ;; |
||||
esac |
||||
changequote([,]) |
||||
fi |
||||
|
||||
if test x$have_unwind_getipinfo = xyes; then |
||||
AC_DEFINE(HAVE_GETIPINFO, 1, [Define if _Unwind_GetIPInfo is available.]) |
||||
fi |
||||
]) |
||||
|
||||
# ACX_PROG_CC_WARNING_OPTS(WARNINGS, [VARIABLE = WARN_CFLAGS]) |
||||
# Sets @VARIABLE@ to the subset of the given options which the |
||||
# compiler accepts. |
||||
AC_DEFUN([ACX_PROG_CC_WARNING_OPTS], |
||||
[AC_REQUIRE([AC_PROG_CC])dnl |
||||
AC_LANG_PUSH(C) |
||||
m4_pushdef([acx_Var], [m4_default([$2], [WARN_CFLAGS])])dnl |
||||
AC_SUBST(acx_Var)dnl |
||||
m4_expand_once([acx_Var= |
||||
],m4_quote(acx_Var=))dnl |
||||
save_CFLAGS="$CFLAGS" |
||||
for real_option in $1; do |
||||
# Do the check with the no- prefix removed since gcc silently |
||||
# accepts any -Wno-* option on purpose |
||||
case $real_option in |
||||
-Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;; |
||||
*) option=$real_option ;; |
||||
esac |
||||
AS_VAR_PUSHDEF([acx_Woption], [acx_cv_prog_cc_warning_$option]) |
||||
AC_CACHE_CHECK([whether $CC supports $option], acx_Woption, |
||||
[CFLAGS="$option" |
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])], |
||||
[AS_VAR_SET(acx_Woption, yes)], |
||||
[AS_VAR_SET(acx_Woption, no)]) |
||||
]) |
||||
AS_IF([test AS_VAR_GET(acx_Woption) = yes], |
||||
[acx_Var="$acx_Var${acx_Var:+ }$real_option"]) |
||||
AS_VAR_POPDEF([acx_Woption])dnl |
||||
done |
||||
CFLAGS="$save_CFLAGS" |
||||
m4_popdef([acx_Var])dnl |
||||
AC_LANG_POP(C) |
||||
])# ACX_PROG_CC_WARNING_OPTS |
@ -0,0 +1,156 @@
@@ -0,0 +1,156 @@
|
||||
/* alloc.c -- Memory allocation without mmap.
|
||||
Copyright (C) 2012-2016 Free Software Foundation, Inc. |
||||
Written by Ian Lance Taylor, Google. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met: |
||||
|
||||
(1) Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
|
||||
(2) Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in |
||||
the documentation and/or other materials provided with the |
||||
distribution. |
||||
|
||||
(3) The name of the author may not be used to |
||||
endorse or promote products derived from this software without |
||||
specific prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGE. */ |
||||
|
||||
#include "config.h" |
||||
|
||||
#include <errno.h> |
||||
#include <stdlib.h> |
||||
#include <sys/types.h> |
||||
|
||||
#include "backtrace.h" |
||||
#include "internal.h" |
||||
|
||||
/* Allocation routines to use on systems that do not support anonymous
|
||||
mmap. This implementation just uses malloc, which means that the |
||||
backtrace functions may not be safely invoked from a signal |
||||
handler. */ |
||||
|
||||
/* Allocate memory like malloc. If ERROR_CALLBACK is NULL, don't
|
||||
report an error. */ |
||||
|
||||
void * |
||||
backtrace_alloc (struct backtrace_state *state ATTRIBUTE_UNUSED, |
||||
size_t size, backtrace_error_callback error_callback, |
||||
void *data) |
||||
{ |
||||
void *ret; |
||||
|
||||
ret = malloc (size); |
||||
if (ret == NULL) |
||||
{ |
||||
if (error_callback) |
||||
error_callback (data, "malloc", errno); |
||||
} |
||||
return ret; |
||||
} |
||||
|
||||
/* Free memory. */ |
||||
|
||||
void |
||||
backtrace_free (struct backtrace_state *state ATTRIBUTE_UNUSED, |
||||
void *p, size_t size ATTRIBUTE_UNUSED, |
||||
backtrace_error_callback error_callback ATTRIBUTE_UNUSED, |
||||
void *data ATTRIBUTE_UNUSED) |
||||
{ |
||||
free (p); |
||||
} |
||||
|
||||
/* Grow VEC by SIZE bytes. */ |
||||
|
||||
void * |
||||
backtrace_vector_grow (struct backtrace_state *state ATTRIBUTE_UNUSED, |
||||
size_t size, backtrace_error_callback error_callback, |
||||
void *data, struct backtrace_vector *vec) |
||||
{ |
||||
void *ret; |
||||
|
||||
if (size > vec->alc) |
||||
{ |
||||
size_t alc; |
||||
void *base; |
||||
|
||||
if (vec->size == 0) |
||||
alc = 32 * size; |
||||
else if (vec->size >= 4096) |
||||
alc = vec->size + 4096; |
||||
else |
||||
alc = 2 * vec->size; |
||||
|
||||
if (alc < vec->size + size) |
||||
alc = vec->size + size; |
||||
|
||||
base = realloc (vec->base, alc); |
||||
if (base == NULL) |
||||
{ |
||||
error_callback (data, "realloc", errno); |
||||
return NULL; |
||||
} |
||||
|
||||
vec->base = base; |
||||
vec->alc = alc - vec->size; |
||||
} |
||||
|
||||
ret = (char *) vec->base + vec->size; |
||||
vec->size += size; |
||||
vec->alc -= size; |
||||
return ret; |
||||
} |
||||
|
||||
/* Finish the current allocation on VEC. */ |
||||
|
||||
void * |
||||
backtrace_vector_finish (struct backtrace_state *state, |
||||
struct backtrace_vector *vec, |
||||
backtrace_error_callback error_callback, |
||||
void *data) |
||||
{ |
||||
void *ret; |
||||
|
||||
/* With this allocator we call realloc in backtrace_vector_grow,
|
||||
which means we can't easily reuse the memory here. So just |
||||
release it. */ |
||||
if (!backtrace_vector_release (state, vec, error_callback, data)) |
||||
return NULL; |
||||
ret = vec->base; |
||||
vec->base = NULL; |
||||
vec->size = 0; |
||||
vec->alc = 0; |
||||
return ret; |
||||
} |
||||
|
||||
/* Release any extra space allocated for VEC. */ |
||||
|
||||
int |
||||
backtrace_vector_release (struct backtrace_state *state ATTRIBUTE_UNUSED, |
||||
struct backtrace_vector *vec, |
||||
backtrace_error_callback error_callback, |
||||
void *data) |
||||
{ |
||||
vec->base = realloc (vec->base, vec->size); |
||||
if (vec->base == NULL) |
||||
{ |
||||
error_callback (data, "realloc", errno); |
||||
return 0; |
||||
} |
||||
vec->alc = 0; |
||||
return 1; |
||||
} |
@ -0,0 +1,113 @@
@@ -0,0 +1,113 @@
|
||||
/* atomic.c -- Support for atomic functions if not present.
|
||||
Copyright (C) 2013-2016 Free Software Foundation, Inc. |
||||
Written by Ian Lance Taylor, Google. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met: |
||||
|
||||
(1) Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
|
||||
(2) Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in |
||||
the documentation and/or other materials provided with the |
||||
distribution. |
||||
|
||||
(3) The name of the author may not be used to |
||||
endorse or promote products derived from this software without |
||||
specific prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGE. */ |
||||
|
||||
#include "config.h" |
||||
|
||||
#include <sys/types.h> |
||||
|
||||
#include "backtrace.h" |
||||
#include "backtrace-supported.h" |
||||
#include "internal.h" |
||||
|
||||
/* This file holds implementations of the atomic functions that are
|
||||
used if the host compiler has the sync functions but not the atomic |
||||
functions, as is true of versions of GCC before 4.7. */ |
||||
|
||||
#if !defined (HAVE_ATOMIC_FUNCTIONS) && defined (HAVE_SYNC_FUNCTIONS) |
||||
|
||||
/* Do an atomic load of a pointer. */ |
||||
|
||||
void * |
||||
backtrace_atomic_load_pointer (void *arg) |
||||
{ |
||||
void **pp; |
||||
void *p; |
||||
|
||||
pp = (void **) arg; |
||||
p = *pp; |
||||
while (!__sync_bool_compare_and_swap (pp, p, p)) |
||||
p = *pp; |
||||
return p; |
||||
} |
||||
|
||||
/* Do an atomic load of an int. */ |
||||
|
||||
int |
||||
backtrace_atomic_load_int (int *p) |
||||
{ |
||||
int i; |
||||
|
||||
i = *p; |
||||
while (!__sync_bool_compare_and_swap (p, i, i)) |
||||
i = *p; |
||||
return i; |
||||
} |
||||
|
||||
/* Do an atomic store of a pointer. */ |
||||
|
||||
void |
||||
backtrace_atomic_store_pointer (void *arg, void *p) |
||||
{ |
||||
void **pp; |
||||
void *old; |
||||
|
||||
pp = (void **) arg; |
||||
old = *pp; |
||||
while (!__sync_bool_compare_and_swap (pp, old, p)) |
||||
old = *pp; |
||||
} |
||||
|
||||
/* Do an atomic store of a size_t value. */ |
||||
|
||||
void |
||||
backtrace_atomic_store_size_t (size_t *p, size_t v) |
||||
{ |
||||
size_t old; |
||||
|
||||
old = *p; |
||||
while (!__sync_bool_compare_and_swap (p, old, v)) |
||||
old = *p; |
||||
} |
||||
|
||||
/* Do an atomic store of a int value. */ |
||||
|
||||
void |
||||
backtrace_atomic_store_int (int *p, int v) |
||||
{ |
||||
size_t old; |
||||
|
||||
old = *p; |
||||
while (!__sync_bool_compare_and_swap (p, old, v)) |
||||
old = *p; |
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
/* backtrace-supported.h.in -- Whether stack backtrace is supported.
|
||||
Copyright (C) 2012-2016 Free Software Foundation, Inc. |
||||
Written by Ian Lance Taylor, Google. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met: |
||||
|
||||
(1) Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
|
||||
(2) Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in |
||||
the documentation and/or other materials provided with the |
||||
distribution. |
||||
|
||||
(3) The name of the author may not be used to |
||||
endorse or promote products derived from this software without |
||||
specific prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGE. */ |
||||
|
||||
/* The file backtrace-supported.h.in is used by configure to generate
|
||||
the file backtrace-supported.h. The file backtrace-supported.h may |
||||
be #include'd to see whether the backtrace library will be able to |
||||
get a backtrace and produce symbolic information. */ |
||||
|
||||
|
||||
/* BACKTRACE_SUPPORTED will be #define'd as 1 if the backtrace library
|
||||
should work, 0 if it will not. Libraries may #include this to make |
||||
other arrangements. */ |
||||
|
||||
#define BACKTRACE_SUPPORTED @BACKTRACE_SUPPORTED@ |
||||
|
||||
/* BACKTRACE_USES_MALLOC will be #define'd as 1 if the backtrace
|
||||
library will call malloc as it works, 0 if it will call mmap |
||||
instead. This may be used to determine whether it is safe to call |
||||
the backtrace functions from a signal handler. In general this |
||||
only applies to calls like backtrace and backtrace_pcinfo. It does |
||||
not apply to backtrace_simple, which never calls malloc. It does |
||||
not apply to backtrace_print, which always calls fprintf and |
||||
therefore malloc. */ |
||||
|
||||
#define BACKTRACE_USES_MALLOC @BACKTRACE_USES_MALLOC@ |
||||
|
||||
/* BACKTRACE_SUPPORTS_THREADS will be #define'd as 1 if the backtrace
|
||||
library is configured with threading support, 0 if not. If this is |
||||
0, the threaded parameter to backtrace_create_state must be passed |
||||
as 0. */ |
||||
|
||||
#define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@ |
||||
|
||||
/* BACKTRACE_SUPPORTS_DATA will be #defined'd as 1 if the backtrace_syminfo
|
||||
will work for variables. It will always work for functions. */ |
||||
|
||||
#define BACKTRACE_SUPPORTS_DATA @BACKTRACE_SUPPORTS_DATA@ |
@ -0,0 +1,129 @@
@@ -0,0 +1,129 @@
|
||||
/* backtrace.c -- Entry point for stack backtrace library.
|
||||
Copyright (C) 2012-2016 Free Software Foundation, Inc. |
||||
Written by Ian Lance Taylor, Google. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are |
||||
met: |
||||
|
||||
(1) Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
|
||||
(2) Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in |
||||
the documentation and/or other materials provided with the |
||||
distribution. |
||||
|
||||
(3) The name of the author may not be used to |
||||
endorse or promote products derived from this software without |
||||
specific prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, |
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGE. */ |
||||
|
||||
#include "config.h" |
||||
|
||||
#include <sys/types.h> |
||||
|
||||
#include "unwind.h" |
||||
#include "backtrace.h" |
||||
#include "internal.h" |
||||
|
||||
/* The main backtrace_full routine. */ |
||||
|
||||
/* Data passed through _Unwind_Backtrace. */ |
||||
|
||||
struct backtrace_data |
||||
{ |
||||
/* Number of frames to skip. */ |
||||
int skip; |
||||
/* Library state. */ |
||||
struct backtrace_state *state; |
||||
/* Callback routine. */ |
||||
backtrace_full_callback callback; |
||||
/* Error callback routine. */ |
||||
backtrace_error_callback error_callback; |
||||
/* Data to pass to callback routines. */ |
||||
void *data; |
||||
/* Value to return from backtrace_full. */ |
||||
int ret; |
||||
/* Whether there is any memory available. */ |
||||
int can_alloc; |
||||
}; |
||||
|
||||
/* Unwind library callback routine. This is passed to
|
||||
_Unwind_Backtrace. */ |
||||
|
||||
static _Unwind_Reason_Code |
||||
unwind (struct _Unwind_Context *context, void *vdata) |
||||
{ |
||||
struct backtrace_data *bdata = (struct backtrace_data *) vdata; |
||||
uintptr_t pc; |
||||
int ip_before_insn = 0; |
||||
|
||||
#ifdef HAVE_GETIPINFO |
||||
pc = _Unwind_GetIPInfo (context, &ip_before_insn); |
||||
#else |
||||
pc = _Unwind_GetIP (context); |
||||
#endif |
||||
|
||||
if (bdata->skip > 0) |
||||
{ |
||||
--bdata->skip; |
||||
return _URC_NO_REASON; |
||||
} |
||||
|
||||
if (!ip_before_insn) |
||||
--pc; |
||||
|
||||
if (!bdata->can_alloc) |
||||
bdata->ret = bdata->callback (bdata->data, pc, NULL, 0, NULL); |
||||
else |
||||
bdata->ret = backtrace_pcinfo (bdata->state, pc, bdata->callback, |
||||
bdata->error_callback, bdata->data); |
||||
if (bdata->ret != 0) |
||||
return _URC_END_OF_STACK; |
||||
|
||||