mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2024-12-23 04:35:30 +00:00
ARM support, with some build system changes to support x86-64, arm, and i386 in an autoconf style build in Linux. The O2 build for the unit tests is still broken but I'm checking this in to unblock people
A=nealsid R=ajwong, hannahtang, ted.mielczarek git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@541 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
parent
841ad48a37
commit
de545c09d0
54
Makefile.am
54
Makefile.am
|
@ -33,6 +33,8 @@
|
||||||
# This allows #includes to be relative to src/
|
# This allows #includes to be relative to src/
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/src
|
AM_CPPFLAGS = -I$(top_srcdir)/src
|
||||||
|
|
||||||
|
# Specify include paths for ac macros
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
|
docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
|
||||||
|
@ -47,7 +49,19 @@ dist_doc_DATA = \
|
||||||
|
|
||||||
|
|
||||||
## Libraries
|
## Libraries
|
||||||
lib_LTLIBRARIES = src/libbreakpad.la
|
lib_LTLIBRARIES = src/libbreakpad.la src/client/linux/libbreakpad_client.la
|
||||||
|
|
||||||
|
src_client_linux_libbreakpad_client_la_SOURCES = \
|
||||||
|
src/client/linux/crash_generation/crash_generation_client.cc \
|
||||||
|
src/client/linux/handler/exception_handler.cc \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper.cc \
|
||||||
|
src/client/linux/minidump_writer/minidump_writer.cc \
|
||||||
|
src/client/minidump_file_writer.cc \
|
||||||
|
src/common/convert_UTF.c \
|
||||||
|
src/common/md5.c \
|
||||||
|
src/common/string_conversion.cc \
|
||||||
|
src/common/linux/file_id.cc \
|
||||||
|
src/common/linux/guid_creator.cc
|
||||||
|
|
||||||
src_libbreakpad_la_SOURCES = \
|
src_libbreakpad_la_SOURCES = \
|
||||||
src/google_breakpad/common/breakpad_types.h \
|
src/google_breakpad/common/breakpad_types.h \
|
||||||
|
@ -107,12 +121,13 @@ src_libbreakpad_la_SOURCES = \
|
||||||
|
|
||||||
## Programs
|
## Programs
|
||||||
bin_PROGRAMS = \
|
bin_PROGRAMS = \
|
||||||
|
src/client/linux/linux_dumper_unittest_helper \
|
||||||
src/processor/minidump_dump \
|
src/processor/minidump_dump \
|
||||||
src/processor/minidump_stackwalk
|
src/processor/minidump_stackwalk
|
||||||
|
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
check_PROGRAMS = \
|
check_PROGRAMS = \
|
||||||
|
src/client/linux/linux_client_unittest \
|
||||||
src/processor/address_map_unittest \
|
src/processor/address_map_unittest \
|
||||||
src/processor/basic_source_line_resolver_unittest \
|
src/processor/basic_source_line_resolver_unittest \
|
||||||
src/processor/contained_range_map_unittest \
|
src/processor/contained_range_map_unittest \
|
||||||
|
@ -135,6 +150,40 @@ check_SCRIPTS = \
|
||||||
TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
||||||
TESTS_ENVIRONMENT =
|
TESTS_ENVIRONMENT =
|
||||||
|
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_SOURCES = \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_CXXFLAGS=$(PTHREAD_CFLAGS)
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_LDFLAGS=$(PTHREAD_CFLAGS)
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_CC=$(PTHREAD_CC)
|
||||||
|
|
||||||
|
src_client_linux_linux_client_unittest_SOURCES = \
|
||||||
|
src/client/linux/handler/exception_handler_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/directory_reader_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/line_reader_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/minidump_writer_unittest.cc \
|
||||||
|
src/testing/gtest/src/gtest-all.cc \
|
||||||
|
src/testing/gtest/src/gtest_main.cc \
|
||||||
|
src/testing/src/gmock-all.cc
|
||||||
|
|
||||||
|
src_client_linux_linux_client_unittest_CPPFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/testing/include \
|
||||||
|
-I$(top_srcdir)/src/testing/gtest/include \
|
||||||
|
-I$(top_srcdir)/src/testing/gtest \
|
||||||
|
-I$(top_srcdir)/src/testing
|
||||||
|
src_client_linux_linux_client_unittest_LDADD = \
|
||||||
|
src/client/linux/handler/exception_handler.lo \
|
||||||
|
src/client/linux/crash_generation/crash_generation_client.lo \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper.lo \
|
||||||
|
src/client/linux/minidump_writer/minidump_writer.lo \
|
||||||
|
src/client/minidump_file_writer.lo \
|
||||||
|
src/common/convert_UTF.lo \
|
||||||
|
src/common/md5.lo \
|
||||||
|
src/common/linux/file_id.lo \
|
||||||
|
src/common/linux/guid_creator.lo \
|
||||||
|
src/common/string_conversion.lo
|
||||||
|
src_client_linux_linux_client_unittest_DEPENDENCIES = src/client/linux/linux_dumper_unittest_helper src/client/linux/libbreakpad_client.la
|
||||||
|
|
||||||
src_processor_address_map_unittest_SOURCES = \
|
src_processor_address_map_unittest_SOURCES = \
|
||||||
src/processor/address_map_unittest.cc
|
src/processor/address_map_unittest.cc
|
||||||
src_processor_address_map_unittest_LDADD = \
|
src_processor_address_map_unittest_LDADD = \
|
||||||
|
@ -399,3 +448,4 @@ EXTRA_DIST = \
|
||||||
## Additional rules
|
## Additional rules
|
||||||
libtool: $(LIBTOOL_DEPS)
|
libtool: $(LIBTOOL_DEPS)
|
||||||
$(SHELL) ./config.status --recheck
|
$(SHELL) ./config.status --recheck
|
||||||
|
|
||||||
|
|
473
Makefile.in
473
Makefile.in
|
@ -66,9 +66,11 @@ PRE_UNINSTALL = :
|
||||||
POST_UNINSTALL = :
|
POST_UNINSTALL = :
|
||||||
build_triplet = @build@
|
build_triplet = @build@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
bin_PROGRAMS = src/processor/minidump_dump$(EXEEXT) \
|
bin_PROGRAMS = src/client/linux/linux_dumper_unittest_helper$(EXEEXT) \
|
||||||
|
src/processor/minidump_dump$(EXEEXT) \
|
||||||
src/processor/minidump_stackwalk$(EXEEXT)
|
src/processor/minidump_stackwalk$(EXEEXT)
|
||||||
check_PROGRAMS = src/processor/address_map_unittest$(EXEEXT) \
|
check_PROGRAMS = src/client/linux/linux_client_unittest$(EXEEXT) \
|
||||||
|
src/processor/address_map_unittest$(EXEEXT) \
|
||||||
src/processor/basic_source_line_resolver_unittest$(EXEEXT) \
|
src/processor/basic_source_line_resolver_unittest$(EXEEXT) \
|
||||||
src/processor/contained_range_map_unittest$(EXEEXT) \
|
src/processor/contained_range_map_unittest$(EXEEXT) \
|
||||||
src/processor/minidump_processor_unittest$(EXEEXT) \
|
src/processor/minidump_processor_unittest$(EXEEXT) \
|
||||||
|
@ -88,7 +90,8 @@ DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
|
||||||
autotools/config.sub autotools/depcomp autotools/install-sh \
|
autotools/config.sub autotools/depcomp autotools/install-sh \
|
||||||
autotools/ltmain.sh autotools/missing
|
autotools/ltmain.sh autotools/missing
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
|
||||||
|
$(top_srcdir)/configure.ac
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
$(ACLOCAL_M4)
|
$(ACLOCAL_M4)
|
||||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||||
|
@ -121,8 +124,19 @@ am__base_list = \
|
||||||
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
|
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
|
||||||
"$(DESTDIR)$(docdir)"
|
"$(DESTDIR)$(docdir)"
|
||||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||||
src_libbreakpad_la_LIBADD =
|
src_client_linux_libbreakpad_client_la_LIBADD =
|
||||||
am__dirstamp = $(am__leading_dot)dirstamp
|
am__dirstamp = $(am__leading_dot)dirstamp
|
||||||
|
am_src_client_linux_libbreakpad_client_la_OBJECTS = \
|
||||||
|
src/client/linux/crash_generation/crash_generation_client.lo \
|
||||||
|
src/client/linux/handler/exception_handler.lo \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper.lo \
|
||||||
|
src/client/linux/minidump_writer/minidump_writer.lo \
|
||||||
|
src/client/minidump_file_writer.lo src/common/convert_UTF.lo \
|
||||||
|
src/common/md5.lo src/common/string_conversion.lo \
|
||||||
|
src/common/linux/file_id.lo src/common/linux/guid_creator.lo
|
||||||
|
src_client_linux_libbreakpad_client_la_OBJECTS = \
|
||||||
|
$(am_src_client_linux_libbreakpad_client_la_OBJECTS)
|
||||||
|
src_libbreakpad_la_LIBADD =
|
||||||
am_src_libbreakpad_la_OBJECTS = src/processor/basic_code_modules.lo \
|
am_src_libbreakpad_la_OBJECTS = src/processor/basic_code_modules.lo \
|
||||||
src/processor/basic_source_line_resolver.lo \
|
src/processor/basic_source_line_resolver.lo \
|
||||||
src/processor/call_stack.lo src/processor/logging.lo \
|
src/processor/call_stack.lo src/processor/logging.lo \
|
||||||
|
@ -140,6 +154,27 @@ src_libbreakpad_la_OBJECTS = $(am_src_libbreakpad_la_OBJECTS)
|
||||||
@SELFTEST_TRUE@am__EXEEXT_1 = \
|
@SELFTEST_TRUE@am__EXEEXT_1 = \
|
||||||
@SELFTEST_TRUE@ src/processor/stackwalker_selftest$(EXEEXT)
|
@SELFTEST_TRUE@ src/processor/stackwalker_selftest$(EXEEXT)
|
||||||
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
|
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
|
||||||
|
am_src_client_linux_linux_client_unittest_OBJECTS = src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.$(OBJEXT) \
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.$(OBJEXT) \
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.$(OBJEXT) \
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.$(OBJEXT) \
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.$(OBJEXT) \
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.$(OBJEXT) \
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.$(OBJEXT) \
|
||||||
|
src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT)
|
||||||
|
src_client_linux_linux_client_unittest_OBJECTS = \
|
||||||
|
$(am_src_client_linux_linux_client_unittest_OBJECTS)
|
||||||
|
am_src_client_linux_linux_dumper_unittest_helper_OBJECTS = src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT)
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_OBJECTS = \
|
||||||
|
$(am_src_client_linux_linux_dumper_unittest_helper_OBJECTS)
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_LDADD = $(LDADD)
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_LINK = $(LIBTOOL) \
|
||||||
|
--tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
|
||||||
|
$(CXXLD) \
|
||||||
|
$(src_client_linux_linux_dumper_unittest_helper_CXXFLAGS) \
|
||||||
|
$(CXXFLAGS) \
|
||||||
|
$(src_client_linux_linux_dumper_unittest_helper_LDFLAGS) \
|
||||||
|
$(LDFLAGS) -o $@
|
||||||
am_src_processor_address_map_unittest_OBJECTS = \
|
am_src_processor_address_map_unittest_OBJECTS = \
|
||||||
src/processor/address_map_unittest.$(OBJEXT)
|
src/processor/address_map_unittest.$(OBJEXT)
|
||||||
src_processor_address_map_unittest_OBJECTS = \
|
src_processor_address_map_unittest_OBJECTS = \
|
||||||
|
@ -246,15 +281,6 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
|
||||||
depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
|
depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
|
||||||
am__depfiles_maybe = depfiles
|
am__depfiles_maybe = depfiles
|
||||||
am__mv = mv -f
|
am__mv = mv -f
|
||||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
|
||||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
|
||||||
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
|
||||||
--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
|
||||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
|
||||||
CXXLD = $(CXX)
|
|
||||||
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
|
||||||
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
|
|
||||||
$(LDFLAGS) -o $@
|
|
||||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||||
|
@ -264,7 +290,19 @@ CCLD = $(CC)
|
||||||
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||||
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
|
||||||
$(LDFLAGS) -o $@
|
$(LDFLAGS) -o $@
|
||||||
SOURCES = $(src_libbreakpad_la_SOURCES) \
|
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||||
|
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||||
|
LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||||
|
--mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||||
|
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||||
|
CXXLD = $(CXX)
|
||||||
|
CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
|
||||||
|
--mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
|
||||||
|
$(LDFLAGS) -o $@
|
||||||
|
SOURCES = $(src_client_linux_libbreakpad_client_la_SOURCES) \
|
||||||
|
$(src_libbreakpad_la_SOURCES) \
|
||||||
|
$(src_client_linux_linux_client_unittest_SOURCES) \
|
||||||
|
$(src_client_linux_linux_dumper_unittest_helper_SOURCES) \
|
||||||
$(src_processor_address_map_unittest_SOURCES) \
|
$(src_processor_address_map_unittest_SOURCES) \
|
||||||
$(src_processor_basic_source_line_resolver_unittest_SOURCES) \
|
$(src_processor_basic_source_line_resolver_unittest_SOURCES) \
|
||||||
$(src_processor_contained_range_map_unittest_SOURCES) \
|
$(src_processor_contained_range_map_unittest_SOURCES) \
|
||||||
|
@ -276,7 +314,10 @@ SOURCES = $(src_libbreakpad_la_SOURCES) \
|
||||||
$(src_processor_postfix_evaluator_unittest_SOURCES) \
|
$(src_processor_postfix_evaluator_unittest_SOURCES) \
|
||||||
$(src_processor_range_map_unittest_SOURCES) \
|
$(src_processor_range_map_unittest_SOURCES) \
|
||||||
$(src_processor_stackwalker_selftest_SOURCES)
|
$(src_processor_stackwalker_selftest_SOURCES)
|
||||||
DIST_SOURCES = $(src_libbreakpad_la_SOURCES) \
|
DIST_SOURCES = $(src_client_linux_libbreakpad_client_la_SOURCES) \
|
||||||
|
$(src_libbreakpad_la_SOURCES) \
|
||||||
|
$(src_client_linux_linux_client_unittest_SOURCES) \
|
||||||
|
$(src_client_linux_linux_dumper_unittest_helper_SOURCES) \
|
||||||
$(src_processor_address_map_unittest_SOURCES) \
|
$(src_processor_address_map_unittest_SOURCES) \
|
||||||
$(src_processor_basic_source_line_resolver_unittest_SOURCES) \
|
$(src_processor_basic_source_line_resolver_unittest_SOURCES) \
|
||||||
$(src_processor_contained_range_map_unittest_SOURCES) \
|
$(src_processor_contained_range_map_unittest_SOURCES) \
|
||||||
|
@ -362,6 +403,9 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
PACKAGE_URL = @PACKAGE_URL@
|
PACKAGE_URL = @PACKAGE_URL@
|
||||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
|
PTHREAD_CC = @PTHREAD_CC@
|
||||||
|
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
|
||||||
|
PTHREAD_LIBS = @PTHREAD_LIBS@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
SED = @SED@
|
SED = @SED@
|
||||||
SET_MAKE = @SET_MAKE@
|
SET_MAKE = @SET_MAKE@
|
||||||
|
@ -380,6 +424,7 @@ am__leading_dot = @am__leading_dot@
|
||||||
am__quote = @am__quote@
|
am__quote = @am__quote@
|
||||||
am__tar = @am__tar@
|
am__tar = @am__tar@
|
||||||
am__untar = @am__untar@
|
am__untar = @am__untar@
|
||||||
|
ax_pthread_config = @ax_pthread_config@
|
||||||
bindir = @bindir@
|
bindir = @bindir@
|
||||||
build = @build@
|
build = @build@
|
||||||
build_alias = @build_alias@
|
build_alias = @build_alias@
|
||||||
|
@ -424,6 +469,9 @@ top_srcdir = @top_srcdir@
|
||||||
|
|
||||||
# This allows #includes to be relative to src/
|
# This allows #includes to be relative to src/
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/src
|
AM_CPPFLAGS = -I$(top_srcdir)/src
|
||||||
|
|
||||||
|
# Specify include paths for ac macros
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
dist_doc_DATA = \
|
dist_doc_DATA = \
|
||||||
AUTHORS \
|
AUTHORS \
|
||||||
COPYING \
|
COPYING \
|
||||||
|
@ -432,7 +480,19 @@ dist_doc_DATA = \
|
||||||
NEWS \
|
NEWS \
|
||||||
README
|
README
|
||||||
|
|
||||||
lib_LTLIBRARIES = src/libbreakpad.la
|
lib_LTLIBRARIES = src/libbreakpad.la src/client/linux/libbreakpad_client.la
|
||||||
|
src_client_linux_libbreakpad_client_la_SOURCES = \
|
||||||
|
src/client/linux/crash_generation/crash_generation_client.cc \
|
||||||
|
src/client/linux/handler/exception_handler.cc \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper.cc \
|
||||||
|
src/client/linux/minidump_writer/minidump_writer.cc \
|
||||||
|
src/client/minidump_file_writer.cc \
|
||||||
|
src/common/convert_UTF.c \
|
||||||
|
src/common/md5.c \
|
||||||
|
src/common/string_conversion.cc \
|
||||||
|
src/common/linux/file_id.cc \
|
||||||
|
src/common/linux/guid_creator.cc
|
||||||
|
|
||||||
src_libbreakpad_la_SOURCES = \
|
src_libbreakpad_la_SOURCES = \
|
||||||
src/google_breakpad/common/breakpad_types.h \
|
src/google_breakpad/common/breakpad_types.h \
|
||||||
src/google_breakpad/common/minidump_format.h \
|
src/google_breakpad/common/minidump_format.h \
|
||||||
|
@ -495,6 +555,41 @@ check_SCRIPTS = \
|
||||||
|
|
||||||
TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
|
||||||
TESTS_ENVIRONMENT =
|
TESTS_ENVIRONMENT =
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_SOURCES = \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
|
||||||
|
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_CXXFLAGS = $(PTHREAD_CFLAGS)
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_LDFLAGS = $(PTHREAD_CFLAGS)
|
||||||
|
src_client_linux_linux_dumper_unittest_helper_CC = $(PTHREAD_CC)
|
||||||
|
src_client_linux_linux_client_unittest_SOURCES = \
|
||||||
|
src/client/linux/handler/exception_handler_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/directory_reader_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/line_reader_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper_unittest.cc \
|
||||||
|
src/client/linux/minidump_writer/minidump_writer_unittest.cc \
|
||||||
|
src/testing/gtest/src/gtest-all.cc \
|
||||||
|
src/testing/gtest/src/gtest_main.cc \
|
||||||
|
src/testing/src/gmock-all.cc
|
||||||
|
|
||||||
|
src_client_linux_linux_client_unittest_CPPFLAGS = \
|
||||||
|
-I$(top_srcdir)/src/testing/include \
|
||||||
|
-I$(top_srcdir)/src/testing/gtest/include \
|
||||||
|
-I$(top_srcdir)/src/testing/gtest \
|
||||||
|
-I$(top_srcdir)/src/testing
|
||||||
|
|
||||||
|
src_client_linux_linux_client_unittest_LDADD = \
|
||||||
|
src/client/linux/handler/exception_handler.lo \
|
||||||
|
src/client/linux/crash_generation/crash_generation_client.lo \
|
||||||
|
src/client/linux/minidump_writer/linux_dumper.lo \
|
||||||
|
src/client/linux/minidump_writer/minidump_writer.lo \
|
||||||
|
src/client/minidump_file_writer.lo \
|
||||||
|
src/common/convert_UTF.lo \
|
||||||
|
src/common/md5.lo \
|
||||||
|
src/common/linux/file_id.lo \
|
||||||
|
src/common/linux/guid_creator.lo \
|
||||||
|
src/common/string_conversion.lo
|
||||||
|
|
||||||
|
src_client_linux_linux_client_unittest_DEPENDENCIES = src/client/linux/linux_dumper_unittest_helper src/client/linux/libbreakpad_client.la
|
||||||
src_processor_address_map_unittest_SOURCES = \
|
src_processor_address_map_unittest_SOURCES = \
|
||||||
src/processor/address_map_unittest.cc
|
src/processor/address_map_unittest.cc
|
||||||
|
|
||||||
|
@ -762,7 +857,7 @@ EXTRA_DIST = \
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
.SUFFIXES: .cc .lo .o .obj
|
.SUFFIXES: .c .cc .lo .o .obj
|
||||||
am--refresh:
|
am--refresh:
|
||||||
@:
|
@:
|
||||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||||
|
@ -845,6 +940,71 @@ clean-libLTLIBRARIES:
|
||||||
echo "rm -f \"$${dir}/so_locations\""; \
|
echo "rm -f \"$${dir}/so_locations\""; \
|
||||||
rm -f "$${dir}/so_locations"; \
|
rm -f "$${dir}/so_locations"; \
|
||||||
done
|
done
|
||||||
|
src/client/linux/crash_generation/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/linux/crash_generation
|
||||||
|
@: > src/client/linux/crash_generation/$(am__dirstamp)
|
||||||
|
src/client/linux/crash_generation/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/linux/crash_generation/$(DEPDIR)
|
||||||
|
@: > src/client/linux/crash_generation/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/crash_generation/crash_generation_client.lo: \
|
||||||
|
src/client/linux/crash_generation/$(am__dirstamp) \
|
||||||
|
src/client/linux/crash_generation/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/handler/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/linux/handler
|
||||||
|
@: > src/client/linux/handler/$(am__dirstamp)
|
||||||
|
src/client/linux/handler/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/linux/handler/$(DEPDIR)
|
||||||
|
@: > src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/handler/exception_handler.lo: \
|
||||||
|
src/client/linux/handler/$(am__dirstamp) \
|
||||||
|
src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/linux/minidump_writer
|
||||||
|
@: > src/client/linux/minidump_writer/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/linux/minidump_writer/$(DEPDIR)
|
||||||
|
@: > src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/linux_dumper.lo: \
|
||||||
|
src/client/linux/minidump_writer/$(am__dirstamp) \
|
||||||
|
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/minidump_writer.lo: \
|
||||||
|
src/client/linux/minidump_writer/$(am__dirstamp) \
|
||||||
|
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client
|
||||||
|
@: > src/client/$(am__dirstamp)
|
||||||
|
src/client/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/$(DEPDIR)
|
||||||
|
@: > src/client/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/minidump_file_writer.lo: src/client/$(am__dirstamp) \
|
||||||
|
src/client/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/common/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/common
|
||||||
|
@: > src/common/$(am__dirstamp)
|
||||||
|
src/common/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/common/$(DEPDIR)
|
||||||
|
@: > src/common/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/common/convert_UTF.lo: src/common/$(am__dirstamp) \
|
||||||
|
src/common/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/common/md5.lo: src/common/$(am__dirstamp) \
|
||||||
|
src/common/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/common/string_conversion.lo: src/common/$(am__dirstamp) \
|
||||||
|
src/common/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/common/linux/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/common/linux
|
||||||
|
@: > src/common/linux/$(am__dirstamp)
|
||||||
|
src/common/linux/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/common/linux/$(DEPDIR)
|
||||||
|
@: > src/common/linux/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/common/linux/file_id.lo: src/common/linux/$(am__dirstamp) \
|
||||||
|
src/common/linux/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/common/linux/guid_creator.lo: src/common/linux/$(am__dirstamp) \
|
||||||
|
src/common/linux/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/client/linux
|
||||||
|
@: > src/client/linux/$(am__dirstamp)
|
||||||
|
src/client/linux/libbreakpad_client.la: $(src_client_linux_libbreakpad_client_la_OBJECTS) $(src_client_linux_libbreakpad_client_la_DEPENDENCIES) src/client/linux/$(am__dirstamp)
|
||||||
|
$(CXXLINK) -rpath $(libdir) $(src_client_linux_libbreakpad_client_la_OBJECTS) $(src_client_linux_libbreakpad_client_la_LIBADD) $(LIBS)
|
||||||
src/processor/$(am__dirstamp):
|
src/processor/$(am__dirstamp):
|
||||||
@$(MKDIR_P) src/processor
|
@$(MKDIR_P) src/processor
|
||||||
@: > src/processor/$(am__dirstamp)
|
@: > src/processor/$(am__dirstamp)
|
||||||
|
@ -949,6 +1109,51 @@ clean-noinstPROGRAMS:
|
||||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||||
echo " rm -f" $$list; \
|
echo " rm -f" $$list; \
|
||||||
rm -f $$list
|
rm -f $$list
|
||||||
|
src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.$(OBJEXT): \
|
||||||
|
src/client/linux/handler/$(am__dirstamp) \
|
||||||
|
src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.$(OBJEXT): \
|
||||||
|
src/client/linux/minidump_writer/$(am__dirstamp) \
|
||||||
|
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.$(OBJEXT): \
|
||||||
|
src/client/linux/minidump_writer/$(am__dirstamp) \
|
||||||
|
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.$(OBJEXT): \
|
||||||
|
src/client/linux/minidump_writer/$(am__dirstamp) \
|
||||||
|
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.$(OBJEXT): \
|
||||||
|
src/client/linux/minidump_writer/$(am__dirstamp) \
|
||||||
|
src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/testing/gtest/src/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/testing/gtest/src
|
||||||
|
@: > src/testing/gtest/src/$(am__dirstamp)
|
||||||
|
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/testing/gtest/src/$(DEPDIR)
|
||||||
|
@: > src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.$(OBJEXT): \
|
||||||
|
src/testing/gtest/src/$(am__dirstamp) \
|
||||||
|
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.$(OBJEXT): \
|
||||||
|
src/testing/gtest/src/$(am__dirstamp) \
|
||||||
|
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/testing/src/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/testing/src
|
||||||
|
@: > src/testing/src/$(am__dirstamp)
|
||||||
|
src/testing/src/$(DEPDIR)/$(am__dirstamp):
|
||||||
|
@$(MKDIR_P) src/testing/src/$(DEPDIR)
|
||||||
|
@: > src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT): \
|
||||||
|
src/testing/src/$(am__dirstamp) \
|
||||||
|
src/testing/src/$(DEPDIR)/$(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)
|
||||||
|
$(CXXLINK) $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_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) 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/processor/address_map_unittest.$(OBJEXT): \
|
src/processor/address_map_unittest.$(OBJEXT): \
|
||||||
src/processor/$(am__dirstamp) \
|
src/processor/$(am__dirstamp) \
|
||||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
@ -975,21 +1180,9 @@ src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(s
|
||||||
src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT): \
|
src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT): \
|
||||||
src/processor/$(am__dirstamp) \
|
src/processor/$(am__dirstamp) \
|
||||||
src/processor/$(DEPDIR)/$(am__dirstamp)
|
src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||||
src/testing/gtest/src/$(am__dirstamp):
|
|
||||||
@$(MKDIR_P) src/testing/gtest/src
|
|
||||||
@: > src/testing/gtest/src/$(am__dirstamp)
|
|
||||||
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp):
|
|
||||||
@$(MKDIR_P) src/testing/gtest/src/$(DEPDIR)
|
|
||||||
@: > src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
|
||||||
src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT): \
|
src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT): \
|
||||||
src/testing/gtest/src/$(am__dirstamp) \
|
src/testing/gtest/src/$(am__dirstamp) \
|
||||||
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
||||||
src/testing/src/$(am__dirstamp):
|
|
||||||
@$(MKDIR_P) src/testing/src
|
|
||||||
@: > src/testing/src/$(am__dirstamp)
|
|
||||||
src/testing/src/$(DEPDIR)/$(am__dirstamp):
|
|
||||||
@$(MKDIR_P) src/testing/src/$(DEPDIR)
|
|
||||||
@: > src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
|
||||||
src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT): \
|
src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT): \
|
||||||
src/testing/src/$(am__dirstamp) \
|
src/testing/src/$(am__dirstamp) \
|
||||||
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
src/testing/src/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
@ -1041,6 +1234,32 @@ src/processor/stackwalker_selftest$(EXEEXT): $(src_processor_stackwalker_selftes
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
-rm -f *.$(OBJEXT)
|
-rm -f *.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/crash_generation/crash_generation_client.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/crash_generation/crash_generation_client.lo
|
||||||
|
-rm -f src/client/linux/handler/exception_handler.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/handler/exception_handler.lo
|
||||||
|
-rm -f src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/minidump_writer/linux_dumper.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/minidump_writer/linux_dumper.lo
|
||||||
|
-rm -f src/client/linux/minidump_writer/minidump_writer.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/minidump_writer/minidump_writer.lo
|
||||||
|
-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.$(OBJEXT)
|
||||||
|
-rm -f src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT)
|
||||||
|
-rm -f src/client/minidump_file_writer.$(OBJEXT)
|
||||||
|
-rm -f src/client/minidump_file_writer.lo
|
||||||
|
-rm -f src/common/convert_UTF.$(OBJEXT)
|
||||||
|
-rm -f src/common/convert_UTF.lo
|
||||||
|
-rm -f src/common/linux/file_id.$(OBJEXT)
|
||||||
|
-rm -f src/common/linux/file_id.lo
|
||||||
|
-rm -f src/common/linux/guid_creator.$(OBJEXT)
|
||||||
|
-rm -f src/common/linux/guid_creator.lo
|
||||||
|
-rm -f src/common/md5.$(OBJEXT)
|
||||||
|
-rm -f src/common/md5.lo
|
||||||
|
-rm -f src/common/string_conversion.$(OBJEXT)
|
||||||
|
-rm -f src/common/string_conversion.lo
|
||||||
-rm -f src/processor/address_map_unittest.$(OBJEXT)
|
-rm -f src/processor/address_map_unittest.$(OBJEXT)
|
||||||
-rm -f src/processor/basic_code_modules.$(OBJEXT)
|
-rm -f src/processor/basic_code_modules.$(OBJEXT)
|
||||||
-rm -f src/processor/basic_code_modules.lo
|
-rm -f src/processor/basic_code_modules.lo
|
||||||
|
@ -1082,14 +1301,33 @@ mostlyclean-compile:
|
||||||
-rm -f src/processor/stackwalker_sparc.lo
|
-rm -f src/processor/stackwalker_sparc.lo
|
||||||
-rm -f src/processor/stackwalker_x86.$(OBJEXT)
|
-rm -f src/processor/stackwalker_x86.$(OBJEXT)
|
||||||
-rm -f src/processor/stackwalker_x86.lo
|
-rm -f src/processor/stackwalker_x86.lo
|
||||||
|
-rm -f src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.$(OBJEXT)
|
||||||
|
-rm -f src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.$(OBJEXT)
|
||||||
-rm -f src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT)
|
-rm -f src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT)
|
||||||
-rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest-all.$(OBJEXT)
|
-rm -f src/testing/gtest/src/src_processor_minidump_unittest-gtest-all.$(OBJEXT)
|
||||||
|
-rm -f src/testing/src/src_client_linux_linux_client_unittest-gmock-all.$(OBJEXT)
|
||||||
-rm -f src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
|
-rm -f src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
|
||||||
-rm -f src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT)
|
-rm -f src/testing/src/src_processor_minidump_unittest-gmock-all.$(OBJEXT)
|
||||||
|
|
||||||
distclean-compile:
|
distclean-compile:
|
||||||
-rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/$(DEPDIR)/minidump_file_writer.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/crash_generation/$(DEPDIR)/crash_generation_client.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/handler/$(DEPDIR)/exception_handler.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/linux_dumper.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/minidump_writer.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/convert_UTF.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/md5.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/common/$(DEPDIR)/string_conversion.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/common/linux/$(DEPDIR)/file_id.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/common/linux/$(DEPDIR)/guid_creator.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/address_map_unittest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/address_map_unittest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_code_modules.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_code_modules.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_source_line_resolver.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_source_line_resolver.Plo@am__quote@
|
||||||
|
@ -1116,11 +1354,38 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_selftest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_selftest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_sparc.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_sparc.Plo@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_x86.Plo@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_x86.Plo@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest-all.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_unittest-gtest-all.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_unittest-gmock-all.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@src/testing/src/$(DEPDIR)/src_processor_minidump_unittest-gmock-all.Po@am__quote@
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||||
|
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
|
||||||
|
|
||||||
|
.c.obj:
|
||||||
|
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
|
||||||
|
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||||
|
|
||||||
|
.c.lo:
|
||||||
|
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
|
||||||
|
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||||
|
|
||||||
.cc.o:
|
.cc.o:
|
||||||
@am__fastdepCXX_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
@am__fastdepCXX_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
|
||||||
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
|
||||||
|
@ -1145,6 +1410,132 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
|
@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
|
||||||
|
|
||||||
|
src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o: src/client/linux/handler/exception_handler_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o -MD -MP -MF src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Tpo -c -o src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o `test -f 'src/client/linux/handler/exception_handler_unittest.cc' || echo '$(srcdir)/'`src/client/linux/handler/exception_handler_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Tpo src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/handler/exception_handler_unittest.cc' object='src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.o `test -f 'src/client/linux/handler/exception_handler_unittest.cc' || echo '$(srcdir)/'`src/client/linux/handler/exception_handler_unittest.cc
|
||||||
|
|
||||||
|
src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.obj: src/client/linux/handler/exception_handler_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.obj -MD -MP -MF src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Tpo -c -o src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.obj `if test -f 'src/client/linux/handler/exception_handler_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/handler/exception_handler_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/handler/exception_handler_unittest.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Tpo src/client/linux/handler/$(DEPDIR)/src_client_linux_linux_client_unittest-exception_handler_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/handler/exception_handler_unittest.cc' object='src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/handler/src_client_linux_linux_client_unittest-exception_handler_unittest.obj `if test -f 'src/client/linux/handler/exception_handler_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/handler/exception_handler_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/handler/exception_handler_unittest.cc'; fi`
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.o: src/client/linux/minidump_writer/directory_reader_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.o -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.o `test -f 'src/client/linux/minidump_writer/directory_reader_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/directory_reader_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/directory_reader_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.o `test -f 'src/client/linux/minidump_writer/directory_reader_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/directory_reader_unittest.cc
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.obj: src/client/linux/minidump_writer/directory_reader_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.obj -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.obj `if test -f 'src/client/linux/minidump_writer/directory_reader_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/directory_reader_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/directory_reader_unittest.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-directory_reader_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/directory_reader_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-directory_reader_unittest.obj `if test -f 'src/client/linux/minidump_writer/directory_reader_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/directory_reader_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/directory_reader_unittest.cc'; fi`
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.o: src/client/linux/minidump_writer/line_reader_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.o -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.o `test -f 'src/client/linux/minidump_writer/line_reader_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/line_reader_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/line_reader_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.o `test -f 'src/client/linux/minidump_writer/line_reader_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/line_reader_unittest.cc
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.obj: src/client/linux/minidump_writer/line_reader_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.obj -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.obj `if test -f 'src/client/linux/minidump_writer/line_reader_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/line_reader_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/line_reader_unittest.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-line_reader_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/line_reader_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-line_reader_unittest.obj `if test -f 'src/client/linux/minidump_writer/line_reader_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/line_reader_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/line_reader_unittest.cc'; fi`
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.o: src/client/linux/minidump_writer/linux_dumper_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.o -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.o `test -f 'src/client/linux/minidump_writer/linux_dumper_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/linux_dumper_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/linux_dumper_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.o `test -f 'src/client/linux/minidump_writer/linux_dumper_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/linux_dumper_unittest.cc
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.obj: src/client/linux/minidump_writer/linux_dumper_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.obj -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.obj `if test -f 'src/client/linux/minidump_writer/linux_dumper_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/linux_dumper_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/linux_dumper_unittest.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-linux_dumper_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/linux_dumper_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-linux_dumper_unittest.obj `if test -f 'src/client/linux/minidump_writer/linux_dumper_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/linux_dumper_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/linux_dumper_unittest.cc'; fi`
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.o: src/client/linux/minidump_writer/minidump_writer_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.o -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.o `test -f 'src/client/linux/minidump_writer/minidump_writer_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/minidump_writer_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/minidump_writer_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.o `test -f 'src/client/linux/minidump_writer/minidump_writer_unittest.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/minidump_writer_unittest.cc
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.obj: src/client/linux/minidump_writer/minidump_writer_unittest.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.obj -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.obj `if test -f 'src/client/linux/minidump_writer/minidump_writer_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/minidump_writer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/minidump_writer_unittest.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_client_unittest-minidump_writer_unittest.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/minidump_writer_unittest.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_client_unittest-minidump_writer_unittest.obj `if test -f 'src/client/linux/minidump_writer/minidump_writer_unittest.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/minidump_writer_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/minidump_writer_unittest.cc'; fi`
|
||||||
|
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.o `test -f 'src/testing/gtest/src/gtest-all.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest-all.cc
|
||||||
|
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest-all.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest-all.obj `if test -f 'src/testing/gtest/src/gtest-all.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest-all.cc'; fi`
|
||||||
|
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.o: src/testing/gtest/src/gtest_main.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Tpo -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.o `test -f 'src/testing/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest_main.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Tpo src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest_main.cc' object='src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.o `test -f 'src/testing/gtest/src/gtest_main.cc' || echo '$(srcdir)/'`src/testing/gtest/src/gtest_main.cc
|
||||||
|
|
||||||
|
src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.obj: src/testing/gtest/src/gtest_main.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Tpo -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.obj `if test -f 'src/testing/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest_main.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Tpo src/testing/gtest/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gtest_main.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/gtest/src/gtest_main.cc' object='src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_client_linux_linux_client_unittest-gtest_main.obj `if test -f 'src/testing/gtest/src/gtest_main.cc'; then $(CYGPATH_W) 'src/testing/gtest/src/gtest_main.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/gtest/src/gtest_main.cc'; fi`
|
||||||
|
|
||||||
|
src/testing/src/src_client_linux_linux_client_unittest-gmock-all.o: src/testing/src/gmock-all.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_client_linux_linux_client_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Tpo -c -o src/testing/src/src_client_linux_linux_client_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_client_linux_linux_client_unittest-gmock-all.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_client_linux_linux_client_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
|
||||||
|
|
||||||
|
src/testing/src/src_client_linux_linux_client_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_client_linux_linux_client_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Tpo -c -o src/testing/src/src_client_linux_linux_client_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_client_linux_linux_client_unittest-gmock-all.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/testing/src/gmock-all.cc' object='src/testing/src/src_client_linux_linux_client_unittest-gmock-all.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_client_linux_linux_client_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_client_linux_linux_client_unittest-gmock-all.obj `if test -f 'src/testing/src/gmock-all.cc'; then $(CYGPATH_W) 'src/testing/src/gmock-all.cc'; else $(CYGPATH_W) '$(srcdir)/src/testing/src/gmock-all.cc'; fi`
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o: src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(src_client_linux_linux_dumper_unittest_helper_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o `test -f 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(src_client_linux_linux_dumper_unittest_helper_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.o `test -f 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc' || echo '$(srcdir)/'`src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
|
||||||
|
|
||||||
|
src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.obj: src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(src_client_linux_linux_dumper_unittest_helper_CXXFLAGS) $(CXXFLAGS) -MT src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.obj -MD -MP -MF src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Tpo -c -o src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.obj `if test -f 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ $(am__mv) src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Tpo src/client/linux/minidump_writer/$(DEPDIR)/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc' object='src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(src_client_linux_linux_dumper_unittest_helper_CXXFLAGS) $(CXXFLAGS) -c -o src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.obj `if test -f 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc'; then $(CYGPATH_W) 'src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc'; else $(CYGPATH_W) '$(srcdir)/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc'; fi`
|
||||||
|
|
||||||
src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o: src/processor/minidump_processor_unittest.cc
|
src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o: src/processor/minidump_processor_unittest.cc
|
||||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo -c -o src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o `test -f 'src/processor/minidump_processor_unittest.cc' || echo '$(srcdir)/'`src/processor/minidump_processor_unittest.cc
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o -MD -MP -MF src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo -c -o src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o `test -f 'src/processor/minidump_processor_unittest.cc' || echo '$(srcdir)/'`src/processor/minidump_processor_unittest.cc
|
||||||
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po
|
@am__fastdepCXX_TRUE@ $(am__mv) src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po
|
||||||
|
@ -1235,6 +1626,13 @@ mostlyclean-libtool:
|
||||||
clean-libtool:
|
clean-libtool:
|
||||||
-rm -rf .libs _libs
|
-rm -rf .libs _libs
|
||||||
-rm -rf src/.libs src/_libs
|
-rm -rf src/.libs src/_libs
|
||||||
|
-rm -rf src/client/.libs src/client/_libs
|
||||||
|
-rm -rf src/client/linux/.libs src/client/linux/_libs
|
||||||
|
-rm -rf src/client/linux/crash_generation/.libs src/client/linux/crash_generation/_libs
|
||||||
|
-rm -rf src/client/linux/handler/.libs src/client/linux/handler/_libs
|
||||||
|
-rm -rf src/client/linux/minidump_writer/.libs src/client/linux/minidump_writer/_libs
|
||||||
|
-rm -rf src/common/.libs src/common/_libs
|
||||||
|
-rm -rf src/common/linux/.libs src/common/linux/_libs
|
||||||
-rm -rf src/processor/.libs src/processor/_libs
|
-rm -rf src/processor/.libs src/processor/_libs
|
||||||
|
|
||||||
distclean-libtool:
|
distclean-libtool:
|
||||||
|
@ -1584,6 +1982,19 @@ distclean-generic:
|
||||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||||
-rm -f src/$(am__dirstamp)
|
-rm -f src/$(am__dirstamp)
|
||||||
|
-rm -f src/client/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
-rm -f src/client/$(am__dirstamp)
|
||||||
|
-rm -f src/client/linux/$(am__dirstamp)
|
||||||
|
-rm -f src/client/linux/crash_generation/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
-rm -f src/client/linux/crash_generation/$(am__dirstamp)
|
||||||
|
-rm -f src/client/linux/handler/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
-rm -f src/client/linux/handler/$(am__dirstamp)
|
||||||
|
-rm -f src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
-rm -f src/client/linux/minidump_writer/$(am__dirstamp)
|
||||||
|
-rm -f src/common/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
-rm -f src/common/$(am__dirstamp)
|
||||||
|
-rm -f src/common/linux/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
-rm -f src/common/linux/$(am__dirstamp)
|
||||||
-rm -f src/processor/$(DEPDIR)/$(am__dirstamp)
|
-rm -f src/processor/$(DEPDIR)/$(am__dirstamp)
|
||||||
-rm -f src/processor/$(am__dirstamp)
|
-rm -f src/processor/$(am__dirstamp)
|
||||||
-rm -f src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
-rm -f src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
|
||||||
|
@ -1602,7 +2013,7 @@ clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
|
||||||
|
|
||||||
distclean: distclean-am
|
distclean: distclean-am
|
||||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||||
-rm -rf src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
|
-rm -rf src/client/$(DEPDIR) src/client/linux/crash_generation/$(DEPDIR) src/client/linux/handler/$(DEPDIR) src/client/linux/minidump_writer/$(DEPDIR) src/common/$(DEPDIR) src/common/linux/$(DEPDIR) src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
|
||||||
-rm -f Makefile
|
-rm -f Makefile
|
||||||
distclean-am: clean-am distclean-compile distclean-generic \
|
distclean-am: clean-am distclean-compile distclean-generic \
|
||||||
distclean-hdr distclean-libtool distclean-tags
|
distclean-hdr distclean-libtool distclean-tags
|
||||||
|
@ -1650,7 +2061,7 @@ installcheck-am:
|
||||||
maintainer-clean: maintainer-clean-am
|
maintainer-clean: maintainer-clean-am
|
||||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||||
-rm -rf $(top_srcdir)/autom4te.cache
|
-rm -rf $(top_srcdir)/autom4te.cache
|
||||||
-rm -rf src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
|
-rm -rf src/client/$(DEPDIR) src/client/linux/crash_generation/$(DEPDIR) src/client/linux/handler/$(DEPDIR) src/client/linux/minidump_writer/$(DEPDIR) src/common/$(DEPDIR) src/common/linux/$(DEPDIR) src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
|
||||||
-rm -f Makefile
|
-rm -f Makefile
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||||
|
|
||||||
|
|
518
configure
vendored
518
configure
vendored
|
@ -749,6 +749,10 @@ LTLIBOBJS
|
||||||
LIBOBJS
|
LIBOBJS
|
||||||
SELFTEST_FALSE
|
SELFTEST_FALSE
|
||||||
SELFTEST_TRUE
|
SELFTEST_TRUE
|
||||||
|
PTHREAD_CFLAGS
|
||||||
|
PTHREAD_LIBS
|
||||||
|
PTHREAD_CC
|
||||||
|
ax_pthread_config
|
||||||
LIBTOOL_DEPS
|
LIBTOOL_DEPS
|
||||||
CXXCPP
|
CXXCPP
|
||||||
OTOOL64
|
OTOOL64
|
||||||
|
@ -872,6 +876,7 @@ with_pic
|
||||||
enable_fast_install
|
enable_fast_install
|
||||||
with_gnu_ld
|
with_gnu_ld
|
||||||
enable_libtool_lock
|
enable_libtool_lock
|
||||||
|
enable_m32
|
||||||
enable_selftest
|
enable_selftest
|
||||||
'
|
'
|
||||||
ac_precious_vars='build_alias
|
ac_precious_vars='build_alias
|
||||||
|
@ -1513,6 +1518,7 @@ Optional Features:
|
||||||
--enable-fast-install[=PKGS]
|
--enable-fast-install[=PKGS]
|
||||||
optimize for fast installation [default=yes]
|
optimize for fast installation [default=yes]
|
||||||
--disable-libtool-lock avoid locking (might break parallel builds)
|
--disable-libtool-lock avoid locking (might break parallel builds)
|
||||||
|
--enable-m32 Compile/build with -m32 (default is no)
|
||||||
--enable-selftest Run extra tests with "make check" (may conflict with
|
--enable-selftest Run extra tests with "make check" (may conflict with
|
||||||
optimizations) (default is no)
|
optimizations) (default is no)
|
||||||
|
|
||||||
|
@ -5117,13 +5123,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
|
||||||
else
|
else
|
||||||
lt_cv_nm_interface="BSD nm"
|
lt_cv_nm_interface="BSD nm"
|
||||||
echo "int some_variable = 0;" > conftest.$ac_ext
|
echo "int some_variable = 0;" > conftest.$ac_ext
|
||||||
(eval echo "\"\$as_me:5120: $ac_compile\"" >&5)
|
(eval echo "\"\$as_me:5126: $ac_compile\"" >&5)
|
||||||
(eval "$ac_compile" 2>conftest.err)
|
(eval "$ac_compile" 2>conftest.err)
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
(eval echo "\"\$as_me:5123: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
|
(eval echo "\"\$as_me:5129: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
|
||||||
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
|
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
(eval echo "\"\$as_me:5126: output\"" >&5)
|
(eval echo "\"\$as_me:5132: output\"" >&5)
|
||||||
cat conftest.out >&5
|
cat conftest.out >&5
|
||||||
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
|
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
|
||||||
lt_cv_nm_interface="MS dumpbin"
|
lt_cv_nm_interface="MS dumpbin"
|
||||||
|
@ -6329,7 +6335,7 @@ ia64-*-hpux*)
|
||||||
;;
|
;;
|
||||||
*-*-irix6*)
|
*-*-irix6*)
|
||||||
# Find out which ABI we are using.
|
# Find out which ABI we are using.
|
||||||
echo '#line 6332 "configure"' > conftest.$ac_ext
|
echo '#line 6338 "configure"' > conftest.$ac_ext
|
||||||
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
|
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
|
||||||
(eval $ac_compile) 2>&5
|
(eval $ac_compile) 2>&5
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
|
@ -8245,11 +8251,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8248: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8254: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:8252: \$? = $ac_status" >&5
|
echo "$as_me:8258: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
|
@ -8584,11 +8590,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8587: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8593: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:8591: \$? = $ac_status" >&5
|
echo "$as_me:8597: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
|
@ -8689,11 +8695,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8692: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8698: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8696: \$? = $ac_status" >&5
|
echo "$as_me:8702: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
|
@ -8744,11 +8750,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:8747: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:8753: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:8751: \$? = $ac_status" >&5
|
echo "$as_me:8757: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
|
@ -11111,7 +11117,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11114 "configure"
|
#line 11120 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
@ -11207,7 +11213,7 @@ else
|
||||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||||
lt_status=$lt_dlunknown
|
lt_status=$lt_dlunknown
|
||||||
cat > conftest.$ac_ext <<_LT_EOF
|
cat > conftest.$ac_ext <<_LT_EOF
|
||||||
#line 11210 "configure"
|
#line 11216 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
@ -13163,11 +13169,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:13166: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:13172: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>conftest.err)
|
(eval "$lt_compile" 2>conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat conftest.err >&5
|
cat conftest.err >&5
|
||||||
echo "$as_me:13170: \$? = $ac_status" >&5
|
echo "$as_me:13176: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s "$ac_outfile"; then
|
if (exit $ac_status) && test -s "$ac_outfile"; then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
# So say no if there are warnings other than the usual output.
|
# So say no if there are warnings other than the usual output.
|
||||||
|
@ -13262,11 +13268,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:13265: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:13271: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:13269: \$? = $ac_status" >&5
|
echo "$as_me:13275: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
|
@ -13314,11 +13320,11 @@ else
|
||||||
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
|
||||||
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
|
||||||
-e 's:$: $lt_compiler_flag:'`
|
-e 's:$: $lt_compiler_flag:'`
|
||||||
(eval echo "\"\$as_me:13317: $lt_compile\"" >&5)
|
(eval echo "\"\$as_me:13323: $lt_compile\"" >&5)
|
||||||
(eval "$lt_compile" 2>out/conftest.err)
|
(eval "$lt_compile" 2>out/conftest.err)
|
||||||
ac_status=$?
|
ac_status=$?
|
||||||
cat out/conftest.err >&5
|
cat out/conftest.err >&5
|
||||||
echo "$as_me:13321: \$? = $ac_status" >&5
|
echo "$as_me:13327: \$? = $ac_status" >&5
|
||||||
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
if (exit $ac_status) && test -s out/conftest2.$ac_objext
|
||||||
then
|
then
|
||||||
# The compiler can only warn and ignore the option if not recognized
|
# The compiler can only warn and ignore the option if not recognized
|
||||||
|
@ -14380,6 +14386,478 @@ $as_echo "#define STDC_HEADERS 1" >>confdefs.h
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# ===========================================================================
|
||||||
|
# http://www.nongnu.org/autoconf-archive/ax_pthread.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro figures out how to build C programs using POSIX threads. It
|
||||||
|
# sets the PTHREAD_LIBS output variable to the threads library and linker
|
||||||
|
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
|
||||||
|
# flags that are needed. (The user can also force certain compiler
|
||||||
|
# flags/libs to be tested by setting these environment variables.)
|
||||||
|
#
|
||||||
|
# Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||||
|
# multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||||
|
# is necessary on AIX to use the special cc_r compiler alias.)
|
||||||
|
#
|
||||||
|
# NOTE: You are assumed to not only compile your program with these flags,
|
||||||
|
# but also link it with them as well. e.g. you should link with
|
||||||
|
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||||
|
#
|
||||||
|
# If you are only building threads programs, you may wish to use these
|
||||||
|
# variables in your default LIBS, CFLAGS, and CC:
|
||||||
|
#
|
||||||
|
# LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
# CC="$PTHREAD_CC"
|
||||||
|
#
|
||||||
|
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||||
|
# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
|
||||||
|
# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||||
|
#
|
||||||
|
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
|
||||||
|
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
||||||
|
# is not found. If ACTION-IF-FOUND is not specified, the default action
|
||||||
|
# will define HAVE_PTHREAD.
|
||||||
|
#
|
||||||
|
# Please let the authors know if this macro fails on any platform, or if
|
||||||
|
# you have any other suggestions or comments. This macro was based on work
|
||||||
|
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
|
||||||
|
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
|
||||||
|
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
|
||||||
|
# grateful for the helpful feedback of numerous users.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by the
|
||||||
|
# Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 6
|
||||||
|
|
||||||
|
# This is what autoupdate's m4 run will expand. It fires
|
||||||
|
# the warning (with _au_warn_XXX), outputs it into the
|
||||||
|
# updated configure.ac (with AC_DIAGNOSE), and then outputs
|
||||||
|
# the replacement expansion.
|
||||||
|
|
||||||
|
|
||||||
|
# This is an auxiliary macro that is also run when
|
||||||
|
# autoupdate runs m4. It simply calls m4_warning, but
|
||||||
|
# we need a wrapper so that each warning is emitted only
|
||||||
|
# once. We break the quoting in m4_warning's argument in
|
||||||
|
# order to expand this macro's arguments, not AU_DEFUN's.
|
||||||
|
|
||||||
|
|
||||||
|
# Finally, this is the expansion that is picked up by
|
||||||
|
# autoconf. It tells the user to run autoupdate, and
|
||||||
|
# then outputs the replacement expansion. We do not care
|
||||||
|
# about autoupdate's warning because that contains
|
||||||
|
# information on what to do *after* running autoupdate.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ac_ext=c
|
||||||
|
ac_cpp='$CPP $CPPFLAGS'
|
||||||
|
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||||
|
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||||
|
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||||
|
|
||||||
|
ax_pthread_ok=no
|
||||||
|
|
||||||
|
# We used to check for pthread.h first, but this fails if pthread.h
|
||||||
|
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||||
|
# It gets checked for in the link test anyway.
|
||||||
|
|
||||||
|
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||||
|
# etcetera environment variables, and if threads linking works using
|
||||||
|
# them:
|
||||||
|
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
|
||||||
|
$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any GCC internal prototype to avoid an error.
|
||||||
|
Use char because int might match the return type of a GCC
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
char pthread_join ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return pthread_join ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
ax_pthread_ok=yes
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
|
||||||
|
$as_echo "$ax_pthread_ok" >&6; }
|
||||||
|
if test x"$ax_pthread_ok" = xno; then
|
||||||
|
PTHREAD_LIBS=""
|
||||||
|
PTHREAD_CFLAGS=""
|
||||||
|
fi
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We must check for the threads library under a number of different
|
||||||
|
# names; the ordering is very important because some systems
|
||||||
|
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||||
|
# libraries is broken (non-POSIX).
|
||||||
|
|
||||||
|
# Create a list of thread flags to try. Items starting with a "-" are
|
||||||
|
# C compiler flags, and other items are library names, except for "none"
|
||||||
|
# which indicates that we try without any flags at all, and "pthread-config"
|
||||||
|
# which is a program returning the flags for the Pth emulation library.
|
||||||
|
|
||||||
|
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||||
|
|
||||||
|
# The ordering *is* (sometimes) important. Some notes on the
|
||||||
|
# individual items follow:
|
||||||
|
|
||||||
|
# pthreads: AIX (must check this before -lpthread)
|
||||||
|
# none: in case threads are in libc; should be tried before -Kthread and
|
||||||
|
# other compiler flags to prevent continual compiler warnings
|
||||||
|
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||||
|
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||||
|
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||||
|
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||||
|
# -pthreads: Solaris/gcc
|
||||||
|
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||||
|
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||||
|
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||||
|
# also defines -D_REENTRANT)
|
||||||
|
# ... -mt is also the pthreads flag for HP/aCC
|
||||||
|
# pthread: Linux, etcetera
|
||||||
|
# --thread-safe: KAI C++
|
||||||
|
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||||
|
|
||||||
|
case "${host_cpu}-${host_os}" in
|
||||||
|
*solaris*)
|
||||||
|
|
||||||
|
# On Solaris (at least, for some versions), libc contains stubbed
|
||||||
|
# (non-functional) versions of the pthreads routines, so link-based
|
||||||
|
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||||
|
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||||
|
# a function called by this macro, so we could check for that, but
|
||||||
|
# who knows whether they'll stub that too in a future libc.) So,
|
||||||
|
# we'll just look for -pthreads and -lpthread first:
|
||||||
|
|
||||||
|
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*-darwin*)
|
||||||
|
acx_pthread_flags="-pthread $acx_pthread_flags"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test x"$ax_pthread_ok" = xno; then
|
||||||
|
for flag in $ax_pthread_flags; do
|
||||||
|
|
||||||
|
case $flag in
|
||||||
|
none)
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
|
||||||
|
$as_echo_n "checking whether pthreads work without any flags... " >&6; }
|
||||||
|
;;
|
||||||
|
|
||||||
|
-*)
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
|
||||||
|
$as_echo_n "checking whether pthreads work with $flag... " >&6; }
|
||||||
|
PTHREAD_CFLAGS="$flag"
|
||||||
|
;;
|
||||||
|
|
||||||
|
pthread-config)
|
||||||
|
# Extract the first word of "pthread-config", so it can be a program name with args.
|
||||||
|
set dummy pthread-config; ac_word=$2
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||||
|
$as_echo_n "checking for $ac_word... " >&6; }
|
||||||
|
if test "${ac_cv_prog_ax_pthread_config+set}" = set; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
if test -n "$ax_pthread_config"; then
|
||||||
|
ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
|
||||||
|
else
|
||||||
|
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
|
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
||||||
|
ac_cv_prog_ax_pthread_config="yes"
|
||||||
|
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
|
break 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
|
||||||
|
test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ax_pthread_config=$ac_cv_prog_ax_pthread_config
|
||||||
|
if test -n "$ax_pthread_config"; then
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
|
||||||
|
$as_echo "$ax_pthread_config" >&6; }
|
||||||
|
else
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
$as_echo "no" >&6; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test x"$ax_pthread_config" = xno; then continue; fi
|
||||||
|
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||||
|
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
|
||||||
|
$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
|
||||||
|
PTHREAD_LIBS="-l$flag"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
|
||||||
|
# Check for various functions. We must include pthread.h,
|
||||||
|
# since some functions may be macros. (On the Sequent, we
|
||||||
|
# need a special flag -Kthread to make this header compile.)
|
||||||
|
# We check for pthread_join because it is in -lpthread on IRIX
|
||||||
|
# while pthread_create is in libc. We check for pthread_attr_init
|
||||||
|
# due to DEC craziness with -lpthreads. We check for
|
||||||
|
# pthread_cleanup_push because it is one of the few pthread
|
||||||
|
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||||
|
# We try pthread_create on general principles.
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <pthread.h>
|
||||||
|
static void routine(void* a) {a=0;}
|
||||||
|
static void* start_routine(void* a) {return a;}
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
pthread_t th; pthread_attr_t attr;
|
||||||
|
pthread_join(th, 0);
|
||||||
|
pthread_attr_init(&attr);
|
||||||
|
pthread_cleanup_push(routine, 0);
|
||||||
|
pthread_create(&th,0,start_routine,0);
|
||||||
|
pthread_cleanup_pop(0);
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
ax_pthread_ok=yes
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
|
||||||
|
$as_echo "$ax_pthread_ok" >&6; }
|
||||||
|
if test "x$ax_pthread_ok" = xyes; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
|
||||||
|
PTHREAD_LIBS=""
|
||||||
|
PTHREAD_CFLAGS=""
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Various other checks:
|
||||||
|
if test "x$ax_pthread_ok" = xyes; then
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
|
||||||
|
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
|
||||||
|
$as_echo_n "checking for joinable pthread attribute... " >&6; }
|
||||||
|
attr_name=unknown
|
||||||
|
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
#include <pthread.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
int attr=$attr; return attr;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
attr_name=$attr; break
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
|
done
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
|
||||||
|
$as_echo "$attr_name" >&6; }
|
||||||
|
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define PTHREAD_CREATE_JOINABLE $attr_name
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
|
||||||
|
$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
|
||||||
|
flag=no
|
||||||
|
case "${host_cpu}-${host_os}" in
|
||||||
|
*-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
|
||||||
|
*solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
|
||||||
|
esac
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
|
||||||
|
$as_echo "${flag}" >&6; }
|
||||||
|
if test "x$flag" != xno; then
|
||||||
|
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
|
||||||
|
# More AIX lossage: must compile with xlc_r or cc_r
|
||||||
|
if test x"$GCC" != xyes; then
|
||||||
|
for ac_prog in xlc_r cc_r
|
||||||
|
do
|
||||||
|
# Extract the first word of "$ac_prog", so it can be a program name with args.
|
||||||
|
set dummy $ac_prog; ac_word=$2
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
|
||||||
|
$as_echo_n "checking for $ac_word... " >&6; }
|
||||||
|
if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
if test -n "$PTHREAD_CC"; then
|
||||||
|
ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
|
||||||
|
else
|
||||||
|
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
for ac_exec_ext in '' $ac_executable_extensions; do
|
||||||
|
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
|
||||||
|
ac_cv_prog_PTHREAD_CC="$ac_prog"
|
||||||
|
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
|
||||||
|
break 2
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
|
||||||
|
if test -n "$PTHREAD_CC"; then
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
|
||||||
|
$as_echo "$PTHREAD_CC" >&6; }
|
||||||
|
else
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||||
|
$as_echo "no" >&6; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
test -n "$PTHREAD_CC" && break
|
||||||
|
done
|
||||||
|
test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
|
||||||
|
|
||||||
|
else
|
||||||
|
PTHREAD_CC=$CC
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
PTHREAD_CC="$CC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||||
|
if test x"$ax_pthread_ok" = xyes; then
|
||||||
|
|
||||||
|
$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
|
||||||
|
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ax_pthread_ok=no
|
||||||
|
|
||||||
|
fi
|
||||||
|
ac_ext=c
|
||||||
|
ac_cpp='$CPP $CPPFLAGS'
|
||||||
|
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
|
||||||
|
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
|
||||||
|
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Check whether --enable-m32 was given.
|
||||||
|
if test "${enable_m32+set}" = set; then :
|
||||||
|
enableval=$enable_m32; case "${enableval}" in
|
||||||
|
yes)
|
||||||
|
CFLAGS=$(CFLAGS) -m32
|
||||||
|
usem32=true
|
||||||
|
;;
|
||||||
|
no)
|
||||||
|
usem32=false
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
as_fn_error "bad value ${enableval} for --enable-m32" "$LINENO" 5
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
usem32=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Check whether --enable-selftest was given.
|
# Check whether --enable-selftest was given.
|
||||||
if test "${enable_selftest+set}" = set; then :
|
if test "${enable_selftest+set}" = set; then :
|
||||||
|
|
20
configure.ac
20
configure.ac
|
@ -46,6 +46,26 @@ AC_PROG_LIBTOOL
|
||||||
AC_SUBST(LIBTOOL_DEPS)
|
AC_SUBST(LIBTOOL_DEPS)
|
||||||
|
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
|
m4_include(m4/ax_pthread.m4)
|
||||||
|
AX_PTHREAD
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(m32,
|
||||||
|
AS_HELP_STRING([--enable-m32],
|
||||||
|
[Compile/build with -m32]
|
||||||
|
[(default is no)]),
|
||||||
|
[case "${enableval}" in
|
||||||
|
yes)
|
||||||
|
CFLAGS=$(CFLAGS) -m32
|
||||||
|
usem32=true
|
||||||
|
;;
|
||||||
|
no)
|
||||||
|
usem32=false
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR(bad value ${enableval} for --enable-m32)
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
[usem32=false])
|
||||||
|
|
||||||
AC_ARG_ENABLE(selftest,
|
AC_ARG_ENABLE(selftest,
|
||||||
AS_HELP_STRING([--enable-selftest],
|
AS_HELP_STRING([--enable-selftest],
|
||||||
|
|
283
m4/ax_pthread.m4
Normal file
283
m4/ax_pthread.m4
Normal file
|
@ -0,0 +1,283 @@
|
||||||
|
# ===========================================================================
|
||||||
|
# http://www.nongnu.org/autoconf-archive/ax_pthread.html
|
||||||
|
# ===========================================================================
|
||||||
|
#
|
||||||
|
# SYNOPSIS
|
||||||
|
#
|
||||||
|
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
#
|
||||||
|
# This macro figures out how to build C programs using POSIX threads. It
|
||||||
|
# sets the PTHREAD_LIBS output variable to the threads library and linker
|
||||||
|
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
|
||||||
|
# flags that are needed. (The user can also force certain compiler
|
||||||
|
# flags/libs to be tested by setting these environment variables.)
|
||||||
|
#
|
||||||
|
# Also sets PTHREAD_CC to any special C compiler that is needed for
|
||||||
|
# multi-threaded programs (defaults to the value of CC otherwise). (This
|
||||||
|
# is necessary on AIX to use the special cc_r compiler alias.)
|
||||||
|
#
|
||||||
|
# NOTE: You are assumed to not only compile your program with these flags,
|
||||||
|
# but also link it with them as well. e.g. you should link with
|
||||||
|
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
||||||
|
#
|
||||||
|
# If you are only building threads programs, you may wish to use these
|
||||||
|
# variables in your default LIBS, CFLAGS, and CC:
|
||||||
|
#
|
||||||
|
# LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
# CC="$PTHREAD_CC"
|
||||||
|
#
|
||||||
|
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
||||||
|
# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
|
||||||
|
# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
||||||
|
#
|
||||||
|
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
|
||||||
|
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
||||||
|
# is not found. If ACTION-IF-FOUND is not specified, the default action
|
||||||
|
# will define HAVE_PTHREAD.
|
||||||
|
#
|
||||||
|
# Please let the authors know if this macro fails on any platform, or if
|
||||||
|
# you have any other suggestions or comments. This macro was based on work
|
||||||
|
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
|
||||||
|
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
|
||||||
|
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
|
||||||
|
# grateful for the helpful feedback of numerous users.
|
||||||
|
#
|
||||||
|
# LICENSE
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by the
|
||||||
|
# Free Software Foundation, either version 3 of the License, or (at your
|
||||||
|
# option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
# Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along
|
||||||
|
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||||
|
# gives unlimited permission to copy, distribute and modify the configure
|
||||||
|
# scripts that are the output of Autoconf when processing the Macro. You
|
||||||
|
# need not follow the terms of the GNU General Public License when using
|
||||||
|
# or distributing such scripts, even though portions of the text of the
|
||||||
|
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||||
|
# all other use of the material that constitutes the Autoconf Macro.
|
||||||
|
#
|
||||||
|
# This special exception to the GPL applies to versions of the Autoconf
|
||||||
|
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||||
|
# modified version of the Autoconf Macro, you may extend this special
|
||||||
|
# exception to the GPL to apply to your modified version as well.
|
||||||
|
|
||||||
|
#serial 6
|
||||||
|
|
||||||
|
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
||||||
|
AC_DEFUN([AX_PTHREAD], [
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
||||||
|
AC_LANG_SAVE
|
||||||
|
AC_LANG_C
|
||||||
|
ax_pthread_ok=no
|
||||||
|
|
||||||
|
# We used to check for pthread.h first, but this fails if pthread.h
|
||||||
|
# requires special compiler flags (e.g. on True64 or Sequent).
|
||||||
|
# It gets checked for in the link test anyway.
|
||||||
|
|
||||||
|
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
||||||
|
# etcetera environment variables, and if threads linking works using
|
||||||
|
# them:
|
||||||
|
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
|
||||||
|
AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
|
||||||
|
AC_MSG_RESULT($ax_pthread_ok)
|
||||||
|
if test x"$ax_pthread_ok" = xno; then
|
||||||
|
PTHREAD_LIBS=""
|
||||||
|
PTHREAD_CFLAGS=""
|
||||||
|
fi
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We must check for the threads library under a number of different
|
||||||
|
# names; the ordering is very important because some systems
|
||||||
|
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
||||||
|
# libraries is broken (non-POSIX).
|
||||||
|
|
||||||
|
# Create a list of thread flags to try. Items starting with a "-" are
|
||||||
|
# C compiler flags, and other items are library names, except for "none"
|
||||||
|
# which indicates that we try without any flags at all, and "pthread-config"
|
||||||
|
# which is a program returning the flags for the Pth emulation library.
|
||||||
|
|
||||||
|
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
||||||
|
|
||||||
|
# The ordering *is* (sometimes) important. Some notes on the
|
||||||
|
# individual items follow:
|
||||||
|
|
||||||
|
# pthreads: AIX (must check this before -lpthread)
|
||||||
|
# none: in case threads are in libc; should be tried before -Kthread and
|
||||||
|
# other compiler flags to prevent continual compiler warnings
|
||||||
|
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
||||||
|
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
||||||
|
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
||||||
|
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
|
||||||
|
# -pthreads: Solaris/gcc
|
||||||
|
# -mthreads: Mingw32/gcc, Lynx/gcc
|
||||||
|
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
||||||
|
# doesn't hurt to check since this sometimes defines pthreads too;
|
||||||
|
# also defines -D_REENTRANT)
|
||||||
|
# ... -mt is also the pthreads flag for HP/aCC
|
||||||
|
# pthread: Linux, etcetera
|
||||||
|
# --thread-safe: KAI C++
|
||||||
|
# pthread-config: use pthread-config program (for GNU Pth library)
|
||||||
|
|
||||||
|
case "${host_cpu}-${host_os}" in
|
||||||
|
*solaris*)
|
||||||
|
|
||||||
|
# On Solaris (at least, for some versions), libc contains stubbed
|
||||||
|
# (non-functional) versions of the pthreads routines, so link-based
|
||||||
|
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
|
||||||
|
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
|
||||||
|
# a function called by this macro, so we could check for that, but
|
||||||
|
# who knows whether they'll stub that too in a future libc.) So,
|
||||||
|
# we'll just look for -pthreads and -lpthread first:
|
||||||
|
|
||||||
|
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*-darwin*)
|
||||||
|
acx_pthread_flags="-pthread $acx_pthread_flags"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test x"$ax_pthread_ok" = xno; then
|
||||||
|
for flag in $ax_pthread_flags; do
|
||||||
|
|
||||||
|
case $flag in
|
||||||
|
none)
|
||||||
|
AC_MSG_CHECKING([whether pthreads work without any flags])
|
||||||
|
;;
|
||||||
|
|
||||||
|
-*)
|
||||||
|
AC_MSG_CHECKING([whether pthreads work with $flag])
|
||||||
|
PTHREAD_CFLAGS="$flag"
|
||||||
|
;;
|
||||||
|
|
||||||
|
pthread-config)
|
||||||
|
AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
|
||||||
|
if test x"$ax_pthread_config" = xno; then continue; fi
|
||||||
|
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
||||||
|
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
AC_MSG_CHECKING([for the pthreads library -l$flag])
|
||||||
|
PTHREAD_LIBS="-l$flag"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
|
||||||
|
# Check for various functions. We must include pthread.h,
|
||||||
|
# since some functions may be macros. (On the Sequent, we
|
||||||
|
# need a special flag -Kthread to make this header compile.)
|
||||||
|
# We check for pthread_join because it is in -lpthread on IRIX
|
||||||
|
# while pthread_create is in libc. We check for pthread_attr_init
|
||||||
|
# due to DEC craziness with -lpthreads. We check for
|
||||||
|
# pthread_cleanup_push because it is one of the few pthread
|
||||||
|
# functions on Solaris that doesn't have a non-functional libc stub.
|
||||||
|
# We try pthread_create on general principles.
|
||||||
|
AC_TRY_LINK([#include <pthread.h>
|
||||||
|
static void routine(void* a) {a=0;}
|
||||||
|
static void* start_routine(void* a) {return a;}],
|
||||||
|
[pthread_t th; pthread_attr_t attr;
|
||||||
|
pthread_join(th, 0);
|
||||||
|
pthread_attr_init(&attr);
|
||||||
|
pthread_cleanup_push(routine, 0);
|
||||||
|
pthread_create(&th,0,start_routine,0);
|
||||||
|
pthread_cleanup_pop(0); ],
|
||||||
|
[ax_pthread_ok=yes])
|
||||||
|
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
|
||||||
|
AC_MSG_RESULT($ax_pthread_ok)
|
||||||
|
if test "x$ax_pthread_ok" = xyes; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
|
||||||
|
PTHREAD_LIBS=""
|
||||||
|
PTHREAD_CFLAGS=""
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Various other checks:
|
||||||
|
if test "x$ax_pthread_ok" = xyes; then
|
||||||
|
save_LIBS="$LIBS"
|
||||||
|
LIBS="$PTHREAD_LIBS $LIBS"
|
||||||
|
save_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||||
|
|
||||||
|
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
||||||
|
AC_MSG_CHECKING([for joinable pthread attribute])
|
||||||
|
attr_name=unknown
|
||||||
|
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
||||||
|
AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
|
||||||
|
[attr_name=$attr; break])
|
||||||
|
done
|
||||||
|
AC_MSG_RESULT($attr_name)
|
||||||
|
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
|
||||||
|
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
|
||||||
|
[Define to necessary symbol if this constant
|
||||||
|
uses a non-standard name on your system.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([if more special flags are required for pthreads])
|
||||||
|
flag=no
|
||||||
|
case "${host_cpu}-${host_os}" in
|
||||||
|
*-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
|
||||||
|
*solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
|
||||||
|
esac
|
||||||
|
AC_MSG_RESULT(${flag})
|
||||||
|
if test "x$flag" != xno; then
|
||||||
|
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBS="$save_LIBS"
|
||||||
|
CFLAGS="$save_CFLAGS"
|
||||||
|
|
||||||
|
# More AIX lossage: must compile with xlc_r or cc_r
|
||||||
|
if test x"$GCC" != xyes; then
|
||||||
|
AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
|
||||||
|
else
|
||||||
|
PTHREAD_CC=$CC
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
PTHREAD_CC="$CC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(PTHREAD_LIBS)
|
||||||
|
AC_SUBST(PTHREAD_CFLAGS)
|
||||||
|
AC_SUBST(PTHREAD_CC)
|
||||||
|
|
||||||
|
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
||||||
|
if test x"$ax_pthread_ok" = xyes; then
|
||||||
|
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ax_pthread_ok=no
|
||||||
|
$2
|
||||||
|
fi
|
||||||
|
AC_LANG_RESTORE
|
||||||
|
])dnl AX_PTHREAD
|
|
@ -1,7 +1,7 @@
|
||||||
CXX=g++
|
CXX=g++
|
||||||
CC=gcc
|
CC=gcc
|
||||||
|
|
||||||
CXXFLAGS=-gstabs+ -I../../ -I../../testing/gtest/include -I../../testing -I../../third_party/linux/include -I../../testing/include -I../../testing/gtest -D_REENTRANT -m32 -Wall
|
CXXFLAGS=-gstabs+ -I../../ -I../../testing/gtest/include -I../../testing -I../../third_party/linux/include -I../../testing/include -I../../testing/gtest -D_REENTRANT -Wall
|
||||||
CFLAGS=$(CXXFLAGS)
|
CFLAGS=$(CXXFLAGS)
|
||||||
LDFLAGS=-lpthread
|
LDFLAGS=-lpthread
|
||||||
|
|
||||||
|
@ -37,7 +37,13 @@ LIB_C_SRC = ../../common/convert_UTF.c
|
||||||
LIB_CC_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o,$(LIB_CC_SRC))
|
LIB_CC_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o,$(LIB_CC_SRC))
|
||||||
LIB_C_OBJ=$(patsubst %.c, $(OBJ_DIR)/%.o, $(LIB_C_SRC))
|
LIB_C_OBJ=$(patsubst %.c, $(OBJ_DIR)/%.o, $(LIB_C_SRC))
|
||||||
|
|
||||||
|
DUMPER_HELPER_TEST_C_SRC=minidump_writer/linux_dumper_unittest_helper.c
|
||||||
|
|
||||||
|
DUMPER_HELPER_TEST_C_OBJ=$(patsubst %.cc, $(OBJ_DIR)/%.o, \
|
||||||
|
$(DUMPER_HELPER_TEST_C_SRC))
|
||||||
|
|
||||||
# Unit tests for client library
|
# Unit tests for client library
|
||||||
|
|
||||||
TEST_CC_SRC=handler/exception_handler_unittest.cc \
|
TEST_CC_SRC=handler/exception_handler_unittest.cc \
|
||||||
minidump_writer/directory_reader_unittest.cc \
|
minidump_writer/directory_reader_unittest.cc \
|
||||||
minidump_writer/line_reader_unittest.cc \
|
minidump_writer/line_reader_unittest.cc \
|
||||||
|
@ -72,9 +78,11 @@ SENDER_UNITTEST_BIN=$(BIN_DIR)/google_crashdump_uploader_test
|
||||||
# Sender CLI tool binary
|
# Sender CLI tool binary
|
||||||
SENDER_CLI_TOOL_BIN=$(BIN_DIR)/google_crashdump_uploader
|
SENDER_CLI_TOOL_BIN=$(BIN_DIR)/google_crashdump_uploader
|
||||||
|
|
||||||
|
DUMPER_HELPER_TEST_BIN=$(BIN_DIR)/linux_dumper_unittest_helper
|
||||||
|
|
||||||
.PHONY:all clean
|
.PHONY:all clean
|
||||||
|
|
||||||
all:$(BREAKPAD_LIBRARY) $(UNITTEST_BIN) $(SENDER_LIBRARY) $(SENDER_UNITTEST_BIN) $(SENDER_CLI_TOOL_BIN)
|
all:$(BREAKPAD_LIBRARY) $(UNITTEST_BIN) #$(SENDER_LIBRARY) $(SENDER_UNITTEST_BIN) $(SENDER_CLI_TOOL_BIN)
|
||||||
|
|
||||||
check:$(UNITTEST_BIN) $(SENDER_UNITTEST_BIN)
|
check:$(UNITTEST_BIN) $(SENDER_UNITTEST_BIN)
|
||||||
$(UNITTEST_BIN)
|
$(UNITTEST_BIN)
|
||||||
|
@ -83,9 +91,12 @@ check:$(UNITTEST_BIN) $(SENDER_UNITTEST_BIN)
|
||||||
$(BIN_DIR)/libbreakpad.a:$(LIB_CC_OBJ) $(LIB_C_OBJ)
|
$(BIN_DIR)/libbreakpad.a:$(LIB_CC_OBJ) $(LIB_C_OBJ)
|
||||||
$(AR) rcs $@ $^
|
$(AR) rcs $@ $^
|
||||||
|
|
||||||
$(BIN_DIR)/linux_client_test:$(TEST_CC_OBJ) $(BREAKPAD_LIBRARY)
|
$(BIN_DIR)/linux_dumper_unittest_helper:$(DUMPER_HELPER_TEST_C_OBJ)
|
||||||
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
|
$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@
|
||||||
|
|
||||||
|
$(BIN_DIR)/linux_client_test:$(TEST_CC_OBJ) $(BREAKPAD_LIBRARY) $(DUMPER_HELPER_TEST_BIN)
|
||||||
|
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(TEST_CC_OBJ) $(BREAKPAD_LIBRARY) -o $@
|
||||||
|
|
||||||
$(BIN_DIR)/libcrash_sender.a:$(SENDER_LIBRARY_OBJ)
|
$(BIN_DIR)/libcrash_sender.a:$(SENDER_LIBRARY_OBJ)
|
||||||
$(AR) rcs $@ $^
|
$(AR) rcs $@ $^
|
||||||
|
|
||||||
|
@ -100,4 +111,5 @@ $(BIN_DIR)/google_crashdump_uploader:$(SENDER_TOOL_OBJ) $(SENDER_LIBRARY) \
|
||||||
clean:
|
clean:
|
||||||
rm -f $(UNITTEST_BIN) $(BREAKPAD_LIBRARY) $(LIB_CC_OBJ) $(LIB_C_OBJ) \
|
rm -f $(UNITTEST_BIN) $(BREAKPAD_LIBRARY) $(LIB_CC_OBJ) $(LIB_C_OBJ) \
|
||||||
$(TEST_CC_OBJ) $(SENDER_LIBRARY_OBJ) $(SENDER_LIBRARY) \
|
$(TEST_CC_OBJ) $(SENDER_LIBRARY_OBJ) $(SENDER_LIBRARY) \
|
||||||
$(SENDER_TOOL_OBJ) $(SENDER_CLI_TOOL_BIN) $(SENDER_UNITTEST_BIN) core
|
$(SENDER_TOOL_OBJ) $(SENDER_CLI_TOOL_BIN) $(SENDER_UNITTEST_BIN) \
|
||||||
|
$(DUMPER_HELPER_TEST_BIN) core
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
@ -44,7 +45,6 @@ CrashGenerationClient::RequestDump(const void* blob, size_t blob_size)
|
||||||
{
|
{
|
||||||
int fds[2];
|
int fds[2];
|
||||||
sys_socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
|
sys_socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
|
||||||
|
|
||||||
static const unsigned kControlMsgSize = CMSG_SPACE(sizeof(int));
|
static const unsigned kControlMsgSize = CMSG_SPACE(sizeof(int));
|
||||||
|
|
||||||
struct kernel_msghdr msg;
|
struct kernel_msghdr msg;
|
||||||
|
|
|
@ -80,6 +80,9 @@
|
||||||
#include <ucontext.h>
|
#include <ucontext.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "common/linux/linux_libc_support.h"
|
#include "common/linux/linux_libc_support.h"
|
||||||
#include "common/linux/linux_syscall_support.h"
|
#include "common/linux/linux_syscall_support.h"
|
||||||
#include "common/linux/memory.h"
|
#include "common/linux/memory.h"
|
||||||
|
@ -88,7 +91,7 @@
|
||||||
|
|
||||||
// A wrapper for the tgkill syscall: send a signal to a specific thread.
|
// A wrapper for the tgkill syscall: send a signal to a specific thread.
|
||||||
static int tgkill(pid_t tgid, pid_t tid, int sig) {
|
static int tgkill(pid_t tgid, pid_t tid, int sig) {
|
||||||
syscall(__NR_tgkill, tgid, tid, sig);
|
return syscall(__NR_tgkill, tgid, tid, sig);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +148,6 @@ void ExceptionHandler::Init(const std::string &dump_path,
|
||||||
const int server_fd)
|
const int server_fd)
|
||||||
{
|
{
|
||||||
crash_handler_ = NULL;
|
crash_handler_ = NULL;
|
||||||
|
|
||||||
if (0 <= server_fd)
|
if (0 <= server_fd)
|
||||||
crash_generation_client_
|
crash_generation_client_
|
||||||
.reset(CrashGenerationClient::TryCreate(server_fd));
|
.reset(CrashGenerationClient::TryCreate(server_fd));
|
||||||
|
@ -209,7 +211,11 @@ void ExceptionHandler::UninstallHandlers() {
|
||||||
sigaction(old_handlers_[i].first, action, NULL);
|
sigaction(old_handlers_[i].first, action, NULL);
|
||||||
delete action;
|
delete action;
|
||||||
}
|
}
|
||||||
|
pthread_mutex_lock(&handler_stack_mutex_);
|
||||||
|
std::vector<ExceptionHandler*>::iterator handler =
|
||||||
|
std::find(handler_stack_->begin(), handler_stack_->end(), this);
|
||||||
|
handler_stack_->erase(handler);
|
||||||
|
pthread_mutex_unlock(&handler_stack_mutex_);
|
||||||
old_handlers_.clear();
|
old_handlers_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,12 +237,15 @@ void ExceptionHandler::UpdateNextID() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// void ExceptionHandler::set_crash_handler(HandlerCallback callback) {
|
||||||
|
// crash_handler_ = callback;
|
||||||
|
// }
|
||||||
|
|
||||||
// This function runs in a compromised context: see the top of the file.
|
// This function runs in a compromised context: see the top of the file.
|
||||||
// Runs on the crashing thread.
|
// Runs on the crashing thread.
|
||||||
// static
|
// static
|
||||||
void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) {
|
void ExceptionHandler::SignalHandler(int sig, siginfo_t* info, void* uc) {
|
||||||
// All the exception signals are blocked at this point.
|
// All the exception signals are blocked at this point.
|
||||||
|
|
||||||
pthread_mutex_lock(&handler_stack_mutex_);
|
pthread_mutex_lock(&handler_stack_mutex_);
|
||||||
|
|
||||||
if (!handler_stack_->size()) {
|
if (!handler_stack_->size()) {
|
||||||
|
@ -288,18 +297,25 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) {
|
||||||
|
|
||||||
// Allow ourselves to be dumped.
|
// Allow ourselves to be dumped.
|
||||||
sys_prctl(PR_SET_DUMPABLE, 1);
|
sys_prctl(PR_SET_DUMPABLE, 1);
|
||||||
|
|
||||||
CrashContext context;
|
CrashContext context;
|
||||||
memcpy(&context.siginfo, info, sizeof(siginfo_t));
|
memcpy(&context.siginfo, info, sizeof(siginfo_t));
|
||||||
memcpy(&context.context, uc, sizeof(struct ucontext));
|
memcpy(&context.context, uc, sizeof(struct ucontext));
|
||||||
memcpy(&context.float_state, ((struct ucontext *)uc)->uc_mcontext.fpregs,
|
#if !defined(__ARM_EABI__)
|
||||||
|
// FP state is not part of user ABI on ARM Linux.
|
||||||
|
struct ucontext *uc_ptr = (struct ucontext*)uc;
|
||||||
|
if (uc_ptr->uc_mcontext.fpregs) {
|
||||||
|
memcpy(&context.float_state,
|
||||||
|
uc_ptr->uc_mcontext.fpregs,
|
||||||
sizeof(context.float_state));
|
sizeof(context.float_state));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
context.tid = sys_gettid();
|
context.tid = sys_gettid();
|
||||||
|
if (crash_handler_ != NULL) {
|
||||||
if (crash_handler_ && crash_handler_(&context, sizeof(context),
|
if (crash_handler_(&context, sizeof(context),
|
||||||
callback_context_))
|
callback_context_)) {
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return GenerateDump(&context);
|
return GenerateDump(&context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,6 +380,7 @@ bool ExceptionHandler::WriteMinidump(const std::string &dump_path,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExceptionHandler::WriteMinidump() {
|
bool ExceptionHandler::WriteMinidump() {
|
||||||
|
#if !defined(__ARM_EABI__)
|
||||||
// Allow ourselves to be dumped.
|
// Allow ourselves to be dumped.
|
||||||
sys_prctl(PR_SET_DUMPABLE, 1);
|
sys_prctl(PR_SET_DUMPABLE, 1);
|
||||||
|
|
||||||
|
@ -378,6 +395,9 @@ bool ExceptionHandler::WriteMinidump() {
|
||||||
bool success = GenerateDump(&context);
|
bool success = GenerateDump(&context);
|
||||||
UpdateNextID();
|
UpdateNextID();
|
||||||
return success;
|
return success;
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif // !defined(__ARM_EABI__)
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace google_breakpad
|
} // namespace google_breakpad
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "client/linux/crash_generation/crash_generation_client.h"
|
#include "client/linux/crash_generation/crash_generation_client.h"
|
||||||
#include "processor/scoped_ptr.h"
|
#include "processor/scoped_ptr.h"
|
||||||
|
@ -42,6 +43,8 @@ struct sigaction;
|
||||||
|
|
||||||
namespace google_breakpad {
|
namespace google_breakpad {
|
||||||
|
|
||||||
|
class ExceptionHandler;
|
||||||
|
|
||||||
// ExceptionHandler
|
// ExceptionHandler
|
||||||
//
|
//
|
||||||
// ExceptionHandler can write a minidump file when an exception occurs,
|
// ExceptionHandler can write a minidump file when an exception occurs,
|
||||||
|
@ -163,7 +166,10 @@ class ExceptionHandler {
|
||||||
siginfo_t siginfo;
|
siginfo_t siginfo;
|
||||||
pid_t tid; // the crashing thread.
|
pid_t tid; // the crashing thread.
|
||||||
struct ucontext context;
|
struct ucontext context;
|
||||||
|
#if !defined(__ARM_EABI__)
|
||||||
|
// #ifdef this out because FP state is not part of user ABI for Linux ARM.
|
||||||
struct _libc_fpstate float_state;
|
struct _libc_fpstate float_state;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
// Returns whether out-of-process dump generation is used or not.
|
// Returns whether out-of-process dump generation is used or not.
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
|
|
||||||
#include "client/linux/handler//exception_handler.h"
|
#include "client/linux/handler/exception_handler.h"
|
||||||
#include "client/linux/minidump_writer/minidump_writer.h"
|
#include "client/linux/minidump_writer/minidump_writer.h"
|
||||||
#include "common/linux/eintr_wrapper.h"
|
#include "common/linux/eintr_wrapper.h"
|
||||||
#include "common/linux/linux_libc_support.h"
|
#include "common/linux/linux_libc_support.h"
|
||||||
|
@ -112,8 +112,8 @@ TEST(ExceptionHandlerTest, ChildCrash) {
|
||||||
ASSERT_TRUE(pfd.revents & POLLIN);
|
ASSERT_TRUE(pfd.revents & POLLIN);
|
||||||
|
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
ASSERT_EQ(read(fds[0], &len, sizeof(len)), sizeof(len));
|
ASSERT_EQ(read(fds[0], &len, sizeof(len)), (ssize_t)sizeof(len));
|
||||||
ASSERT_LT(len, 2048);
|
ASSERT_LT(len, (uint32_t)2048);
|
||||||
char* filename = reinterpret_cast<char*>(malloc(len + 1));
|
char* filename = reinterpret_cast<char*>(malloc(len + 1));
|
||||||
ASSERT_EQ(read(fds[0], filename, len), len);
|
ASSERT_EQ(read(fds[0], filename, len), len);
|
||||||
filename[len] = 0;
|
filename[len] = 0;
|
||||||
|
@ -137,12 +137,10 @@ CrashHandler(const void* crash_context, size_t crash_context_size,
|
||||||
const int fd = (intptr_t) context;
|
const int fd = (intptr_t) context;
|
||||||
int fds[2];
|
int fds[2];
|
||||||
pipe(fds);
|
pipe(fds);
|
||||||
|
|
||||||
struct kernel_msghdr msg = {0};
|
struct kernel_msghdr msg = {0};
|
||||||
struct kernel_iovec iov;
|
struct kernel_iovec iov;
|
||||||
iov.iov_base = const_cast<void*>(crash_context);
|
iov.iov_base = const_cast<void*>(crash_context);
|
||||||
iov.iov_len = crash_context_size;
|
iov.iov_len = crash_context_size;
|
||||||
|
|
||||||
msg.msg_iov = &iov;
|
msg.msg_iov = &iov;
|
||||||
msg.msg_iovlen = 1;
|
msg.msg_iovlen = 1;
|
||||||
char cmsg[kControlMsgSize];
|
char cmsg[kControlMsgSize];
|
||||||
|
@ -183,11 +181,10 @@ TEST(ExceptionHandlerTest, ExternalDumper) {
|
||||||
const pid_t child = fork();
|
const pid_t child = fork();
|
||||||
if (child == 0) {
|
if (child == 0) {
|
||||||
close(fds[0]);
|
close(fds[0]);
|
||||||
ExceptionHandler handler("/tmp", NULL, NULL, (void*) fds[1], true);
|
ExceptionHandler handler("/tmp1", NULL, NULL, (void*) fds[1], true);
|
||||||
handler.set_crash_handler(CrashHandler);
|
handler.set_crash_handler(CrashHandler);
|
||||||
*reinterpret_cast<int*>(NULL) = 0;
|
*reinterpret_cast<int*>(NULL) = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fds[1]);
|
close(fds[1]);
|
||||||
struct msghdr msg = {0};
|
struct msghdr msg = {0};
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
|
|
|
@ -69,9 +69,9 @@ TEST(LineReaderTest, OneLineTerminated) {
|
||||||
LineReader reader(fd);
|
LineReader reader(fd);
|
||||||
|
|
||||||
const char *line;
|
const char *line;
|
||||||
unsigned len;
|
unsigned int len;
|
||||||
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
||||||
ASSERT_EQ(len, 1);
|
ASSERT_EQ(len, (unsigned int)1);
|
||||||
ASSERT_EQ(line[0], 'a');
|
ASSERT_EQ(line[0], 'a');
|
||||||
ASSERT_EQ(line[1], 0);
|
ASSERT_EQ(line[1], 0);
|
||||||
reader.PopLine(len);
|
reader.PopLine(len);
|
||||||
|
@ -90,7 +90,7 @@ TEST(LineReaderTest, OneLine) {
|
||||||
const char *line;
|
const char *line;
|
||||||
unsigned len;
|
unsigned len;
|
||||||
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
||||||
ASSERT_EQ(len, 1);
|
ASSERT_EQ(len, (unsigned)1);
|
||||||
ASSERT_EQ(line[0], 'a');
|
ASSERT_EQ(line[0], 'a');
|
||||||
ASSERT_EQ(line[1], 0);
|
ASSERT_EQ(line[1], 0);
|
||||||
reader.PopLine(len);
|
reader.PopLine(len);
|
||||||
|
@ -109,13 +109,13 @@ TEST(LineReaderTest, TwoLinesTerminated) {
|
||||||
const char *line;
|
const char *line;
|
||||||
unsigned len;
|
unsigned len;
|
||||||
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
||||||
ASSERT_EQ(len, 1);
|
ASSERT_EQ(len, (unsigned)1);
|
||||||
ASSERT_EQ(line[0], 'a');
|
ASSERT_EQ(line[0], 'a');
|
||||||
ASSERT_EQ(line[1], 0);
|
ASSERT_EQ(line[1], 0);
|
||||||
reader.PopLine(len);
|
reader.PopLine(len);
|
||||||
|
|
||||||
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
||||||
ASSERT_EQ(len, 1);
|
ASSERT_EQ(len, (unsigned)1);
|
||||||
ASSERT_EQ(line[0], 'b');
|
ASSERT_EQ(line[0], 'b');
|
||||||
ASSERT_EQ(line[1], 0);
|
ASSERT_EQ(line[1], 0);
|
||||||
reader.PopLine(len);
|
reader.PopLine(len);
|
||||||
|
@ -134,13 +134,13 @@ TEST(LineReaderTest, TwoLines) {
|
||||||
const char *line;
|
const char *line;
|
||||||
unsigned len;
|
unsigned len;
|
||||||
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
||||||
ASSERT_EQ(len, 1);
|
ASSERT_EQ(len, (unsigned)1);
|
||||||
ASSERT_EQ(line[0], 'a');
|
ASSERT_EQ(line[0], 'a');
|
||||||
ASSERT_EQ(line[1], 0);
|
ASSERT_EQ(line[1], 0);
|
||||||
reader.PopLine(len);
|
reader.PopLine(len);
|
||||||
|
|
||||||
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
ASSERT_TRUE(reader.GetNextLine(&line, &len));
|
||||||
ASSERT_EQ(len, 1);
|
ASSERT_EQ(len, (unsigned)1);
|
||||||
ASSERT_EQ(line[0], 'b');
|
ASSERT_EQ(line[0], 'b');
|
||||||
ASSERT_EQ(line[1], 0);
|
ASSERT_EQ(line[1], 0);
|
||||||
reader.PopLine(len);
|
reader.PopLine(len);
|
||||||
|
|
|
@ -85,7 +85,7 @@ namespace google_breakpad {
|
||||||
|
|
||||||
LinuxDumper::LinuxDumper(int pid)
|
LinuxDumper::LinuxDumper(int pid)
|
||||||
: pid_(pid),
|
: pid_(pid),
|
||||||
threads_suspened_(false),
|
threads_suspended_(false),
|
||||||
threads_(&allocator_, 8),
|
threads_(&allocator_, 8),
|
||||||
mappings_(&allocator_) {
|
mappings_(&allocator_) {
|
||||||
}
|
}
|
||||||
|
@ -96,22 +96,22 @@ bool LinuxDumper::Init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LinuxDumper::ThreadsSuspend() {
|
bool LinuxDumper::ThreadsSuspend() {
|
||||||
if (threads_suspened_)
|
if (threads_suspended_)
|
||||||
return true;
|
return true;
|
||||||
bool good = true;
|
bool good = true;
|
||||||
for (size_t i = 0; i < threads_.size(); ++i)
|
for (size_t i = 0; i < threads_.size(); ++i)
|
||||||
good &= SuspendThread(threads_[i]);
|
good &= SuspendThread(threads_[i]);
|
||||||
threads_suspened_ = true;
|
threads_suspended_ = true;
|
||||||
return good;
|
return good;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LinuxDumper::ThreadsResume() {
|
bool LinuxDumper::ThreadsResume() {
|
||||||
if (!threads_suspened_)
|
if (!threads_suspended_)
|
||||||
return false;
|
return false;
|
||||||
bool good = true;
|
bool good = true;
|
||||||
for (size_t i = 0; i < threads_.size(); ++i)
|
for (size_t i = 0; i < threads_.size(); ++i)
|
||||||
good &= ResumeThread(threads_[i]);
|
good &= ResumeThread(threads_[i]);
|
||||||
threads_suspened_ = false;
|
threads_suspended_ = false;
|
||||||
return good;
|
return good;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,9 +312,9 @@ bool LinuxDumper::EnumerateThreads(wasteful_vector<pid_t>* result) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read thread info from /proc/$pid/status.
|
// Read thread info from /proc/$pid/status.
|
||||||
// Fill out the |tgid|, |ppid| and |pid| members of |info|. If unavailible,
|
// Fill out the |tgid|, |ppid| and |pid| members of |info|. If unavailable,
|
||||||
// these members are set to -1. Returns true iff all three members are
|
// these members are set to -1. Returns true iff all three members are
|
||||||
// availible.
|
// available.
|
||||||
bool LinuxDumper::ThreadInfoGet(pid_t tid, ThreadInfo* info) {
|
bool LinuxDumper::ThreadInfoGet(pid_t tid, ThreadInfo* info) {
|
||||||
assert(info != NULL);
|
assert(info != NULL);
|
||||||
char status_path[80];
|
char status_path[80];
|
||||||
|
@ -371,6 +371,8 @@ bool LinuxDumper::ThreadInfoGet(pid_t tid, ThreadInfo* info) {
|
||||||
memcpy(&stack_pointer, &info->regs.esp, sizeof(info->regs.esp));
|
memcpy(&stack_pointer, &info->regs.esp, sizeof(info->regs.esp));
|
||||||
#elif defined(__x86_64)
|
#elif defined(__x86_64)
|
||||||
memcpy(&stack_pointer, &info->regs.rsp, sizeof(info->regs.rsp));
|
memcpy(&stack_pointer, &info->regs.rsp, sizeof(info->regs.rsp));
|
||||||
|
#elif defined(__ARM_EABI__)
|
||||||
|
memcpy(&stack_pointer, &info->regs.uregs[R13], sizeof(info->regs.uregs[R13]));
|
||||||
#else
|
#else
|
||||||
#error "This code hasn't been ported to your platform yet."
|
#error "This code hasn't been ported to your platform yet."
|
||||||
#endif
|
#endif
|
||||||
|
@ -387,13 +389,9 @@ bool LinuxDumper::ThreadInfoGet(pid_t tid, ThreadInfo* info) {
|
||||||
// unwind. So we just grab, up to, 32k of stack.
|
// unwind. So we just grab, up to, 32k of stack.
|
||||||
bool LinuxDumper::GetStackInfo(const void** stack, size_t* stack_len,
|
bool LinuxDumper::GetStackInfo(const void** stack, size_t* stack_len,
|
||||||
uintptr_t int_stack_pointer) {
|
uintptr_t int_stack_pointer) {
|
||||||
#if defined(__i386) || defined(__x86_64)
|
|
||||||
static const bool stack_grows_down = true;
|
|
||||||
static const uintptr_t page_size = 4096;
|
|
||||||
#else
|
|
||||||
#error "This code has not been ported to your platform yet."
|
|
||||||
#endif
|
|
||||||
// Move the stack pointer to the bottom of the page that it's in.
|
// Move the stack pointer to the bottom of the page that it's in.
|
||||||
|
const uintptr_t page_size = getpagesize();
|
||||||
|
|
||||||
uint8_t* const stack_pointer =
|
uint8_t* const stack_pointer =
|
||||||
reinterpret_cast<uint8_t*>(int_stack_pointer & ~(page_size - 1));
|
reinterpret_cast<uint8_t*>(int_stack_pointer & ~(page_size - 1));
|
||||||
|
|
||||||
|
@ -403,26 +401,19 @@ bool LinuxDumper::GetStackInfo(const void** stack, size_t* stack_len,
|
||||||
const MappingInfo* mapping = FindMapping(stack_pointer);
|
const MappingInfo* mapping = FindMapping(stack_pointer);
|
||||||
if (!mapping)
|
if (!mapping)
|
||||||
return false;
|
return false;
|
||||||
if (stack_grows_down) {
|
|
||||||
const ptrdiff_t offset = stack_pointer - (uint8_t*) mapping->start_addr;
|
const ptrdiff_t offset = stack_pointer - (uint8_t*) mapping->start_addr;
|
||||||
const ptrdiff_t distance_to_end =
|
const ptrdiff_t distance_to_end =
|
||||||
static_cast<ptrdiff_t>(mapping->size) - offset;
|
static_cast<ptrdiff_t>(mapping->size) - offset;
|
||||||
*stack_len = distance_to_end > kStackToCapture ?
|
*stack_len = distance_to_end > kStackToCapture ?
|
||||||
kStackToCapture : distance_to_end;
|
kStackToCapture : distance_to_end;
|
||||||
*stack = stack_pointer;
|
*stack = stack_pointer;
|
||||||
} else {
|
|
||||||
const ptrdiff_t offset = stack_pointer - (uint8_t*) mapping->start_addr;
|
|
||||||
*stack_len = offset > kStackToCapture ? kStackToCapture : offset;
|
|
||||||
*stack = stack_pointer - *stack_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LinuxDumper::CopyFromProcess(void* dest, pid_t child, const void* src,
|
void LinuxDumper::CopyFromProcess(void* dest, pid_t child, const void* src,
|
||||||
size_t length) {
|
size_t length) {
|
||||||
unsigned long tmp;
|
unsigned long tmp = 55;
|
||||||
size_t done = 0;
|
size_t done = 0;
|
||||||
static const size_t word_size = sizeof(tmp);
|
static const size_t word_size = sizeof(tmp);
|
||||||
uint8_t* const local = (uint8_t*) dest;
|
uint8_t* const local = (uint8_t*) dest;
|
||||||
|
@ -430,8 +421,9 @@ void LinuxDumper::CopyFromProcess(void* dest, pid_t child, const void* src,
|
||||||
|
|
||||||
while (done < length) {
|
while (done < length) {
|
||||||
const size_t l = length - done > word_size ? word_size : length - done;
|
const size_t l = length - done > word_size ? word_size : length - done;
|
||||||
if (sys_ptrace(PTRACE_PEEKDATA, child, remote + done, &tmp) == -1)
|
if (sys_ptrace(PTRACE_PEEKDATA, child, remote + done, &tmp) == -1) {
|
||||||
tmp = 0;
|
tmp = 0;
|
||||||
|
}
|
||||||
memcpy(local + done, &tmp, l);
|
memcpy(local + done, &tmp, l);
|
||||||
done += l;
|
done += l;
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace google_breakpad {
|
||||||
typedef typeof(((struct user*) 0)->u_debugreg[0]) debugreg_t;
|
typedef typeof(((struct user*) 0)->u_debugreg[0]) debugreg_t;
|
||||||
|
|
||||||
// Typedef for our parsing of the auxv variables in /proc/pid/auxv.
|
// Typedef for our parsing of the auxv variables in /proc/pid/auxv.
|
||||||
#if defined(__i386)
|
#if defined(__i386) || defined(__ARM_EABI__)
|
||||||
typedef Elf32_auxv_t elf_aux_entry;
|
typedef Elf32_auxv_t elf_aux_entry;
|
||||||
#elif defined(__x86_64__)
|
#elif defined(__x86_64__)
|
||||||
typedef Elf64_auxv_t elf_aux_entry;
|
typedef Elf64_auxv_t elf_aux_entry;
|
||||||
|
@ -64,16 +64,20 @@ struct ThreadInfo {
|
||||||
const void* stack; // pointer to the stack area
|
const void* stack; // pointer to the stack area
|
||||||
size_t stack_len; // length of the stack to copy
|
size_t stack_len; // length of the stack to copy
|
||||||
|
|
||||||
user_regs_struct regs;
|
|
||||||
user_fpregs_struct fpregs;
|
|
||||||
#if defined(__i386)
|
|
||||||
user_fpxregs_struct fpxregs;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__i386) || defined(__x86_64)
|
#if defined(__i386) || defined(__x86_64)
|
||||||
|
user_regs_struct regs;
|
||||||
|
user_fpregs_struct fpregs;
|
||||||
static const unsigned kNumDebugRegisters = 8;
|
static const unsigned kNumDebugRegisters = 8;
|
||||||
debugreg_t dregs[8];
|
debugreg_t dregs[8];
|
||||||
|
#if defined(__i386)
|
||||||
|
user_fpxregs_struct fpxregs;
|
||||||
|
#endif // defined(__i386)
|
||||||
|
|
||||||
|
#elif defined(__ARM_EABI__)
|
||||||
|
// Mimicking how strace does this(see syscall.c, search for GETREGS)
|
||||||
|
struct user_regs regs;
|
||||||
|
struct user_fpregs fpregs;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -141,7 +145,7 @@ class LinuxDumper {
|
||||||
|
|
||||||
mutable PageAllocator allocator_;
|
mutable PageAllocator allocator_;
|
||||||
|
|
||||||
bool threads_suspened_;
|
bool threads_suspended_;
|
||||||
wasteful_vector<pid_t> threads_; // the ids of all the threads
|
wasteful_vector<pid_t> threads_; // the ids of all the threads
|
||||||
wasteful_vector<MappingInfo*> mappings_; // info from /proc/<pid>/maps
|
wasteful_vector<MappingInfo*> mappings_; // info from /proc/<pid>/maps
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,10 +29,13 @@
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "breakpad_googletest_includes.h"
|
||||||
#include "client/linux/minidump_writer/linux_dumper.h"
|
#include "client/linux/minidump_writer/linux_dumper.h"
|
||||||
#include "common/linux/file_id.h"
|
#include "common/linux/file_id.h"
|
||||||
#include "breakpad_googletest_includes.h"
|
#include "common/linux/memory.h"
|
||||||
|
|
||||||
using namespace google_breakpad;
|
using namespace google_breakpad;
|
||||||
|
|
||||||
|
@ -67,7 +70,7 @@ TEST(LinuxDumperTest, ThreadList) {
|
||||||
LinuxDumper dumper(getpid());
|
LinuxDumper dumper(getpid());
|
||||||
ASSERT_TRUE(dumper.Init());
|
ASSERT_TRUE(dumper.Init());
|
||||||
|
|
||||||
ASSERT_GE(dumper.threads().size(), 1);
|
ASSERT_GE(dumper.threads().size(), (size_t)1);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (size_t i = 0; i < dumper.threads().size(); ++i) {
|
for (size_t i = 0; i < dumper.threads().size(); ++i) {
|
||||||
if (dumper.threads()[i] == getpid()) {
|
if (dumper.threads()[i] == getpid()) {
|
||||||
|
@ -77,6 +80,55 @@ TEST(LinuxDumperTest, ThreadList) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(LinuxDumperTest, VerifyStackReadWithMultipleThreads) {
|
||||||
|
static const int kNumberOfThreadsInHelperProgram = 5;
|
||||||
|
char kNumberOfThreadsArgument[2];
|
||||||
|
sprintf(kNumberOfThreadsArgument, "%d", kNumberOfThreadsInHelperProgram);
|
||||||
|
|
||||||
|
pid_t child_pid = fork();
|
||||||
|
if (child_pid == 0) {
|
||||||
|
// Set the number of threads
|
||||||
|
execl("src/client/linux/linux_dumper_unittest_helper",
|
||||||
|
"linux_dumper_unittest_helper",
|
||||||
|
kNumberOfThreadsArgument,
|
||||||
|
NULL);
|
||||||
|
// Kill if we get here.
|
||||||
|
printf("Errno from exec: %d", errno);
|
||||||
|
FAIL() << "Exec failed: " << strerror(errno);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
// The sleep is flaky, but prevents us from reading
|
||||||
|
// the child process before all threads have been created.
|
||||||
|
sleep(1);
|
||||||
|
LinuxDumper dumper(child_pid);
|
||||||
|
EXPECT_TRUE(dumper.Init());
|
||||||
|
EXPECT_EQ((size_t)kNumberOfThreadsInHelperProgram, dumper.threads().size());
|
||||||
|
EXPECT_TRUE(dumper.ThreadsSuspend());
|
||||||
|
|
||||||
|
ThreadInfo one_thread;
|
||||||
|
for(size_t i = 0; i < dumper.threads().size(); ++i) {
|
||||||
|
EXPECT_TRUE(dumper.ThreadInfoGet(dumper.threads()[i], &one_thread));
|
||||||
|
// We know the threads are in a function which has allocated exactly
|
||||||
|
// one word off the stack to store its thread id.
|
||||||
|
#if defined(__ARM_EABI__)
|
||||||
|
void* process_tid_location = (void *)(one_thread.regs.uregs[11] - 8);
|
||||||
|
#elif defined(__i386)
|
||||||
|
void* process_tid_location = (void *)(one_thread.regs.ebp - 4);
|
||||||
|
#elif defined(__x86_64)
|
||||||
|
void* process_tid_location = (void *)(one_thread.regs.rbp - 4);
|
||||||
|
#else
|
||||||
|
#error Platform not supported!
|
||||||
|
#endif
|
||||||
|
pid_t one_thread_id;
|
||||||
|
dumper.CopyFromProcess(&one_thread_id,
|
||||||
|
dumper.threads()[i],
|
||||||
|
process_tid_location,
|
||||||
|
4);
|
||||||
|
EXPECT_EQ(dumper.threads()[i], one_thread_id);
|
||||||
|
}
|
||||||
|
kill(child_pid, SIGKILL);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(LinuxDumperTest, BuildProcPath) {
|
TEST(LinuxDumperTest, BuildProcPath) {
|
||||||
const pid_t pid = getpid();
|
const pid_t pid = getpid();
|
||||||
LinuxDumper dumper(pid);
|
LinuxDumper dumper(pid);
|
||||||
|
@ -106,12 +158,13 @@ TEST(LinuxDumperTest, BuildProcPath) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(__ARM_EABI__)
|
||||||
TEST(LinuxDumperTest, MappingsIncludeLinuxGate) {
|
TEST(LinuxDumperTest, MappingsIncludeLinuxGate) {
|
||||||
LinuxDumper dumper(getpid());
|
LinuxDumper dumper(getpid());
|
||||||
ASSERT_TRUE(dumper.Init());
|
ASSERT_TRUE(dumper.Init());
|
||||||
|
|
||||||
void* linux_gate_loc = dumper.FindBeginningOfLinuxGateSharedLibrary(getpid());
|
void* linux_gate_loc = dumper.FindBeginningOfLinuxGateSharedLibrary(getpid());
|
||||||
if (linux_gate_loc) {
|
ASSERT_TRUE(linux_gate_loc);
|
||||||
bool found_linux_gate = false;
|
bool found_linux_gate = false;
|
||||||
|
|
||||||
const wasteful_vector<MappingInfo*> mappings = dumper.mappings();
|
const wasteful_vector<MappingInfo*> mappings = dumper.mappings();
|
||||||
|
@ -127,7 +180,7 @@ TEST(LinuxDumperTest, MappingsIncludeLinuxGate) {
|
||||||
EXPECT_EQ(linux_gate_loc, reinterpret_cast<void*>(mapping->start_addr));
|
EXPECT_EQ(linux_gate_loc, reinterpret_cast<void*>(mapping->start_addr));
|
||||||
EXPECT_EQ(0, memcmp(linux_gate_loc, ELFMAG, SELFMAG));
|
EXPECT_EQ(0, memcmp(linux_gate_loc, ELFMAG, SELFMAG));
|
||||||
}
|
}
|
||||||
}
|
#endif
|
||||||
|
|
||||||
TEST(LinuxDumperTest, FileIDsMatch) {
|
TEST(LinuxDumperTest, FileIDsMatch) {
|
||||||
// Calculate the File ID of our binary using both
|
// Calculate the File ID of our binary using both
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
// Copyright (c) 2010, Google Inc.
|
||||||
|
// All rights reserved.
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
//
|
||||||
|
// Helper program for the linux_dumper class, which creates a bunch of
|
||||||
|
// threads. The first word of each thread's stack is set to the thread
|
||||||
|
// id.
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#pragma GCC optimize ("O0")
|
||||||
|
void *thread_function(void *data) __attribute__((noinline, optimize("O2")));
|
||||||
|
|
||||||
|
void *thread_function(void *data) {
|
||||||
|
pid_t thread_id = syscall(SYS_gettid);
|
||||||
|
while (true) ;
|
||||||
|
asm("");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
int num_threads = atoi(argv[1]);
|
||||||
|
if (num_threads < 1) {
|
||||||
|
fprintf(stderr, "ERROR: number of threads is 0");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
pthread_t threads[num_threads];
|
||||||
|
pthread_attr_t thread_attributes;
|
||||||
|
pthread_attr_init(&thread_attributes);
|
||||||
|
pthread_attr_setdetachstate(&thread_attributes, PTHREAD_CREATE_DETACHED);
|
||||||
|
for (int i = 1; i < num_threads; i++) {
|
||||||
|
pthread_create(&threads[i], &thread_attributes, &thread_function, NULL);
|
||||||
|
}
|
||||||
|
thread_function(NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -61,7 +61,7 @@
|
||||||
|
|
||||||
#include "client/linux/handler/exception_handler.h"
|
#include "client/linux/handler/exception_handler.h"
|
||||||
#include "client/linux/minidump_writer/line_reader.h"
|
#include "client/linux/minidump_writer/line_reader.h"
|
||||||
#include "client/linux/minidump_writer//linux_dumper.h"
|
#include "client/linux/minidump_writer/linux_dumper.h"
|
||||||
#include "common/linux/linux_libc_support.h"
|
#include "common/linux/linux_libc_support.h"
|
||||||
#include "common/linux/linux_syscall_support.h"
|
#include "common/linux/linux_syscall_support.h"
|
||||||
|
|
||||||
|
@ -307,6 +307,54 @@ static void CPUFillFromUContext(MDRawContextAMD64 *out, const ucontext *uc,
|
||||||
memcpy(&out->flt_save.xmm_registers, &fpregs->_xmm, 16 * 16);
|
memcpy(&out->flt_save.xmm_registers, &fpregs->_xmm, 16 * 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(__ARMEL__)
|
||||||
|
typedef MDRawContextARM RawContextCPU;
|
||||||
|
|
||||||
|
static void CPUFillFromThreadInfo(MDRawContextARM *out,
|
||||||
|
const google_breakpad::ThreadInfo &info) {
|
||||||
|
out->context_flags = MD_CONTEXT_ARM_FULL;
|
||||||
|
|
||||||
|
for (int i = 0; i < MD_CONTEXT_ARM_GPR_COUNT; ++i)
|
||||||
|
out->iregs[i] = info.regs.uregs[i];
|
||||||
|
// No CPSR register in ThreadInfo(it's not accessible via ptrace)
|
||||||
|
out->cpsr = 0;
|
||||||
|
out->float_save.fpscr = info.fpregs.fpsr |
|
||||||
|
(static_cast<u_int64_t>(info.fpregs.fpcr) << 32);
|
||||||
|
//TODO: sort this out, actually collect floating point registers
|
||||||
|
memset(&out->float_save.regs, 0, sizeof(out->float_save.regs));
|
||||||
|
memset(&out->float_save.extra, 0, sizeof(out->float_save.extra));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CPUFillFromUContext(MDRawContextARM *out, const ucontext *uc,
|
||||||
|
const struct _libc_fpstate* fpregs) {
|
||||||
|
out->context_flags = MD_CONTEXT_ARM_FULL;
|
||||||
|
|
||||||
|
out->iregs[0] = uc->uc_mcontext.arm_r0;
|
||||||
|
out->iregs[1] = uc->uc_mcontext.arm_r1;
|
||||||
|
out->iregs[2] = uc->uc_mcontext.arm_r2;
|
||||||
|
out->iregs[3] = uc->uc_mcontext.arm_r3;
|
||||||
|
out->iregs[4] = uc->uc_mcontext.arm_r4;
|
||||||
|
out->iregs[5] = uc->uc_mcontext.arm_r5;
|
||||||
|
out->iregs[6] = uc->uc_mcontext.arm_r6;
|
||||||
|
out->iregs[7] = uc->uc_mcontext.arm_r7;
|
||||||
|
out->iregs[8] = uc->uc_mcontext.arm_r8;
|
||||||
|
out->iregs[9] = uc->uc_mcontext.arm_r9;
|
||||||
|
out->iregs[10] = uc->uc_mcontext.arm_r10;
|
||||||
|
|
||||||
|
out->iregs[11] = uc->uc_mcontext.arm_fp;
|
||||||
|
out->iregs[12] = uc->uc_mcontext.arm_ip;
|
||||||
|
out->iregs[13] = uc->uc_mcontext.arm_sp;
|
||||||
|
out->iregs[14] = uc->uc_mcontext.arm_lr;
|
||||||
|
out->iregs[15] = uc->uc_mcontext.arm_pc;
|
||||||
|
|
||||||
|
out->cpsr = uc->uc_mcontext.arm_cpsr;
|
||||||
|
|
||||||
|
//TODO: fix this after fixing ExceptionHandler
|
||||||
|
out->float_save.fpscr = 0;
|
||||||
|
memset(&out->float_save.regs, 0, sizeof(out->float_save.regs));
|
||||||
|
memset(&out->float_save.extra, 0, sizeof(out->float_save.extra));
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error "This code has not been ported to your platform yet."
|
#error "This code has not been ported to your platform yet."
|
||||||
#endif
|
#endif
|
||||||
|
@ -321,7 +369,12 @@ class MinidumpWriter {
|
||||||
: filename_(filename),
|
: filename_(filename),
|
||||||
siginfo_(&context->siginfo),
|
siginfo_(&context->siginfo),
|
||||||
ucontext_(&context->context),
|
ucontext_(&context->context),
|
||||||
|
#if !defined(__ARM_EABI__)
|
||||||
float_state_(&context->float_state),
|
float_state_(&context->float_state),
|
||||||
|
#else
|
||||||
|
//TODO: fix this after fixing ExceptionHandler
|
||||||
|
float_state_(NULL),
|
||||||
|
#endif
|
||||||
crashing_tid_(context->tid),
|
crashing_tid_(context->tid),
|
||||||
dumper_(crashing_pid) {
|
dumper_(crashing_pid) {
|
||||||
}
|
}
|
||||||
|
@ -612,6 +665,10 @@ class MinidumpWriter {
|
||||||
uintptr_t GetStackPointer() {
|
uintptr_t GetStackPointer() {
|
||||||
return ucontext_->uc_mcontext.gregs[REG_RSP];
|
return ucontext_->uc_mcontext.gregs[REG_RSP];
|
||||||
}
|
}
|
||||||
|
#elif defined(__ARM_EABI__)
|
||||||
|
uintptr_t GetStackPointer() {
|
||||||
|
return ucontext_->uc_mcontext.arm_sp;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#error "This code has not been ported to your platform yet."
|
#error "This code has not been ported to your platform yet."
|
||||||
#endif
|
#endif
|
||||||
|
@ -644,6 +701,8 @@ class MinidumpWriter {
|
||||||
MD_CPU_ARCHITECTURE_X86;
|
MD_CPU_ARCHITECTURE_X86;
|
||||||
#elif defined(__x86_64)
|
#elif defined(__x86_64)
|
||||||
MD_CPU_ARCHITECTURE_AMD64;
|
MD_CPU_ARCHITECTURE_AMD64;
|
||||||
|
#elif defined(__arm__)
|
||||||
|
MD_CPU_ARCHITECTURE_ARM;
|
||||||
#else
|
#else
|
||||||
#error "Unknown CPU arch"
|
#error "Unknown CPU arch"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -77,7 +77,8 @@
|
||||||
* Porting to other related platforms should not be difficult.
|
* Porting to other related platforms should not be difficult.
|
||||||
*/
|
*/
|
||||||
#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) || \
|
#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) || \
|
||||||
defined(__mips__) || defined(__PPC__)) && defined(__linux)
|
defined(__mips__) || defined(__PPC__) || defined(__ARM_EABI__)) \
|
||||||
|
&& defined(__linux)
|
||||||
|
|
||||||
#ifndef SYS_CPLUSPLUS
|
#ifndef SYS_CPLUSPLUS
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -105,7 +106,6 @@ extern "C" {
|
||||||
/* Include definitions of the ABI currently in use. */
|
/* Include definitions of the ABI currently in use. */
|
||||||
#include <sgidefs.h>
|
#include <sgidefs.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* As glibc often provides subtly incompatible data structures (and implicit
|
/* As glibc often provides subtly incompatible data structures (and implicit
|
||||||
|
@ -217,7 +217,8 @@ struct kernel_rusage {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct siginfo;
|
struct siginfo;
|
||||||
#if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__PPC__)
|
#if defined(__i386__) || defined(__ARM_EABI__) || defined(__ARM_ARCH_3__) \
|
||||||
|
|| defined(__PPC__)
|
||||||
|
|
||||||
/* include/asm-{arm,i386,mips,ppc}/signal.h */
|
/* include/asm-{arm,i386,mips,ppc}/signal.h */
|
||||||
struct kernel_old_sigaction {
|
struct kernel_old_sigaction {
|
||||||
|
@ -354,7 +355,7 @@ struct kernel_stat64 {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* include/asm-{arm,i386,mips,x86_64,ppc}/stat.h */
|
/* include/asm-{arm,i386,mips,x86_64,ppc}/stat.h */
|
||||||
#if defined(__i386__) || defined(__ARM_ARCH_3__)
|
#if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
|
||||||
struct kernel_stat {
|
struct kernel_stat {
|
||||||
/* The kernel headers suggest that st_dev and st_rdev should be 32bit
|
/* The kernel headers suggest that st_dev and st_rdev should be 32bit
|
||||||
* quantities encoding 12bit major and 20bit minor numbers in an interleaved
|
* quantities encoding 12bit major and 20bit minor numbers in an interleaved
|
||||||
|
@ -520,7 +521,7 @@ struct kernel_statfs {
|
||||||
|
|
||||||
/* Definitions missing from the standard header files */
|
/* Definitions missing from the standard header files */
|
||||||
#ifndef O_DIRECTORY
|
#ifndef O_DIRECTORY
|
||||||
#if defined(__ARM_ARCH_3__)
|
#if defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
|
||||||
#define O_DIRECTORY 0040000
|
#define O_DIRECTORY 0040000
|
||||||
#else
|
#else
|
||||||
#define O_DIRECTORY 0200000
|
#define O_DIRECTORY 0200000
|
||||||
|
@ -641,7 +642,7 @@ struct kernel_statfs {
|
||||||
#define __NR_move_pages 317
|
#define __NR_move_pages 317
|
||||||
#endif
|
#endif
|
||||||
/* End of i386 definitions */
|
/* End of i386 definitions */
|
||||||
#elif defined(__ARM_ARCH_3__)
|
#elif defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
|
||||||
#ifndef __NR_setresuid
|
#ifndef __NR_setresuid
|
||||||
#define __NR_setresuid (__NR_SYSCALL_BASE + 164)
|
#define __NR_setresuid (__NR_SYSCALL_BASE + 164)
|
||||||
#define __NR_setresgid (__NR_SYSCALL_BASE + 170)
|
#define __NR_setresgid (__NR_SYSCALL_BASE + 170)
|
||||||
|
@ -715,7 +716,7 @@ struct kernel_statfs {
|
||||||
#ifndef __NR_move_pages
|
#ifndef __NR_move_pages
|
||||||
#define __NR_move_pages (__NR_SYSCALL_BASE + 344)
|
#define __NR_move_pages (__NR_SYSCALL_BASE + 344)
|
||||||
#endif
|
#endif
|
||||||
/* End of ARM 3 definitions */
|
/* End of ARM 3/EABI definitions */
|
||||||
#elif defined(__x86_64__)
|
#elif defined(__x86_64__)
|
||||||
#ifndef __NR_setresuid
|
#ifndef __NR_setresuid
|
||||||
#define __NR_setresuid 117
|
#define __NR_setresuid 117
|
||||||
|
@ -1087,7 +1088,8 @@ struct kernel_statfs {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef LSS_RETURN
|
#undef LSS_RETURN
|
||||||
#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__))
|
#if (defined(__i386__) || defined(__x86_64__) || defined(__ARM_ARCH_3__) \
|
||||||
|
|| defined(__ARM_EABI__))
|
||||||
/* Failing system calls return a negative result in the range of
|
/* Failing system calls return a negative result in the range of
|
||||||
* -1..-4095. These are "errno" values with the sign inverted.
|
* -1..-4095. These are "errno" values with the sign inverted.
|
||||||
*/
|
*/
|
||||||
|
@ -1526,11 +1528,6 @@ struct kernel_statfs {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
#elif defined(__ARM_ARCH_3__)
|
#elif defined(__ARM_ARCH_3__)
|
||||||
/* Most definitions of _syscallX() neglect to mark "memory" as being
|
|
||||||
* clobbered. This causes problems with compilers, that do a better job
|
|
||||||
* at optimizing across __asm__ calls.
|
|
||||||
* So, we just have to redefine all fo the _syscallX() macros.
|
|
||||||
*/
|
|
||||||
#undef LSS_REG
|
#undef LSS_REG
|
||||||
#define LSS_REG(r,a) register long __r##r __asm__("r"#r) = (long)a
|
#define LSS_REG(r,a) register long __r##r __asm__("r"#r) = (long)a
|
||||||
#undef LSS_BODY
|
#undef LSS_BODY
|
||||||
|
@ -1646,6 +1643,135 @@ struct kernel_statfs {
|
||||||
}
|
}
|
||||||
LSS_RETURN(int, __res);
|
LSS_RETURN(int, __res);
|
||||||
}
|
}
|
||||||
|
#elif defined(__ARM_EABI__)
|
||||||
|
/* Most definitions of _syscallX() neglect to mark "memory" as being
|
||||||
|
* clobbered. This causes problems with compilers, that do a better job
|
||||||
|
* at optimizing across __asm__ calls.
|
||||||
|
* So, we just have to redefine all fo the _syscallX() macros.
|
||||||
|
*/
|
||||||
|
#undef LSS_REG
|
||||||
|
#define LSS_REG(r,a) register long __r##r __asm__("r"#r) = (long)a
|
||||||
|
#undef LSS_BODY
|
||||||
|
#define LSS_BODY(type,name,args...) \
|
||||||
|
register long __res_r0 __asm__("r0"); \
|
||||||
|
long __res; \
|
||||||
|
__asm__ __volatile__ ("push {r7}\n" \
|
||||||
|
"mov r7, %1\n" \
|
||||||
|
"swi 0x0\n" \
|
||||||
|
"pop {r7}\n" \
|
||||||
|
: "=r"(__res_r0) \
|
||||||
|
: "i"(__NR_##name) , ## args \
|
||||||
|
: "lr", "memory"); \
|
||||||
|
__res = __res_r0; \
|
||||||
|
LSS_RETURN(type, __res)
|
||||||
|
#undef _syscall0
|
||||||
|
#define _syscall0(type, name) \
|
||||||
|
type LSS_NAME(name)() { \
|
||||||
|
LSS_BODY(type, name); \
|
||||||
|
}
|
||||||
|
#undef _syscall1
|
||||||
|
#define _syscall1(type, name, type1, arg1) \
|
||||||
|
type LSS_NAME(name)(type1 arg1) { \
|
||||||
|
LSS_REG(0, arg1); LSS_BODY(type, name, "r"(__r0)); \
|
||||||
|
}
|
||||||
|
#undef _syscall2
|
||||||
|
#define _syscall2(type, name, type1, arg1, type2, arg2) \
|
||||||
|
type LSS_NAME(name)(type1 arg1, type2 arg2) { \
|
||||||
|
LSS_REG(0, arg1); LSS_REG(1, arg2); \
|
||||||
|
LSS_BODY(type, name, "r"(__r0), "r"(__r1)); \
|
||||||
|
}
|
||||||
|
#undef _syscall3
|
||||||
|
#define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \
|
||||||
|
type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3) { \
|
||||||
|
LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \
|
||||||
|
LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2)); \
|
||||||
|
}
|
||||||
|
#undef _syscall4
|
||||||
|
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
|
||||||
|
type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \
|
||||||
|
LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \
|
||||||
|
LSS_REG(3, arg4); \
|
||||||
|
LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3)); \
|
||||||
|
}
|
||||||
|
#undef _syscall5
|
||||||
|
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
|
||||||
|
type5,arg5) \
|
||||||
|
type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
|
||||||
|
type5 arg5) { \
|
||||||
|
LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \
|
||||||
|
LSS_REG(3, arg4); LSS_REG(4, arg5); \
|
||||||
|
LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3), \
|
||||||
|
"r"(__r4)); \
|
||||||
|
}
|
||||||
|
#undef _syscall6
|
||||||
|
#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
|
||||||
|
type5,arg5,type6,arg6) \
|
||||||
|
type LSS_NAME(name)(type1 arg1, type2 arg2, type3 arg3, type4 arg4, \
|
||||||
|
type5 arg5, type6 arg6) { \
|
||||||
|
LSS_REG(0, arg1); LSS_REG(1, arg2); LSS_REG(2, arg3); \
|
||||||
|
LSS_REG(3, arg4); LSS_REG(4, arg5); LSS_REG(5, arg6); \
|
||||||
|
LSS_BODY(type, name, "r"(__r0), "r"(__r1), "r"(__r2), "r"(__r3), \
|
||||||
|
"r"(__r4), "r"(__r5)); \
|
||||||
|
}
|
||||||
|
LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack,
|
||||||
|
int flags, void *arg, int *parent_tidptr,
|
||||||
|
void *newtls, int *child_tidptr) {
|
||||||
|
long __res;
|
||||||
|
{
|
||||||
|
register int __flags __asm__("r0") = flags;
|
||||||
|
register void *__stack __asm__("r1") = child_stack;
|
||||||
|
register void *__ptid __asm__("r2") = parent_tidptr;
|
||||||
|
register void *__tls __asm__("r3") = newtls;
|
||||||
|
register int *__ctid __asm__("r4") = child_tidptr;
|
||||||
|
__asm__ __volatile__(/* if (fn == NULL || child_stack == NULL)
|
||||||
|
* return -EINVAL;
|
||||||
|
*/
|
||||||
|
"cmp %2,#0\n"
|
||||||
|
"cmpne %3,#0\n"
|
||||||
|
"moveq %0,%1\n"
|
||||||
|
"beq 1f\n"
|
||||||
|
|
||||||
|
/* Push "arg" and "fn" onto the stack that will be
|
||||||
|
* used by the child.
|
||||||
|
*/
|
||||||
|
"str %5,[%3,#-4]!\n"
|
||||||
|
"str %2,[%3,#-4]!\n"
|
||||||
|
|
||||||
|
/* %r0 = syscall(%r0 = flags,
|
||||||
|
* %r1 = child_stack,
|
||||||
|
* %r2 = parent_tidptr,
|
||||||
|
* %r3 = newtls,
|
||||||
|
* %r4 = child_tidptr)
|
||||||
|
*/
|
||||||
|
"mov r7, %9\n"
|
||||||
|
"swi 0x0\n"
|
||||||
|
|
||||||
|
/* if (%r0 != 0)
|
||||||
|
* return %r0;
|
||||||
|
*/
|
||||||
|
"movs %0,r0\n"
|
||||||
|
"bne 1f\n"
|
||||||
|
|
||||||
|
/* In the child, now. Call "fn(arg)".
|
||||||
|
*/
|
||||||
|
"ldr r0,[sp, #4]\n"
|
||||||
|
"mov lr,pc\n"
|
||||||
|
"ldr pc,[sp]\n"
|
||||||
|
|
||||||
|
/* Call _exit(%r0).
|
||||||
|
*/
|
||||||
|
"mov r7, %10\n"
|
||||||
|
"swi 0x0\n"
|
||||||
|
"1:\n"
|
||||||
|
: "=r" (__res)
|
||||||
|
: "i"(-EINVAL),
|
||||||
|
"r"(fn), "r"(__stack), "r"(__flags), "r"(arg),
|
||||||
|
"r"(__ptid), "r"(__tls), "r"(__ctid),
|
||||||
|
"i"(__NR_clone), "i"(__NR_exit)
|
||||||
|
: "lr", "memory");
|
||||||
|
}
|
||||||
|
LSS_RETURN(int, __res);
|
||||||
|
}
|
||||||
#elif defined(__mips__)
|
#elif defined(__mips__)
|
||||||
#undef LSS_REG
|
#undef LSS_REG
|
||||||
#define LSS_REG(r,a) register unsigned long __r##r __asm__("$"#r) = \
|
#define LSS_REG(r,a) register unsigned long __r##r __asm__("$"#r) = \
|
||||||
|
@ -2082,8 +2208,10 @@ struct kernel_statfs {
|
||||||
LSS_INLINE _syscall0(pid_t, getppid)
|
LSS_INLINE _syscall0(pid_t, getppid)
|
||||||
LSS_INLINE _syscall2(int, getpriority, int, a,
|
LSS_INLINE _syscall2(int, getpriority, int, a,
|
||||||
int, b)
|
int, b)
|
||||||
|
#if !defined(__ARM_EABI__)
|
||||||
LSS_INLINE _syscall2(int, getrlimit, int, r,
|
LSS_INLINE _syscall2(int, getrlimit, int, r,
|
||||||
struct kernel_rlimit*, l)
|
struct kernel_rlimit*, l)
|
||||||
|
#endif
|
||||||
LSS_INLINE _syscall1(pid_t, getsid, pid_t, p)
|
LSS_INLINE _syscall1(pid_t, getsid, pid_t, p)
|
||||||
LSS_INLINE _syscall0(pid_t, _gettid)
|
LSS_INLINE _syscall0(pid_t, _gettid)
|
||||||
LSS_INLINE _syscall5(int, setxattr, const char *,p,
|
LSS_INLINE _syscall5(int, setxattr, const char *,p,
|
||||||
|
@ -2237,6 +2365,7 @@ struct kernel_statfs {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if defined(__x86_64__) || defined(__ARM_ARCH_3__) || \
|
#if defined(__x86_64__) || defined(__ARM_ARCH_3__) || \
|
||||||
|
defined(__ARM_EABI__) || \
|
||||||
(defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI32)
|
(defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI32)
|
||||||
LSS_INLINE _syscall4(pid_t, wait4, pid_t, p,
|
LSS_INLINE _syscall4(pid_t, wait4, pid_t, p,
|
||||||
int*, s, int, o,
|
int*, s, int, o,
|
||||||
|
@ -2250,13 +2379,15 @@ struct kernel_statfs {
|
||||||
LSS_INLINE _syscall4(int, openat, int, d, const char *, p, int, f, int, m)
|
LSS_INLINE _syscall4(int, openat, int, d, const char *, p, int, f, int, m)
|
||||||
LSS_INLINE _syscall3(int, unlinkat, int, d, const char *, p, int, f)
|
LSS_INLINE _syscall3(int, unlinkat, int, d, const char *, p, int, f)
|
||||||
#endif
|
#endif
|
||||||
#if defined(__i386__) || defined(__ARM_ARCH_3__)
|
#if defined(__i386__) || defined(__ARM_ARCH_3__) || defined(__ARM_EABI__)
|
||||||
#define __NR__setfsgid32 __NR_setfsgid32
|
#define __NR__setfsgid32 __NR_setfsgid32
|
||||||
#define __NR__setfsuid32 __NR_setfsuid32
|
#define __NR__setfsuid32 __NR_setfsuid32
|
||||||
#define __NR__setresgid32 __NR_setresgid32
|
#define __NR__setresgid32 __NR_setresgid32
|
||||||
#define __NR__setresuid32 __NR_setresuid32
|
#define __NR__setresuid32 __NR_setresuid32
|
||||||
|
#if defined(__ARM_EABI__)
|
||||||
LSS_INLINE _syscall2(int, ugetrlimit, int, r,
|
LSS_INLINE _syscall2(int, ugetrlimit, int, r,
|
||||||
struct kernel_rlimit*, l)
|
struct kernel_rlimit*, l)
|
||||||
|
#endif
|
||||||
LSS_INLINE _syscall1(int, _setfsgid32, gid_t, f)
|
LSS_INLINE _syscall1(int, _setfsgid32, gid_t, f)
|
||||||
LSS_INLINE _syscall1(int, _setfsuid32, uid_t, f)
|
LSS_INLINE _syscall1(int, _setfsuid32, uid_t, f)
|
||||||
LSS_INLINE _syscall3(int, _setresgid32, gid_t, r,
|
LSS_INLINE _syscall3(int, _setresgid32, gid_t, r,
|
||||||
|
@ -2365,6 +2496,7 @@ struct kernel_statfs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined(__i386__) || defined(__ARM_ARCH_3__) || \
|
#if defined(__i386__) || defined(__ARM_ARCH_3__) || \
|
||||||
|
defined(__ARM_EABI__) || \
|
||||||
(defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || defined(__PPC__)
|
(defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32) || defined(__PPC__)
|
||||||
#define __NR__sigaction __NR_sigaction
|
#define __NR__sigaction __NR_sigaction
|
||||||
#define __NR__sigpending __NR_sigpending
|
#define __NR__sigpending __NR_sigpending
|
||||||
|
@ -2375,7 +2507,9 @@ struct kernel_statfs {
|
||||||
struct kernel_stat64 *, b)
|
struct kernel_stat64 *, b)
|
||||||
LSS_INLINE _syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo,
|
LSS_INLINE _syscall5(int, _llseek, uint, fd, ulong, hi, ulong, lo,
|
||||||
loff_t *, res, uint, wh)
|
loff_t *, res, uint, wh)
|
||||||
|
#if !defined(__ARM_EABI__)
|
||||||
LSS_INLINE _syscall1(void*, mmap, void*, a)
|
LSS_INLINE _syscall1(void*, mmap, void*, a)
|
||||||
|
#endif
|
||||||
LSS_INLINE _syscall6(void*, mmap2, void*, s,
|
LSS_INLINE _syscall6(void*, mmap2, void*, s,
|
||||||
size_t, l, int, p,
|
size_t, l, int, p,
|
||||||
int, f, int, d,
|
int, f, int, d,
|
||||||
|
@ -2590,12 +2724,24 @@ struct kernel_statfs {
|
||||||
LSS_SC_BODY(4, int, 8, d, type, protocol, sv);
|
LSS_SC_BODY(4, int, 8, d, type, protocol, sv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__ARM_EABI__)
|
||||||
|
LSS_INLINE _syscall3(ssize_t, recvmsg, int, s, struct kernel_msghdr*, msg,
|
||||||
|
int, flags);
|
||||||
|
LSS_INLINE _syscall3(ssize_t, sendmsg, int, s, const struct kernel_msghdr*,
|
||||||
|
msg, int, flags);
|
||||||
|
LSS_INLINE _syscall6(ssize_t, sendto, int, s, const void*, buf, size_t, len,
|
||||||
|
int, falgs, const struct kernel_sockaddr*, to,
|
||||||
|
unsigned int, tolen);
|
||||||
|
LSS_INLINE _syscall2(int, shutdown, int, s, int, how);
|
||||||
|
LSS_INLINE _syscall3(int, socket, int, domain, int, type, int, protocol);
|
||||||
|
LSS_INLINE _syscall4(int, socketpair, int, d, int, type, int, protocol,
|
||||||
|
int*, sv);
|
||||||
|
#endif
|
||||||
#if defined(__i386__) || defined(__ARM_ARCH_3__) || \
|
#if defined(__i386__) || defined(__ARM_ARCH_3__) || \
|
||||||
(defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32)
|
(defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI32)
|
||||||
#define __NR__socketcall __NR_socketcall
|
#define __NR__socketcall __NR_socketcall
|
||||||
LSS_INLINE _syscall2(int, _socketcall, int, c,
|
LSS_INLINE _syscall2(int, _socketcall, int, c,
|
||||||
va_list, a)
|
va_list, a)
|
||||||
|
|
||||||
LSS_INLINE int LSS_NAME(socketcall)(int op, ...) {
|
LSS_INLINE int LSS_NAME(socketcall)(int op, ...) {
|
||||||
int rc;
|
int rc;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
@ -2604,29 +2750,24 @@ struct kernel_statfs {
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
LSS_INLINE ssize_t LSS_NAME(recvmsg)(int s,struct kernel_msghdr *msg,
|
LSS_INLINE ssize_t LSS_NAME(recvmsg)(int s,struct kernel_msghdr *msg,
|
||||||
int flags){
|
int flags){
|
||||||
return (ssize_t)LSS_NAME(socketcall)(17, s, msg, flags);
|
return (ssize_t)LSS_NAME(socketcall)(17, s, msg, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
LSS_INLINE ssize_t LSS_NAME(sendmsg)(int s,
|
LSS_INLINE ssize_t LSS_NAME(sendmsg)(int s,
|
||||||
const struct kernel_msghdr *msg,
|
const struct kernel_msghdr *msg,
|
||||||
int flags) {
|
int flags) {
|
||||||
return (ssize_t)LSS_NAME(socketcall)(16, s, msg, flags);
|
return (ssize_t)LSS_NAME(socketcall)(16, s, msg, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
LSS_INLINE ssize_t LSS_NAME(sendto)(int s, const void *buf, size_t len,
|
LSS_INLINE ssize_t LSS_NAME(sendto)(int s, const void *buf, size_t len,
|
||||||
int flags,
|
int flags,
|
||||||
const struct kernel_sockaddr *to,
|
const struct kernel_sockaddr *to,
|
||||||
unsigned int tolen) {
|
unsigned int tolen) {
|
||||||
return (ssize_t)LSS_NAME(socketcall)(11, s, buf, len, flags, to, tolen);
|
return (ssize_t)LSS_NAME(socketcall)(11, s, buf, len, flags, to, tolen);
|
||||||
}
|
}
|
||||||
|
|
||||||
LSS_INLINE int LSS_NAME(shutdown)(int s, int how) {
|
LSS_INLINE int LSS_NAME(shutdown)(int s, int how) {
|
||||||
return LSS_NAME(socketcall)(13, s, how);
|
return LSS_NAME(socketcall)(13, s, how);
|
||||||
}
|
}
|
||||||
|
|
||||||
LSS_INLINE int LSS_NAME(socket)(int domain, int type, int protocol) {
|
LSS_INLINE int LSS_NAME(socket)(int domain, int type, int protocol) {
|
||||||
return LSS_NAME(socketcall)(1, domain, type, protocol);
|
return LSS_NAME(socketcall)(1, domain, type, protocol);
|
||||||
}
|
}
|
||||||
|
@ -2673,6 +2814,7 @@ struct kernel_statfs {
|
||||||
#endif
|
#endif
|
||||||
/* TODO(csilvers): see if ppc can/should support this as well */
|
/* TODO(csilvers): see if ppc can/should support this as well */
|
||||||
#if defined(__i386__) || defined(__ARM_ARCH_3__) || \
|
#if defined(__i386__) || defined(__ARM_ARCH_3__) || \
|
||||||
|
defined(__ARM_EABI__) || \
|
||||||
(defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI64)
|
(defined(__mips__) && _MIPS_SIM != _MIPS_SIM_ABI64)
|
||||||
#define __NR__statfs64 __NR_statfs64
|
#define __NR__statfs64 __NR_statfs64
|
||||||
#define __NR__fstatfs64 __NR_fstatfs64
|
#define __NR__fstatfs64 __NR_fstatfs64
|
||||||
|
@ -2743,8 +2885,13 @@ struct kernel_statfs {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case _SC_OPEN_MAX: {
|
case _SC_OPEN_MAX: {
|
||||||
struct kernel_rlimit limit;
|
struct kernel_rlimit limit;
|
||||||
|
#if defined(__ARM_EABI__)
|
||||||
|
return LSS_NAME(ugetrlimit)(RLIMIT_NOFILE, &limit) < 0
|
||||||
|
? 8192 : limit.rlim_cur;
|
||||||
|
#else
|
||||||
return LSS_NAME(getrlimit)(RLIMIT_NOFILE, &limit) < 0
|
return LSS_NAME(getrlimit)(RLIMIT_NOFILE, &limit) < 0
|
||||||
? 8192 : limit.rlim_cur;
|
? 8192 : limit.rlim_cur;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
case _SC_PAGESIZE:
|
case _SC_PAGESIZE:
|
||||||
return __getpagesize();
|
return __getpagesize();
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
#undef HAVE_MEMORY_H
|
#undef HAVE_MEMORY_H
|
||||||
|
|
||||||
|
/* Define if you have POSIX threads libraries and header files. */
|
||||||
|
#undef HAVE_PTHREAD
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
#undef HAVE_STDINT_H
|
#undef HAVE_STDINT_H
|
||||||
|
|
||||||
|
@ -30,6 +33,10 @@
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
#undef HAVE_UNISTD_H
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||||
|
*/
|
||||||
|
#undef LT_OBJDIR
|
||||||
|
|
||||||
/* Name of package */
|
/* Name of package */
|
||||||
#undef PACKAGE
|
#undef PACKAGE
|
||||||
|
|
||||||
|
@ -45,9 +52,16 @@
|
||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#undef PACKAGE_TARNAME
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#undef PACKAGE_URL
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* Define to necessary symbol if this constant uses a non-standard name on
|
||||||
|
your system. */
|
||||||
|
#undef PTHREAD_CREATE_JOINABLE
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
#undef STDC_HEADERS
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue