Refactor the logic of resolving source line info into helper class.
http://breakpad.appspot.com/459002/ git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1068 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
f72b9c6ff4
commit
bab770045b
22 changed files with 813 additions and 926 deletions
|
@ -132,6 +132,7 @@ src_libbreakpad_a_SOURCES = \
|
|||
src/google_breakpad/processor/source_line_resolver_interface.h \
|
||||
src/google_breakpad/processor/stack_frame.h \
|
||||
src/google_breakpad/processor/stack_frame_cpu.h \
|
||||
src/google_breakpad/processor/stack_frame_symbolizer.h \
|
||||
src/google_breakpad/processor/stackwalker.h \
|
||||
src/google_breakpad/processor/symbol_supplier.h \
|
||||
src/google_breakpad/processor/system_info.h \
|
||||
|
@ -183,6 +184,7 @@ src_libbreakpad_a_SOURCES = \
|
|||
src/processor/windows_frame_info.h \
|
||||
src/processor/source_line_resolver_base_types.h \
|
||||
src/processor/source_line_resolver_base.cc \
|
||||
src/processor/stack_frame_symbolizer.cc \
|
||||
src/processor/stackwalker.cc \
|
||||
src/processor/stackwalker_amd64.cc \
|
||||
src/processor/stackwalker_amd64.h \
|
||||
|
@ -613,6 +615,7 @@ src_processor_exploitability_unittest_LDADD = \
|
|||
src/processor/minidump.o \
|
||||
src/processor/pathname_stripper.o \
|
||||
src/processor/source_line_resolver_base.o \
|
||||
src/processor/stack_frame_symbolizer.o \
|
||||
src/processor/stackwalker.o \
|
||||
src/processor/stackwalker_amd64.o \
|
||||
src/processor/stackwalker_arm.o \
|
||||
|
@ -700,6 +703,7 @@ src_processor_minidump_processor_unittest_LDADD = \
|
|||
src/processor/pathname_stripper.o \
|
||||
src/processor/process_state.o \
|
||||
src/processor/source_line_resolver_base.o \
|
||||
src/processor/stack_frame_symbolizer.o \
|
||||
src/processor/stackwalker.o \
|
||||
src/processor/stackwalker_amd64.o \
|
||||
src/processor/stackwalker_arm.o \
|
||||
|
@ -823,6 +827,7 @@ src_processor_stackwalker_selftest_LDADD = \
|
|||
src/processor/minidump.o \
|
||||
src/processor/pathname_stripper.o \
|
||||
src/processor/source_line_resolver_base.o \
|
||||
src/processor/stack_frame_symbolizer.o \
|
||||
src/processor/stackwalker.o \
|
||||
src/processor/stackwalker_amd64.o \
|
||||
src/processor/stackwalker_arm.o \
|
||||
|
@ -942,6 +947,7 @@ src_processor_minidump_stackwalk_LDADD = \
|
|||
src/processor/process_state.o \
|
||||
src/processor/simple_symbol_supplier.o \
|
||||
src/processor/source_line_resolver_base.o \
|
||||
src/processor/stack_frame_symbolizer.o \
|
||||
src/processor/stackwalker.o \
|
||||
src/processor/stackwalker_amd64.o \
|
||||
src/processor/stackwalker_arm.o \
|
||||
|
|
224
Makefile.in
224
Makefile.in
|
@ -1,9 +1,9 @@
|
|||
# Makefile.in generated by automake 1.11.6 from Makefile.am.
|
||||
# Makefile.in generated by automake 1.11.1 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.
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 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.
|
||||
|
@ -48,23 +48,6 @@
|
|||
|
||||
|
||||
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@
|
||||
|
@ -210,12 +193,6 @@ am__nobase_list = $(am__nobase_strip_setup); \
|
|||
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)$(bindir)" \
|
||||
"$(DESTDIR)$(docdir)"
|
||||
LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
|
||||
|
@ -283,6 +260,7 @@ am__src_libbreakpad_a_SOURCES_DIST = \
|
|||
src/google_breakpad/processor/source_line_resolver_interface.h \
|
||||
src/google_breakpad/processor/stack_frame.h \
|
||||
src/google_breakpad/processor/stack_frame_cpu.h \
|
||||
src/google_breakpad/processor/stack_frame_symbolizer.h \
|
||||
src/google_breakpad/processor/stackwalker.h \
|
||||
src/google_breakpad/processor/symbol_supplier.h \
|
||||
src/google_breakpad/processor/system_info.h \
|
||||
|
@ -325,6 +303,7 @@ am__src_libbreakpad_a_SOURCES_DIST = \
|
|||
src/processor/windows_frame_info.h \
|
||||
src/processor/source_line_resolver_base_types.h \
|
||||
src/processor/source_line_resolver_base.cc \
|
||||
src/processor/stack_frame_symbolizer.cc \
|
||||
src/processor/stackwalker.cc \
|
||||
src/processor/stackwalker_amd64.cc \
|
||||
src/processor/stackwalker_amd64.h \
|
||||
|
@ -364,6 +343,7 @@ am__src_libbreakpad_a_SOURCES_DIST = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/process_state.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/simple_symbol_supplier.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.$(OBJEXT) \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.$(OBJEXT) \
|
||||
|
@ -730,6 +710,7 @@ src_processor_exploitability_unittest_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -806,6 +787,7 @@ src_processor_minidump_processor_unittest_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -837,6 +819,7 @@ src_processor_minidump_stackwalk_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/simple_symbol_supplier.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -946,6 +929,7 @@ src_processor_stackwalker_selftest_OBJECTS = \
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -1222,11 +1206,6 @@ DIST_SOURCES = \
|
|||
$(am__src_tools_linux_md2core_minidump_2_core_unittest_SOURCES_DIST) \
|
||||
$(am__src_tools_linux_symupload_minidump_upload_SOURCES_DIST) \
|
||||
$(am__src_tools_linux_symupload_sym_upload_SOURCES_DIST)
|
||||
am__can_run_installinfo = \
|
||||
case $$AM_UPDATE_INFO_DIR in \
|
||||
n|no|NO) false;; \
|
||||
*) (install-info --version) >/dev/null 2>&1;; \
|
||||
esac
|
||||
DATA = $(dist_doc_DATA)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
|
@ -1236,16 +1215,12 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
if test -d "$(distdir)"; then \
|
||||
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -rf "$(distdir)" \
|
||||
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
||||
else :; fi
|
||||
{ test ! -d "$(distdir)" \
|
||||
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr "$(distdir)"; }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
|
@ -1407,6 +1382,7 @@ lib_LIBRARIES = $(am__append_5) $(am__append_7)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/source_line_resolver_interface.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame_cpu.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stack_frame_symbolizer.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/stackwalker.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/symbol_supplier.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/google_breakpad/processor/system_info.h \
|
||||
|
@ -1458,6 +1434,7 @@ lib_LIBRARIES = $(am__append_5) $(am__append_7)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/windows_frame_info.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base_types.h \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.cc \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.cc \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.cc \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.cc \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.h \
|
||||
|
@ -1803,6 +1780,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -1898,6 +1876,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -2035,6 +2014,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/minidump.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/pathname_stripper.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -2161,6 +2141,7 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
|||
@DISABLE_PROCESSOR_FALSE@ src/processor/process_state.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/simple_symbol_supplier.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/source_line_resolver_base.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stack_frame_symbolizer.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_amd64.o \
|
||||
@DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_arm.o \
|
||||
|
@ -2311,7 +2292,7 @@ all: all-am
|
|||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .S .c .cc .o .obj
|
||||
am--refresh: Makefile
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
|
@ -2347,8 +2328,10 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
|||
$(am__aclocal_m4_deps):
|
||||
|
||||
src/config.h: src/stamp-h1
|
||||
@if test ! -f $@; then rm -f src/stamp-h1; else :; fi
|
||||
@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; else :; fi
|
||||
@if test ! -f $@; then \
|
||||
rm -f src/stamp-h1; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status
|
||||
@rm -f src/stamp-h1
|
||||
|
@ -2362,6 +2345,7 @@ distclean-hdr:
|
|||
-rm -f src/config.h src/stamp-h1
|
||||
install-libLIBRARIES: $(lib_LIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
list2=; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
|
@ -2369,8 +2353,6 @@ install-libLIBRARIES: $(lib_LIBRARIES)
|
|||
else :; fi; \
|
||||
done; \
|
||||
test -z "$$list2" || { \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
|
||||
echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \
|
||||
$(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; }
|
||||
@$(POST_INSTALL)
|
||||
|
@ -2387,7 +2369,9 @@ uninstall-libLIBRARIES:
|
|||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir)
|
||||
test -n "$$files" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \
|
||||
cd "$(DESTDIR)$(libdir)" && rm -f $$files
|
||||
|
||||
clean-libLIBRARIES:
|
||||
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
|
||||
|
@ -2496,7 +2480,7 @@ src/common/android/breakpad_getcontext.$(OBJEXT): \
|
|||
src/client/linux/$(am__dirstamp):
|
||||
@$(MKDIR_P) src/client/linux
|
||||
@: > src/client/linux/$(am__dirstamp)
|
||||
src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) $(EXTRA_src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
-rm -f src/client/linux/libbreakpad_client.a
|
||||
$(src_client_linux_libbreakpad_client_a_AR) src/client/linux/libbreakpad_client.a $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_LIBADD)
|
||||
$(RANLIB) src/client/linux/libbreakpad_client.a
|
||||
|
@ -2553,6 +2537,9 @@ src/processor/simple_symbol_supplier.$(OBJEXT): \
|
|||
src/processor/source_line_resolver_base.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/stack_frame_symbolizer.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/stackwalker.$(OBJEXT): src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/stackwalker_amd64.$(OBJEXT): \
|
||||
|
@ -2575,7 +2562,7 @@ src/processor/tokenize.$(OBJEXT): src/processor/$(am__dirstamp) \
|
|||
src/$(am__dirstamp):
|
||||
@$(MKDIR_P) src
|
||||
@: > src/$(am__dirstamp)
|
||||
src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) $(EXTRA_src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp)
|
||||
src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp)
|
||||
-rm -f src/libbreakpad.a
|
||||
$(src_libbreakpad_a_AR) src/libbreakpad.a $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_LIBADD)
|
||||
$(RANLIB) src/libbreakpad.a
|
||||
|
@ -2627,17 +2614,14 @@ src/third_party/libdisasm/x86_misc.$(OBJEXT): \
|
|||
src/third_party/libdisasm/x86_operand_list.$(OBJEXT): \
|
||||
src/third_party/libdisasm/$(am__dirstamp) \
|
||||
src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
|
||||
src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) $(EXTRA_src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp)
|
||||
src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp)
|
||||
-rm -f src/third_party/libdisasm/libdisasm.a
|
||||
$(src_third_party_libdisasm_libdisasm_a_AR) src/third_party/libdisasm/libdisasm.a $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_LIBADD)
|
||||
$(RANLIB) src/third_party/libdisasm/libdisasm.a
|
||||
install-binPROGRAMS: $(bin_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
|
||||
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p; \
|
||||
|
@ -2677,7 +2661,7 @@ clean-checkPROGRAMS:
|
|||
|
||||
clean-noinstPROGRAMS:
|
||||
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
|
||||
src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) $(EXTRA_src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
@rm -f src/client/linux/linux_client_unittest$(EXEEXT)
|
||||
$(src_client_linux_linux_client_unittest_LINK) $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_LDADD) $(LIBS)
|
||||
src/client/linux/handler/src_client_linux_linux_client_unittest_shlib-exception_handler_unittest.$(OBJEXT): \
|
||||
|
@ -2770,13 +2754,13 @@ src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcont
|
|||
src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext_unittest.$(OBJEXT): \
|
||||
src/common/android/$(am__dirstamp) \
|
||||
src/common/android/$(DEPDIR)/$(am__dirstamp)
|
||||
src/client/linux/linux_client_unittest_shlib$(EXEEXT): $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) $(EXTRA_src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
src/client/linux/linux_client_unittest_shlib$(EXEEXT): $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
@rm -f src/client/linux/linux_client_unittest_shlib$(EXEEXT)
|
||||
$(src_client_linux_linux_client_unittest_shlib_LINK) $(src_client_linux_linux_client_unittest_shlib_OBJECTS) $(src_client_linux_linux_client_unittest_shlib_LDADD) $(LIBS)
|
||||
src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT): \
|
||||
src/client/linux/minidump_writer/$(am__dirstamp) \
|
||||
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||
src/client/linux/linux_dumper_unittest_helper$(EXEEXT): $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) $(EXTRA_src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
src/client/linux/linux_dumper_unittest_helper$(EXEEXT): $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||
@rm -f src/client/linux/linux_dumper_unittest_helper$(EXEEXT)
|
||||
$(src_client_linux_linux_dumper_unittest_helper_LINK) $(src_client_linux_linux_dumper_unittest_helper_OBJECTS) $(src_client_linux_linux_dumper_unittest_helper_LDADD) $(LIBS)
|
||||
src/common/src_common_dumper_unittest-byte_cursor_unittest.$(OBJEXT): \
|
||||
|
@ -2920,7 +2904,7 @@ src/testing/gtest/src/src_common_dumper_unittest-gtest_main.$(OBJEXT): \
|
|||
src/testing/src/src_common_dumper_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/common/dumper_unittest$(EXEEXT): $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_DEPENDENCIES) $(EXTRA_src_common_dumper_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
|
||||
src/common/dumper_unittest$(EXEEXT): $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
|
||||
@rm -f src/common/dumper_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_common_dumper_unittest_OBJECTS) $(src_common_dumper_unittest_LDADD) $(LIBS)
|
||||
src/common/src_common_test_assembler_unittest-test_assembler.$(OBJEXT): \
|
||||
|
@ -2938,13 +2922,13 @@ src/testing/gtest/src/src_common_test_assembler_unittest-gtest_main.$(OBJEXT):
|
|||
src/testing/src/src_common_test_assembler_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/common/test_assembler_unittest$(EXEEXT): $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_DEPENDENCIES) $(EXTRA_src_common_test_assembler_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
|
||||
src/common/test_assembler_unittest$(EXEEXT): $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_DEPENDENCIES) src/common/$(am__dirstamp)
|
||||
@rm -f src/common/test_assembler_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_common_test_assembler_unittest_OBJECTS) $(src_common_test_assembler_unittest_LDADD) $(LIBS)
|
||||
src/processor/address_map_unittest.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/address_map_unittest$(EXEEXT): $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/address_map_unittest$(EXEEXT): $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/address_map_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_address_map_unittest_OBJECTS) $(src_processor_address_map_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT): \
|
||||
|
@ -2956,7 +2940,7 @@ src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-al
|
|||
src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/basic_source_line_resolver_unittest$(EXEEXT): $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) $(EXTRA_src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/basic_source_line_resolver_unittest$(EXEEXT): $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/basic_source_line_resolver_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_basic_source_line_resolver_unittest_OBJECTS) $(src_processor_basic_source_line_resolver_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_binarystream_unittest-binarystream_unittest.$(OBJEXT): \
|
||||
|
@ -2968,7 +2952,7 @@ src/testing/gtest/src/src_processor_binarystream_unittest-gtest-all.$(OBJEXT):
|
|||
src/testing/src/src_processor_binarystream_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/binarystream_unittest$(EXEEXT): $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_DEPENDENCIES) $(EXTRA_src_processor_binarystream_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/binarystream_unittest$(EXEEXT): $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/binarystream_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_binarystream_unittest_OBJECTS) $(src_processor_binarystream_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT): \
|
||||
|
@ -2983,13 +2967,13 @@ src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT)
|
|||
src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/cfi_frame_info_unittest$(EXEEXT): $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_DEPENDENCIES) $(EXTRA_src_processor_cfi_frame_info_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/cfi_frame_info_unittest$(EXEEXT): $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/cfi_frame_info_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_cfi_frame_info_unittest_OBJECTS) $(src_processor_cfi_frame_info_unittest_LDADD) $(LIBS)
|
||||
src/processor/contained_range_map_unittest.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/contained_range_map_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_disassembler_x86_unittest-disassembler_x86_unittest.$(OBJEXT): \
|
||||
|
@ -3004,7 +2988,7 @@ src/testing/gtest/src/src_processor_disassembler_x86_unittest-gtest_main.$(OBJEX
|
|||
src/testing/src/src_processor_disassembler_x86_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/disassembler_x86_unittest$(EXEEXT): $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_DEPENDENCIES) $(EXTRA_src_processor_disassembler_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/disassembler_x86_unittest$(EXEEXT): $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/disassembler_x86_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_disassembler_x86_unittest_OBJECTS) $(src_processor_disassembler_x86_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT): \
|
||||
|
@ -3019,7 +3003,7 @@ src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT)
|
|||
src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) $(EXTRA_src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/exploitability_unittest$(EXEEXT): $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/exploitability_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_exploitability_unittest_OBJECTS) $(src_processor_exploitability_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT): \
|
||||
|
@ -3031,7 +3015,7 @@ src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all
|
|||
src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/fast_source_line_resolver_unittest$(EXEEXT): $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) $(EXTRA_src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/fast_source_line_resolver_unittest$(EXEEXT): $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/fast_source_line_resolver_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_fast_source_line_resolver_unittest_OBJECTS) $(src_processor_fast_source_line_resolver_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_map_serializers_unittest-map_serializers_unittest.$(OBJEXT): \
|
||||
|
@ -3043,12 +3027,12 @@ src/testing/gtest/src/src_processor_map_serializers_unittest-gtest-all.$(OBJEXT)
|
|||
src/testing/src/src_processor_map_serializers_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) $(EXTRA_src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/map_serializers_unittest$(EXEEXT): $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/map_serializers_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_map_serializers_unittest_OBJECTS) $(src_processor_map_serializers_unittest_LDADD) $(LIBS)
|
||||
src/processor/minidump_dump.$(OBJEXT): src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) $(EXTRA_src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/minidump_dump$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_LDADD) $(LIBS)
|
||||
src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT): \
|
||||
|
@ -3060,13 +3044,13 @@ src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJE
|
|||
src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/minidump_processor_unittest$(EXEEXT): $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_DEPENDENCIES) $(EXTRA_src_processor_minidump_processor_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/minidump_processor_unittest$(EXEEXT): $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/minidump_processor_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_LDADD) $(LIBS)
|
||||
src/processor/minidump_stackwalk.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/minidump_stackwalk$(EXEEXT): $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_DEPENDENCIES) $(EXTRA_src_processor_minidump_stackwalk_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/minidump_stackwalk$(EXEEXT): $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/minidump_stackwalk$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_LDADD) $(LIBS)
|
||||
src/common/src_processor_minidump_unittest-test_assembler.$(OBJEXT): \
|
||||
|
@ -3087,25 +3071,25 @@ src/testing/gtest/src/src_processor_minidump_unittest-gtest_main.$(OBJEXT): \
|
|||
src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/minidump_unittest$(EXEEXT): $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_DEPENDENCIES) $(EXTRA_src_processor_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/minidump_unittest$(EXEEXT): $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/minidump_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_minidump_unittest_OBJECTS) $(src_processor_minidump_unittest_LDADD) $(LIBS)
|
||||
src/processor/pathname_stripper_unittest.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/pathname_stripper_unittest$(EXEEXT): $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_DEPENDENCIES) $(EXTRA_src_processor_pathname_stripper_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/pathname_stripper_unittest$(EXEEXT): $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/pathname_stripper_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_pathname_stripper_unittest_OBJECTS) $(src_processor_pathname_stripper_unittest_LDADD) $(LIBS)
|
||||
src/processor/postfix_evaluator_unittest.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/postfix_evaluator_unittest$(EXEEXT): $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_DEPENDENCIES) $(EXTRA_src_processor_postfix_evaluator_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/postfix_evaluator_unittest$(EXEEXT): $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/postfix_evaluator_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_postfix_evaluator_unittest_OBJECTS) $(src_processor_postfix_evaluator_unittest_LDADD) $(LIBS)
|
||||
src/processor/range_map_unittest.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/range_map_unittest$(EXEEXT): $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/range_map_unittest$(EXEEXT): $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/range_map_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_range_map_unittest_OBJECTS) $(src_processor_range_map_unittest_LDADD) $(LIBS)
|
||||
src/common/src_processor_stackwalker_amd64_unittest-test_assembler.$(OBJEXT): \
|
||||
|
@ -3123,7 +3107,7 @@ src/testing/gtest/src/src_processor_stackwalker_amd64_unittest-gtest_main.$(OBJE
|
|||
src/testing/src/src_processor_stackwalker_amd64_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/stackwalker_amd64_unittest$(EXEEXT): $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_amd64_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/stackwalker_amd64_unittest$(EXEEXT): $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/stackwalker_amd64_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_stackwalker_amd64_unittest_OBJECTS) $(src_processor_stackwalker_amd64_unittest_LDADD) $(LIBS)
|
||||
src/common/src_processor_stackwalker_arm_unittest-test_assembler.$(OBJEXT): \
|
||||
|
@ -3141,13 +3125,13 @@ src/testing/gtest/src/src_processor_stackwalker_arm_unittest-gtest_main.$(OBJEXT
|
|||
src/testing/src/src_processor_stackwalker_arm_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/stackwalker_arm_unittest$(EXEEXT): $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_arm_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/stackwalker_arm_unittest$(EXEEXT): $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/stackwalker_arm_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_stackwalker_arm_unittest_OBJECTS) $(src_processor_stackwalker_arm_unittest_LDADD) $(LIBS)
|
||||
src/processor/stackwalker_selftest.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/stackwalker_selftest$(EXEEXT): $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_selftest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/stackwalker_selftest$(EXEEXT): $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/stackwalker_selftest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_stackwalker_selftest_OBJECTS) $(src_processor_stackwalker_selftest_LDADD) $(LIBS)
|
||||
src/common/src_processor_stackwalker_x86_unittest-test_assembler.$(OBJEXT): \
|
||||
|
@ -3165,7 +3149,7 @@ src/testing/gtest/src/src_processor_stackwalker_x86_unittest-gtest_main.$(OBJEXT
|
|||
src/testing/src/src_processor_stackwalker_x86_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) $(EXTRA_src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/stackwalker_x86_unittest$(EXEEXT): $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/stackwalker_x86_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_stackwalker_x86_unittest_OBJECTS) $(src_processor_stackwalker_x86_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_static_address_map_unittest-static_address_map_unittest.$(OBJEXT): \
|
||||
|
@ -3177,7 +3161,7 @@ src/testing/gtest/src/src_processor_static_address_map_unittest-gtest-all.$(OBJE
|
|||
src/testing/src/src_processor_static_address_map_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/static_address_map_unittest$(EXEEXT): $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/static_address_map_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_static_address_map_unittest_OBJECTS) $(src_processor_static_address_map_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_static_contained_range_map_unittest-static_contained_range_map_unittest.$(OBJEXT): \
|
||||
|
@ -3189,7 +3173,7 @@ src/testing/gtest/src/src_processor_static_contained_range_map_unittest-gtest-al
|
|||
src/testing/src/src_processor_static_contained_range_map_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/static_contained_range_map_unittest$(EXEEXT): $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/static_contained_range_map_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_static_contained_range_map_unittest_OBJECTS) $(src_processor_static_contained_range_map_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_static_map_unittest-static_map_unittest.$(OBJEXT): \
|
||||
|
@ -3201,7 +3185,7 @@ src/testing/gtest/src/src_processor_static_map_unittest-gtest-all.$(OBJEXT): \
|
|||
src/testing/src/src_processor_static_map_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/static_map_unittest$(EXEEXT): $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/static_map_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_static_map_unittest_OBJECTS) $(src_processor_static_map_unittest_LDADD) $(LIBS)
|
||||
src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT): \
|
||||
|
@ -3213,7 +3197,7 @@ src/testing/gtest/src/src_processor_static_range_map_unittest-gtest-all.$(OBJEXT
|
|||
src/testing/src/src_processor_static_range_map_unittest-gmock-all.$(OBJEXT): \
|
||||
src/testing/src/$(am__dirstamp) \
|
||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) $(EXTRA_src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/static_range_map_unittest$(EXEEXT): $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/static_range_map_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_static_range_map_unittest_OBJECTS) $(src_processor_static_range_map_unittest_LDADD) $(LIBS)
|
||||
src/common/src_processor_synth_minidump_unittest-test_assembler.$(OBJEXT): \
|
||||
|
@ -3234,7 +3218,7 @@ src/testing/src/src_processor_synth_minidump_unittest-gmock-all.$(OBJEXT): \
|
|||
src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT): \
|
||||
src/processor/$(am__dirstamp) \
|
||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||
src/processor/synth_minidump_unittest$(EXEEXT): $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_DEPENDENCIES) $(EXTRA_src_processor_synth_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
src/processor/synth_minidump_unittest$(EXEEXT): $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
|
||||
@rm -f src/processor/synth_minidump_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_processor_synth_minidump_unittest_OBJECTS) $(src_processor_synth_minidump_unittest_LDADD) $(LIBS)
|
||||
src/tools/linux/core2md/$(am__dirstamp):
|
||||
|
@ -3252,7 +3236,7 @@ src/client/linux/minidump_writer/linux_core_dumper.$(OBJEXT): \
|
|||
src/common/linux/elf_core_dump.$(OBJEXT): \
|
||||
src/common/linux/$(am__dirstamp) \
|
||||
src/common/linux/$(DEPDIR)/$(am__dirstamp)
|
||||
src/tools/linux/core2md/core2md$(EXEEXT): $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_DEPENDENCIES) $(EXTRA_src_tools_linux_core2md_core2md_DEPENDENCIES) src/tools/linux/core2md/$(am__dirstamp)
|
||||
src/tools/linux/core2md/core2md$(EXEEXT): $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_DEPENDENCIES) src/tools/linux/core2md/$(am__dirstamp)
|
||||
@rm -f src/tools/linux/core2md/core2md$(EXEEXT)
|
||||
$(CXXLINK) $(src_tools_linux_core2md_core2md_OBJECTS) $(src_tools_linux_core2md_core2md_LDADD) $(LIBS)
|
||||
src/common/dwarf_cfi_to_module.$(OBJEXT): src/common/$(am__dirstamp) \
|
||||
|
@ -3293,7 +3277,7 @@ src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp):
|
|||
src/tools/linux/dump_syms/dump_syms.$(OBJEXT): \
|
||||
src/tools/linux/dump_syms/$(am__dirstamp) \
|
||||
src/tools/linux/dump_syms/$(DEPDIR)/$(am__dirstamp)
|
||||
src/tools/linux/dump_syms/dump_syms$(EXEEXT): $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) $(EXTRA_src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) src/tools/linux/dump_syms/$(am__dirstamp)
|
||||
src/tools/linux/dump_syms/dump_syms$(EXEEXT): $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_DEPENDENCIES) src/tools/linux/dump_syms/$(am__dirstamp)
|
||||
@rm -f src/tools/linux/dump_syms/dump_syms$(EXEEXT)
|
||||
$(CXXLINK) $(src_tools_linux_dump_syms_dump_syms_OBJECTS) $(src_tools_linux_dump_syms_dump_syms_LDADD) $(LIBS)
|
||||
src/tools/linux/md2core/$(am__dirstamp):
|
||||
|
@ -3305,7 +3289,7 @@ src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp):
|
|||
src/tools/linux/md2core/minidump-2-core.$(OBJEXT): \
|
||||
src/tools/linux/md2core/$(am__dirstamp) \
|
||||
src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp)
|
||||
src/tools/linux/md2core/minidump-2-core$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) $(EXTRA_src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
|
||||
src/tools/linux/md2core/minidump-2-core$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
|
||||
@rm -f src/tools/linux/md2core/minidump-2-core$(EXEEXT)
|
||||
$(CXXLINK) $(src_tools_linux_md2core_minidump_2_core_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_LDADD) $(LIBS)
|
||||
src/testing/gtest/src/src_tools_linux_md2core_minidump_2_core_unittest-gtest-all.$(OBJEXT): \
|
||||
|
@ -3320,7 +3304,7 @@ src/testing/src/src_tools_linux_md2core_minidump_2_core_unittest-gmock-all.$(OBJ
|
|||
src/tools/linux/md2core/src_tools_linux_md2core_minidump_2_core_unittest-minidump_memory_range_unittest.$(OBJEXT): \
|
||||
src/tools/linux/md2core/$(am__dirstamp) \
|
||||
src/tools/linux/md2core/$(DEPDIR)/$(am__dirstamp)
|
||||
src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) $(EXTRA_src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
|
||||
src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT): $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES) src/tools/linux/md2core/$(am__dirstamp)
|
||||
@rm -f src/tools/linux/md2core/minidump_2_core_unittest$(EXEEXT)
|
||||
$(CXXLINK) $(src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS) $(src_tools_linux_md2core_minidump_2_core_unittest_LDADD) $(LIBS)
|
||||
src/common/linux/http_upload.$(OBJEXT): \
|
||||
|
@ -3335,13 +3319,13 @@ src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp):
|
|||
src/tools/linux/symupload/minidump_upload.$(OBJEXT): \
|
||||
src/tools/linux/symupload/$(am__dirstamp) \
|
||||
src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp)
|
||||
src/tools/linux/symupload/minidump_upload$(EXEEXT): $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_DEPENDENCIES) $(EXTRA_src_tools_linux_symupload_minidump_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
|
||||
src/tools/linux/symupload/minidump_upload$(EXEEXT): $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
|
||||
@rm -f src/tools/linux/symupload/minidump_upload$(EXEEXT)
|
||||
$(CXXLINK) $(src_tools_linux_symupload_minidump_upload_OBJECTS) $(src_tools_linux_symupload_minidump_upload_LDADD) $(LIBS)
|
||||
src/tools/linux/symupload/sym_upload.$(OBJEXT): \
|
||||
src/tools/linux/symupload/$(am__dirstamp) \
|
||||
src/tools/linux/symupload/$(DEPDIR)/$(am__dirstamp)
|
||||
src/tools/linux/symupload/sym_upload$(EXEEXT): $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_DEPENDENCIES) $(EXTRA_src_tools_linux_symupload_sym_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
|
||||
src/tools/linux/symupload/sym_upload$(EXEEXT): $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_DEPENDENCIES) src/tools/linux/symupload/$(am__dirstamp)
|
||||
@rm -f src/tools/linux/symupload/sym_upload$(EXEEXT)
|
||||
$(CXXLINK) $(src_tools_linux_symupload_sym_upload_OBJECTS) $(src_tools_linux_symupload_sym_upload_LDADD) $(LIBS)
|
||||
|
||||
|
@ -3494,6 +3478,7 @@ mostlyclean-compile:
|
|||
-rm -f src/processor/src_processor_static_range_map_unittest-static_range_map_unittest.$(OBJEXT)
|
||||
-rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump.$(OBJEXT)
|
||||
-rm -f src/processor/src_processor_synth_minidump_unittest-synth_minidump_unittest.$(OBJEXT)
|
||||
-rm -f src/processor/stack_frame_symbolizer.$(OBJEXT)
|
||||
-rm -f src/processor/stackwalker.$(OBJEXT)
|
||||
-rm -f src/processor/stackwalker_amd64.$(OBJEXT)
|
||||
-rm -f src/processor/stackwalker_arm.$(OBJEXT)
|
||||
|
@ -3727,6 +3712,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_static_range_map_unittest-static_range_map_unittest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_synth_minidump_unittest-synth_minidump_unittest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stack_frame_symbolizer.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_amd64.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_arm.Po@am__quote@
|
||||
|
@ -5861,11 +5847,8 @@ src/tools/linux/md2core/src_tools_linux_md2core_minidump_2_core_unittest-minidum
|
|||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_tools_linux_md2core_minidump_2_core_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/tools/linux/md2core/src_tools_linux_md2core_minidump_2_core_unittest-minidump_memory_range_unittest.obj `if test -f 'src/tools/linux/md2core/minidump_memory_range_unittest.cc'; then $(CYGPATH_W) 'src/tools/linux/md2core/minidump_memory_range_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/tools/linux/md2core/minidump_memory_range_unittest.cc'; fi`
|
||||
install-dist_docDATA: $(dist_doc_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
|
||||
@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
|
||||
if test -n "$$list"; then \
|
||||
echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
|
||||
$(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \
|
||||
fi; \
|
||||
for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
echo "$$d$$p"; \
|
||||
|
@ -5879,7 +5862,9 @@ uninstall-dist_docDATA:
|
|||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
|
||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
||||
dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
|
||||
test -n "$$files" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(docdir)" && rm -f $$files
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
|
@ -6014,15 +5999,14 @@ check-TESTS: $(TESTS)
|
|||
fi; \
|
||||
dashes=`echo "$$dashes" | sed s/./=/g`; \
|
||||
if test "$$failed" -eq 0; then \
|
||||
col="$$grn"; \
|
||||
echo "$$grn$$dashes"; \
|
||||
else \
|
||||
col="$$red"; \
|
||||
echo "$$red$$dashes"; \
|
||||
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}"; \
|
||||
echo "$$banner"; \
|
||||
test -z "$$skipped" || echo "$$skipped"; \
|
||||
test -z "$$report" || echo "$$report"; \
|
||||
echo "$$dashes$$std"; \
|
||||
test "$$failed" -eq 0; \
|
||||
else :; fi
|
||||
|
||||
|
@ -6070,11 +6054,7 @@ dist-gzip: distdir
|
|||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzma: distdir
|
||||
|
@ -6082,7 +6062,7 @@ dist-lzma: distdir
|
|||
$(am__remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
||||
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
|
@ -6113,8 +6093,6 @@ distcheck: dist
|
|||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lzma*) \
|
||||
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
|
||||
*.tar.lz*) \
|
||||
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
|
@ -6124,7 +6102,7 @@ distcheck: dist
|
|||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod u+w $(distdir)
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
|
@ -6134,7 +6112,6 @@ distcheck: dist
|
|||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
|
@ -6163,16 +6140,8 @@ distcheck: dist
|
|||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@test -n '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: trying to run $@ with an empty' \
|
||||
'$$(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
||||
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
||||
exit 1; \
|
||||
}; \
|
||||
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
||||
@$(am__cd) '$(distuninstallcheck_dir)' \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
|
@ -6207,15 +6176,10 @@ install-am: all-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
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
@ -6347,8 +6311,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-dist_docDATA \
|
|||
.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
|
||||
clean clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
|
||||
clean-libLIBRARIES clean-noinstLIBRARIES clean-noinstPROGRAMS \
|
||||
ctags dist dist-all dist-bzip2 dist-gzip dist-lzip dist-lzma \
|
||||
dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
|
||||
ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
|
||||
dist-tarZ dist-xz dist-zip distcheck distclean \
|
||||
distclean-compile distclean-generic distclean-hdr \
|
||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
|
|
76
aclocal.m4
vendored
76
aclocal.m4
vendored
|
@ -1,8 +1,7 @@
|
|||
# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
|
||||
# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
|
||||
# Inc.
|
||||
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
# This file 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.
|
||||
|
@ -14,21 +13,18 @@
|
|||
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
|
||||
[m4_warning([this file was generated for autoconf 2.69.
|
||||
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
|
||||
[m4_warning([this file was generated for autoconf 2.65.
|
||||
You have another version of autoconf. It may work, but is not guaranteed to.
|
||||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||
|
||||
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
|
||||
# Foundation, Inc.
|
||||
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 1
|
||||
|
||||
# AM_AUTOMAKE_VERSION(VERSION)
|
||||
# ----------------------------
|
||||
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||
|
@ -38,7 +34,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
|
|||
[am__api_version='1.11'
|
||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||
dnl require some minimum version. Point them to the right macro.
|
||||
m4_if([$1], [1.11.6], [],
|
||||
m4_if([$1], [1.11.1], [],
|
||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||
])
|
||||
|
||||
|
@ -54,7 +50,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
|
|||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.11.6])dnl
|
||||
[AM_AUTOMAKE_VERSION([1.11.1])dnl
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||
|
@ -83,14 +79,12 @@ _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
|
|||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 1
|
||||
|
||||
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||
|
@ -172,14 +166,14 @@ AC_CONFIG_COMMANDS_PRE(
|
|||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
|
||||
# 2010, 2011 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 12
|
||||
# serial 10
|
||||
|
||||
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
||||
# written in clear, in which case automake, when reading aclocal.m4,
|
||||
|
@ -219,7 +213,6 @@ AC_CACHE_CHECK([dependency style of $depcc],
|
|||
# instance it was reported that on HP-UX the gcc test will end up
|
||||
# making a dummy file named `D' -- because `-MD' means `put the output
|
||||
# in D'.
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
# Copy depcomp to subdir because otherwise we won't find it if we're
|
||||
# using a relative directory.
|
||||
|
@ -284,7 +277,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
|
|||
break
|
||||
fi
|
||||
;;
|
||||
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
|
||||
msvisualcpp | msvcmsys)
|
||||
# This compiler won't grok `-c -o', but also, the minuso test has
|
||||
# not run yet. These depmodes are late enough in the game, and
|
||||
# so weak that their functioning should not be impacted.
|
||||
|
@ -349,13 +342,10 @@ AC_DEFUN([AM_DEP_TRACK],
|
|||
if test "x$enable_dependency_tracking" != xno; then
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
AMDEPBACKSLASH='\'
|
||||
am__nodep='_no'
|
||||
fi
|
||||
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
||||
AC_SUBST([AMDEPBACKSLASH])dnl
|
||||
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
|
||||
AC_SUBST([am__nodep])dnl
|
||||
_AM_SUBST_NOTMAKE([am__nodep])dnl
|
||||
])
|
||||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
@ -589,15 +579,12 @@ for _am_header in $config_headers :; do
|
|||
done
|
||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
|
||||
# Inc.
|
||||
# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 1
|
||||
|
||||
# AM_PROG_INSTALL_SH
|
||||
# ------------------
|
||||
# Define $install_sh.
|
||||
|
@ -764,15 +751,12 @@ else
|
|||
fi
|
||||
])
|
||||
|
||||
# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
|
||||
# Inc.
|
||||
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 1
|
||||
|
||||
# AM_PROG_MKDIR_P
|
||||
# ---------------
|
||||
# Check for `mkdir -p'.
|
||||
|
@ -795,14 +779,13 @@ esac
|
|||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
|
||||
# Foundation, Inc.
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 5
|
||||
# serial 4
|
||||
|
||||
# _AM_MANGLE_OPTION(NAME)
|
||||
# -----------------------
|
||||
|
@ -810,13 +793,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
|
|||
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
# _AM_SET_OPTION(NAME)
|
||||
# --------------------
|
||||
# ------------------------------
|
||||
# Set option NAME. Presently that only means defining a flag for this option.
|
||||
AC_DEFUN([_AM_SET_OPTION],
|
||||
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||
|
||||
# _AM_SET_OPTIONS(OPTIONS)
|
||||
# ------------------------
|
||||
# ----------------------------------
|
||||
# OPTIONS is a space-separated list of Automake options.
|
||||
AC_DEFUN([_AM_SET_OPTIONS],
|
||||
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||
|
@ -827,14 +810,12 @@ AC_DEFUN([_AM_SET_OPTIONS],
|
|||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 1
|
||||
|
||||
# AM_RUN_LOG(COMMAND)
|
||||
# -------------------
|
||||
# Run COMMAND, save the exit status in ac_status, and log it.
|
||||
|
@ -911,14 +892,12 @@ Check your system clock])
|
|||
fi
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 1
|
||||
|
||||
# AM_PROG_INSTALL_STRIP
|
||||
# ---------------------
|
||||
# One issue with vendor `install' (even GNU) is that you can't
|
||||
|
@ -941,13 +920,13 @@ fi
|
|||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# serial 3
|
||||
# serial 2
|
||||
|
||||
# _AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
|
@ -956,13 +935,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
|||
AC_DEFUN([_AM_SUBST_NOTMAKE])
|
||||
|
||||
# AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# --------------------------
|
||||
# ---------------------------
|
||||
# Public sister of _AM_SUBST_NOTMAKE.
|
||||
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
||||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
|
@ -984,11 +963,10 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
|||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility. Yes, it's still used
|
||||
# in the wild :-( We should find a proper way to deprecate it ...
|
||||
AC_SUBST([AMTAR], ['$${TAR-tar}'])
|
||||
[# Always define AMTAR for backward compatibility.
|
||||
AM_MISSING_PROG([AMTAR], [tar])
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
|
||||
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
[m4_fatal([Unknown tar format])])
|
||||
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||
|
|
|
@ -40,6 +40,7 @@ namespace google_breakpad {
|
|||
|
||||
class Minidump;
|
||||
class ProcessState;
|
||||
class StackFrameSymbolizer;
|
||||
class SourceLineResolverInterface;
|
||||
class SymbolSupplier;
|
||||
struct SystemInfo;
|
||||
|
@ -92,37 +93,44 @@ class MinidumpProcessor {
|
|||
public:
|
||||
// Initializes this MinidumpProcessor. supplier should be an
|
||||
// implementation of the SymbolSupplier abstract base class.
|
||||
MinidumpProcessor(SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
MinidumpProcessor(SymbolSupplier* supplier,
|
||||
SourceLineResolverInterface* resolver);
|
||||
|
||||
// Initializes the MinidumpProcessor with the option of
|
||||
// enabling the exploitability framework to analyze dumps
|
||||
// for probable security relevance.
|
||||
MinidumpProcessor(SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver,
|
||||
MinidumpProcessor(SymbolSupplier* supplier,
|
||||
SourceLineResolverInterface* resolver,
|
||||
bool enable_exploitability);
|
||||
|
||||
// Initializes the MinidumpProcessor with source line resolver helper, and
|
||||
// the option of enabling the exploitability framework to analyze dumps
|
||||
// for probable security relevance.
|
||||
// Does not take ownership of resolver_helper, which must NOT be NULL.
|
||||
MinidumpProcessor(StackFrameSymbolizer* stack_frame_symbolizer,
|
||||
bool enable_exploitability);
|
||||
|
||||
~MinidumpProcessor();
|
||||
|
||||
// Processes the minidump file and fills process_state with the result.
|
||||
ProcessResult Process(const string &minidump_file,
|
||||
ProcessState *process_state);
|
||||
ProcessState* process_state);
|
||||
|
||||
// Processes the minidump structure and fills process_state with the
|
||||
// result.
|
||||
ProcessResult Process(Minidump *minidump,
|
||||
ProcessState *process_state);
|
||||
ProcessResult Process(Minidump* minidump,
|
||||
ProcessState* process_state);
|
||||
// Populates the cpu_* fields of the |info| parameter with textual
|
||||
// representations of the CPU type that the minidump in |dump| was
|
||||
// produced on. Returns false if this information is not available in
|
||||
// the minidump.
|
||||
static bool GetCPUInfo(Minidump *dump, SystemInfo *info);
|
||||
static bool GetCPUInfo(Minidump* dump, SystemInfo* info);
|
||||
|
||||
// Populates the os_* fields of the |info| parameter with textual
|
||||
// representations of the operating system that the minidump in |dump|
|
||||
// was produced on. Returns false if this information is not available in
|
||||
// the minidump.
|
||||
static bool GetOSInfo(Minidump *dump, SystemInfo *info);
|
||||
static bool GetOSInfo(Minidump* dump, SystemInfo* info);
|
||||
|
||||
// Returns a textual representation of the reason that a crash occurred,
|
||||
// if the minidump in dump was produced as a result of a crash. Returns
|
||||
|
@ -132,7 +140,7 @@ class MinidumpProcessor {
|
|||
// address when the crash was caused by problems such as illegal
|
||||
// instructions or divisions by zero, or a data address when the crash
|
||||
// was caused by a memory access violation.
|
||||
static string GetCrashReason(Minidump *dump, u_int64_t *address);
|
||||
static string GetCrashReason(Minidump* dump, u_int64_t* address);
|
||||
|
||||
// This function returns true if the passed-in error code is
|
||||
// something unrecoverable(i.e. retry should not happen). For
|
||||
|
@ -152,11 +160,12 @@ class MinidumpProcessor {
|
|||
// Returns a textual representation of an assertion included
|
||||
// in the minidump. Returns an empty string if this information
|
||||
// does not exist or cannot be determined.
|
||||
static string GetAssertion(Minidump *dump);
|
||||
static string GetAssertion(Minidump* dump);
|
||||
|
||||
private:
|
||||
SymbolSupplier *supplier_;
|
||||
SourceLineResolverInterface *resolver_;
|
||||
StackFrameSymbolizer* frame_symbolizer_;
|
||||
// Indicate whether resolver_helper_ is owned by this instance.
|
||||
bool own_frame_symbolizer_;
|
||||
|
||||
// This flag enables the exploitability scanner which attempts to
|
||||
// guess how likely it is that the crash represents an exploitable
|
||||
|
|
|
@ -70,7 +70,7 @@ struct StackFrameX86 : public StackFrame {
|
|||
CONTEXT_VALID_ALL = -1
|
||||
};
|
||||
|
||||
StackFrameX86()
|
||||
StackFrameX86()
|
||||
: context(),
|
||||
context_validity(CONTEXT_VALID_NONE),
|
||||
windows_frame_info(NULL),
|
||||
|
@ -220,7 +220,7 @@ struct StackFrameARM : public StackFrame {
|
|||
// Return the ContextValidity flag for register rN.
|
||||
static ContextValidity RegisterValidFlag(int n) {
|
||||
return ContextValidity(1 << n);
|
||||
}
|
||||
}
|
||||
|
||||
// Register state. This is only fully valid for the topmost frame in a
|
||||
// stack. In other frames, the values of nonvolatile registers may be
|
||||
|
|
|
@ -48,19 +48,16 @@
|
|||
#include "google_breakpad/common/breakpad_types.h"
|
||||
#include "google_breakpad/processor/code_modules.h"
|
||||
#include "google_breakpad/processor/memory_region.h"
|
||||
#include "google_breakpad/processor/stack_frame_symbolizer.h"
|
||||
|
||||
namespace google_breakpad {
|
||||
|
||||
class CallStack;
|
||||
class MinidumpContext;
|
||||
class SourceLineResolverInterface;
|
||||
struct StackFrame;
|
||||
class SymbolSupplier;
|
||||
struct SystemInfo;
|
||||
class StackFrameSymbolizer;
|
||||
|
||||
using std::set;
|
||||
|
||||
|
||||
class Stackwalker {
|
||||
public:
|
||||
virtual ~Stackwalker() {}
|
||||
|
@ -69,17 +66,17 @@ class Stackwalker {
|
|||
// GetCallerFrame. The frames are further processed to fill all available
|
||||
// data. Returns true if the stackwalk completed, or false if it was
|
||||
// interrupted by SymbolSupplier::GetSymbolFile().
|
||||
bool Walk(CallStack *stack);
|
||||
bool Walk(CallStack* stack);
|
||||
|
||||
// Returns a new concrete subclass suitable for the CPU that a stack was
|
||||
// generated on, according to the CPU type indicated by the context
|
||||
// argument. If no suitable concrete subclass exists, returns NULL.
|
||||
static Stackwalker* StackwalkerForCPU(const SystemInfo *system_info,
|
||||
MinidumpContext *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
static Stackwalker* StackwalkerForCPU(
|
||||
const SystemInfo* system_info,
|
||||
MinidumpContext* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* resolver_helper);
|
||||
|
||||
static void set_max_frames(u_int32_t max_frames) { max_frames_ = max_frames; }
|
||||
static u_int32_t max_frames() { return max_frames_; }
|
||||
|
@ -89,16 +86,15 @@ class Stackwalker {
|
|||
// memory identifies a MemoryRegion that provides the stack memory
|
||||
// for the stack to walk. modules, if non-NULL, is a CodeModules
|
||||
// object that is used to look up which code module each stack frame is
|
||||
// associated with. supplier is an optional caller-supplied SymbolSupplier
|
||||
// implementation. If supplier is NULL, source line info will not be
|
||||
// resolved. resolver is an instance of SourceLineResolverInterface
|
||||
// (see source_line_resolver_interface.h and basic_source_line_resolver.h).
|
||||
// If resolver is NULL, source line info will not be resolved.
|
||||
Stackwalker(const SystemInfo *system_info,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
// associated with. frame_symbolizer is a StackFrameSymbolizer object that
|
||||
// encapsulates the logic of how source line resolver interacts with symbol
|
||||
// supplier to symbolize stack frame and look up caller frame information
|
||||
// (see stack_frame_symbolizer.h).
|
||||
// frame_symbolizer MUST NOT be NULL (asserted).
|
||||
Stackwalker(const SystemInfo* system_info,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer);
|
||||
|
||||
// This can be used to filter out potential return addresses when
|
||||
// the stack walker resorts to stack scanning.
|
||||
|
@ -112,8 +108,8 @@ class Stackwalker {
|
|||
|
||||
template<typename InstructionType>
|
||||
bool ScanForReturnAddress(InstructionType location_start,
|
||||
InstructionType *location_found,
|
||||
InstructionType *ip_found) {
|
||||
InstructionType* location_found,
|
||||
InstructionType* ip_found) {
|
||||
const int kRASearchWords = 30;
|
||||
return ScanForReturnAddress(location_start, location_found, ip_found,
|
||||
kRASearchWords);
|
||||
|
@ -130,8 +126,8 @@ class Stackwalker {
|
|||
// location in memory.
|
||||
template<typename InstructionType>
|
||||
bool ScanForReturnAddress(InstructionType location_start,
|
||||
InstructionType *location_found,
|
||||
InstructionType *ip_found,
|
||||
InstructionType* location_found,
|
||||
InstructionType* ip_found,
|
||||
int searchwords) {
|
||||
for (InstructionType location = location_start;
|
||||
location <= location_start + searchwords * sizeof(InstructionType);
|
||||
|
@ -142,7 +138,6 @@ class Stackwalker {
|
|||
|
||||
if (modules_ && modules_->GetModuleForAddress(ip) &&
|
||||
InstructionAddressSeemsValid(ip)) {
|
||||
|
||||
*ip_found = ip;
|
||||
*location_found = location;
|
||||
return true;
|
||||
|
@ -154,19 +149,19 @@ class Stackwalker {
|
|||
|
||||
// Information about the system that produced the minidump. Subclasses
|
||||
// and the SymbolSupplier may find this information useful.
|
||||
const SystemInfo *system_info_;
|
||||
const SystemInfo* system_info_;
|
||||
|
||||
// The stack memory to walk. Subclasses will require this region to
|
||||
// get information from the stack.
|
||||
MemoryRegion *memory_;
|
||||
MemoryRegion* memory_;
|
||||
|
||||
// A list of modules, for populating each StackFrame's module information.
|
||||
// This field is optional and may be NULL.
|
||||
const CodeModules *modules_;
|
||||
const CodeModules* modules_;
|
||||
|
||||
protected:
|
||||
// The SourceLineResolver implementation.
|
||||
SourceLineResolverInterface *resolver_;
|
||||
// The StackFrameSymbolizer implementation.
|
||||
StackFrameSymbolizer* frame_symbolizer_;
|
||||
|
||||
private:
|
||||
// Obtains the context frame, the innermost called procedure in a stack
|
||||
|
@ -183,15 +178,7 @@ class Stackwalker {
|
|||
// the end of the stack has been reached). GetCallerFrame allocates a new
|
||||
// StackFrame (or StackFrame subclass), ownership of which is taken by
|
||||
// the caller.
|
||||
virtual StackFrame* GetCallerFrame(const CallStack *stack) = 0;
|
||||
|
||||
// The optional SymbolSupplier for resolving source line info.
|
||||
SymbolSupplier *supplier_;
|
||||
|
||||
// A list of modules that we haven't found symbols for. We track
|
||||
// this in order to avoid repeatedly looking them up again within
|
||||
// one minidump.
|
||||
set<string> no_symbol_modules_;
|
||||
virtual StackFrame* GetCallerFrame(const CallStack* stack) = 0;
|
||||
|
||||
// The maximum number of frames Stackwalker will walk through.
|
||||
// This defaults to 1024 to prevent infinite loops.
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "google_breakpad/processor/minidump.h"
|
||||
#include "google_breakpad/processor/process_state.h"
|
||||
#include "google_breakpad/processor/exploitability.h"
|
||||
#include "google_breakpad/processor/stack_frame_symbolizer.h"
|
||||
#include "processor/logging.h"
|
||||
#include "processor/scoped_ptr.h"
|
||||
#include "processor/stackwalker_x86.h"
|
||||
|
@ -44,18 +45,29 @@ namespace google_breakpad {
|
|||
|
||||
MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver)
|
||||
: supplier_(supplier), resolver_(resolver),
|
||||
: frame_symbolizer_(new StackFrameSymbolizer(supplier, resolver)),
|
||||
own_frame_symbolizer_(true),
|
||||
enable_exploitability_(false) {
|
||||
}
|
||||
|
||||
MinidumpProcessor::MinidumpProcessor(SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver,
|
||||
bool enable_exploitability)
|
||||
: supplier_(supplier), resolver_(resolver),
|
||||
: frame_symbolizer_(new StackFrameSymbolizer(supplier, resolver)),
|
||||
own_frame_symbolizer_(true),
|
||||
enable_exploitability_(enable_exploitability) {
|
||||
}
|
||||
|
||||
MinidumpProcessor::MinidumpProcessor(StackFrameSymbolizer *frame_symbolizer,
|
||||
bool enable_exploitability)
|
||||
: frame_symbolizer_(frame_symbolizer),
|
||||
own_frame_symbolizer_(false),
|
||||
enable_exploitability_(enable_exploitability) {
|
||||
assert(frame_symbolizer_);
|
||||
}
|
||||
|
||||
MinidumpProcessor::~MinidumpProcessor() {
|
||||
if (own_frame_symbolizer_) delete frame_symbolizer_;
|
||||
}
|
||||
|
||||
ProcessResult MinidumpProcessor::Process(
|
||||
|
@ -126,6 +138,10 @@ ProcessResult MinidumpProcessor::Process(
|
|||
bool interrupted = false;
|
||||
bool found_requesting_thread = false;
|
||||
unsigned int thread_count = threads->thread_count();
|
||||
|
||||
// Reset frame_symbolizer_ at the beginning of stackwalk for each minidump.
|
||||
frame_symbolizer_->Reset();
|
||||
|
||||
for (unsigned int thread_index = 0;
|
||||
thread_index < thread_count;
|
||||
++thread_index) {
|
||||
|
@ -208,8 +224,7 @@ ProcessResult MinidumpProcessor::Process(
|
|||
context,
|
||||
thread_memory,
|
||||
process_state->modules_,
|
||||
supplier_,
|
||||
resolver_));
|
||||
frame_symbolizer_));
|
||||
if (!stackwalker.get()) {
|
||||
BPLOG(ERROR) << "No stackwalker for " << thread_string;
|
||||
return PROCESS_ERROR_NO_STACKWALKER_FOR_THREAD;
|
||||
|
@ -1160,7 +1175,8 @@ string MinidumpProcessor::GetAssertion(Minidump *dump) {
|
|||
break;
|
||||
default: {
|
||||
char assertion_type[32];
|
||||
sprintf(assertion_type, "0x%08x", raw_assertion->type);
|
||||
snprintf(assertion_type, sizeof(assertion_type),
|
||||
"0x%08x", raw_assertion->type);
|
||||
assertion_string = "Unknown assertion type ";
|
||||
assertion_string += assertion_type;
|
||||
break;
|
||||
|
@ -1184,7 +1200,7 @@ string MinidumpProcessor::GetAssertion(Minidump *dump) {
|
|||
|
||||
if (raw_assertion->line != 0) {
|
||||
char assertion_line[32];
|
||||
sprintf(assertion_line, "%u", raw_assertion->line);
|
||||
snprintf(assertion_line, sizeof(assertion_line), "%u", raw_assertion->line);
|
||||
assertion_string.append(" at line ");
|
||||
assertion_string.append(assertion_line);
|
||||
}
|
||||
|
|
|
@ -41,9 +41,8 @@
|
|||
#include "google_breakpad/processor/code_module.h"
|
||||
#include "google_breakpad/processor/code_modules.h"
|
||||
#include "google_breakpad/processor/minidump.h"
|
||||
#include "google_breakpad/processor/source_line_resolver_interface.h"
|
||||
#include "google_breakpad/processor/stack_frame.h"
|
||||
#include "google_breakpad/processor/symbol_supplier.h"
|
||||
#include "google_breakpad/processor/stack_frame_symbolizer.h"
|
||||
#include "google_breakpad/processor/system_info.h"
|
||||
#include "processor/linked_ptr.h"
|
||||
#include "processor/logging.h"
|
||||
|
@ -58,20 +57,19 @@ namespace google_breakpad {
|
|||
|
||||
u_int32_t Stackwalker::max_frames_ = 1024;
|
||||
|
||||
Stackwalker::Stackwalker(const SystemInfo *system_info,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver)
|
||||
Stackwalker::Stackwalker(const SystemInfo* system_info,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer)
|
||||
: system_info_(system_info),
|
||||
memory_(memory),
|
||||
modules_(modules),
|
||||
resolver_(resolver),
|
||||
supplier_(supplier) {
|
||||
frame_symbolizer_(frame_symbolizer) {
|
||||
assert(frame_symbolizer_);
|
||||
}
|
||||
|
||||
|
||||
bool Stackwalker::Walk(CallStack *stack) {
|
||||
bool Stackwalker::Walk(CallStack* stack) {
|
||||
BPLOG_IF(ERROR, !stack) << "Stackwalker::Walk requires |stack|";
|
||||
assert(stack);
|
||||
stack->Clear();
|
||||
|
@ -88,42 +86,12 @@ bool Stackwalker::Walk(CallStack *stack) {
|
|||
// context frame (above) or a caller frame (below).
|
||||
|
||||
// Resolve the module information, if a module map was provided.
|
||||
if (modules_) {
|
||||
const CodeModule *module =
|
||||
modules_->GetModuleForAddress(frame->instruction);
|
||||
if (module) {
|
||||
frame->module = module;
|
||||
if (resolver_ &&
|
||||
!resolver_->HasModule(frame->module) &&
|
||||
no_symbol_modules_.find(
|
||||
module->code_file()) == no_symbol_modules_.end() &&
|
||||
supplier_) {
|
||||
string symbol_file;
|
||||
char *symbol_data = NULL;
|
||||
SymbolSupplier::SymbolResult symbol_result =
|
||||
supplier_->GetCStringSymbolData(module,
|
||||
system_info_,
|
||||
&symbol_file,
|
||||
&symbol_data);
|
||||
|
||||
switch (symbol_result) {
|
||||
case SymbolSupplier::FOUND:
|
||||
resolver_->LoadModuleUsingMemoryBuffer(frame->module,
|
||||
symbol_data);
|
||||
break;
|
||||
case SymbolSupplier::NOT_FOUND:
|
||||
no_symbol_modules_.insert(module->code_file());
|
||||
break; // nothing to do
|
||||
case SymbolSupplier::INTERRUPT:
|
||||
return false;
|
||||
}
|
||||
// Inform symbol supplier to free the unused data memory buffer.
|
||||
if (resolver_->ShouldDeleteMemoryBufferAfterLoadModule())
|
||||
supplier_->FreeSymbolData(module);
|
||||
}
|
||||
if (resolver_)
|
||||
resolver_->FillSourceLineInfo(frame.get());
|
||||
}
|
||||
StackFrameSymbolizer::SymbolizerResult symbolizer_result =
|
||||
frame_symbolizer_->FillSourceLineInfo(modules_, system_info_,
|
||||
frame.get());
|
||||
if (symbolizer_result == StackFrameSymbolizer::INTERRUPT) {
|
||||
BPLOG(INFO) << "Stack walk is interrupted.";
|
||||
return false;
|
||||
}
|
||||
|
||||
// Add the frame to the call stack. Relinquish the ownership claim
|
||||
|
@ -144,47 +112,42 @@ bool Stackwalker::Walk(CallStack *stack) {
|
|||
|
||||
// static
|
||||
Stackwalker* Stackwalker::StackwalkerForCPU(
|
||||
const SystemInfo *system_info,
|
||||
MinidumpContext *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver) {
|
||||
const SystemInfo* system_info,
|
||||
MinidumpContext* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer) {
|
||||
if (!context) {
|
||||
BPLOG(ERROR) << "Can't choose a stackwalker implementation without context";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Stackwalker *cpu_stackwalker = NULL;
|
||||
Stackwalker* cpu_stackwalker = NULL;
|
||||
|
||||
u_int32_t cpu = context->GetContextCPU();
|
||||
switch (cpu) {
|
||||
case MD_CONTEXT_X86:
|
||||
cpu_stackwalker = new StackwalkerX86(system_info,
|
||||
context->GetContextX86(),
|
||||
memory, modules, supplier,
|
||||
resolver);
|
||||
memory, modules, frame_symbolizer);
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_PPC:
|
||||
cpu_stackwalker = new StackwalkerPPC(system_info,
|
||||
context->GetContextPPC(),
|
||||
memory, modules, supplier,
|
||||
resolver);
|
||||
memory, modules, frame_symbolizer);
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_AMD64:
|
||||
cpu_stackwalker = new StackwalkerAMD64(system_info,
|
||||
context->GetContextAMD64(),
|
||||
memory, modules, supplier,
|
||||
resolver);
|
||||
memory, modules, frame_symbolizer);
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_SPARC:
|
||||
cpu_stackwalker = new StackwalkerSPARC(system_info,
|
||||
context->GetContextSPARC(),
|
||||
memory, modules, supplier,
|
||||
resolver);
|
||||
memory, modules, frame_symbolizer);
|
||||
break;
|
||||
|
||||
case MD_CONTEXT_ARM:
|
||||
|
@ -193,8 +156,8 @@ Stackwalker* Stackwalker::StackwalkerForCPU(
|
|||
fp_register = MD_CONTEXT_ARM_REG_IOS_FP;
|
||||
cpu_stackwalker = new StackwalkerARM(system_info,
|
||||
context->GetContextARM(),
|
||||
fp_register, memory, modules,
|
||||
supplier, resolver);
|
||||
fp_register, memory, modules,
|
||||
frame_symbolizer);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -205,38 +168,28 @@ Stackwalker* Stackwalker::StackwalkerForCPU(
|
|||
}
|
||||
|
||||
bool Stackwalker::InstructionAddressSeemsValid(u_int64_t address) {
|
||||
const CodeModule *module = modules_->GetModuleForAddress(address);
|
||||
if (!module) {
|
||||
StackFrame frame;
|
||||
frame.instruction = address;
|
||||
StackFrameSymbolizer::SymbolizerResult symbolizer_result =
|
||||
frame_symbolizer_->FillSourceLineInfo(modules_, system_info_, &frame);
|
||||
|
||||
if (!frame.module) {
|
||||
// not inside any loaded module
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!resolver_ || !supplier_) {
|
||||
// we don't have a resolver and or symbol supplier,
|
||||
// but we're inside a known module
|
||||
if (!frame_symbolizer_->HasImplementation()) {
|
||||
// No valid implementation to symbolize stack frame, but the address is
|
||||
// within a known module.
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!resolver_->HasModule(module)) {
|
||||
string symbol_file;
|
||||
char *symbol_data = NULL;
|
||||
SymbolSupplier::SymbolResult symbol_result =
|
||||
supplier_->GetCStringSymbolData(module, system_info_,
|
||||
&symbol_file, &symbol_data);
|
||||
|
||||
if (symbol_result != SymbolSupplier::FOUND ||
|
||||
!resolver_->LoadModuleUsingMemoryBuffer(module,
|
||||
symbol_data)) {
|
||||
// we don't have symbols, but we're inside a loaded module
|
||||
return true;
|
||||
}
|
||||
if (symbolizer_result != StackFrameSymbolizer::NO_ERROR) {
|
||||
// Some error occurred during symbolization, but the address is within a
|
||||
// known module
|
||||
return true;
|
||||
}
|
||||
|
||||
StackFrame frame;
|
||||
frame.module = module;
|
||||
frame.instruction = address;
|
||||
resolver_->FillSourceLineInfo(&frame);
|
||||
// we have symbols, so return true if inside a function
|
||||
return !frame.function_name.empty();
|
||||
}
|
||||
|
||||
|
|
|
@ -89,13 +89,12 @@ StackwalkerAMD64::cfi_register_map_[] = {
|
|||
StackFrameAMD64::CONTEXT_VALID_RIP, &MDRawContextAMD64::rip },
|
||||
};
|
||||
|
||||
StackwalkerAMD64::StackwalkerAMD64(const SystemInfo *system_info,
|
||||
const MDRawContextAMD64 *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver)
|
||||
: Stackwalker(system_info, memory, modules, supplier, resolver),
|
||||
StackwalkerAMD64::StackwalkerAMD64(const SystemInfo* system_info,
|
||||
const MDRawContextAMD64* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* resolver_helper)
|
||||
: Stackwalker(system_info, memory, modules, resolver_helper),
|
||||
context_(context),
|
||||
cfi_walker_(cfi_register_map_,
|
||||
(sizeof(cfi_register_map_) / sizeof(cfi_register_map_[0]))) {
|
||||
|
@ -108,7 +107,7 @@ StackFrame* StackwalkerAMD64::GetContextFrame() {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
StackFrameAMD64 *frame = new StackFrameAMD64();
|
||||
StackFrameAMD64* frame = new StackFrameAMD64();
|
||||
|
||||
// The instruction pointer is stored directly in a register, so pull it
|
||||
// straight out of the CPU context structure.
|
||||
|
@ -120,10 +119,10 @@ StackFrame* StackwalkerAMD64::GetContextFrame() {
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrameAMD64 *StackwalkerAMD64::GetCallerByCFIFrameInfo(
|
||||
const vector<StackFrame *> &frames,
|
||||
CFIFrameInfo *cfi_frame_info) {
|
||||
StackFrameAMD64 *last_frame = static_cast<StackFrameAMD64*>(frames.back());
|
||||
StackFrameAMD64* StackwalkerAMD64::GetCallerByCFIFrameInfo(
|
||||
const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo* cfi_frame_info) {
|
||||
StackFrameAMD64* last_frame = static_cast<StackFrameAMD64*>(frames.back());
|
||||
|
||||
scoped_ptr<StackFrameAMD64> frame(new StackFrameAMD64());
|
||||
if (!cfi_walker_
|
||||
|
@ -142,9 +141,9 @@ StackFrameAMD64 *StackwalkerAMD64::GetCallerByCFIFrameInfo(
|
|||
return frame.release();
|
||||
}
|
||||
|
||||
StackFrameAMD64 *StackwalkerAMD64::GetCallerByStackScan(
|
||||
const vector<StackFrame *> &frames) {
|
||||
StackFrameAMD64 *last_frame = static_cast<StackFrameAMD64 *>(frames.back());
|
||||
StackFrameAMD64* StackwalkerAMD64::GetCallerByStackScan(
|
||||
const vector<StackFrame*> &frames) {
|
||||
StackFrameAMD64* last_frame = static_cast<StackFrameAMD64*>(frames.back());
|
||||
u_int64_t last_rsp = last_frame->context.rsp;
|
||||
u_int64_t caller_rip_address, caller_rip;
|
||||
|
||||
|
@ -155,7 +154,7 @@ StackFrameAMD64 *StackwalkerAMD64::GetCallerByStackScan(
|
|||
|
||||
// Create a new stack frame (ownership will be transferred to the caller)
|
||||
// and fill it in.
|
||||
StackFrameAMD64 *frame = new StackFrameAMD64();
|
||||
StackFrameAMD64* frame = new StackFrameAMD64();
|
||||
|
||||
frame->trust = StackFrame::FRAME_TRUST_SCAN;
|
||||
frame->context = last_frame->context;
|
||||
|
@ -191,19 +190,19 @@ StackFrameAMD64 *StackwalkerAMD64::GetCallerByStackScan(
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrame* StackwalkerAMD64::GetCallerFrame(const CallStack *stack) {
|
||||
StackFrame* StackwalkerAMD64::GetCallerFrame(const CallStack* stack) {
|
||||
if (!memory_ || !stack) {
|
||||
BPLOG(ERROR) << "Can't get caller frame without memory or stack";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const vector<StackFrame *> &frames = *stack->frames();
|
||||
StackFrameAMD64 *last_frame = static_cast<StackFrameAMD64 *>(frames.back());
|
||||
const vector<StackFrame*> &frames = *stack->frames();
|
||||
StackFrameAMD64* last_frame = static_cast<StackFrameAMD64*>(frames.back());
|
||||
scoped_ptr<StackFrameAMD64> new_frame;
|
||||
|
||||
// If we have DWARF CFI information, use it.
|
||||
scoped_ptr<CFIFrameInfo> cfi_frame_info(
|
||||
resolver_ ? resolver_->FindCFIFrameInfo(last_frame) : NULL);
|
||||
frame_symbolizer_->FindCFIFrameInfo(last_frame));
|
||||
if (cfi_frame_info.get())
|
||||
new_frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#ifndef PROCESSOR_STACKWALKER_AMD64_H__
|
||||
#define PROCESSOR_STACKWALKER_AMD64_H__
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "google_breakpad/common/breakpad_types.h"
|
||||
#include "google_breakpad/common/minidump_format.h"
|
||||
|
@ -55,12 +56,11 @@ class StackwalkerAMD64 : public Stackwalker {
|
|||
// register state corresponding to the innermost called frame to be
|
||||
// included in the stack. The other arguments are passed directly through
|
||||
// to the base Stackwalker constructor.
|
||||
StackwalkerAMD64(const SystemInfo *system_info,
|
||||
const MDRawContextAMD64 *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
StackwalkerAMD64(const SystemInfo* system_info,
|
||||
const MDRawContextAMD64* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer);
|
||||
|
||||
private:
|
||||
// A STACK CFI-driven frame walker for the AMD64
|
||||
|
@ -69,21 +69,21 @@ class StackwalkerAMD64 : public Stackwalker {
|
|||
// Implementation of Stackwalker, using amd64 context (stack pointer in %rsp,
|
||||
// stack base in %rbp) and stack conventions (saved stack pointer at 0(%rbp))
|
||||
virtual StackFrame* GetContextFrame();
|
||||
virtual StackFrame* GetCallerFrame(const CallStack *stack);
|
||||
virtual StackFrame* GetCallerFrame(const CallStack* stack);
|
||||
|
||||
// Use cfi_frame_info (derived from STACK CFI records) to construct
|
||||
// the frame that called frames.back(). The caller takes ownership
|
||||
// of the returned frame. Return NULL on failure.
|
||||
StackFrameAMD64 *GetCallerByCFIFrameInfo(const vector<StackFrame *> &frames,
|
||||
CFIFrameInfo *cfi_frame_info);
|
||||
StackFrameAMD64* GetCallerByCFIFrameInfo(const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo* cfi_frame_info);
|
||||
|
||||
// Scan the stack for plausible return addresses. The caller takes ownership
|
||||
// of the returned frame. Return NULL on failure.
|
||||
StackFrameAMD64 *GetCallerByStackScan(const vector<StackFrame *> &frames);
|
||||
// of the returned frame. Return NULL on failure.
|
||||
StackFrameAMD64* GetCallerByStackScan(const vector<StackFrame*> &frames);
|
||||
|
||||
// Stores the CPU context corresponding to the innermost stack frame to
|
||||
// be returned by GetContextFrame.
|
||||
const MDRawContextAMD64 *context_;
|
||||
const MDRawContextAMD64* context_;
|
||||
|
||||
// Our register map, for cfi_walker_.
|
||||
static const CFIWalker::RegisterSet cfi_register_map_[];
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
|
||||
// stackwalker_amd64_unittest.cc: Unit tests for StackwalkerAMD64 class.
|
||||
|
||||
#include <string>
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "breakpad_googletest_includes.h"
|
||||
|
@ -48,6 +48,7 @@
|
|||
|
||||
using google_breakpad::BasicSourceLineResolver;
|
||||
using google_breakpad::CallStack;
|
||||
using google_breakpad::StackFrameSymbolizer;
|
||||
using google_breakpad::StackFrame;
|
||||
using google_breakpad::StackFrameAMD64;
|
||||
using google_breakpad::StackwalkerAMD64;
|
||||
|
@ -112,7 +113,7 @@ class StackwalkerAMD64Fixture {
|
|||
for (size_t i = 0; i < sizeof(*raw_context); i++)
|
||||
reinterpret_cast<u_int8_t *>(raw_context)[i] = (x += 17);
|
||||
}
|
||||
|
||||
|
||||
SystemInfo system_info;
|
||||
MDRawContextAMD64 raw_context;
|
||||
Section stack_section;
|
||||
|
@ -138,8 +139,9 @@ TEST_F(SanityCheck, NoResolver) {
|
|||
raw_context.rip = 0x40000000c0000200ULL;
|
||||
raw_context.rbp = 0x8000000080000000ULL;
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(NULL, NULL);
|
||||
StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
NULL, NULL);
|
||||
&frame_symbolizer);
|
||||
// This should succeed even without a resolver or supplier.
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
|
@ -158,8 +160,9 @@ TEST_F(GetContextFrame, Simple) {
|
|||
raw_context.rip = 0x40000000c0000200ULL;
|
||||
raw_context.rbp = 0x8000000080000000ULL;
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_GE(1U, frames->size());
|
||||
|
@ -207,13 +210,14 @@ TEST_F(GetCallerFrame, ScanWithoutSymbols) {
|
|||
.Append(32, 0); // end of stack
|
||||
|
||||
RegionFromSection();
|
||||
|
||||
|
||||
raw_context.rip = 0x40000000c0000200ULL;
|
||||
raw_context.rbp = frame1_rbp.Value();
|
||||
raw_context.rsp = stack_section.start().Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(3U, frames->size());
|
||||
|
@ -267,7 +271,7 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) {
|
|||
.Append(32, 0) // end of stack
|
||||
.Mark(&frame1_rbp);
|
||||
RegionFromSection();
|
||||
|
||||
|
||||
raw_context.rip = 0x40000000c0000200ULL;
|
||||
raw_context.rbp = frame1_rbp.Value();
|
||||
raw_context.rsp = stack_section.start().Value();
|
||||
|
@ -279,8 +283,9 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) {
|
|||
// The calling frame's function.
|
||||
"FUNC 100 400 10 echidna\n");
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -343,8 +348,9 @@ TEST_F(GetCallerFrame, CallerPushedRBP) {
|
|||
// The calling frame's function.
|
||||
"FUNC 100 400 10 yeti\n");
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -418,8 +424,9 @@ struct CFIFixture: public StackwalkerAMD64Fixture {
|
|||
RegionFromSection();
|
||||
raw_context.rsp = stack_section.start().Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerAMD64 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
|
|
@ -33,6 +33,8 @@
|
|||
//
|
||||
// Author: Mark Mentovai, Ted Mielczarek, Jim Blandy
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "google_breakpad/processor/call_stack.h"
|
||||
#include "google_breakpad/processor/memory_region.h"
|
||||
#include "google_breakpad/processor/source_line_resolver_interface.h"
|
||||
|
@ -45,14 +47,13 @@
|
|||
namespace google_breakpad {
|
||||
|
||||
|
||||
StackwalkerARM::StackwalkerARM(const SystemInfo *system_info,
|
||||
const MDRawContextARM *context,
|
||||
StackwalkerARM::StackwalkerARM(const SystemInfo* system_info,
|
||||
const MDRawContextARM* context,
|
||||
int fp_register,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver)
|
||||
: Stackwalker(system_info, memory, modules, supplier, resolver),
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* resolver_helper)
|
||||
: Stackwalker(system_info, memory, modules, resolver_helper),
|
||||
context_(context), fp_register_(fp_register),
|
||||
context_frame_validity_(StackFrameARM::CONTEXT_VALID_ALL) { }
|
||||
|
||||
|
@ -63,7 +64,7 @@ StackFrame* StackwalkerARM::GetContextFrame() {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
StackFrameARM *frame = new StackFrameARM();
|
||||
StackFrameARM* frame = new StackFrameARM();
|
||||
|
||||
// The instruction pointer is stored directly in a register (r15), so pull it
|
||||
// straight out of the CPU context structure.
|
||||
|
@ -75,12 +76,12 @@ StackFrame* StackwalkerARM::GetContextFrame() {
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrameARM *StackwalkerARM::GetCallerByCFIFrameInfo(
|
||||
const vector<StackFrame *> &frames,
|
||||
CFIFrameInfo *cfi_frame_info) {
|
||||
StackFrameARM *last_frame = static_cast<StackFrameARM *>(frames.back());
|
||||
StackFrameARM* StackwalkerARM::GetCallerByCFIFrameInfo(
|
||||
const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo* cfi_frame_info) {
|
||||
StackFrameARM* last_frame = static_cast<StackFrameARM*>(frames.back());
|
||||
|
||||
static const char *register_names[] = {
|
||||
static const char* register_names[] = {
|
||||
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
||||
"r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc",
|
||||
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
|
||||
|
@ -121,7 +122,7 @@ StackFrameARM *StackwalkerARM::GetCallerByCFIFrameInfo(
|
|||
}
|
||||
}
|
||||
// If the CFI doesn't recover the PC explicitly, then use .ra.
|
||||
if (! (frame->context_validity & StackFrameARM::CONTEXT_VALID_PC)) {
|
||||
if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_PC)) {
|
||||
CFIFrameInfo::RegisterValueMap<u_int32_t>::iterator entry =
|
||||
caller_registers.find(".ra");
|
||||
if (entry != caller_registers.end()) {
|
||||
|
@ -140,7 +141,7 @@ StackFrameARM *StackwalkerARM::GetCallerByCFIFrameInfo(
|
|||
}
|
||||
}
|
||||
// If the CFI doesn't recover the SP explicitly, then use .cfa.
|
||||
if (! (frame->context_validity & StackFrameARM::CONTEXT_VALID_SP)) {
|
||||
if (!(frame->context_validity & StackFrameARM::CONTEXT_VALID_SP)) {
|
||||
CFIFrameInfo::RegisterValueMap<u_int32_t>::iterator entry =
|
||||
caller_registers.find(".cfa");
|
||||
if (entry != caller_registers.end()) {
|
||||
|
@ -159,9 +160,9 @@ StackFrameARM *StackwalkerARM::GetCallerByCFIFrameInfo(
|
|||
return frame.release();
|
||||
}
|
||||
|
||||
StackFrameARM *StackwalkerARM::GetCallerByStackScan(
|
||||
const vector<StackFrame *> &frames) {
|
||||
StackFrameARM *last_frame = static_cast<StackFrameARM *>(frames.back());
|
||||
StackFrameARM* StackwalkerARM::GetCallerByStackScan(
|
||||
const vector<StackFrame*> &frames) {
|
||||
StackFrameARM* last_frame = static_cast<StackFrameARM*>(frames.back());
|
||||
u_int32_t last_sp = last_frame->context.iregs[MD_CONTEXT_ARM_REG_SP];
|
||||
u_int32_t caller_sp, caller_pc;
|
||||
|
||||
|
@ -177,7 +178,7 @@ StackFrameARM *StackwalkerARM::GetCallerByStackScan(
|
|||
|
||||
// Create a new stack frame (ownership will be transferred to the caller)
|
||||
// and fill it in.
|
||||
StackFrameARM *frame = new StackFrameARM();
|
||||
StackFrameARM* frame = new StackFrameARM();
|
||||
|
||||
frame->trust = StackFrame::FRAME_TRUST_SCAN;
|
||||
frame->context = last_frame->context;
|
||||
|
@ -189,9 +190,9 @@ StackFrameARM *StackwalkerARM::GetCallerByStackScan(
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrameARM *StackwalkerARM::GetCallerByFramePointer(
|
||||
const vector<StackFrame *> &frames) {
|
||||
StackFrameARM *last_frame = static_cast<StackFrameARM *>(frames.back());
|
||||
StackFrameARM* StackwalkerARM::GetCallerByFramePointer(
|
||||
const vector<StackFrame*> &frames) {
|
||||
StackFrameARM* last_frame = static_cast<StackFrameARM*>(frames.back());
|
||||
|
||||
if (!(last_frame->context_validity &
|
||||
StackFrameARM::RegisterValidFlag(fp_register_))) {
|
||||
|
@ -219,7 +220,7 @@ StackFrameARM *StackwalkerARM::GetCallerByFramePointer(
|
|||
|
||||
// Create a new stack frame (ownership will be transferred to the caller)
|
||||
// and fill it in.
|
||||
StackFrameARM *frame = new StackFrameARM();
|
||||
StackFrameARM* frame = new StackFrameARM();
|
||||
|
||||
frame->trust = StackFrame::FRAME_TRUST_FP;
|
||||
frame->context = last_frame->context;
|
||||
|
@ -235,19 +236,19 @@ StackFrameARM *StackwalkerARM::GetCallerByFramePointer(
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrame* StackwalkerARM::GetCallerFrame(const CallStack *stack) {
|
||||
StackFrame* StackwalkerARM::GetCallerFrame(const CallStack* stack) {
|
||||
if (!memory_ || !stack) {
|
||||
BPLOG(ERROR) << "Can't get caller frame without memory or stack";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const vector<StackFrame *> &frames = *stack->frames();
|
||||
StackFrameARM *last_frame = static_cast<StackFrameARM *>(frames.back());
|
||||
const vector<StackFrame*> &frames = *stack->frames();
|
||||
StackFrameARM* last_frame = static_cast<StackFrameARM*>(frames.back());
|
||||
scoped_ptr<StackFrameARM> frame;
|
||||
|
||||
// See if there is DWARF call frame information covering this address.
|
||||
scoped_ptr<CFIFrameInfo> cfi_frame_info(
|
||||
resolver_ ? resolver_->FindCFIFrameInfo(last_frame) : NULL);
|
||||
frame_symbolizer_->FindCFIFrameInfo(last_frame));
|
||||
if (cfi_frame_info.get())
|
||||
frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
|
||||
|
||||
|
|
|
@ -54,13 +54,12 @@ class StackwalkerARM : public Stackwalker {
|
|||
// register state corresponding to the innermost called frame to be
|
||||
// included in the stack. The other arguments are passed directly through
|
||||
// to the base Stackwalker constructor.
|
||||
StackwalkerARM(const SystemInfo *system_info,
|
||||
const MDRawContextARM *context,
|
||||
StackwalkerARM(const SystemInfo* system_info,
|
||||
const MDRawContextARM* context,
|
||||
int fp_register,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer);
|
||||
|
||||
// Change the context validity mask of the frame returned by
|
||||
// GetContextFrame to VALID. This is only for use by unit tests; the
|
||||
|
@ -70,25 +69,25 @@ class StackwalkerARM : public Stackwalker {
|
|||
private:
|
||||
// Implementation of Stackwalker, using arm context and stack conventions.
|
||||
virtual StackFrame* GetContextFrame();
|
||||
virtual StackFrame* GetCallerFrame(const CallStack *stack);
|
||||
virtual StackFrame* GetCallerFrame(const CallStack* stack);
|
||||
|
||||
// Use cfi_frame_info (derived from STACK CFI records) to construct
|
||||
// the frame that called frames.back(). The caller takes ownership
|
||||
// of the returned frame. Return NULL on failure.
|
||||
StackFrameARM *GetCallerByCFIFrameInfo(const vector<StackFrame *> &frames,
|
||||
CFIFrameInfo *cfi_frame_info);
|
||||
StackFrameARM* GetCallerByCFIFrameInfo(const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo* cfi_frame_info);
|
||||
|
||||
// Use the frame pointer. The caller takes ownership of the returned frame.
|
||||
// Return NULL on failure.
|
||||
StackFrameARM *GetCallerByFramePointer(const vector<StackFrame *> &frames);
|
||||
StackFrameARM* GetCallerByFramePointer(const vector<StackFrame*> &frames);
|
||||
|
||||
// Scan the stack for plausible return addresses. The caller takes ownership
|
||||
// of the returned frame. Return NULL on failure.
|
||||
StackFrameARM *GetCallerByStackScan(const vector<StackFrame *> &frames);
|
||||
StackFrameARM* GetCallerByStackScan(const vector<StackFrame*> &frames);
|
||||
|
||||
// Stores the CPU context corresponding to the youngest stack frame, to
|
||||
// be returned by GetContextFrame.
|
||||
const MDRawContextARM *context_;
|
||||
const MDRawContextARM* context_;
|
||||
|
||||
// The register to use a as frame pointer. The value is -1 if frame pointer
|
||||
// cannot be used.
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
|
||||
// stackwalker_arm_unittest.cc: Unit tests for StackwalkerARM class.
|
||||
|
||||
#include <string>
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "breakpad_googletest_includes.h"
|
||||
|
@ -49,6 +49,7 @@
|
|||
|
||||
using google_breakpad::BasicSourceLineResolver;
|
||||
using google_breakpad::CallStack;
|
||||
using google_breakpad::StackFrameSymbolizer;
|
||||
using google_breakpad::StackFrame;
|
||||
using google_breakpad::StackFrameARM;
|
||||
using google_breakpad::StackwalkerARM;
|
||||
|
@ -134,8 +135,9 @@ TEST_F(SanityCheck, NoResolver) {
|
|||
// Since we have no call frame information, and all unwinding
|
||||
// requires call frame information, the stack walk will end after
|
||||
// the first frame.
|
||||
StackFrameSymbolizer frame_symbolizer(NULL, NULL);
|
||||
StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules,
|
||||
NULL, NULL);
|
||||
&frame_symbolizer);
|
||||
// This should succeed even without a resolver or supplier.
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
|
@ -152,8 +154,9 @@ TEST_F(GetContextFrame, Simple) {
|
|||
// Since we have no call frame information, and all unwinding
|
||||
// requires call frame information, the stack walk will end after
|
||||
// the first frame.
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(1U, frames->size());
|
||||
|
@ -199,8 +202,9 @@ TEST_F(GetCallerFrame, ScanWithoutSymbols) {
|
|||
raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40005510;
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(3U, frames->size());
|
||||
|
@ -262,8 +266,9 @@ TEST_F(GetCallerFrame, ScanWithFunctionSymbols) {
|
|||
// The calling frame's function.
|
||||
"FUNC 100 400 10 marsupial\n");
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -372,8 +377,9 @@ struct CFIFixture: public StackwalkerARMFixture {
|
|||
RegionFromSection();
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region,
|
||||
&modules, &supplier, &resolver);
|
||||
&modules, &frame_symbolizer);
|
||||
walker.SetContextFrameValidity(context_frame_validity);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
|
@ -564,8 +570,9 @@ TEST_F(CFI, RejectBackwards) {
|
|||
raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40006000;
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = 0x80000000;
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_LR] = 0x40005510;
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(1U, frames->size());
|
||||
|
@ -575,8 +582,9 @@ TEST_F(CFI, RejectBackwards) {
|
|||
TEST_F(CFI, RejectBadExpressions) {
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_PC] = 0x40007000;
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = 0x80000000;
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, -1, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(1U, frames->size());
|
||||
|
@ -631,8 +639,9 @@ TEST_F(GetFramesByFramePointer, OnlyFramePointer) {
|
|||
raw_context.iregs[MD_CONTEXT_ARM_REG_IOS_FP] = frame1_fp.Value();
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, MD_CONTEXT_ARM_REG_IOS_FP,
|
||||
&stack_region, &modules, &supplier, &resolver);
|
||||
&stack_region, &modules, &frame_symbolizer);
|
||||
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
|
@ -720,8 +729,9 @@ TEST_F(GetFramesByFramePointer, FramePointerAndCFI) {
|
|||
raw_context.iregs[MD_CONTEXT_ARM_REG_IOS_FP] = frame1_fp.Value();
|
||||
raw_context.iregs[MD_CONTEXT_ARM_REG_SP] = stack_section.start().Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerARM walker(&system_info, &raw_context, MD_CONTEXT_ARM_REG_IOS_FP,
|
||||
&stack_region, &modules, &supplier, &resolver);
|
||||
&stack_region, &modules, &frame_symbolizer);
|
||||
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
|
|
|
@ -43,13 +43,12 @@
|
|||
namespace google_breakpad {
|
||||
|
||||
|
||||
StackwalkerPPC::StackwalkerPPC(const SystemInfo *system_info,
|
||||
const MDRawContextPPC *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver)
|
||||
: Stackwalker(system_info, memory, modules, supplier, resolver),
|
||||
StackwalkerPPC::StackwalkerPPC(const SystemInfo* system_info,
|
||||
const MDRawContextPPC* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* resolver_helper)
|
||||
: Stackwalker(system_info, memory, modules, resolver_helper),
|
||||
context_(context) {
|
||||
if (memory_->GetBase() + memory_->GetSize() - 1 > 0xffffffff) {
|
||||
// This implementation only covers 32-bit ppc CPUs. The limits of the
|
||||
|
@ -69,7 +68,7 @@ StackFrame* StackwalkerPPC::GetContextFrame() {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
StackFramePPC *frame = new StackFramePPC();
|
||||
StackFramePPC* frame = new StackFramePPC();
|
||||
|
||||
// The instruction pointer is stored directly in a register, so pull it
|
||||
// straight out of the CPU context structure.
|
||||
|
@ -82,7 +81,7 @@ StackFrame* StackwalkerPPC::GetContextFrame() {
|
|||
}
|
||||
|
||||
|
||||
StackFrame* StackwalkerPPC::GetCallerFrame(const CallStack *stack) {
|
||||
StackFrame* StackwalkerPPC::GetCallerFrame(const CallStack* stack) {
|
||||
if (!memory_ || !stack) {
|
||||
BPLOG(ERROR) << "Can't get caller frame without memory or stack";
|
||||
return NULL;
|
||||
|
@ -97,7 +96,7 @@ StackFrame* StackwalkerPPC::GetCallerFrame(const CallStack *stack) {
|
|||
// frame pointer, and what is typically thought of as the frame pointer on
|
||||
// an x86 is usually referred to as the stack pointer on a ppc.
|
||||
|
||||
StackFramePPC *last_frame = static_cast<StackFramePPC*>(
|
||||
StackFramePPC* last_frame = static_cast<StackFramePPC*>(
|
||||
stack->frames()->back());
|
||||
|
||||
// A caller frame must reside higher in memory than its callee frames.
|
||||
|
@ -121,7 +120,7 @@ StackFrame* StackwalkerPPC::GetCallerFrame(const CallStack *stack) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
StackFramePPC *frame = new StackFramePPC();
|
||||
StackFramePPC* frame = new StackFramePPC();
|
||||
|
||||
frame->context = last_frame->context;
|
||||
frame->context.srr0 = instruction;
|
||||
|
|
|
@ -53,23 +53,22 @@ class StackwalkerPPC : public Stackwalker {
|
|||
// register state corresponding to the innermost called frame to be
|
||||
// included in the stack. The other arguments are passed directly through
|
||||
// to the base Stackwalker constructor.
|
||||
StackwalkerPPC(const SystemInfo *system_info,
|
||||
const MDRawContextPPC *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
StackwalkerPPC(const SystemInfo* system_info,
|
||||
const MDRawContextPPC* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer);
|
||||
|
||||
private:
|
||||
// Implementation of Stackwalker, using ppc context (stack pointer in %r1,
|
||||
// saved program counter in %srr0) and stack conventions (saved stack
|
||||
// pointer at 0(%r1), return address at 8(0(%r1)).
|
||||
virtual StackFrame* GetContextFrame();
|
||||
virtual StackFrame* GetCallerFrame(const CallStack *stack);
|
||||
virtual StackFrame* GetCallerFrame(const CallStack* stack);
|
||||
|
||||
// Stores the CPU context corresponding to the innermost stack frame to
|
||||
// be returned by GetContextFrame.
|
||||
const MDRawContextPPC *context_;
|
||||
const MDRawContextPPC* context_;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -43,13 +43,12 @@
|
|||
namespace google_breakpad {
|
||||
|
||||
|
||||
StackwalkerSPARC::StackwalkerSPARC(const SystemInfo *system_info,
|
||||
const MDRawContextSPARC *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver)
|
||||
: Stackwalker(system_info, memory, modules, supplier, resolver),
|
||||
StackwalkerSPARC::StackwalkerSPARC(const SystemInfo* system_info,
|
||||
const MDRawContextSPARC* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* resolver_helper)
|
||||
: Stackwalker(system_info, memory, modules, resolver_helper),
|
||||
context_(context) {
|
||||
}
|
||||
|
||||
|
@ -60,7 +59,7 @@ StackFrame* StackwalkerSPARC::GetContextFrame() {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
StackFrameSPARC *frame = new StackFrameSPARC();
|
||||
StackFrameSPARC* frame = new StackFrameSPARC();
|
||||
|
||||
// The instruction pointer is stored directly in a register, so pull it
|
||||
// straight out of the CPU context structure.
|
||||
|
@ -73,13 +72,13 @@ StackFrame* StackwalkerSPARC::GetContextFrame() {
|
|||
}
|
||||
|
||||
|
||||
StackFrame* StackwalkerSPARC::GetCallerFrame(const CallStack *stack) {
|
||||
StackFrame* StackwalkerSPARC::GetCallerFrame(const CallStack* stack) {
|
||||
if (!memory_ || !stack) {
|
||||
BPLOG(ERROR) << "Can't get caller frame without memory or stack";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
StackFrameSPARC *last_frame = static_cast<StackFrameSPARC*>(
|
||||
StackFrameSPARC* last_frame = static_cast<StackFrameSPARC*>(
|
||||
stack->frames()->back());
|
||||
|
||||
// new: caller
|
||||
|
@ -87,7 +86,7 @@ StackFrame* StackwalkerSPARC::GetCallerFrame(const CallStack *stack) {
|
|||
// %fp, %i6 and g_r[30] is the same, see minidump_format.h
|
||||
// %sp, %o6 and g_r[14] is the same, see minidump_format.h
|
||||
// %sp_new = %fp_old
|
||||
// %fp_new = *(%fp_old + 32 + 32 - 8), where the callee's %i6
|
||||
// %fp_new = *(%fp_old + 32 + 32 - 8), where the callee's %i6
|
||||
// %pc_new = *(%fp_old + 32 + 32 - 4) + 8
|
||||
// which is callee's %i7 plus 8
|
||||
|
||||
|
@ -111,14 +110,14 @@ StackFrame* StackwalkerSPARC::GetCallerFrame(const CallStack *stack) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
StackFrameSPARC *frame = new StackFrameSPARC();
|
||||
StackFrameSPARC* frame = new StackFrameSPARC();
|
||||
|
||||
frame->context = last_frame->context;
|
||||
frame->context.g_r[14] = stack_pointer;
|
||||
frame->context.g_r[30] = stack_base;
|
||||
|
||||
|
||||
// frame->context.pc is the return address, which is 2 instruction
|
||||
// past the branch that caused us to arrive at the callee, which are
|
||||
// past the branch that caused us to arrive at the callee, which are
|
||||
// a CALL instruction then a NOP instruction.
|
||||
// frame_ppc->instruction to 8 less than that. Since all sparc
|
||||
// instructions are 4 bytes wide, this is the address of the branch
|
||||
|
@ -131,7 +130,7 @@ StackFrame* StackwalkerSPARC::GetCallerFrame(const CallStack *stack) {
|
|||
StackFrameSPARC::CONTEXT_VALID_SP |
|
||||
StackFrameSPARC::CONTEXT_VALID_FP;
|
||||
frame->trust = StackFrame::FRAME_TRUST_FP;
|
||||
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
|
|
|
@ -53,22 +53,21 @@ class StackwalkerSPARC : public Stackwalker {
|
|||
// register state corresponding to the innermost called frame to be
|
||||
// included in the stack. The other arguments are passed directly through
|
||||
// to the base Stackwalker constructor.
|
||||
StackwalkerSPARC(const SystemInfo *system_info,
|
||||
const MDRawContextSPARC *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
StackwalkerSPARC(const SystemInfo* system_info,
|
||||
const MDRawContextSPARC* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer);
|
||||
|
||||
private:
|
||||
// Implementation of Stackwalker, using sparc context (%fp, %sp, %pc) and
|
||||
// stack conventions
|
||||
virtual StackFrame* GetContextFrame();
|
||||
virtual StackFrame* GetCallerFrame(const CallStack *stack);
|
||||
virtual StackFrame* GetCallerFrame(const CallStack* stack);
|
||||
|
||||
// Stores the CPU context corresponding to the innermost stack frame to
|
||||
// be returned by GetContextFrame.
|
||||
const MDRawContextSPARC *context_;
|
||||
const MDRawContextSPARC* context_;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -33,8 +33,7 @@
|
|||
//
|
||||
// Author: Mark Mentovai
|
||||
|
||||
|
||||
#include "processor/postfix_evaluator-inl.h"
|
||||
#include <string>
|
||||
|
||||
#include "google_breakpad/processor/call_stack.h"
|
||||
#include "google_breakpad/processor/code_modules.h"
|
||||
|
@ -42,6 +41,7 @@
|
|||
#include "google_breakpad/processor/source_line_resolver_interface.h"
|
||||
#include "google_breakpad/processor/stack_frame_cpu.h"
|
||||
#include "processor/logging.h"
|
||||
#include "processor/postfix_evaluator-inl.h"
|
||||
#include "processor/scoped_ptr.h"
|
||||
#include "processor/stackwalker_x86.h"
|
||||
#include "processor/windows_frame_info.h"
|
||||
|
@ -77,13 +77,12 @@ StackwalkerX86::cfi_register_map_[] = {
|
|||
StackFrameX86::CONTEXT_VALID_EDI, &MDRawContextX86::edi },
|
||||
};
|
||||
|
||||
StackwalkerX86::StackwalkerX86(const SystemInfo *system_info,
|
||||
const MDRawContextX86 *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver)
|
||||
: Stackwalker(system_info, memory, modules, supplier, resolver),
|
||||
StackwalkerX86::StackwalkerX86(const SystemInfo* system_info,
|
||||
const MDRawContextX86* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* resolver_helper)
|
||||
: Stackwalker(system_info, memory, modules, resolver_helper),
|
||||
context_(context),
|
||||
cfi_walker_(cfi_register_map_,
|
||||
(sizeof(cfi_register_map_) / sizeof(cfi_register_map_[0]))) {
|
||||
|
@ -106,13 +105,13 @@ StackFrameX86::~StackFrameX86() {
|
|||
cfi_frame_info = NULL;
|
||||
}
|
||||
|
||||
StackFrame *StackwalkerX86::GetContextFrame() {
|
||||
StackFrame* StackwalkerX86::GetContextFrame() {
|
||||
if (!context_ || !memory_) {
|
||||
BPLOG(ERROR) << "Can't get context frame without context or memory";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
StackFrameX86 *frame = new StackFrameX86();
|
||||
StackFrameX86* frame = new StackFrameX86();
|
||||
|
||||
// The instruction pointer is stored directly in a register, so pull it
|
||||
// straight out of the CPU context structure.
|
||||
|
@ -124,12 +123,12 @@ StackFrame *StackwalkerX86::GetContextFrame() {
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrameX86 *StackwalkerX86::GetCallerByWindowsFrameInfo(
|
||||
const vector<StackFrame *> &frames,
|
||||
WindowsFrameInfo *last_frame_info) {
|
||||
StackFrameX86* StackwalkerX86::GetCallerByWindowsFrameInfo(
|
||||
const vector<StackFrame*> &frames,
|
||||
WindowsFrameInfo* last_frame_info) {
|
||||
StackFrame::FrameTrust trust = StackFrame::FRAME_TRUST_NONE;
|
||||
|
||||
StackFrameX86 *last_frame = static_cast<StackFrameX86 *>(frames.back());
|
||||
StackFrameX86* last_frame = static_cast<StackFrameX86*>(frames.back());
|
||||
|
||||
// Save the stack walking info we found, in case we need it later to
|
||||
// find the callee of the frame we're constructing now.
|
||||
|
@ -176,9 +175,9 @@ StackFrameX86 *StackwalkerX86::GetCallerByWindowsFrameInfo(
|
|||
u_int32_t last_frame_callee_parameter_size = 0;
|
||||
int frames_already_walked = frames.size();
|
||||
if (frames_already_walked >= 2) {
|
||||
const StackFrameX86 *last_frame_callee
|
||||
= static_cast<StackFrameX86 *>(frames[frames_already_walked - 2]);
|
||||
WindowsFrameInfo *last_frame_callee_info
|
||||
const StackFrameX86* last_frame_callee
|
||||
= static_cast<StackFrameX86*>(frames[frames_already_walked - 2]);
|
||||
WindowsFrameInfo* last_frame_callee_info
|
||||
= last_frame_callee->windows_frame_info;
|
||||
if (last_frame_callee_info &&
|
||||
(last_frame_callee_info->valid
|
||||
|
@ -210,7 +209,7 @@ StackFrameX86 *StackwalkerX86::GetCallerByWindowsFrameInfo(
|
|||
last_frame_info->saved_register_size;
|
||||
|
||||
u_int32_t raSearchStartOld = raSearchStart;
|
||||
u_int32_t found = 0; // dummy value
|
||||
u_int32_t found = 0; // dummy value
|
||||
// Scan up to three words above the calculated search value, in case
|
||||
// the stack was aligned to a quadword boundary.
|
||||
if (ScanForReturnAddress(raSearchStart, &raSearchStart, &found, 3) &&
|
||||
|
@ -419,7 +418,7 @@ StackFrameX86 *StackwalkerX86::GetCallerByWindowsFrameInfo(
|
|||
|
||||
// Create a new stack frame (ownership will be transferred to the caller)
|
||||
// and fill it in.
|
||||
StackFrameX86 *frame = new StackFrameX86();
|
||||
StackFrameX86* frame = new StackFrameX86();
|
||||
|
||||
frame->trust = trust;
|
||||
frame->context = last_frame->context;
|
||||
|
@ -448,10 +447,10 @@ StackFrameX86 *StackwalkerX86::GetCallerByWindowsFrameInfo(
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrameX86 *StackwalkerX86::GetCallerByCFIFrameInfo(
|
||||
StackFrameX86* StackwalkerX86::GetCallerByCFIFrameInfo(
|
||||
const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo *cfi_frame_info) {
|
||||
StackFrameX86 *last_frame = static_cast<StackFrameX86*>(frames.back());
|
||||
CFIFrameInfo* cfi_frame_info) {
|
||||
StackFrameX86* last_frame = static_cast<StackFrameX86*>(frames.back());
|
||||
last_frame->cfi_frame_info = cfi_frame_info;
|
||||
|
||||
scoped_ptr<StackFrameX86> frame(new StackFrameX86());
|
||||
|
@ -460,7 +459,7 @@ StackFrameX86 *StackwalkerX86::GetCallerByCFIFrameInfo(
|
|||
last_frame->context, last_frame->context_validity,
|
||||
&frame->context, &frame->context_validity))
|
||||
return NULL;
|
||||
|
||||
|
||||
// Make sure we recovered all the essentials.
|
||||
static const int essentials = (StackFrameX86::CONTEXT_VALID_EIP
|
||||
| StackFrameX86::CONTEXT_VALID_ESP
|
||||
|
@ -473,10 +472,10 @@ StackFrameX86 *StackwalkerX86::GetCallerByCFIFrameInfo(
|
|||
return frame.release();
|
||||
}
|
||||
|
||||
StackFrameX86 *StackwalkerX86::GetCallerByEBPAtBase(
|
||||
const vector<StackFrame *> &frames) {
|
||||
StackFrameX86* StackwalkerX86::GetCallerByEBPAtBase(
|
||||
const vector<StackFrame*> &frames) {
|
||||
StackFrame::FrameTrust trust;
|
||||
StackFrameX86 *last_frame = static_cast<StackFrameX86 *>(frames.back());
|
||||
StackFrameX86* last_frame = static_cast<StackFrameX86*>(frames.back());
|
||||
u_int32_t last_esp = last_frame->context.esp;
|
||||
u_int32_t last_ebp = last_frame->context.ebp;
|
||||
|
||||
|
@ -532,7 +531,7 @@ StackFrameX86 *StackwalkerX86::GetCallerByEBPAtBase(
|
|||
|
||||
// Create a new stack frame (ownership will be transferred to the caller)
|
||||
// and fill it in.
|
||||
StackFrameX86 *frame = new StackFrameX86();
|
||||
StackFrameX86* frame = new StackFrameX86();
|
||||
|
||||
frame->trust = trust;
|
||||
frame->context = last_frame->context;
|
||||
|
@ -546,26 +545,26 @@ StackFrameX86 *StackwalkerX86::GetCallerByEBPAtBase(
|
|||
return frame;
|
||||
}
|
||||
|
||||
StackFrame *StackwalkerX86::GetCallerFrame(const CallStack *stack) {
|
||||
StackFrame* StackwalkerX86::GetCallerFrame(const CallStack* stack) {
|
||||
if (!memory_ || !stack) {
|
||||
BPLOG(ERROR) << "Can't get caller frame without memory or stack";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const vector<StackFrame *> &frames = *stack->frames();
|
||||
StackFrameX86 *last_frame = static_cast<StackFrameX86 *>(frames.back());
|
||||
const vector<StackFrame*> &frames = *stack->frames();
|
||||
StackFrameX86* last_frame = static_cast<StackFrameX86*>(frames.back());
|
||||
scoped_ptr<StackFrameX86> new_frame;
|
||||
|
||||
// If the resolver has Windows stack walking information, use that.
|
||||
WindowsFrameInfo *windows_frame_info
|
||||
= resolver_ ? resolver_->FindWindowsFrameInfo(last_frame) : NULL;
|
||||
WindowsFrameInfo* windows_frame_info
|
||||
= frame_symbolizer_->FindWindowsFrameInfo(last_frame);
|
||||
if (windows_frame_info)
|
||||
new_frame.reset(GetCallerByWindowsFrameInfo(frames, windows_frame_info));
|
||||
|
||||
// If the resolver has DWARF CFI information, use that.
|
||||
if (!new_frame.get()) {
|
||||
CFIFrameInfo *cfi_frame_info =
|
||||
resolver_ ? resolver_->FindCFIFrameInfo(last_frame) : NULL;
|
||||
CFIFrameInfo* cfi_frame_info =
|
||||
frame_symbolizer_->FindCFIFrameInfo(last_frame);
|
||||
if (cfi_frame_info)
|
||||
new_frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info));
|
||||
}
|
||||
|
@ -577,7 +576,7 @@ StackFrame *StackwalkerX86::GetCallerFrame(const CallStack *stack) {
|
|||
// If nothing worked, tell the caller.
|
||||
if (!new_frame.get())
|
||||
return NULL;
|
||||
|
||||
|
||||
// Treat an instruction address of 0 as end-of-stack.
|
||||
if (new_frame->context.eip == 0)
|
||||
return NULL;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// -*- mode: c++ -*-
|
||||
// -*- mode: c++ -*-
|
||||
|
||||
// Copyright (c) 2010 Google Inc.
|
||||
// All rights reserved.
|
||||
|
@ -40,6 +40,7 @@
|
|||
#ifndef PROCESSOR_STACKWALKER_X86_H__
|
||||
#define PROCESSOR_STACKWALKER_X86_H__
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "google_breakpad/common/breakpad_types.h"
|
||||
#include "google_breakpad/common/minidump_format.h"
|
||||
|
@ -58,12 +59,11 @@ class StackwalkerX86 : public Stackwalker {
|
|||
// register state corresponding to the innermost called frame to be
|
||||
// included in the stack. The other arguments are passed directly through
|
||||
// to the base Stackwalker constructor.
|
||||
StackwalkerX86(const SystemInfo *system_info,
|
||||
const MDRawContextX86 *context,
|
||||
MemoryRegion *memory,
|
||||
const CodeModules *modules,
|
||||
SymbolSupplier *supplier,
|
||||
SourceLineResolverInterface *resolver);
|
||||
StackwalkerX86(const SystemInfo* system_info,
|
||||
const MDRawContextX86* context,
|
||||
MemoryRegion* memory,
|
||||
const CodeModules* modules,
|
||||
StackFrameSymbolizer* frame_symbolizer);
|
||||
|
||||
private:
|
||||
// A STACK CFI-driven frame walker for the X86.
|
||||
|
@ -73,32 +73,32 @@ class StackwalkerX86 : public Stackwalker {
|
|||
// stack conventions (saved %ebp at [%ebp], saved %eip at 4[%ebp], or
|
||||
// alternate conventions as guided by any WindowsFrameInfo available for the
|
||||
// code in question.).
|
||||
virtual StackFrame *GetContextFrame();
|
||||
virtual StackFrame *GetCallerFrame(const CallStack *stack);
|
||||
virtual StackFrame* GetContextFrame();
|
||||
virtual StackFrame* GetCallerFrame(const CallStack* stack);
|
||||
|
||||
// Use windows_frame_info (derived from STACK WIN and FUNC records)
|
||||
// to construct the frame that called frames.back(). The caller
|
||||
// takes ownership of the returned frame. Return NULL on failure.
|
||||
StackFrameX86 *GetCallerByWindowsFrameInfo(
|
||||
StackFrameX86* GetCallerByWindowsFrameInfo(
|
||||
const vector<StackFrame*> &frames,
|
||||
WindowsFrameInfo *windows_frame_info);
|
||||
WindowsFrameInfo* windows_frame_info);
|
||||
|
||||
// Use cfi_frame_info (derived from STACK CFI records) to construct
|
||||
// the frame that called frames.back(). The caller takes ownership
|
||||
// of the returned frame. Return NULL on failure.
|
||||
StackFrameX86 *GetCallerByCFIFrameInfo(const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo *cfi_frame_info);
|
||||
StackFrameX86* GetCallerByCFIFrameInfo(const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo* cfi_frame_info);
|
||||
|
||||
// Assuming a traditional frame layout --- where the caller's %ebp
|
||||
// has been pushed just after the return address and the callee's
|
||||
// %ebp points to the saved %ebp --- construct the frame that called
|
||||
// frames.back(). The caller takes ownership of the returned frame.
|
||||
// Return NULL on failure.
|
||||
StackFrameX86 *GetCallerByEBPAtBase(const vector<StackFrame*> &frames);
|
||||
StackFrameX86* GetCallerByEBPAtBase(const vector<StackFrame*> &frames);
|
||||
|
||||
// Stores the CPU context corresponding to the innermost stack frame to
|
||||
// be returned by GetContextFrame.
|
||||
const MDRawContextX86 *context_;
|
||||
const MDRawContextX86* context_;
|
||||
|
||||
// Our register map, for cfi_walker_.
|
||||
static const CFIWalker::RegisterSet cfi_register_map_[];
|
||||
|
|
|
@ -48,6 +48,7 @@
|
|||
|
||||
using google_breakpad::BasicSourceLineResolver;
|
||||
using google_breakpad::CallStack;
|
||||
using google_breakpad::StackFrameSymbolizer;
|
||||
using google_breakpad::StackFrame;
|
||||
using google_breakpad::StackFrameX86;
|
||||
using google_breakpad::StackwalkerX86;
|
||||
|
@ -148,8 +149,9 @@ TEST_F(SanityCheck, NoResolver) {
|
|||
raw_context.eip = 0x40000200;
|
||||
raw_context.ebp = 0x80000000;
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(NULL, NULL);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
NULL, NULL);
|
||||
&frame_symbolizer);
|
||||
// This should succeed, even without a resolver or supplier.
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
|
@ -168,8 +170,9 @@ TEST_F(GetContextFrame, Simple) {
|
|||
raw_context.eip = 0x40000200;
|
||||
raw_context.ebp = 0x80000000;
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
StackFrameX86 *frame = static_cast<StackFrameX86 *>(frames->at(0));
|
||||
|
@ -200,8 +203,9 @@ TEST_F(GetCallerFrame, Traditional) {
|
|||
raw_context.esp = stack_section.start().Value();
|
||||
raw_context.ebp = frame0_ebp.Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -255,8 +259,9 @@ TEST_F(GetCallerFrame, TraditionalScan) {
|
|||
// for something that looks like a return address.
|
||||
raw_context.ebp = 0xd43eed6e;
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -316,8 +321,9 @@ TEST_F(GetCallerFrame, TraditionalScanLongWay) {
|
|||
// for something that looks like a return address.
|
||||
raw_context.ebp = 0xd43eed6e;
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -387,8 +393,9 @@ TEST_F(GetCallerFrame, WindowsFrameData) {
|
|||
raw_context.esp = stack_section.start().Value();
|
||||
raw_context.ebp = 0xf052c1de; // should not be needed to walk frame
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -458,8 +465,9 @@ TEST_F(GetCallerFrame, WindowsFrameDataAligned) {
|
|||
raw_context.esp = stack_section.start().Value();
|
||||
raw_context.ebp = 0xf052c1de; // should not be needed to walk frame
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -540,8 +548,9 @@ TEST_F(GetCallerFrame, WindowsFrameDataParameterSize) {
|
|||
raw_context.esp = stack_section.start().Value();
|
||||
raw_context.ebp = frame0_ebp.Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(3U, frames->size());
|
||||
|
@ -634,8 +643,9 @@ TEST_F(GetCallerFrame, WindowsFrameDataScan) {
|
|||
raw_context.esp = stack_section.start().Value();
|
||||
raw_context.ebp = 0x2ae314cd; // should not be needed to walk frame
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -717,8 +727,9 @@ TEST_F(GetCallerFrame, WindowsFrameDataBadEIPScan) {
|
|||
raw_context.esp = stack_section.start().Value();
|
||||
raw_context.ebp = frame0_ebp.Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -784,8 +795,9 @@ TEST_F(GetCallerFrame, WindowsFPOUnchangedEBP) {
|
|||
// Frame pointer unchanged from caller.
|
||||
raw_context.ebp = frame1_ebp.Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -860,8 +872,9 @@ TEST_F(GetCallerFrame, WindowsFPOUsedEBP) {
|
|||
// RaisedByTheAliens uses %ebp for its own mysterious purposes.
|
||||
raw_context.ebp = 0xecbdd1a5;
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
@ -997,8 +1010,9 @@ TEST_F(GetCallerFrame, WindowsFPOSystemCall) {
|
|||
ASSERT_TRUE(raw_context.esp == frame0_esp.Value());
|
||||
raw_context.ebp = frame1_ebp.Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
|
||||
|
@ -1097,8 +1111,9 @@ struct CFIFixture: public StackwalkerX86Fixture {
|
|||
RegionFromSection();
|
||||
raw_context.esp = stack_section.start().Value();
|
||||
|
||||
StackFrameSymbolizer frame_symbolizer(&supplier, &resolver);
|
||||
StackwalkerX86 walker(&system_info, &raw_context, &stack_region, &modules,
|
||||
&supplier, &resolver);
|
||||
&frame_symbolizer);
|
||||
ASSERT_TRUE(walker.Walk(&call_stack));
|
||||
frames = call_stack.frames();
|
||||
ASSERT_EQ(2U, frames->size());
|
||||
|
|
Loading…
Reference in a new issue