Update breakpad to svn revision 350. b=510920 r=ted
☠☠ backed out by 941346617e4f ☠ ☠
authorJosh Aas <joshmoz@gmail.com>
Thu, 03 Sep 2009 23:41:02 -0400
changeset 32222 e8c01867056a2dea44260030f35f743f73c7e272
parent 32221 c65c4fbf96fdddecdf84936fb00b3098d22675b9
child 32223 941346617e4fa0946dea86a611917d7362765d10
push id8926
push userjosh@mozilla.com
push dateFri, 04 Sep 2009 03:41:46 +0000
treeherdermozilla-central@e8c01867056a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersted
bugs510920
milestone1.9.3a1pre
Update breakpad to svn revision 350. b=510920 r=ted
toolkit/crashreporter/google-breakpad/Makefile.am
toolkit/crashreporter/google-breakpad/Makefile.in
toolkit/crashreporter/google-breakpad/aclocal.m4
toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h
toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc
toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h
toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_generator.cc
toolkit/crashreporter/google-breakpad/src/client/mac/Breakpad.xcodeproj/project.pbxproj
toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.h
toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.mm
toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad_Prefix.pch
toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Info.plist
toolkit/crashreporter/google-breakpad/src/client/mac/Framework/OnDemandServer.h
toolkit/crashreporter/google-breakpad/src/client/mac/Framework/OnDemandServer.mm
toolkit/crashreporter/google-breakpad/src/client/mac/UnitTests-Info.plist
toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.h
toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.mm
toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/InspectorMain.mm
toolkit/crashreporter/google-breakpad/src/client/mac/gcov/libgcov.a
toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc
toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h
toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler_test.cc
toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc
toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h
toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator_test.cc
toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/testdata/dump_syms_i386_breakpad.sym
toolkit/crashreporter/google-breakpad/src/client/mac/sender/Breakpad.nib/classes.nib
toolkit/crashreporter/google-breakpad/src/client/mac/sender/Breakpad.nib/info.nib
toolkit/crashreporter/google-breakpad/src/client/mac/sender/Breakpad.nib/keyedobjects.nib
toolkit/crashreporter/google-breakpad/src/client/mac/sender/English.lproj/InfoPlist.strings
toolkit/crashreporter/google-breakpad/src/client/mac/sender/English.lproj/Localizable.strings
toolkit/crashreporter/google-breakpad/src/client/mac/sender/ReporterIcon.graffle
toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender-Info.plist
toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.h
toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.icns
toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.m
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/Controller.h
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/Controller.m
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/English.lproj/InfoPlist.strings
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/English.lproj/MainMenu.nib/classes.nib
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/English.lproj/MainMenu.nib/info.nib
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/English.lproj/MainMenu.nib/keyedobjects.nib
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/Info.plist
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/TestClass.h
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/TestClass.mm
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/bomb.icns
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/crashInMain
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/crashduringload
toolkit/crashreporter/google-breakpad/src/client/mac/testapp/main.m
toolkit/crashreporter/google-breakpad/src/client/mac/tests/BreakpadFramework_Test.mm
toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.h
toolkit/crashreporter/google-breakpad/src/client/mac/tests/SimpleStringDictionaryTest.mm
toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.cc
toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_server.h
toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc
toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.h
toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.cc
toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.vcproj
toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.cc
toolkit/crashreporter/google-breakpad/src/common/linux/dump_symbols.h
toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc
toolkit/crashreporter/google-breakpad/src/common/mac/GTMDefines.h
toolkit/crashreporter/google-breakpad/src/common/mac/GTMGarbageCollection.h
toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.h
toolkit/crashreporter/google-breakpad/src/common/mac/GTMLogger.m
toolkit/crashreporter/google-breakpad/src/common/mac/MachIPC.h
toolkit/crashreporter/google-breakpad/src/common/mac/MachIPC.mm
toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.h
toolkit/crashreporter/google-breakpad/src/common/mac/SimpleStringDictionary.mm
toolkit/crashreporter/google-breakpad/src/common/mac/testing/GTMSenTestCase.h
toolkit/crashreporter/google-breakpad/src/common/mac/testing/GTMSenTestCase.m
toolkit/crashreporter/google-breakpad/src/common/solaris/dump_symbols.cc
toolkit/crashreporter/google-breakpad/src/common/solaris/file_id.cc
toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.cc
toolkit/crashreporter/google-breakpad/src/common/windows/http_upload.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/basic_source_line_resolver.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/minidump_processor.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_interface.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/symbol_supplier.h
toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver.cc
toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/contained_range_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/minidump_processor.cc
toolkit/crashreporter/google-breakpad/src/processor/minidump_processor_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/minidump_stackwalk.cc
toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.cc
toolkit/crashreporter/google-breakpad/src/processor/simple_symbol_supplier.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker.cc
toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc
toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm
toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.h
toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.cc
--- a/toolkit/crashreporter/google-breakpad/Makefile.am
+++ b/toolkit/crashreporter/google-breakpad/Makefile.am
@@ -147,17 +147,24 @@ src_processor_basic_source_line_resolver
 
 src_processor_contained_range_map_unittest_SOURCES = \
 	src/processor/contained_range_map_unittest.cc
 src_processor_contained_range_map_unittest_LDADD = \
 	src/processor/logging.lo \
 	src/processor/pathname_stripper.lo
 
 src_processor_minidump_processor_unittest_SOURCES = \
-	src/processor/minidump_processor_unittest.cc
+	src/processor/minidump_processor_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+src_processor_minidump_processor_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_processor_minidump_processor_unittest_LDADD = \
 	src/processor/basic_code_modules.lo \
 	src/processor/basic_source_line_resolver.lo \
 	src/processor/call_stack.lo \
 	src/processor/logging.lo \
 	src/processor/minidump_processor.lo \
 	src/processor/minidump.lo \
 	src/processor/pathname_stripper.lo \
--- a/toolkit/crashreporter/google-breakpad/Makefile.in
+++ b/toolkit/crashreporter/google-breakpad/Makefile.in
@@ -142,18 +142,19 @@ src_processor_contained_range_map_unitte
 	src/processor/logging.lo src/processor/pathname_stripper.lo
 am_src_processor_minidump_dump_OBJECTS =  \
 	src/processor/minidump_dump.$(OBJEXT)
 src_processor_minidump_dump_OBJECTS =  \
 	$(am_src_processor_minidump_dump_OBJECTS)
 src_processor_minidump_dump_DEPENDENCIES =  \
 	src/processor/basic_code_modules.lo src/processor/logging.lo \
 	src/processor/minidump.lo src/processor/pathname_stripper.lo
-am_src_processor_minidump_processor_unittest_OBJECTS =  \
-	src/processor/minidump_processor_unittest.$(OBJEXT)
+am_src_processor_minidump_processor_unittest_OBJECTS = src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) \
+	src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) \
+	src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
 src_processor_minidump_processor_unittest_OBJECTS =  \
 	$(am_src_processor_minidump_processor_unittest_OBJECTS)
 src_processor_minidump_processor_unittest_DEPENDENCIES =  \
 	src/processor/basic_code_modules.lo \
 	src/processor/basic_source_line_resolver.lo \
 	src/processor/call_stack.lo src/processor/logging.lo \
 	src/processor/minidump_processor.lo src/processor/minidump.lo \
 	src/processor/pathname_stripper.lo \
@@ -284,16 +285,17 @@ CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
 CXXCPP = @CXXCPP@
 CXXDEPMODE = @CXXDEPMODE@
 CXXFLAGS = @CXXFLAGS@
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
 DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
 ECHO = @ECHO@
 ECHO_C = @ECHO_C@
 ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FFLAGS = @FFLAGS@
@@ -307,25 +309,27 @@ LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
 LIBTOOL_DEPS = @LIBTOOL_DEPS@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
 MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
 PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
 PACKAGE_NAME = @PACKAGE_NAME@
 PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
 VERSION = @VERSION@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
@@ -466,17 +470,25 @@ src_processor_basic_source_line_resolver
 src_processor_contained_range_map_unittest_SOURCES = \
 	src/processor/contained_range_map_unittest.cc
 
 src_processor_contained_range_map_unittest_LDADD = \
 	src/processor/logging.lo \
 	src/processor/pathname_stripper.lo
 
 src_processor_minidump_processor_unittest_SOURCES = \
-	src/processor/minidump_processor_unittest.cc
+	src/processor/minidump_processor_unittest.cc \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/src/gmock-all.cc
+
+src_processor_minidump_processor_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_processor_minidump_processor_unittest_LDADD = \
 	src/processor/basic_code_modules.lo \
 	src/processor/basic_source_line_resolver.lo \
 	src/processor/call_stack.lo \
 	src/processor/logging.lo \
 	src/processor/minidump_processor.lo \
 	src/processor/minidump.lo \
@@ -866,19 +878,37 @@ src/processor/contained_range_map_unitte
 src/processor/contained_range_map_unittest$(EXEEXT): $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
 	@rm -f src/processor/contained_range_map_unittest$(EXEEXT)
 	$(CXXLINK) $(src_processor_contained_range_map_unittest_OBJECTS) $(src_processor_contained_range_map_unittest_LDADD) $(LIBS)
 src/processor/minidump_dump.$(OBJEXT): src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
 src/processor/minidump_dump$(EXEEXT): $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_DEPENDENCIES) src/processor/$(am__dirstamp)
 	@rm -f src/processor/minidump_dump$(EXEEXT)
 	$(CXXLINK) $(src_processor_minidump_dump_OBJECTS) $(src_processor_minidump_dump_LDADD) $(LIBS)
-src/processor/minidump_processor_unittest.$(OBJEXT):  \
+src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT):  \
 	src/processor/$(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/$(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/$(am__dirstamp) \
+	src/testing/src/$(DEPDIR)/$(am__dirstamp)
 src/processor/minidump_processor_unittest$(EXEEXT): $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_DEPENDENCIES) src/processor/$(am__dirstamp)
 	@rm -f src/processor/minidump_processor_unittest$(EXEEXT)
 	$(CXXLINK) $(src_processor_minidump_processor_unittest_OBJECTS) $(src_processor_minidump_processor_unittest_LDADD) $(LIBS)
 src/processor/minidump_stackwalk.$(OBJEXT):  \
 	src/processor/$(am__dirstamp) \
 	src/processor/$(DEPDIR)/$(am__dirstamp)
 src/processor/minidump_stackwalk$(EXEEXT): $(src_processor_minidump_stackwalk_OBJECTS) $(src_processor_minidump_stackwalk_DEPENDENCIES) src/processor/$(am__dirstamp)
 	@rm -f src/processor/minidump_stackwalk$(EXEEXT)
@@ -921,66 +951,70 @@ mostlyclean-compile:
 	-rm -f src/processor/contained_range_map_unittest.$(OBJEXT)
 	-rm -f src/processor/logging.$(OBJEXT)
 	-rm -f src/processor/logging.lo
 	-rm -f src/processor/minidump.$(OBJEXT)
 	-rm -f src/processor/minidump.lo
 	-rm -f src/processor/minidump_dump.$(OBJEXT)
 	-rm -f src/processor/minidump_processor.$(OBJEXT)
 	-rm -f src/processor/minidump_processor.lo
-	-rm -f src/processor/minidump_processor_unittest.$(OBJEXT)
 	-rm -f src/processor/minidump_stackwalk.$(OBJEXT)
 	-rm -f src/processor/pathname_stripper.$(OBJEXT)
 	-rm -f src/processor/pathname_stripper.lo
 	-rm -f src/processor/pathname_stripper_unittest.$(OBJEXT)
 	-rm -f src/processor/postfix_evaluator_unittest.$(OBJEXT)
 	-rm -f src/processor/process_state.$(OBJEXT)
 	-rm -f src/processor/process_state.lo
 	-rm -f src/processor/range_map_unittest.$(OBJEXT)
 	-rm -f src/processor/simple_symbol_supplier.$(OBJEXT)
 	-rm -f src/processor/simple_symbol_supplier.lo
+	-rm -f src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT)
 	-rm -f src/processor/stackwalker.$(OBJEXT)
 	-rm -f src/processor/stackwalker.lo
 	-rm -f src/processor/stackwalker_amd64.$(OBJEXT)
 	-rm -f src/processor/stackwalker_amd64.lo
 	-rm -f src/processor/stackwalker_ppc.$(OBJEXT)
 	-rm -f src/processor/stackwalker_ppc.lo
 	-rm -f src/processor/stackwalker_selftest.$(OBJEXT)
 	-rm -f src/processor/stackwalker_sparc.$(OBJEXT)
 	-rm -f src/processor/stackwalker_sparc.lo
 	-rm -f src/processor/stackwalker_x86.$(OBJEXT)
 	-rm -f src/processor/stackwalker_x86.lo
+	-rm -f src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT)
+	-rm -f src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
 
 distclean-compile:
 	-rm -f *.tab.c
 
 @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_source_line_resolver.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/basic_source_line_resolver_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/call_stack.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/contained_range_map_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/logging.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_dump.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_processor.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_processor_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/minidump_stackwalk.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/pathname_stripper.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/pathname_stripper_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/postfix_evaluator_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/process_state.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/range_map_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/simple_symbol_supplier.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_amd64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/processor/$(DEPDIR)/stackwalker_ppc.Plo@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_x86.Plo@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/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po@am__quote@
 
 .cc.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@	mv -f $$depbase.Tpo $$depbase.Po
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
@@ -996,16 +1030,58 @@ distclean-compile:
 .cc.lo:
 @am__fastdepCXX_TRUE@	depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
 @am__fastdepCXX_TRUE@	$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 @am__fastdepCXX_TRUE@	mv -f $$depbase.Tpo $$depbase.Plo
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(LTCXXCOMPILE) -c -o $@ $<
 
+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@	mv -f src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/minidump_processor_unittest.cc' object='src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -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
+
+src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.obj: 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.obj -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.obj `if test -f 'src/processor/minidump_processor_unittest.cc'; then $(CYGPATH_W) 'src/processor/minidump_processor_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/minidump_processor_unittest.cc'; fi`
+@am__fastdepCXX_TRUE@	mv -f src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Tpo src/processor/$(DEPDIR)/src_processor_minidump_processor_unittest-minidump_processor_unittest.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/processor/minidump_processor_unittest.cc' object='src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.obj `if test -f 'src/processor/minidump_processor_unittest.cc'; then $(CYGPATH_W) 'src/processor/minidump_processor_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/processor/minidump_processor_unittest.cc'; fi`
+
+src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.o: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.o -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_minidump_processor_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@	mv -f src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_minidump_processor_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_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_minidump_processor_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_processor_minidump_processor_unittest-gtest-all.obj: src/testing/gtest/src/gtest-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.obj -MD -MP -MF src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Tpo -c -o src/testing/gtest/src/src_processor_minidump_processor_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@	mv -f src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Tpo src/testing/gtest/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gtest-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/gtest/src/gtest-all.cc' object='src/testing/gtest/src/src_processor_minidump_processor_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_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/gtest/src/src_processor_minidump_processor_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/src/src_processor_minidump_processor_unittest-gmock-all.o: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_minidump_processor_unittest-gmock-all.o -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_minidump_processor_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	mv -f src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_minidump_processor_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_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_minidump_processor_unittest-gmock-all.o `test -f 'src/testing/src/gmock-all.cc' || echo '$(srcdir)/'`src/testing/src/gmock-all.cc
+
+src/testing/src/src_processor_minidump_processor_unittest-gmock-all.obj: src/testing/src/gmock-all.cc
+@am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/testing/src/src_processor_minidump_processor_unittest-gmock-all.obj -MD -MP -MF src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Tpo -c -o src/testing/src/src_processor_minidump_processor_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@	mv -f src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Tpo src/testing/src/$(DEPDIR)/src_processor_minidump_processor_unittest-gmock-all.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='src/testing/src/gmock-all.cc' object='src/testing/src/src_processor_minidump_processor_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_processor_minidump_processor_unittest_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/testing/src/src_processor_minidump_processor_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`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
 clean-libtool:
 	-rm -rf .libs _libs
 	-rm -rf src/.libs src/_libs
 	-rm -rf src/processor/.libs src/processor/_libs
 
@@ -1304,29 +1380,33 @@ mostlyclean-generic:
 
 clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
 	-rm -f src/$(am__dirstamp)
 	-rm -f src/processor/$(DEPDIR)/$(am__dirstamp)
 	-rm -f src/processor/$(am__dirstamp)
+	-rm -f src/testing/gtest/src/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/testing/gtest/src/$(am__dirstamp)
+	-rm -f src/testing/src/$(DEPDIR)/$(am__dirstamp)
+	-rm -f src/testing/src/$(am__dirstamp)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
 clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
 	clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS \
 	mostlyclean-am
 
 distclean: distclean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-	-rm -rf src/processor/$(DEPDIR)
+	-rm -rf src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
 	-rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
 	distclean-hdr distclean-libtool distclean-tags
 
 dvi: dvi-am
 
 dvi-am:
 
@@ -1352,17 +1432,17 @@ install-pdf: install-pdf-am
 
 install-ps: install-ps-am
 
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
-	-rm -rf src/processor/$(DEPDIR)
+	-rm -rf src/processor/$(DEPDIR) src/testing/gtest/src/$(DEPDIR) src/testing/src/$(DEPDIR)
 	-rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
 mostlyclean-am: mostlyclean-compile mostlyclean-generic \
 	mostlyclean-libtool
 
--- a/toolkit/crashreporter/google-breakpad/aclocal.m4
+++ b/toolkit/crashreporter/google-breakpad/aclocal.m4
@@ -13,17 +13,17 @@
 
 m4_if(m4_PACKAGE_VERSION, [2.61],,
 [m4_fatal([this file was generated for autoconf 2.61.
 You have another version of autoconf.  If you want to use that,
 you should regenerate the build system entirely.], [63])])
 
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 
-# serial 48 AC_PROG_LIBTOOL
+# serial 52 AC_PROG_LIBTOOL
 
 
 # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
 # -----------------------------------------------------------
 # If this macro is not defined by Autoconf, define it here.
 m4_ifdef([AC_PROVIDE_IFELSE],
          [],
          [m4_define([AC_PROVIDE_IFELSE],
@@ -101,17 +101,16 @@ AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
 AC_REQUIRE([AC_PROG_NM])dnl
 
 AC_REQUIRE([AC_PROG_LN_S])dnl
 AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
 # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
 AC_REQUIRE([AC_OBJEXT])dnl
 AC_REQUIRE([AC_EXEEXT])dnl
 dnl
-
 AC_LIBTOOL_SYS_MAX_CMD_LEN
 AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
 AC_LIBTOOL_OBJDIR
 
 AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
 _LT_AC_PROG_ECHO_BACKSLASH
 
 case $host_os in
@@ -176,17 +175,17 @@ test -z "$MAGIC_CMD" && MAGIC_CMD=file
 test -z "$NM" && NM=nm
 test -z "$SED" && SED=sed
 test -z "$OBJDUMP" && OBJDUMP=objdump
 test -z "$RANLIB" && RANLIB=:
 test -z "$STRIP" && STRIP=:
 test -z "$ac_objext" && ac_objext=o
 
 # Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
 old_postinstall_cmds='chmod 644 $oldlib'
 old_postuninstall_cmds=
 
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
     ;;
@@ -203,16 +202,18 @@ fi
 case $deplibs_check_method in
 file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     AC_PATH_MAGIC
   fi
   ;;
 esac
 
+_LT_REQUIRED_DARWIN_CHECKS
+
 AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
 AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
 enable_win32_dll=yes, enable_win32_dll=no)
 
 AC_ARG_ENABLE([libtool-lock],
     [AC_HELP_STRING([--disable-libtool-lock],
 	[avoid locking (might break parallel builds)])])
 test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
@@ -263,52 +264,133 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -
 ])
 
 
 # _LT_COMPILER_BOILERPLATE
 # ------------------------
 # Check for compiler boilerplate output or warnings with
 # the simple compiler test code.
 AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
 eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
 _lt_compiler_boilerplate=`cat conftest.err`
 $rm conftest*
 ])# _LT_COMPILER_BOILERPLATE
 
 
 # _LT_LINKER_BOILERPLATE
 # ----------------------
 # Check for linker boilerplate output or warnings with
 # the simple link test code.
 AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
 eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
 _lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
+$rm -r conftest*
 ])# _LT_LINKER_BOILERPLATE
 
+# _LT_REQUIRED_DARWIN_CHECKS
+# --------------------------
+# Check for some things on darwin
+AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+   # By default we will add the -single_module flag. You can override
+   # by either setting the environment variable LT_MULTI_MODULE
+   # non-empty at configure time, or by adding -multi_module to the
+   # link flags.
+   echo "int foo(void){return 1;}" > conftest.c
+   $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+     -dynamiclib ${wl}-single_module conftest.c
+   if test -f libconftest.dylib; then
+     lt_cv_apple_cc_single_mod=yes
+     rm -rf libconftest.dylib*
+   fi
+   rm conftest.c
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+   [lt_cv_ld_exported_symbols_list=yes],
+   [lt_cv_ld_exported_symbols_list=no])
+   LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[0123]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+     _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*)
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+   10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+     _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+   10.[[012]]*)
+     _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+   10.*)
+     _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil="~$DSYMUTIL \$lib || :"
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
 
 # _LT_AC_SYS_LIBPATH_AIX
 # ----------------------
 # Links a minimal program and checks the executable
 # for the system default hardcoded library path. In most cases,
 # this is /usr/lib:/lib, but when the MPI compilers are used
 # the location of the communication and MPI libs are included too.
 # If we don't find anything, use the default library path according
 # to the aix ld manual.
 AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+	/^0/ {
+	    s/^0  *\(.*\)$/\1/
+	    p
+	}
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
 # Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`; fi],[])
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
 if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 ])# _LT_AC_SYS_LIBPATH_AIX
 
 
 # _LT_AC_SHELL_INIT(ARG)
 # ----------------------
 AC_DEFUN([_LT_AC_SHELL_INIT],
 [ifdef([AC_DIVERSION_NOTICE],
@@ -529,39 +611,46 @@ ia64-*-hpux*)
       LD="${LD-ld} -64"
       ;;
     esac
    fi
   fi
   rm -rf conftest*
   ;;
 
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
     *32-bit*)
       case $host in
+        x86_64-*kfreebsd*-gnu)
+          LD="${LD-ld} -m elf_i386_fbsd"
+          ;;
         x86_64-*linux*)
           LD="${LD-ld} -m elf_i386"
           ;;
         ppc64-*linux*|powerpc64-*linux*)
           LD="${LD-ld} -m elf32ppclinux"
           ;;
         s390x-*linux*)
           LD="${LD-ld} -m elf_s390"
           ;;
         sparc64-*linux*)
           LD="${LD-ld} -m elf32_sparc"
           ;;
       esac
       ;;
     *64-bit*)
       case $host in
+        x86_64-*kfreebsd*-gnu)
+          LD="${LD-ld} -m elf_x86_64_fbsd"
+          ;;
         x86_64-*linux*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         ppc*-*linux*|powerpc*-*linux*)
           LD="${LD-ld} -m elf64ppc"
           ;;
         s390*-*linux*)
           LD="${LD-ld} -m elf64_s390"
@@ -592,17 +681,21 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*li
 sparc*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
       yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)    LD="${LD-ld} -64" ;;
+      *)
+        if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
       esac
       ;;
     esac
   fi
   rm -rf conftest*
   ;;
 
 AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
@@ -623,17 +716,17 @@ need_locks="$enable_libtool_lock"
 #		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
 # ----------------------------------------------------------------
 # Check whether the given compiler option works
 AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
 [AC_REQUIRE([LT_AC_PROG_SED])
 AC_CACHE_CHECK([$1], [$2],
   [$2=no
   ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
    lt_compiler_flag="$3"
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
    # with a dollar sign (not a hyphen), so the echo should work correctly.
    # The option is referenced via a variable to avoid confusing sed.
    lt_compile=`echo "$ac_compile" | $SED \
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
@@ -664,37 +757,38 @@ fi
 ])# AC_LIBTOOL_COMPILER_OPTION
 
 
 # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
 #                          [ACTION-SUCCESS], [ACTION-FAILURE])
 # ------------------------------------------------------------
 # Check whether the given compiler option works
 AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_CACHE_CHECK([$1], [$2],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
   [$2=no
    save_LDFLAGS="$LDFLAGS"
    LDFLAGS="$LDFLAGS $3"
-   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
      # The linker can only warn and ignore the option if not recognized
      # So say no if there are warnings
      if test -s conftest.err; then
        # Append any errors to the config.log.
        cat conftest.err 1>&AS_MESSAGE_LOG_FD
        $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
        $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
        if diff conftest.exp conftest.er2 >/dev/null; then
          $2=yes
        fi
      else
        $2=yes
      fi
    fi
-   $rm conftest*
+   $rm -r conftest*
    LDFLAGS="$save_LDFLAGS"
 ])
 
 if test x"[$]$2" = xyes; then
     ifelse([$4], , :, [$4])
 else
     ifelse([$5], , :, [$5])
 fi
@@ -782,34 +876,37 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [d
     kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
     if test -n "$kargmax"; then
       lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ 	]]//'`
     else
       lt_cv_sys_max_cmd_len=32768
     fi
     ;;
   *)
-    # If test is not a shell built-in, we'll probably end up computing a
-    # maximum length that is only half of the actual maximum length, but
-    # we can't tell.
-    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-    while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
 	       = "XX$teststring") >/dev/null 2>&1 &&
-	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
-	    lt_cv_sys_max_cmd_len=$new_result &&
-	    test $i != 17 # 1/2 MB should be enough
-    do
-      i=`expr $i + 1`
-      teststring=$teststring$teststring
-    done
-    teststring=
-    # Add a significant safety factor because C++ compilers can tack on massive
-    # amounts of additional arguments before passing them to the linker.
-    # It appears as though 1/2 is a usable value.
-    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+	      new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	      lt_cv_sys_max_cmd_len=$new_result &&
+	      test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on massive
+      # amounts of additional arguments before passing them to the linker.
+      # It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
     ;;
   esac
 ])
 if test -n $lt_cv_sys_max_cmd_len ; then
   AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
 else
   AC_MSG_RESULT(none)
 fi
@@ -952,25 +1049,25 @@ else
     lt_cv_dlopen_self=yes
     ])
    ;;
 
   *)
     AC_CHECK_FUNC([shl_load],
 	  [lt_cv_dlopen="shl_load"],
       [AC_CHECK_LIB([dld], [shl_load],
-	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
 	[AC_CHECK_FUNC([dlopen],
 	      [lt_cv_dlopen="dlopen"],
 	  [AC_CHECK_LIB([dl], [dlopen],
 		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
 	    [AC_CHECK_LIB([svld], [dlopen],
 		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
 	      [AC_CHECK_LIB([dld], [dld_link],
-		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
 	      ])
 	    ])
 	  ])
 	])
       ])
     ;;
   esac
 
@@ -1026,25 +1123,26 @@ else
 fi
 ])# AC_LIBTOOL_DLOPEN_SELF
 
 
 # AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
 # ---------------------------------
 # Check to see if options -c and -o are simultaneously supported by compiler
 AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
 AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
   [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
   [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
    $rm -r conftest 2>/dev/null
    mkdir conftest
    cd conftest
    mkdir out
-   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
    lt_compiler_flag="-o out/conftest2.$ac_objext"
    # Insert the option either (1) after the last *FLAGS variable, or
    # (2) before a word containing "conftest.", or (3) at the end.
    # Note that $ac_compile itself does not contain backslashes and begins
    # with a dollar sign (not a hyphen), so the echo should work correctly.
    lt_compile=`echo "$ac_compile" | $SED \
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
@@ -1174,16 +1272,17 @@ if test -n "$STRIP" && $STRIP -V 2>&1 | 
   test -z "$striplib" && striplib="$STRIP --strip-unneeded"
   AC_MSG_RESULT([yes])
 else
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
    darwin*)
        if test -n "$STRIP" ; then
          striplib="$STRIP -x"
+         old_striplib="$STRIP -S"
          AC_MSG_RESULT([yes])
        else
   AC_MSG_RESULT([no])
 fi
        ;;
    *)
   AC_MSG_RESULT([no])
     ;;
@@ -1191,44 +1290,83 @@ fi
 fi
 ])# AC_LIBTOOL_SYS_LIB_STRIP
 
 
 # AC_LIBTOOL_SYS_DYNAMIC_LINKER
 # -----------------------------
 # PORTME Fill in your ld.so characteristics
 AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_MSG_CHECKING([dynamic linker characteristics])
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
 shrext_cmds=".so"
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
 finish_eval=
 shlibpath_var=
 shlibpath_overrides_runpath=unknown
 version_type=none
 dynamic_linker="$host_os ld.so"
 sys_lib_dlsearch_path_spec="/lib /usr/lib"
+m4_if($1,[],[
 if test "$GCC" = yes; then
-  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
     # if the path contains ";" then we assume it to be the separator
     # otherwise default to the standard path separator (i.e. ":") - it is
     # assumed that no part of a normal pathname contains ";" but that should
     # okay in the real world where ";" in dirpaths is itself problematic.
-    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+    lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
   else
-    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+    lt_search_path_spec=`echo "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
   fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`echo $lt_search_path_spec`
 else
   sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
+fi])
 need_lib_prefix=unknown
 hardcode_into_libs=no
 
 # when you set need_version to no, make sure it does not cause -set_version
 # flags to be left without arguments
 need_version=unknown
 
 case $host_os in
@@ -1236,17 +1374,17 @@ aix3*)
   version_type=linux
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
   # AIX 3 has no versioning support, so we append a major version to the name.
   soname_spec='${libname}${release}${shared_ext}$major'
   ;;
 
-aix4* | aix5*)
+aix[[4-9]]*)
   version_type=linux
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
   if test "$host_cpu" = ia64; then
     # AIX 5 supports IA64
     library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
     shlibpath_var=LD_LIBRARY_PATH
@@ -1375,50 +1513,34 @@ darwin* | rhapsody*)
   version_type=darwin
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
   soname_spec='${libname}${release}${major}$shared_ext'
   shlibpath_overrides_runpath=yes
   shlibpath_var=DYLD_LIBRARY_PATH
   shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
-  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
-  if test "$GCC" = yes; then
-    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
-  else
-    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
-  fi
+  m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) 
   sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
   ;;
 
 dgux*)
   version_type=linux
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
 freebsd1*)
   dynamic_linker=no
   ;;
 
-kfreebsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='GNU ld.so'
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
   if test -x /usr/bin/objformat; then
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
     freebsd[[123]]*) objformat=aout ;;
@@ -1446,17 +1568,17 @@ freebsd* | dragonfly*)
     shlibpath_overrides_runpath=yes
     hardcode_into_libs=yes
     ;;
   freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
   freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
     shlibpath_overrides_runpath=no
     hardcode_into_libs=yes
     ;;
-  freebsd*) # from 4.6 on
+  *) # from 4.6 on, and DragonFly
     shlibpath_overrides_runpath=yes
     hardcode_into_libs=yes
     ;;
   esac
   ;;
 
 gnu*)
   version_type=linux
@@ -1509,17 +1631,17 @@ hpux9* | hpux10* | hpux11*)
     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
     soname_spec='${libname}${release}${shared_ext}$major'
     ;;
   esac
   # HP-UX runs *really* slowly unless shared libraries are mode 555.
   postinstall_cmds='chmod 555 $lib'
   ;;
 
-interix3*)
+interix[[3-9]]*)
   version_type=linux
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
@@ -1564,57 +1686,45 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # No shared lib support for Linux oldld, aout, or coff.
 linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
 # This must be Linux ELF.
-linux*)
+linux* | k*bsd*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=no
   # This implies no fast_install, which is unacceptable.
   # Some rework will be needed to allow for fast_install
   # before this can be enabled.
   hardcode_into_libs=yes
 
   # Append ld.so.conf contents to the search path
   if test -f /etc/ld.so.conf; then
-    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ 	]*hwcap[ 	]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
 
   # We used to test for /lib/ld.so.1 and disable shared libraries on
   # powerpc, because MkLinux only supported shared libraries with the
   # GNU dynamic linker.  Since this was broken with cross compilers,
   # most powerpc-linux boxes support dynamic linking these days and
   # people can always --disable-shared, the test was removed, and we
   # assume the GNU/Linux dynamic linker is in use.
   dynamic_linker='GNU/Linux ld.so'
   ;;
 
-knetbsd*-gnu)
-  version_type=linux
-  need_lib_prefix=no
-  need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  hardcode_into_libs=yes
-  dynamic_linker='GNU ld.so'
-  ;;
-
 netbsd*)
   version_type=sunos
   need_lib_prefix=no
   need_version=no
   if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
     finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
     dynamic_linker='NetBSD (a.out) ld.so'
@@ -1686,16 +1796,20 @@ osf3* | osf4* | osf5*)
   need_version=no
   soname_spec='${libname}${release}${shared_ext}$major'
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
   sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
   ;;
 
+rdos*)
+  dynamic_linker=no
+  ;;
+
 solaris*)
   version_type=linux
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -1781,27 +1895,35 @@ uts4*)
 
 *)
   dynamic_linker=no
   ;;
 esac
 AC_MSG_RESULT([$dynamic_linker])
 test "$dynamic_linker" = no && can_build_shared=no
 
+AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec],
+[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"])
+sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec],
+[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"])
+sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
 if test "$GCC" = yes; then
   variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
 ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
 
 
 # _LT_AC_TAGCONFIG
 # ----------------
 AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_ARG_WITH([tags],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_ARG_WITH([tags],
     [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
         [include additional configurations @<:@automatic@:>@])],
     [tagnames="$withval"])
 
 if test -f "$ltmain" && test -n "$tagnames"; then
   if test ! -f "${ofile}"; then
     AC_MSG_WARN([output file `$ofile' does not exist])
   fi
@@ -2052,17 +2174,17 @@ m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC
     fi])
  EGREP=$ac_cv_prog_egrep
  AC_SUBST([EGREP])
 ])])
 
 
 # AC_PATH_TOOL_PREFIX
 # -------------------
-# find a file program which can recognise shared library
+# find a file program which can recognize shared library
 AC_DEFUN([AC_PATH_TOOL_PREFIX],
 [AC_REQUIRE([AC_PROG_EGREP])dnl
 AC_MSG_CHECKING([for $1])
 AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
 [case $MAGIC_CMD in
 [[\\/*] |  ?:[\\/]*])
   lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
   ;;
@@ -2115,17 +2237,17 @@ if test -n "$MAGIC_CMD"; then
 else
   AC_MSG_RESULT(no)
 fi
 ])# AC_PATH_TOOL_PREFIX
 
 
 # AC_PATH_MAGIC
 # -------------
-# find a file program which can recognise a shared library
+# find a file program which can recognize a shared library
 AC_DEFUN([AC_PATH_MAGIC],
 [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
 if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
   else
     MAGIC_CMD=:
   fi
@@ -2262,34 +2384,34 @@ esac
 ])# AC_PROG_LD_RELOAD_FLAG
 
 
 # AC_DEPLIBS_CHECK_METHOD
 # -----------------------
 # how to check for library dependencies
 #  -- PORTME fill in with the dynamic library characteristics
 AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognise dependent libraries],
+[AC_CACHE_CHECK([how to recognize dependent libraries],
 lt_cv_deplibs_check_method,
 [lt_cv_file_magic_cmd='$MAGIC_CMD'
 lt_cv_file_magic_test_file=
 lt_cv_deplibs_check_method='unknown'
 # Need to set the preceding variable on all platforms that support
 # interlibrary dependencies.
 # 'none' -- dependencies not supported.
 # `unknown' -- same as none, but documents that we really don't know.
 # 'pass_all' -- all dependencies passed with no checks.
 # 'test_compile' -- check by making test program.
 # 'file_magic [[regex]]' -- check by looking for files in library path
 # which responds to the $file_magic_cmd with a given extended regex.
 # If you have `file' or equivalent on your system and you're not sure
 # whether `pass_all' will *always* work, you probably want this one.
 
 case $host_os in
-aix4* | aix5*)
+aix[[4-9]]*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
 beos*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
 bsdi[[45]]*)
@@ -2301,26 +2423,32 @@ bsdi[[45]]*)
 cygwin*)
   # func_win32_libid is a shell function defined in ltmain.sh
   lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
   lt_cv_file_magic_cmd='func_win32_libid'
   ;;
 
 mingw* | pw32*)
   # Base MSYS/MinGW do not provide the 'file' command needed by
-  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
-  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
   ;;
 
 darwin* | rhapsody*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-freebsd* | kfreebsd*-gnu | dragonfly*)
+freebsd* | dragonfly*)
   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
     case $host_cpu in
     i*86 )
       # Not sure whether the presence of OpenBSD here was a mistake.
       # Let's accept both of them until this is cleared up.
       lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
       lt_cv_file_magic_cmd=/usr/bin/file
       lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
@@ -2348,33 +2476,33 @@ hpux10.20* | hpux11*)
     ;;
   *)
     lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
     lt_cv_file_magic_test_file=/usr/lib/libc.sl
     ;;
   esac
   ;;
 
-interix3*)
+interix[[3-9]]*)
   # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
   lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
   ;;
 
 irix5* | irix6* | nonstopux*)
   case $LD in
   *-32|*"-32 ") libmagic=32-bit;;
   *-n32|*"-n32 ") libmagic=N32;;
   *-64|*"-64 ") libmagic=64-bit;;
   *) libmagic=never-match;;
   esac
   lt_cv_deplibs_check_method=pass_all
   ;;
 
 # This must be Linux ELF.
-linux*)
+linux* | k*bsd*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
 netbsd*)
   if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
   else
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
@@ -2398,16 +2526,20 @@ openbsd*)
     lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
   fi
   ;;
 
 osf3* | osf4* | osf5*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
 solaris*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
 sysv4 | sysv4.3*)
   case $host_vendor in
   motorola)
     lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
@@ -2450,17 +2582,17 @@ test -z "$deplibs_check_method" && depli
 # find the pathname to a BSD-compatible name lister
 AC_DEFUN([AC_PROG_NM],
 [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
 [if test -n "$NM"; then
   # Let the user override the test.
   lt_cv_path_NM="$NM"
 else
   lt_nm_to_check="${ac_tool_prefix}nm"
-  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then 
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
     lt_nm_to_check="$lt_nm_to_check nm"
   fi
   for lt_tmp_nm in $lt_nm_to_check; do
     lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
     for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
       IFS="$lt_save_ifs"
       test -z "$ac_dir" && ac_dir=.
       tmp_nm="$ac_dir/$lt_tmp_nm"
@@ -2666,20 +2798,20 @@ AC_LANG_PUSH(C)
 # Source file extension for C test sources.
 ac_ext=c
 
 # Object file extension for compiled C test sources.
 objext=o
 _LT_AC_TAGVAR(objext, $1)=$objext
 
 # Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
+lt_simple_compile_test_code="int some_variable = 0;"
 
 # Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}\n'
+lt_simple_link_test_code='int main(){return(0);}'
 
 _LT_AC_SYS_COMPILER
 
 # save warnings/boilerplate of simple test code
 _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
@@ -2705,17 +2837,17 @@ case $host_os in
 aix3*)
   test "$enable_shared" = yes && enable_static=no
   if test -n "$RANLIB"; then
     archive_cmds="$archive_cmds~\$RANLIB \$lib"
     postinstall_cmds='$RANLIB $lib'
   fi
   ;;
 
-aix4* | aix5*)
+aix[[4-9]]*)
   if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
     test "$enable_shared" = yes && enable_static=no
   fi
     ;;
 esac
 AC_MSG_RESULT([$enable_shared])
 
 AC_MSG_CHECKING([whether to build static libraries])
@@ -2762,29 +2894,30 @@ AC_REQUIRE([_LT_AC_PROG_CXXCPP])
 _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
 
 # Dependencies to place before and after the object being linked:
 _LT_AC_TAGVAR(predep_objects, $1)=
 _LT_AC_TAGVAR(postdep_objects, $1)=
 _LT_AC_TAGVAR(predeps, $1)=
 _LT_AC_TAGVAR(postdeps, $1)=
 _LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
 
 # Source file extension for C++ test sources.
 ac_ext=cpp
 
 # Object file extension for compiled C++ test sources.
 objext=o
 _LT_AC_TAGVAR(objext, $1)=$objext
 
 # Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
+lt_simple_compile_test_code="int some_variable = 0;"
 
 # Code to be used in simple link tests
-lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
 
 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
 _LT_AC_SYS_COMPILER
 
 # save warnings/boilerplate of simple test code
 _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
@@ -2871,30 +3004,30 @@ fi
 # PORTME: fill in a description of your system's C++ link characteristics
 AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 _LT_AC_TAGVAR(ld_shlibs, $1)=yes
 case $host_os in
   aix3*)
     # FIXME: insert proper C++ library support
     _LT_AC_TAGVAR(ld_shlibs, $1)=no
     ;;
-  aix4* | aix5*)
+  aix[[4-9]]*)
     if test "$host_cpu" = ia64; then
       # On IA64, the linker does run time linking by default, so we don't
       # have to do anything special.
       aix_use_runtimelinking=no
       exp_sym_flag='-Bexport'
       no_entry_flag=""
     else
       aix_use_runtimelinking=no
 
       # Test if we are trying to use run time linking or normal
       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
       # need to do runtime linking.
-      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
 	for ld_flag in $LDFLAGS; do
 	  case $ld_flag in
 	  *-brtl*)
 	    aix_use_runtimelinking=yes
 	    break
 	    ;;
 	  esac
 	done
@@ -2920,17 +3053,17 @@ case $host_os in
       case $host_os in aix4.[[012]]|aix4.[[012]].*)
       # We only want to do this on AIX 4.2 and lower, the check
       # below for broken collect2 doesn't work under 4.3+
 	collect2name=`${CC} -print-prog-name=collect2`
 	if test -f "$collect2name" && \
 	   strings "$collect2name" | grep resolve_lib_name >/dev/null
 	then
 	  # We have reworked collect2
-	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  :
 	else
 	  # We have old collect2
 	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
 	  # It fails to find uninstalled libraries when the uninstalled
 	  # path is not listed in the libpath.  Setting hardcode_minus_L
 	  # to unsupported forces relinking
 	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
@@ -3030,69 +3163,41 @@ case $host_os in
 	cat $export_symbols >> $output_objdir/$soname.def;
       fi~
       $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
     else
       _LT_AC_TAGVAR(ld_shlibs, $1)=no
     fi
   ;;
       darwin* | rhapsody*)
-        case $host_os in
-        rhapsody* | darwin1.[[012]])
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[[012]])
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-        esac
       _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_AC_TAGVAR(hardcode_direct, $1)=no
       _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-    if test "$GXX" = yes ; then
-      lt_int_apple_cc_single_mod=no
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+      if test "$GXX" = yes ; then
       output_verbose_link_cmd='echo'
-      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
-       lt_int_apple_cc_single_mod=yes
+      _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+      _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+      _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+      if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+        _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
       fi
-      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-      else
-          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-        fi
-        _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
-            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          else
-            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          fi
-            _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
       else
       case $cc_basename in
         xlc*)
          output_verbose_link_cmd='echo'
-          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
           _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
           # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
           _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
           ;;
        *)
          _LT_AC_TAGVAR(ld_shlibs, $1)=no
           ;;
       esac
       fi
         ;;
@@ -3116,17 +3221,17 @@ case $host_os in
     ;;
   freebsd[[12]]*)
     # C++ shared libraries reported to be fairly broken before switch to ELF
     _LT_AC_TAGVAR(ld_shlibs, $1)=no
     ;;
   freebsd-elf*)
     _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
     ;;
-  freebsd* | kfreebsd*-gnu | dragonfly*)
+  freebsd* | dragonfly*)
     # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
     # conventions
     _LT_AC_TAGVAR(ld_shlibs, $1)=yes
     ;;
   gnu*)
     ;;
   hpux9*)
     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
@@ -3165,19 +3270,17 @@ case $host_os in
     esac
     ;;
   hpux10*|hpux11*)
     if test $with_gnu_ld = no; then
       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 
       case $host_cpu in
-      hppa*64*|ia64*)
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-        ;;
+      hppa*64*|ia64*) ;;
       *)
 	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
         ;;
       esac
     fi
     case $host_cpu in
     hppa*64*|ia64*)
       _LT_AC_TAGVAR(hardcode_direct, $1)=no
@@ -3235,17 +3338,17 @@ case $host_os in
 	  fi
 	else
 	  # FIXME: insert proper C++ library support
 	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
 	fi
 	;;
     esac
     ;;
-  interix3*)
+  interix[[3-9]]*)
     _LT_AC_TAGVAR(hardcode_direct, $1)=no
     _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
     _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
     # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
     # Instead, shared libraries are loaded at an image base (0x10000000 by
     # default) and relocated if they conflict, which is a slow very memory
     # consuming and fragmenting process.  To avoid this, we pick a random,
@@ -3275,17 +3378,17 @@ case $host_os in
 	  fi
 	fi
 	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 	;;
     esac
     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
     _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
     ;;
-  linux*)
+  linux* | k*bsd*-gnu)
     case $cc_basename in
       KCC*)
 	# Kuck and Associates, Inc. (KAI) C++ Compiler
 
 	# KCC will only create a shared library if the output file
 	# ends with ".so" (or ".sl" for HP-UX), so rename the library
 	# to its proper name (with version) after linking.
 	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
@@ -3327,17 +3430,17 @@ case $host_os in
 	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 	  ;;
 	esac
 	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
 	;;
-      pgCC*)
+      pgCC* | pgcpp*)
         # Portland Group C++ compiler
 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
   	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
 
 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
         ;;
@@ -3355,16 +3458,39 @@ case $host_os in
 	# linking a shared library.
 	#
 	# There doesn't appear to be a way to prevent this compiler from
 	# explicitly linking system object files so we need to strip them
 	# from the output so that they don't get included in the library
 	# dependencies.
 	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
 	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)
+	  # Sun C++ 5.9
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+
+	  # Not sure whether something based on
+	  # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	  # would be better.
+	  output_verbose_link_cmd='echo'
+
+	  # Archives containing C++ object files must be created using
+	  # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	  # necessary to make sure instantiated templates are included
+	  # in the archive.
+	  _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	  ;;
+	esac
+	;;
     esac
     ;;
   lynxos*)
     # FIXME: insert proper C++ library support
     _LT_AC_TAGVAR(ld_shlibs, $1)=no
     ;;
   m88k*)
     # FIXME: insert proper C++ library support
@@ -3393,26 +3519,30 @@ case $host_os in
     # Workaround some broken pre-1.5 toolchains
     output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
     ;;
   openbsd2*)
     # C++ shared libraries are fairly broken
     _LT_AC_TAGVAR(ld_shlibs, $1)=no
     ;;
   openbsd*)
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    if test -f /usr/libexec/ld.so; then
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      fi
+      output_verbose_link_cmd='echo'
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
     fi
-    output_verbose_link_cmd='echo'
     ;;
   osf3*)
     case $cc_basename in
       KCC*)
 	# Kuck and Associates, Inc. (KAI) C++ Compiler
 
 	# KCC will only create a shared library if the output file
 	# ends with ".so" (or ".sl" for HP-UX), so rename the library
@@ -3564,25 +3694,20 @@ case $host_os in
 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 	$CC -G${allow_undefined_flag}  ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
 
 	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 	case $host_os in
 	  solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
 	  *)
-	    # The C++ compiler is used as linker so we must use $wl
-	    # flag to pass the commands to the underlying system
-	    # linker. We must also pass each convience library through
-	    # to the system linker between allextract/defaultextract.
-	    # The C++ compiler will combine linker options so we
-	    # cannot just pass the convience library names through
-	    # without $wl.
+	    # The compiler driver will combine and reorder linker options,
+	    # but understands `-z linker_flag'.
 	    # Supported since Solaris 2.6 (maybe 2.5.1?)
-	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
+	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
 	    ;;
 	esac
 	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 
 	output_verbose_link_cmd='echo'
 
 	# Archives containing C++ object files must be created using
 	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
@@ -3619,16 +3744,22 @@ case $host_os in
 
 	    # Commands to make compiler produce verbose output that lists
 	    # what "hidden" libraries, object files and flags are used when
 	    # linking a shared library.
 	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
 	  fi
 
 	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	  case $host_os in
+	  solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	  *)
+	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	    ;;
+	  esac
 	fi
 	;;
     esac
     ;;
   sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
     _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
     _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
     _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
@@ -3734,17 +3865,18 @@ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
 ])# AC_LIBTOOL_LANG_CXX_CONFIG
 
 # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
 # ------------------------------------
 # Figure out "hidden" library dependencies from verbose
 # compiler output when linking a shared library.
 # Parse the compiler output and extract the necessary
 # objects, libraries and library flags.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
 dnl we can't use the lt_simple_compile_test_code here,
 dnl because it contains code intended for an executable,
 dnl not a library.  It's possible we should let each
 dnl tag define a new lt_????_link_test_code variable,
 dnl but it's only used here...
 ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
 int a;
 void foo (void) { a = 0; }
@@ -3859,40 +3991,77 @@ if AC_TRY_EVAL(ac_compile); then
   # Clean up.
   rm -f a.out a.exe
 else
   echo "libtool.m4: error: problem compiling $1 test program"
 fi
 
 $rm -f confest.$objext
 
+_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+  _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_AC_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+
 # PORTME: override above test on systems where it is broken
 ifelse([$1],[CXX],
 [case $host_os in
-interix3*)
+interix[[3-9]]*)
   # Interix 3.5 installs completely hosed .la files for C++, so rather than
   # hack all around it, let's just trust "g++" to DTRT.
   _LT_AC_TAGVAR(predep_objects,$1)=
   _LT_AC_TAGVAR(postdep_objects,$1)=
   _LT_AC_TAGVAR(postdeps,$1)=
   ;;
 
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+    #
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
 solaris*)
   case $cc_basename in
   CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
     # Adding this requires a known-good setup of shared libraries for
     # Sun compiler versions before 5.6, else PIC objects from an old
     # archive will be linked into the output, leading to subtle bugs.
-    _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
     ;;
   esac
   ;;
 esac
 ])
-
 case " $_LT_AC_TAGVAR(postdeps, $1) " in
 *" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
 esac
 ])# AC_LIBTOOL_POSTDEP_PREDEP
 
 # AC_LIBTOOL_LANG_F77_CONFIG
 # --------------------------
 # Ensure that the configuration vars for the C compiler are
@@ -3925,20 +4094,27 @@ AC_LANG_PUSH(Fortran 77)
 # Source file extension for f77 test sources.
 ac_ext=f
 
 # Object file extension for compiled f77 test sources.
 objext=o
 _LT_AC_TAGVAR(objext, $1)=$objext
 
 # Code to be used in simple compile tests
-lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
 
 # Code to be used in simple link tests
-lt_simple_link_test_code="      program t\n      end\n"
+lt_simple_link_test_code="\
+      program t
+      end
+"
 
 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
 _LT_AC_SYS_COMPILER
 
 # save warnings/boilerplate of simple test code
 _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
@@ -3960,17 +4136,17 @@ test "$can_build_shared" = "no" && enabl
 case $host_os in
 aix3*)
   test "$enable_shared" = yes && enable_static=no
   if test -n "$RANLIB"; then
     archive_cmds="$archive_cmds~\$RANLIB \$lib"
     postinstall_cmds='$RANLIB $lib'
   fi
   ;;
-aix4* | aix5*)
+aix[[4-9]]*)
   if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
     test "$enable_shared" = yes && enable_static=no
   fi
   ;;
 esac
 AC_MSG_RESULT([$enable_shared])
 
 AC_MSG_CHECKING([whether to build static libraries])
@@ -4007,20 +4183,20 @@ AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
 # Source file extension for Java test sources.
 ac_ext=java
 
 # Object file extension for compiled Java test sources.
 objext=o
 _LT_AC_TAGVAR(objext, $1)=$objext
 
 # Code to be used in simple compile tests
-lt_simple_compile_test_code="class foo {}\n"
+lt_simple_compile_test_code="class foo {}"
 
 # Code to be used in simple link tests
-lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
 
 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
 _LT_AC_SYS_COMPILER
 
 # save warnings/boilerplate of simple test code
 _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
@@ -4063,17 +4239,17 @@ AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
 # Source file extension for RC test sources.
 ac_ext=rc
 
 # Object file extension for compiled RC test sources.
 objext=o
 _LT_AC_TAGVAR(objext, $1)=$objext
 
 # Code to be used in simple compile tests
-lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
 
 # Code to be used in simple link tests
 lt_simple_link_test_code="$lt_simple_compile_test_code"
 
 # ltmain only uses $CC for tagged configurations so make sure $CC is set.
 _LT_AC_SYS_COMPILER
 
 # save warnings/boilerplate of simple test code
@@ -4137,31 +4313,33 @@ if test -f "$ltmain"; then
     _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
     _LT_AC_TAGVAR(old_archive_cmds, $1) \
     _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
     _LT_AC_TAGVAR(predep_objects, $1) \
     _LT_AC_TAGVAR(postdep_objects, $1) \
     _LT_AC_TAGVAR(predeps, $1) \
     _LT_AC_TAGVAR(postdeps, $1) \
     _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+    _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \
     _LT_AC_TAGVAR(archive_cmds, $1) \
     _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
     _LT_AC_TAGVAR(postinstall_cmds, $1) \
     _LT_AC_TAGVAR(postuninstall_cmds, $1) \
     _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
     _LT_AC_TAGVAR(allow_undefined_flag, $1) \
     _LT_AC_TAGVAR(no_undefined_flag, $1) \
     _LT_AC_TAGVAR(export_symbols_cmds, $1) \
     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
     _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
     _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
     _LT_AC_TAGVAR(hardcode_automatic, $1) \
     _LT_AC_TAGVAR(module_cmds, $1) \
     _LT_AC_TAGVAR(module_expsym_cmds, $1) \
     _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+    _LT_AC_TAGVAR(fix_srcfile_path, $1) \
     _LT_AC_TAGVAR(exclude_expsyms, $1) \
     _LT_AC_TAGVAR(include_expsyms, $1); do
 
     case $var in
     _LT_AC_TAGVAR(old_archive_cmds, $1) | \
     _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
     _LT_AC_TAGVAR(archive_cmds, $1) | \
     _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
@@ -4198,17 +4376,17 @@ ifelse([$1], [],
   cat <<__EOF__ >> "$cfgfile"
 ifelse([$1], [],
 [#! $SHELL
 
 # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
 # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
 # Free Software Foundation, Inc.
 #
 # This file is part of GNU Libtool:
 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 #
 # 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 2 of the License, or
@@ -4435,16 +4613,20 @@ postdep_objects=$lt_[]_LT_AC_TAGVAR(post
 # Dependencies to place before the objects being linked to create a
 # shared library.
 predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
 
 # Dependencies to place after the objects being linked to create a
 # shared library.
 postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
 
+# The directories searched by this compiler when creating a shared
+# library
+compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)
+
 # The library search path used internally by the compiler when linking
 # a shared library.
 compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
 
 # Method to check whether dependent libraries are shared objects.
 deplibs_check_method=$lt_deplibs_check_method
 
 # Command to use when deplibs_check_method == file_magic.
@@ -4523,17 +4705,17 @@ link_all_deplibs=$_LT_AC_TAGVAR(link_all
 
 # Compile-time system search path for libraries
 sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
 
 # Run-time system search path for libraries
 sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
 
 # Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+fix_srcfile_path=$lt_fix_srcfile_path
 
 # Set to yes if exported symbols are required.
 always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
 
 # The commands to list exported symbols.
 export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
 
 # The commands to extract the exported symbol list from a shared archive.
@@ -4606,16 +4788,17 @@ if test "$GCC" = yes; then
 fi
 ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
 
 
 # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
 # ---------------------------------
 AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
 [AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([LT_AC_PROG_SED])
 AC_REQUIRE([AC_PROG_NM])
 AC_REQUIRE([AC_OBJEXT])
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 AC_MSG_CHECKING([command to parse $NM output from $compiler object])
 AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
 [
 # These are sane defaults that work on at least a few old systems.
 # [They come from Ultrix.  What could be older than Ultrix?!! ;)]
@@ -4642,17 +4825,17 @@ cygwin* | mingw* | pw32*)
   ;;
 hpux*) # Its linker distinguishes data from code symbols
   if test "$host_cpu" = ia64; then
     symcode='[[ABCDEGRST]]'
   fi
   lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
   lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
   ;;
-linux*)
+linux* | k*bsd*-gnu)
   if test "$host_cpu" = ia64; then
     symcode='[[ABCDGIRSTW]]'
     lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
     lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
   fi
   ;;
 irix* | nonstopux*)
   symcode='[[BCDEGRST]]'
@@ -4783,17 +4966,17 @@ EOF
       fi
     else
       echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
     fi
   else
     echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
     cat conftest.$ac_ext >&5
   fi
-  rm -f conftest* conftst*
+  rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
   if test "$pipe_works" = yes; then
     break
   else
     lt_cv_sys_global_symbol_pipe=
   fi
 done
@@ -4832,34 +5015,37 @@ AC_MSG_CHECKING([for $compiler option to
       fi
       ;;
     amigaos*)
       # FIXME: we need at least 68020 code to build shared libraries, but
       # adding the `-m68020' flag to GCC prevents building anything better,
       # like `-m68040'.
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
       ;;
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
       # PIC is the default for these OSes.
       ;;
-    mingw* | os2* | pw32*)
+    mingw* | cygwin* | os2* | pw32*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
       ;;
     darwin* | rhapsody*)
       # PIC is the default on this platform
       # Common symbols not allowed in MH_DYLIB files
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
       ;;
     *djgpp*)
       # DJGPP does not support shared libraries at all
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
       ;;
-    interix3*)
+    interix[[3-9]]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
       ;;
     sysv4*MP*)
       if test -d /usr/nec; then
 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
       fi
       ;;
@@ -4875,17 +5061,17 @@ AC_MSG_CHECKING([for $compiler option to
       esac
       ;;
     *)
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
     esac
   else
     case $host_os in
-      aix4* | aix5*)
+      aix[[4-9]]*)
 	# All AIX code is PIC.
 	if test "$host_cpu" = ia64; then
 	  # AIX 5 now supports IA64 processor
 	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	else
 	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
 	fi
 	;;
@@ -4915,17 +5101,17 @@ AC_MSG_CHECKING([for $compiler option to
 	  ghcx*)
 	    # Green Hills C++ Compiler
 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
 	    ;;
 	  *)
 	    ;;
 	esac
 	;;
-      freebsd* | kfreebsd*-gnu | dragonfly*)
+      freebsd* | dragonfly*)
 	# FreeBSD uses GNU C++
 	;;
       hpux9* | hpux10* | hpux11*)
 	case $cc_basename in
 	  CC*)
 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
 	    if test "$host_cpu" != ia64; then
@@ -4958,43 +5144,51 @@ AC_MSG_CHECKING([for $compiler option to
 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 	    # CC pic flag -KPIC is the default.
 	    ;;
 	  *)
 	    ;;
 	esac
 	;;
-      linux*)
+      linux* | k*bsd*-gnu)
 	case $cc_basename in
 	  KCC*)
 	    # KAI C++ Compiler
 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
 	    ;;
 	  icpc* | ecpc*)
 	    # Intel C++
 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
 	    ;;
-	  pgCC*)
+	  pgCC* | pgcpp*)
 	    # Portland Group C++ compiler.
 	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 	    ;;
 	  cxx*)
 	    # Compaq C++
 	    # Make sure the PIC flag is empty.  It appears that all Alpha
 	    # Linux and Compaq Tru64 Unix objects are PIC.
 	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
 	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 	    ;;
 	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
 	    ;;
 	esac
 	;;
       lynxos*)
 	;;
       m88k*)
 	;;
       mvs*)
@@ -5105,33 +5299,36 @@ AC_MSG_CHECKING([for $compiler option to
 
     amigaos*)
       # FIXME: we need at least 68020 code to build shared libraries, but
       # adding the `-m68020' flag to GCC prevents building anything better,
       # like `-m68040'.
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
       ;;
 
-    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
       # PIC is the default for these OSes.
       ;;
 
-    mingw* | pw32* | os2*)
+    mingw* | cygwin* | pw32* | os2*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
       ;;
 
     darwin* | rhapsody*)
       # PIC is the default on this platform
       # Common symbols not allowed in MH_DYLIB files
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
       ;;
 
-    interix3*)
+    interix[[3-9]]*)
       # Interix 3.x gcc -fpic/-fPIC options generate broken code.
       # Instead, we relocate shared libraries at runtime.
       ;;
 
     msdosdjgpp*)
       # Just because we use GCC doesn't mean we suddenly get shared libraries
       # on systems that don't support them.
       _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
@@ -5179,20 +5376,21 @@ AC_MSG_CHECKING([for $compiler option to
        case $cc_basename in
          xlc*)
          _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
          _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
          ;;
        esac
        ;;
 
-    mingw* | pw32* | os2*)
+    mingw* | cygwin* | pw32* | os2*)
       # This hack is so that the source file can tell whether it is being
       # built for inclusion in a dll (and should export symbols for example).
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      m4_if([$1], [GCJ], [],
+	[_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
       ;;
 
     hpux9* | hpux10* | hpux11*)
       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
       # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
       # not for PA HP-UX.
       case $host_cpu in
       hppa*64*|ia64*)
@@ -5212,17 +5410,17 @@ AC_MSG_CHECKING([for $compiler option to
       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
     newsos6)
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       ;;
 
-    linux*)
+    linux* | k*bsd*-gnu)
       case $cc_basename in
       icc* | ecc*)
 	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
         ;;
       pgcc* | pgf77* | pgf90* | pgf95*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
@@ -5231,25 +5429,45 @@ AC_MSG_CHECKING([for $compiler option to
 	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
 	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
         ;;
       ccc*)
         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
         # All Alpha code is PIC.
         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
         ;;
+      *)
+        case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+	*Sun\ F*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	esac
+	;;
       esac
       ;;
 
     osf3* | osf4* | osf5*)
       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
       # All OSF/1 code is PIC.
       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
+    rdos*)
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
     solaris*)
       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       case $cc_basename in
       f77* | f90* | f95*)
 	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
       *)
 	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
@@ -5299,17 +5517,17 @@ AC_MSG_CHECKING([for $compiler option to
 ])
 AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
 
 #
 # Check to make sure the PIC flag actually works.
 #
 if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
   AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
-    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+    _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
     [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
     [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
      "" | " "*) ;;
      *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
      esac],
     [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
 fi
@@ -5323,50 +5541,52 @@ case $host_os in
     ;;
 esac
 
 #
 # Check to make sure the static flag actually works.
 #
 wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
 AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+  _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
   $lt_tmp_static_flag,
   [],
   [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
 ])
 
 
 # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
 # ------------------------------------
 # See if the linker supports building shared libraries.
 AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 ifelse([$1],[CXX],[
   _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
   case $host_os in
-  aix4* | aix5*)
+  aix[[4-9]]*)
     # If we're using GNU nm, then we don't want the "-C" option.
     # -C means demangle to AIX nm, but means don't demangle with GNU nm
     if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
       _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
     else
       _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
     _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
   ;;
   cygwin* | mingw*)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
   ;;
   *)
     _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
   ;;
   esac
+  _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
 ],[
   runpath_var=
   _LT_AC_TAGVAR(allow_undefined_flag, $1)=
   _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
   _LT_AC_TAGVAR(archive_cmds, $1)=
   _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
   _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
   _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
@@ -5387,22 +5607,24 @@ ifelse([$1],[CXX],[
   _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
   # include_expsyms should be a list of space-separated symbols to be *always*
   # included in the symbol list
   _LT_AC_TAGVAR(include_expsyms, $1)=
   # exclude_expsyms can be an extended regexp of symbols to exclude
   # it will be wrapped by ` (' and `)$', so one must not match beginning or
   # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
   # as well as any symbol that contains `d'.
-  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+  _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
   # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
   # platforms (ab)use it in PIC code, but their linkers get confused if
   # the symbol is explicitly referenced.  Since portable code cannot
   # rely on this symbol name, it's probably fine to never include it in
   # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
   extract_expsyms_cmds=
   # Just being paranoid about ensuring that cc_basename is set.
   _LT_CC_BASENAME([$compiler])
   case $host_os in
   cygwin* | mingw* | pw32*)
     # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
     # Microsoft Visual C++.
@@ -5442,17 +5664,17 @@ ifelse([$1],[CXX],[
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
       *\ 2.11.*) ;; # other 2.11 versions
       *) supports_anon_versioning=yes ;;
     esac
 
     # See if GNU ld supports shared libraries.
     case $host_os in
-    aix3* | aix4* | aix5*)
+    aix[[3-9]]*)
       # On AIX/PPC, the GNU linker is very broken
       if test "$host_cpu" != ia64; then
 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 	cat <<EOF 1>&2
 
 *** Warning: the GNU linker, at least up to release 2.9.1, is reported
 *** to be unable to reliably create shared libraries on AIX.
 *** Therefore, libtool is disabling shared libraries support.  If you
@@ -5490,17 +5712,17 @@ EOF
 
     cygwin* | mingw* | pw32*)
       # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
       # as there is no search path for DLLs.
       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_AC_TAGVAR(always_export_symbols, $1)=no
       _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
 
       if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
 	# If the export-symbols file already is a .def file (1st line
 	# is EXPORTS), use it as is; otherwise, prepend...
 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
 	  cp $export_symbols $output_objdir/$soname.def;
 	else
@@ -5508,32 +5730,32 @@ EOF
 	  cat $export_symbols >> $output_objdir/$soname.def;
 	fi~
 	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
       else
 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
 
-    interix3*)
+    interix[[3-9]]*)
       _LT_AC_TAGVAR(hardcode_direct, $1)=no
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
       # Instead, shared libraries are loaded at an image base (0x10000000 by
       # default) and relocated if they conflict, which is a slow very memory
       # consuming and fragmenting process.  To avoid this, we pick a random,
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    linux*)
+    gnu* | linux* | k*bsd*-gnu)
       if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 	tmp_addflag=
 	case $cc_basename,$host_cpu in
 	pgcc*)				# Portland Group C compiler
 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
 	  tmp_addflag=' $pic_flag'
 	  ;;
 	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
@@ -5541,23 +5763,32 @@ EOF
 	  tmp_addflag=' $pic_flag -Mnomain' ;;
 	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
 	  tmp_addflag=' -i_dynamic' ;;
 	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
 	  tmp_addflag=' -i_dynamic -nofor_main' ;;
 	ifc* | ifort*)			# Intel Fortran compiler
 	  tmp_addflag=' -nofor_main' ;;
 	esac
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	*)
+	  tmp_sharedflag='-shared' ;;
+	esac
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 
 	if test $supports_anon_versioning = yes; then
 	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
   cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
   $echo "local: *; };" >> $output_objdir/$libname.ver~
-	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	  $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
 	fi
       else
 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
 
     netbsd*)
       if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
@@ -5587,17 +5818,17 @@ EOF
 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
       else
 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
 
     sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
       case `$LD -v 2>&1` in
-        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) 
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
 	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 	cat <<_LT_EOF 1>&2
 
 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
 *** reliably create shared libraries on SCO systems.  Therefore, libtool
 *** is disabling shared libraries support.  We urge you to upgrade GNU
 *** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
 *** your PATH or compiler configuration so that the native linker is
@@ -5652,17 +5883,17 @@ EOF
       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
       if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
 	# Neither direct hardcoding nor static linking is supported with a
 	# broken collect2.
 	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
       fi
       ;;
 
-    aix4* | aix5*)
+    aix[[4-9]]*)
       if test "$host_cpu" = ia64; then
 	# On IA64, the linker does run time linking by default, so we don't
 	# have to do anything special.
 	aix_use_runtimelinking=no
 	exp_sym_flag='-Bexport'
 	no_entry_flag=""
       else
 	# If we're using GNU nm, then we don't want the "-C" option.
@@ -5672,17 +5903,17 @@ EOF
 	else
 	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
 	fi
 	aix_use_runtimelinking=no
 
 	# Test if we are trying to use run time linking or normal
 	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
 	# need to do runtime linking.
-	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
 	  for ld_flag in $LDFLAGS; do
   	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
   	    aix_use_runtimelinking=yes
   	    break
   	  fi
 	  done
 	  ;;
 	esac
@@ -5706,17 +5937,17 @@ EOF
 	case $host_os in aix4.[[012]]|aix4.[[012]].*)
 	# We only want to do this on AIX 4.2 and lower, the check
 	# below for broken collect2 doesn't work under 4.3+
 	  collect2name=`${CC} -print-prog-name=collect2`
 	  if test -f "$collect2name" && \
   	   strings "$collect2name" | grep resolve_lib_name >/dev/null
 	  then
   	  # We have reworked collect2
-  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+  	  :
 	  else
   	  # We have old collect2
   	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
   	  # It fails to find uninstalled libraries when the uninstalled
   	  # path is not listed in the libpath.  Setting hardcode_minus_L
   	  # to unsupported forces relinking
   	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
   	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
@@ -5799,17 +6030,17 @@ EOF
       libext=lib
       # Tell ltmain to make .dll files, not .so files.
       shrext_cmds=".dll"
       # FIXME: Setting linknames here is a bad hack.
       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
       # The linker will automatically build a .lib file if we build a DLL.
       _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
       # FIXME: Should let the user specify the lib program.
-      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
       _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
       _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
       ;;
 
     darwin* | rhapsody*)
       case $host_os in
         rhapsody* | darwin1.[[012]])
          _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
@@ -5832,29 +6063,28 @@ EOF
       _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_AC_TAGVAR(hardcode_direct, $1)=no
       _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
     if test "$GCC" = yes ; then
     	output_verbose_link_cmd='echo'
-        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
-      _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-      _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+        _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+        _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+        _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+        _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
     else
       case $cc_basename in
         xlc*)
          output_verbose_link_cmd='echo'
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
          _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
           # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
           _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
           ;;
        *)
          _LT_AC_TAGVAR(ld_shlibs, $1)=no
           ;;
       esac
     fi
       ;;
@@ -5884,17 +6114,17 @@ EOF
     freebsd2*)
       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | kfreebsd*-gnu | dragonfly*)
+    freebsd* | dragonfly*)
       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
     hpux9*)
       if test "$GCC" = yes; then
@@ -6006,34 +6236,38 @@ EOF
       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
     openbsd*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      if test -f /usr/libexec/ld.so; then
+	_LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+	else
+	  case $host_os in
+	   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	     _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	     ;;
+	   *)
+	     _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	     _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	     ;;
+	  esac
+        fi
       else
-       case $host_os in
-	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-	   ;;
-	 *)
-	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-	   ;;
-       esac
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
       fi
       ;;
 
     os2*)
       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
       _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
@@ -6082,27 +6316,26 @@ EOF
 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
   	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
       fi
       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
       case $host_os in
       solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
       *)
- 	# The compiler driver will combine linker options so we
- 	# cannot just pass the convience library names through
- 	# without $wl, iff we do not link with $LD.
- 	# Luckily, gcc supports the same syntax we need for Sun Studio.
+	# The compiler driver will combine and reorder linker options,
+	# but understands `-z linker_flag'.  GCC discards it without `$wl',
+	# but is careful enough not to reorder.
  	# Supported since Solaris 2.6 (maybe 2.5.1?)
- 	case $wlarc in
- 	'')
- 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
- 	*)
- 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
- 	esac ;;
+	if test "$GCC" = yes; then
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+	else
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
       esac
       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
     sunos4*)
       if test "x$host_vendor" = xsequent; then
 	# Use $CC to link under sequent, because it throws in some extra .o
 	# files that make .init and .fini sections work.
@@ -6149,17 +6382,17 @@ EOF
 	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 	runpath_var=LD_RUN_PATH
 	hardcode_runpath_var=yes
 	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
       fi
       ;;
 
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
       _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
       _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
       runpath_var='LD_RUN_PATH'
 
       if test "$GCC" = yes; then
 	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
@@ -6224,17 +6457,17 @@ x|xyes)
       # FIXME: we may have to deal with multi-command sequences.
       ;;
     '$CC '*)
       # Test whether the compiler implicitly links with -lc since on some
       # systems, -lgcc has to come before -lc. If gcc already passes -lc
       # to ld, don't add -lc before -lgcc.
       AC_MSG_CHECKING([whether -lc should be explicitly linked in])
       $rm conftest*
-      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
       if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
         soname=conftest
         lib=conftest
         libobjs=conftest.$ac_objext
         deplibs=
         wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
 	pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
@@ -6327,16 +6560,40 @@ AC_DEFUN([LT_AC_PROG_GCJ],
   test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
   AC_SUBST(GCJFLAGS)
 ])
 
 AC_DEFUN([LT_AC_PROG_RC],
 [AC_CHECK_TOOL(RC, windres, no)
 ])
 
+
+# Cheap backport of AS_EXECUTABLE_P and required macros
+# from Autoconf 2.59; we should not use $as_executable_p directly.
+
+# _AS_TEST_PREPARE
+# ----------------
+m4_ifndef([_AS_TEST_PREPARE],
+[m4_defun([_AS_TEST_PREPARE],
+[if test -x / >/dev/null 2>&1; then
+  as_executable_p='test -x'
+else
+  as_executable_p='test -f'
+fi
+])])# _AS_TEST_PREPARE
+
+# AS_EXECUTABLE_P
+# ---------------
+# Check whether a file is executable.
+m4_ifndef([AS_EXECUTABLE_P],
+[m4_defun([AS_EXECUTABLE_P],
+[AS_REQUIRE([_AS_TEST_PREPARE])dnl
+$as_executable_p $1[]dnl
+])])# AS_EXECUTABLE_P
+
 # NOTE: This macro has been submitted for inclusion into   #
 #  GNU Autoconf as AC_PROG_SED.  When it is available in   #
 #  a released version of Autoconf we should remove this    #
 #  macro and use it instead.                               #
 # LT_AC_PROG_SED
 # --------------
 # Check for a fully-functional sed program, that truncates
 # as few characters as possible.  Prefer GNU sed if found.
@@ -6347,22 +6604,23 @@ AC_CACHE_VAL(lt_cv_path_SED,
 # Then use that list of sed's as ones to test for truncation.
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
   for lt_ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+      if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then
         lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
       fi
     done
   done
 done
+IFS=$as_save_IFS
 lt_ac_max=0
 lt_ac_count=0
 # Add /usr/xpg4/bin/sed as it is typically found on Solaris
 # along with /bin/sed that truncates output.
 for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
   test ! -f $lt_ac_sed && continue
   cat /dev/null > conftest.in
   lt_ac_count=0
@@ -6385,16 +6643,17 @@ for lt_ac_sed in $lt_ac_sed_list /usr/xp
     if test $lt_ac_count -gt $lt_ac_max; then
       lt_ac_max=$lt_ac_count
       lt_cv_path_SED=$lt_ac_sed
     fi
   done
 done
 ])
 SED=$lt_cv_path_SED
+AC_SUBST([SED])
 AC_MSG_RESULT([$SED])
 ])
 
 # Copyright (C) 2002, 2003, 2005, 2006  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h
@@ -0,0 +1,36 @@
+// Copyright (c) 2009, 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.
+
+#ifndef BREAKPAD_GOOGLETEST_INCLUDES_H__
+#define BREAKPAD_GOOGLETEST_INCLUDES_H__
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/include/gmock/gmock.h"
+
+#endif  // BREAKPAD_GOOGLETEST_INCLUDES_H__
--- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc
+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.cc
@@ -31,16 +31,17 @@
 
 #include <signal.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
 #include <cassert>
 #include <cstdlib>
+#include <cstdio>
 #include <ctime>
 #include <linux/limits.h>
 
 #include "client/linux/handler/exception_handler.h"
 #include "common/linux/guid_creator.h"
 #include "google_breakpad/common/minidump_format.h"
 
 namespace google_breakpad {
@@ -76,16 +77,25 @@ ExceptionHandler::ExceptionHandler(const
                                    bool install_handler)
     : filter_(filter),
       callback_(callback),
       callback_context_(callback_context),
       dump_path_(),
       installed_handler_(install_handler) {
   set_dump_path(dump_path);
 
+  act_.sa_handler = HandleException;
+  act_.sa_flags = SA_ONSTACK;
+  sigemptyset(&act_.sa_mask);
+  // now, make sure we're blocking all the signals we are handling
+  // when we're handling any of them
+  for ( size_t i = 0; i < sizeof(SigTable) / sizeof(SigTable[0]); ++i) {
+    sigaddset(&act_.sa_mask, SigTable[i]);
+  }
+
   if (install_handler) {
     SetupHandler();
     pthread_mutex_lock(&handler_stack_mutex_);
     if (handler_stack_ == NULL)
       handler_stack_ = new std::vector<ExceptionHandler *>;
     handler_stack_->push_back(this);
     pthread_mutex_unlock(&handler_stack_mutex_);
   }
@@ -144,30 +154,36 @@ void ExceptionHandler::SetupHandler() {
 
   if (sigaltstack(&sig_stack, NULL) < 0)
     return;
   for (size_t i = 0; i < sizeof(SigTable) / sizeof(SigTable[0]); ++i)
     SetupHandler(SigTable[i]);
 }
 
 void ExceptionHandler::SetupHandler(int signo) {
-  struct sigaction act, old_act;
-  act.sa_handler = HandleException;
-  act.sa_flags = SA_ONSTACK;
-  if (sigaction(signo, &act, &old_act) < 0)
-    return;
-  old_handlers_[signo] = old_act.sa_handler;
+
+  // We're storing pointers to the old signal action
+  // structure, rather than copying the structure
+  // because we can't count on the sa_mask field to
+  // be scalar.
+  struct sigaction *old_act = &old_actions_[signo];
+
+  if (sigaction(signo, &act_, old_act) < 0)
+   return;
 }
 
 void ExceptionHandler::TeardownHandler(int signo) {
-  if (old_handlers_.find(signo) != old_handlers_.end()) {
-    struct sigaction act;
-    act.sa_handler = old_handlers_[signo];
-    act.sa_flags = 0;
-    sigaction(signo, &act, 0);
+  TeardownHandler(signo, NULL);
+}
+
+void ExceptionHandler::TeardownHandler(int signo, struct sigaction *final_handler) {
+  if (old_actions_[signo].sa_handler) {
+    struct sigaction *act = &old_actions_[signo];
+    sigaction(signo, act, final_handler);
+    memset(&old_actions_[signo], 0x0, sizeof(struct sigaction));
   }
 }
 
 void ExceptionHandler::TeardownAllHandler() {
   for (size_t i = 0; i < sizeof(SigTable) / sizeof(SigTable[0]); ++i) {
     TeardownHandler(SigTable[i]);
   }
 }
@@ -188,30 +204,43 @@ void ExceptionHandler::HandleException(i
                 :"=m"(current_ebp));
 
   pthread_mutex_lock(&handler_stack_mutex_);
   ExceptionHandler *current_handler =
     handler_stack_->at(handler_stack_->size() - ++handler_stack_index_);
   pthread_mutex_unlock(&handler_stack_mutex_);
 
   // Restore original handler.
-  current_handler->TeardownHandler(signo);
+  struct sigaction old_action;
+  current_handler->TeardownHandler(signo, &old_action);
 
   struct sigcontext *sig_ctx = NULL;
   if (current_handler->InternalWriteMinidump(signo, current_ebp, &sig_ctx)) {
     // Fully handled this exception, safe to exit.
     exit(EXIT_FAILURE);
   } else {
     // Exception not fully handled, will call the next handler in stack to
     // process it.
-    typedef void (*SignalHandler)(int signo, struct sigcontext);
-    SignalHandler old_handler =
-      reinterpret_cast<SignalHandler>(current_handler->old_handlers_[signo]);
-    if (old_handler != NULL && sig_ctx != NULL)
+    if (old_action.sa_handler != NULL && sig_ctx != NULL) {
+
+      // Have our own typedef, because of the comment above w.r.t signal
+      // context on the stack
+      typedef void (*SignalHandler)(int signo, struct sigcontext);
+
+      SignalHandler old_handler =
+          reinterpret_cast<SignalHandler>(old_action.sa_handler);
+
+      sigset_t old_set;
+      // Use SIG_BLOCK here because we don't want to unblock a signal
+      // that the signal handler we're currently in needs to block
+      sigprocmask(SIG_BLOCK, &old_action.sa_mask, &old_set);
       old_handler(signo, *sig_ctx);
+      sigprocmask(SIG_SETMASK, &old_set, NULL);
+    }
+
   }
 
   pthread_mutex_lock(&handler_stack_mutex_);
   current_handler->SetupHandler(signo);
   --handler_stack_index_;
   // All the handlers in stack have been invoked to handle the exception,
   // normally the process should be terminated and should not reach here.
   // In case we got here, ask the OS to handle it to avoid endless loop,
@@ -242,17 +271,17 @@ bool ExceptionHandler::InternalWriteMini
                     "failed to block signals.\n");
   }
 
   success = minidump_generator_.WriteMinidumpToFile(
                      next_minidump_path_c_, signo, sighandler_ebp, sig_ctx);
 
   // Unblock the signals.
   if (blocked) {
-    sigprocmask(SIG_SETMASK, &sig_old, &sig_old);
+    sigprocmask(SIG_SETMASK, &sig_old, NULL);
   }
 
   if (callback_)
     success = callback_(dump_path_c_, next_minidump_id_c_,
                           callback_context_, success);
   return success;
 }
 
--- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h
+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/exception_handler.h
@@ -31,16 +31,17 @@
 
 #ifndef CLIENT_LINUX_HANDLER_EXCEPTION_HANDLER_H__
 #define CLIENT_LINUX_HANDLER_EXCEPTION_HANDLER_H__
 
 #include <pthread.h>
 
 #include <map>
 #include <string>
+#include <signal.h>
 #include <vector>
 
 #include "client/linux/handler/minidump_generator.h"
 
 // Context information when exception occured.
 struct sigcontex;
 
 namespace google_breakpad {
@@ -141,16 +142,18 @@ class ExceptionHandler {
 
  private:
   // Setup crash handler.
   void SetupHandler();
   // Setup signal handler for a signal.
   void SetupHandler(int signo);
   // Teardown the handler for a signal.
   void TeardownHandler(int signo);
+  // Teardown the handler for a signal.
+  void TeardownHandler(int signo, struct sigaction *old);
   // Teardown all handlers.
   void TeardownAllHandler();
 
   // Signal handler.
   static void HandleException(int signo);
 
   // If called from a signal handler, sighandler_ebp is the ebp of
   // that signal handler's frame, and sig_ctx is an out parameter
@@ -187,31 +190,37 @@ class ExceptionHandler {
   const char *dump_path_c_;
   const char *next_minidump_id_c_;
   const char *next_minidump_path_c_;
 
   // True if the ExceptionHandler installed an unhandled exception filter
   // when created (with an install_handler parameter set to true).
   bool installed_handler_;
 
-  // Keep the previous handlers for the signal.
-  typedef void (*sighandler_t)(int);
-  std::map<int, sighandler_t> old_handlers_;
-
   // The global exception handler stack. This is need becuase there may exist
   // multiple ExceptionHandler instances in a process. Each will have itself
   // registered in this stack.
   static std::vector<ExceptionHandler *> *handler_stack_;
   // The index of the handler that should handle the next exception.
   static int handler_stack_index_;
   static pthread_mutex_t handler_stack_mutex_;
 
   // The minidump generator.
   MinidumpGenerator minidump_generator_;
 
   // disallow copy ctor and operator=
   explicit ExceptionHandler(const ExceptionHandler &);
   void operator=(const ExceptionHandler &);
+
+  // The sigactions structure we use for each signal
+  struct sigaction act_;
+
+
+  // Keep the previous handlers for the signal.
+  // We're wasting a bit of memory here since we only change
+  // the handler for some signals but i want to avoid allocating
+  // memory in the signal handler
+  struct sigaction old_actions_[NSIG];
 };
 
 }  // namespace google_breakpad
 
 #endif  // CLIENT_LINUX_HANDLER_EXCEPTION_HANDLER_H__
--- a/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_generator.cc
+++ b/toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_generator.cc
@@ -34,16 +34,17 @@
 #include <signal.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 #include <sys/utsname.h>
 #include <sys/wait.h>
 
 #include <cstdlib>
+#include <cstdio>
 #include <ctime>
 #include <string.h>
 
 #include "common/linux/file_id.h"
 #include "client/linux/handler/linux_thread.h"
 #include "client/minidump_file_writer.h"
 #include "client/minidump_file_writer-inl.h"
 #include "google_breakpad/common/minidump_format.h"
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Breakpad.xcodeproj/project.pbxproj
@@ -0,0 +1,1925 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXAggregateTarget section */
+		F94585840F782326009A47BF /* All */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = F94585930F78235C009A47BF /* Build configuration list for PBXAggregateTarget "All" */;
+			buildPhases = (
+			);
+			dependencies = (
+				F94585880F78232B009A47BF /* PBXTargetDependency */,
+				F945858A0F78232E009A47BF /* PBXTargetDependency */,
+				F945858C0F782330009A47BF /* PBXTargetDependency */,
+				F945858E0F782333009A47BF /* PBXTargetDependency */,
+				F94585900F782336009A47BF /* PBXTargetDependency */,
+				F93DE3A70F830D1D00608B94 /* PBXTargetDependency */,
+			);
+			name = All;
+			productName = All;
+		};
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+		3329D4ED0FA16D820007BBC5 /* Breakpad.nib in Resources */ = {isa = PBXBuildFile; fileRef = 3329D4EC0FA16D820007BBC5 /* Breakpad.nib */; };
+		33880C800F9E097100817F82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 33880C7E0F9E097100817F82 /* InfoPlist.strings */; };
+		4084699D0F5D9CF900FDCA37 /* crash_report_sender.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */; };
+		8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; };
+		F91AF5D00FD60393009D8BE2 /* BreakpadFramework_Test.mm in Sources */ = {isa = PBXBuildFile; fileRef = F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */; };
+		F91AF6210FD60784009D8BE2 /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; };
+		F9286B3A0F7EB25800A4DCC8 /* InspectorMain.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */; };
+		F92C53B80ECCE7B3009BE4BA /* Inspector.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53B70ECCE7B3009BE4BA /* Inspector.mm */; };
+		F92C554C0ECCF534009BE4BA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; };
+		F92C55D00ECD0064009BE4BA /* Breakpad.h in Headers */ = {isa = PBXBuildFile; fileRef = F92C55CE0ECD0064009BE4BA /* Breakpad.h */; settings = {ATTRIBUTES = (Public, ); }; };
+		F92C55D10ECD0064009BE4BA /* Breakpad.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C55CF0ECD0064009BE4BA /* Breakpad.mm */; };
+		F92C56330ECD0DF1009BE4BA /* OnDemandServer.h in Headers */ = {isa = PBXBuildFile; fileRef = F92C56310ECD0DF1009BE4BA /* OnDemandServer.h */; };
+		F92C56340ECD0DF1009BE4BA /* OnDemandServer.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C56320ECD0DF1009BE4BA /* OnDemandServer.mm */; };
+		F92C563F0ECD10CA009BE4BA /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = F92C53870ECCE6C0009BE4BA /* convert_UTF.c */; };
+		F92C56400ECD10CA009BE4BA /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */; };
+		F92C56410ECD10CA009BE4BA /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53740ECCE635009BE4BA /* file_id.cc */; };
+		F92C56420ECD10CA009BE4BA /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537A0ECCE635009BE4BA /* macho_id.cc */; };
+		F92C56430ECD10CA009BE4BA /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537C0ECCE635009BE4BA /* macho_utilities.cc */; };
+		F92C56440ECD10CA009BE4BA /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537E0ECCE635009BE4BA /* macho_walker.cc */; };
+		F92C56450ECD10CA009BE4BA /* MachIPC.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53790ECCE635009BE4BA /* MachIPC.mm */; };
+		F92C56460ECD10CA009BE4BA /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */; };
+		F92C56470ECD10CA009BE4BA /* minidump_generator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */; };
+		F92C56480ECD10CA009BE4BA /* SimpleStringDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */; };
+		F92C56490ECD10CA009BE4BA /* string_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53820ECCE635009BE4BA /* string_utilities.cc */; };
+		F92C564A0ECD10CA009BE4BA /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; };
+		F92C564C0ECD10DD009BE4BA /* breakpadUtilities.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; };
+		F92C56570ECD113E009BE4BA /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C554A0ECCF530009BE4BA /* Carbon.framework */; };
+		F92C565C0ECD1158009BE4BA /* breakpadUtilities.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; };
+		F92C565F0ECD116B009BE4BA /* protected_memory_allocator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53720ECCE3FD009BE4BA /* protected_memory_allocator.cc */; };
+		F92C56630ECD1179009BE4BA /* exception_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */; };
+		F92C56650ECD1185009BE4BA /* breakpadUtilities.dylib in Resources */ = {isa = PBXBuildFile; fileRef = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */; };
+		F92C568A0ECD15F9009BE4BA /* Inspector in Resources */ = {isa = PBXBuildFile; fileRef = F92C53540ECCE349009BE4BA /* Inspector */; };
+		F92C56A90ECE04C5009BE4BA /* crash_report_sender.m in Sources */ = {isa = PBXBuildFile; fileRef = F92C56A80ECE04C5009BE4BA /* crash_report_sender.m */; };
+		F93803CD0F8083B7004D428B /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */; };
+		F93803CE0F8083B7004D428B /* exception_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */; };
+		F93803CF0F8083B7004D428B /* minidump_generator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */; };
+		F93803D00F8083B7004D428B /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */; };
+		F93803D10F8083B7004D428B /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = F92C53870ECCE6C0009BE4BA /* convert_UTF.c */; };
+		F93803D20F8083B7004D428B /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; };
+		F93803D30F8083B7004D428B /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53740ECCE635009BE4BA /* file_id.cc */; };
+		F93803D40F8083B7004D428B /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537A0ECCE635009BE4BA /* macho_id.cc */; };
+		F93803D50F8083B7004D428B /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537C0ECCE635009BE4BA /* macho_utilities.cc */; };
+		F93803D60F8083B7004D428B /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537E0ECCE635009BE4BA /* macho_walker.cc */; };
+		F93803D70F8083B7004D428B /* string_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53820ECCE635009BE4BA /* string_utilities.cc */; };
+		F93803DA0F8083D8004D428B /* minidump_generator_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = F93803D90F8083D8004D428B /* minidump_generator_test.cc */; };
+		F93DE2D80F82A70E00608B94 /* minidump_file_writer_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = F93DE2D70F82A70E00608B94 /* minidump_file_writer_unittest.cc */; };
+		F93DE2D90F82A73500608B94 /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */; };
+		F93DE2DA0F82A73500608B94 /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = F92C53870ECCE6C0009BE4BA /* convert_UTF.c */; };
+		F93DE2DB0F82A73500608B94 /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; };
+		F93DE3350F82C66B00608B94 /* dynamic_images.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */; };
+		F93DE3360F82C66B00608B94 /* exception_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */; };
+		F93DE3370F82C66B00608B94 /* minidump_generator.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */; };
+		F93DE3380F82C66B00608B94 /* minidump_file_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */; };
+		F93DE3390F82C66B00608B94 /* convert_UTF.c in Sources */ = {isa = PBXBuildFile; fileRef = F92C53870ECCE6C0009BE4BA /* convert_UTF.c */; };
+		F93DE33A0F82C66B00608B94 /* string_conversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53850ECCE6AD009BE4BA /* string_conversion.cc */; };
+		F93DE33B0F82C66B00608B94 /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53740ECCE635009BE4BA /* file_id.cc */; };
+		F93DE33C0F82C66B00608B94 /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537A0ECCE635009BE4BA /* macho_id.cc */; };
+		F93DE33D0F82C66B00608B94 /* macho_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537C0ECCE635009BE4BA /* macho_utilities.cc */; };
+		F93DE33E0F82C66B00608B94 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C537E0ECCE635009BE4BA /* macho_walker.cc */; };
+		F93DE33F0F82C66B00608B94 /* string_utilities.cc in Sources */ = {isa = PBXBuildFile; fileRef = F92C53820ECCE635009BE4BA /* string_utilities.cc */; };
+		F93DE3410F82C68300608B94 /* exception_handler_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = F93DE3400F82C68300608B94 /* exception_handler_test.cc */; };
+		F945849E0F280E3C009A47BF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F945849C0F280E3C009A47BF /* Localizable.strings */; };
+		F9C44DB20EF07288003AEBAA /* Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C44DAC0EF07288003AEBAA /* Controller.m */; };
+		F9C44DB30EF07288003AEBAA /* crashduringload in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DAD0EF07288003AEBAA /* crashduringload */; };
+		F9C44DB40EF07288003AEBAA /* crashInMain in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DAE0EF07288003AEBAA /* crashInMain */; };
+		F9C44DB60EF07288003AEBAA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C44DB00EF07288003AEBAA /* main.m */; };
+		F9C44DB70EF07288003AEBAA /* TestClass.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9C44DB10EF07288003AEBAA /* TestClass.mm */; };
+		F9C44DBC0EF072A0003AEBAA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DB80EF072A0003AEBAA /* InfoPlist.strings */; };
+		F9C44DBD0EF072A0003AEBAA /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = F9C44DBA0EF072A0003AEBAA /* MainMenu.nib */; };
+		F9C44E000EF077CD003AEBAA /* Breakpad.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; };
+		F9C44E3C0EF08B12003AEBAA /* Breakpad.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */; };
+		F9C44E980EF09F56003AEBAA /* crash_report_sender.app in Resources */ = {isa = PBXBuildFile; fileRef = F92C56A00ECE04A7009BE4BA /* crash_report_sender.app */; };
+		F9C44EA20EF09F93003AEBAA /* HTTPMultipartUpload.m in Sources */ = {isa = PBXBuildFile; fileRef = F92C53770ECCE635009BE4BA /* HTTPMultipartUpload.m */; };
+		F9C44EE50EF0A006003AEBAA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */; };
+		F9C44EE90EF0A3C1003AEBAA /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */; };
+		F9C77DE20F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9C77DE10F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm */; };
+		F9C77DE40F7DD82F0045F7DB /* SimpleStringDictionary.mm in Sources */ = {isa = PBXBuildFile; fileRef = F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */; };
+		F9C77E130F7DDF810045F7DB /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C77E120F7DDF810045F7DB /* GTMSenTestCase.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		F91AF6370FD60A74009D8BE2 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
+			remoteInfo = Breakpad;
+		};
+		F92C564D0ECD10E5009BE4BA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F92C563B0ECD10B3009BE4BA;
+			remoteInfo = breakpadUtilities;
+		};
+		F92C56850ECD15EF009BE4BA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F92C563B0ECD10B3009BE4BA;
+			remoteInfo = breakpadUtilities;
+		};
+		F92C56870ECD15F1009BE4BA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F92C53530ECCE349009BE4BA;
+			remoteInfo = Inspector;
+		};
+		F93DE2FB0F82C3C600608B94 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F93803BD0F80820F004D428B;
+			remoteInfo = generator_test;
+		};
+		F93DE36F0F82CC1300608B94 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F93DE32B0F82C55600608B94;
+			remoteInfo = handler_test;
+		};
+		F93DE3A60F830D1D00608B94 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F9C77DD90F7DD5CF0045F7DB;
+			remoteInfo = UnitTests;
+		};
+		F94585870F78232B009A47BF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
+			remoteInfo = Breakpad;
+		};
+		F94585890F78232E009A47BF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F92C53530ECCE349009BE4BA;
+			remoteInfo = Inspector;
+		};
+		F945858B0F782330009A47BF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F92C563B0ECD10B3009BE4BA;
+			remoteInfo = breakpadUtilities;
+		};
+		F945858D0F782333009A47BF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F92C569F0ECE04A7009BE4BA;
+			remoteInfo = crash_report_sender;
+		};
+		F945858F0F782336009A47BF /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F9C44DA40EF060A8003AEBAA;
+			remoteInfo = BreakpadTest;
+		};
+		F9C44E190EF0790F003AEBAA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 8DC2EF4F0486A6940098B216;
+			remoteInfo = Breakpad;
+		};
+		F9C44E960EF09F4B003AEBAA /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 0867D690FE84028FC02AAC07 /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = F92C569F0ECE04A7009BE4BA;
+			remoteInfo = crash_report_sender;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		F9C44E410EF08B17003AEBAA /* Copy Frameworks */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 10;
+			files = (
+				F9C44E3C0EF08B12003AEBAA /* Breakpad.framework in Copy Frameworks */,
+			);
+			name = "Copy Frameworks";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
+		0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
+		1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+		32DBCF5E0370ADEE00C91783 /* Breakpad_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Breakpad_Prefix.pch; path = Framework/Breakpad_Prefix.pch; sourceTree = "<group>"; };
+		3329D4EC0FA16D820007BBC5 /* Breakpad.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = Breakpad.nib; path = sender/Breakpad.nib; sourceTree = "<group>"; };
+		33880C7F0F9E097100817F82 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = sender/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = crash_report_sender.icns; path = sender/crash_report_sender.icns; sourceTree = "<group>"; };
+		8DC2EF5B0486A6940098B216 /* Breakpad.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Breakpad.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = BreakpadFramework_Test.mm; path = tests/BreakpadFramework_Test.mm; sourceTree = "<group>"; };
+		F9286B380F7EB25800A4DCC8 /* Inspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Inspector.h; path = crash_generation/Inspector.h; sourceTree = "<group>"; };
+		F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = InspectorMain.mm; path = crash_generation/InspectorMain.mm; sourceTree = "<group>"; };
+		F92C53540ECCE349009BE4BA /* Inspector */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Inspector; sourceTree = BUILT_PRODUCTS_DIR; };
+		F92C53670ECCE3FD009BE4BA /* breakpad_exc_server.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = breakpad_exc_server.c; path = handler/breakpad_exc_server.c; sourceTree = SOURCE_ROOT; };
+		F92C53680ECCE3FD009BE4BA /* breakpad_exc_server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = breakpad_exc_server.h; path = handler/breakpad_exc_server.h; sourceTree = SOURCE_ROOT; };
+		F92C53690ECCE3FD009BE4BA /* breakpad_nlist_64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = breakpad_nlist_64.cc; path = handler/breakpad_nlist_64.cc; sourceTree = SOURCE_ROOT; };
+		F92C536A0ECCE3FD009BE4BA /* breakpad_nlist_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = breakpad_nlist_64.h; path = handler/breakpad_nlist_64.h; sourceTree = SOURCE_ROOT; };
+		F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dynamic_images.cc; path = handler/dynamic_images.cc; sourceTree = SOURCE_ROOT; };
+		F92C536C0ECCE3FD009BE4BA /* dynamic_images.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dynamic_images.h; path = handler/dynamic_images.h; sourceTree = SOURCE_ROOT; };
+		F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exception_handler.cc; path = handler/exception_handler.cc; sourceTree = SOURCE_ROOT; };
+		F92C536E0ECCE3FD009BE4BA /* exception_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = exception_handler.h; path = handler/exception_handler.h; sourceTree = SOURCE_ROOT; };
+		F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_generator.cc; path = handler/minidump_generator.cc; sourceTree = SOURCE_ROOT; };
+		F92C53700ECCE3FD009BE4BA /* minidump_generator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = minidump_generator.h; path = handler/minidump_generator.h; sourceTree = SOURCE_ROOT; };
+		F92C53720ECCE3FD009BE4BA /* protected_memory_allocator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = protected_memory_allocator.cc; path = handler/protected_memory_allocator.cc; sourceTree = SOURCE_ROOT; };
+		F92C53730ECCE3FD009BE4BA /* protected_memory_allocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = protected_memory_allocator.h; path = handler/protected_memory_allocator.h; sourceTree = SOURCE_ROOT; };
+		F92C53740ECCE635009BE4BA /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../common/mac/file_id.cc; sourceTree = SOURCE_ROOT; };
+		F92C53750ECCE635009BE4BA /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = file_id.h; path = ../../common/mac/file_id.h; sourceTree = SOURCE_ROOT; };
+		F92C53760ECCE635009BE4BA /* HTTPMultipartUpload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPMultipartUpload.h; path = ../../common/mac/HTTPMultipartUpload.h; sourceTree = SOURCE_ROOT; };
+		F92C53770ECCE635009BE4BA /* HTTPMultipartUpload.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPMultipartUpload.m; path = ../../common/mac/HTTPMultipartUpload.m; sourceTree = SOURCE_ROOT; };
+		F92C53780ECCE635009BE4BA /* MachIPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MachIPC.h; path = ../../common/mac/MachIPC.h; sourceTree = SOURCE_ROOT; };
+		F92C53790ECCE635009BE4BA /* MachIPC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = MachIPC.mm; path = ../../common/mac/MachIPC.mm; sourceTree = SOURCE_ROOT; };
+		F92C537A0ECCE635009BE4BA /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_id.cc; path = ../../common/mac/macho_id.cc; sourceTree = SOURCE_ROOT; };
+		F92C537B0ECCE635009BE4BA /* macho_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_id.h; path = ../../common/mac/macho_id.h; sourceTree = SOURCE_ROOT; };
+		F92C537C0ECCE635009BE4BA /* macho_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_utilities.cc; path = ../../common/mac/macho_utilities.cc; sourceTree = SOURCE_ROOT; };
+		F92C537D0ECCE635009BE4BA /* macho_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_utilities.h; path = ../../common/mac/macho_utilities.h; sourceTree = SOURCE_ROOT; };
+		F92C537E0ECCE635009BE4BA /* macho_walker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macho_walker.cc; path = ../../common/mac/macho_walker.cc; sourceTree = SOURCE_ROOT; };
+		F92C537F0ECCE635009BE4BA /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; };
+		F92C53800ECCE635009BE4BA /* SimpleStringDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimpleStringDictionary.h; path = ../../common/mac/SimpleStringDictionary.h; sourceTree = SOURCE_ROOT; };
+		F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SimpleStringDictionary.mm; path = ../../common/mac/SimpleStringDictionary.mm; sourceTree = SOURCE_ROOT; };
+		F92C53820ECCE635009BE4BA /* string_utilities.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_utilities.cc; path = ../../common/mac/string_utilities.cc; sourceTree = SOURCE_ROOT; };
+		F92C53830ECCE635009BE4BA /* string_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = string_utilities.h; path = ../../common/mac/string_utilities.h; sourceTree = SOURCE_ROOT; };
+		F92C53850ECCE6AD009BE4BA /* string_conversion.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = string_conversion.cc; path = ../../common/string_conversion.cc; sourceTree = SOURCE_ROOT; };
+		F92C53860ECCE6AD009BE4BA /* string_conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = string_conversion.h; path = ../../common/string_conversion.h; sourceTree = SOURCE_ROOT; };
+		F92C53870ECCE6C0009BE4BA /* convert_UTF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = convert_UTF.c; path = ../../common/convert_UTF.c; sourceTree = SOURCE_ROOT; };
+		F92C53880ECCE6C0009BE4BA /* convert_UTF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = convert_UTF.h; path = ../../common/convert_UTF.h; sourceTree = SOURCE_ROOT; };
+		F92C538E0ECCE70A009BE4BA /* minidump_file_writer-inl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "minidump_file_writer-inl.h"; path = "../minidump_file_writer-inl.h"; sourceTree = SOURCE_ROOT; };
+		F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_file_writer.cc; path = ../minidump_file_writer.cc; sourceTree = SOURCE_ROOT; };
+		F92C53900ECCE70A009BE4BA /* minidump_file_writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = minidump_file_writer.h; path = ../minidump_file_writer.h; sourceTree = SOURCE_ROOT; };
+		F92C53B70ECCE7B3009BE4BA /* Inspector.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Inspector.mm; path = crash_generation/Inspector.mm; sourceTree = SOURCE_ROOT; };
+		F92C554A0ECCF530009BE4BA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
+		F92C55CE0ECD0064009BE4BA /* Breakpad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Breakpad.h; path = Framework/Breakpad.h; sourceTree = "<group>"; };
+		F92C55CF0ECD0064009BE4BA /* Breakpad.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = Breakpad.mm; path = Framework/Breakpad.mm; sourceTree = "<group>"; };
+		F92C56310ECD0DF1009BE4BA /* OnDemandServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OnDemandServer.h; path = Framework/OnDemandServer.h; sourceTree = "<group>"; };
+		F92C56320ECD0DF1009BE4BA /* OnDemandServer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OnDemandServer.mm; path = Framework/OnDemandServer.mm; sourceTree = "<group>"; };
+		F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = breakpadUtilities.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
+		F92C56A00ECE04A7009BE4BA /* crash_report_sender.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = crash_report_sender.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		F92C56A20ECE04A7009BE4BA /* crash_report_sender-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "crash_report_sender-Info.plist"; path = "sender/crash_report_sender-Info.plist"; sourceTree = "<group>"; };
+		F92C56A70ECE04C5009BE4BA /* crash_report_sender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = crash_report_sender.h; path = sender/crash_report_sender.h; sourceTree = "<group>"; };
+		F92C56A80ECE04C5009BE4BA /* crash_report_sender.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = crash_report_sender.m; path = sender/crash_report_sender.m; sourceTree = "<group>"; };
+		F93803BE0F80820F004D428B /* generator_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = generator_test; sourceTree = BUILT_PRODUCTS_DIR; };
+		F93803D90F8083D8004D428B /* minidump_generator_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_generator_test.cc; path = handler/minidump_generator_test.cc; sourceTree = "<group>"; };
+		F93DE2D10F82A67300608B94 /* minidump_file_writer_unittest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = minidump_file_writer_unittest; sourceTree = BUILT_PRODUCTS_DIR; };
+		F93DE2D70F82A70E00608B94 /* minidump_file_writer_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = minidump_file_writer_unittest.cc; path = ../minidump_file_writer_unittest.cc; sourceTree = SOURCE_ROOT; };
+		F93DE32C0F82C55600608B94 /* handler_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = handler_test; sourceTree = BUILT_PRODUCTS_DIR; };
+		F93DE3400F82C68300608B94 /* exception_handler_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exception_handler_test.cc; path = handler/exception_handler_test.cc; sourceTree = "<group>"; };
+		F945849D0F280E3C009A47BF /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = sender/English.lproj/Localizable.strings; sourceTree = "<group>"; };
+		F945859D0F78241E009A47BF /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Framework/Info.plist; sourceTree = "<group>"; };
+		F9C44DA50EF060A8003AEBAA /* BreakpadTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BreakpadTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		F9C44DAC0EF07288003AEBAA /* Controller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Controller.m; path = testapp/Controller.m; sourceTree = "<group>"; };
+		F9C44DAD0EF07288003AEBAA /* crashduringload */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = crashduringload; path = testapp/crashduringload; sourceTree = "<group>"; };
+		F9C44DAE0EF07288003AEBAA /* crashInMain */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = crashInMain; path = testapp/crashInMain; sourceTree = "<group>"; };
+		F9C44DAF0EF07288003AEBAA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = testapp/Info.plist; sourceTree = "<group>"; };
+		F9C44DB00EF07288003AEBAA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = testapp/main.m; sourceTree = "<group>"; };
+		F9C44DB10EF07288003AEBAA /* TestClass.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = TestClass.mm; path = testapp/TestClass.mm; sourceTree = "<group>"; };
+		F9C44DB90EF072A0003AEBAA /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = testapp/English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		F9C44DBB0EF072A0003AEBAA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = testapp/English.lproj/MainMenu.nib; sourceTree = "<group>"; };
+		F9C44DBF0EF0778F003AEBAA /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Controller.h; path = testapp/Controller.h; sourceTree = "<group>"; };
+		F9C44DC00EF0778F003AEBAA /* TestClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TestClass.h; path = testapp/TestClass.h; sourceTree = "<group>"; };
+		F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = "<absolute>"; };
+		F9C44EE70EF0A3C1003AEBAA /* GTMLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMLogger.h; path = ../../common/mac/GTMLogger.h; sourceTree = SOURCE_ROOT; };
+		F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMLogger.m; path = ../../common/mac/GTMLogger.m; sourceTree = SOURCE_ROOT; };
+		F9C77DDA0F7DD5CF0045F7DB /* UnitTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
+		F9C77DDB0F7DD5CF0045F7DB /* UnitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "UnitTests-Info.plist"; sourceTree = "<group>"; };
+		F9C77DE00F7DD7E30045F7DB /* SimpleStringDictionaryTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimpleStringDictionaryTest.h; path = tests/SimpleStringDictionaryTest.h; sourceTree = "<group>"; };
+		F9C77DE10F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = SimpleStringDictionaryTest.mm; path = tests/SimpleStringDictionaryTest.mm; sourceTree = "<group>"; };
+		F9C77E110F7DDF810045F7DB /* GTMSenTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMSenTestCase.h; path = ../../common/mac/testing/GTMSenTestCase.h; sourceTree = SOURCE_ROOT; };
+		F9C77E120F7DDF810045F7DB /* GTMSenTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMSenTestCase.m; path = ../../common/mac/testing/GTMSenTestCase.m; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		8DC2EF560486A6940098B216 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F92C565C0ECD1158009BE4BA /* breakpadUtilities.dylib in Frameworks */,
+				8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C53520ECCE349009BE4BA /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F92C564C0ECD10DD009BE4BA /* breakpadUtilities.dylib in Frameworks */,
+				F92C554C0ECCF534009BE4BA /* Foundation.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C563A0ECD10B3009BE4BA /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F92C56570ECD113E009BE4BA /* Carbon.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C569E0ECE04A7009BE4BA /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F9C44EE50EF0A006003AEBAA /* SystemConfiguration.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F93803BC0F80820F004D428B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F93DE2CF0F82A67300608B94 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F93DE32A0F82C55600608B94 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F9C44DA30EF060A8003AEBAA /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F9C44E000EF077CD003AEBAA /* Breakpad.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F9C77DD70F7DD5CF0045F7DB /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F91AF6210FD60784009D8BE2 /* Breakpad.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		034768DFFF38A50411DB9C8B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				8DC2EF5B0486A6940098B216 /* Breakpad.framework */,
+				F92C53540ECCE349009BE4BA /* Inspector */,
+				F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */,
+				F92C56A00ECE04A7009BE4BA /* crash_report_sender.app */,
+				F9C44DA50EF060A8003AEBAA /* BreakpadTest.app */,
+				F9C77DDA0F7DD5CF0045F7DB /* UnitTests.octest */,
+				F93803BE0F80820F004D428B /* generator_test */,
+				F93DE2D10F82A67300608B94 /* minidump_file_writer_unittest */,
+				F93DE32C0F82C55600608B94 /* handler_test */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		0867D691FE84028FC02AAC07 /* Breakpad */ = {
+			isa = PBXGroup;
+			children = (
+				32DBCF5E0370ADEE00C91783 /* Breakpad_Prefix.pch */,
+				F92C538D0ECCE6F2009BE4BA /* client */,
+				F92C53600ECCE3D6009BE4BA /* common */,
+				0867D69AFE84028FC02AAC07 /* Frameworks */,
+				034768DFFF38A50411DB9C8B /* Products */,
+				F9C77DDB0F7DD5CF0045F7DB /* UnitTests-Info.plist */,
+			);
+			name = Breakpad;
+			sourceTree = "<group>";
+		};
+		0867D69AFE84028FC02AAC07 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				F9C44EE40EF0A006003AEBAA /* SystemConfiguration.framework */,
+				F92C554A0ECCF530009BE4BA /* Carbon.framework */,
+				1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */,
+				0867D6A5FE840307C02AAC07 /* AppKit.framework */,
+				0867D69BFE84028FC02AAC07 /* Foundation.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		F92C53590ECCE3BB009BE4BA /* handler */ = {
+			isa = PBXGroup;
+			children = (
+				F93DE3400F82C68300608B94 /* exception_handler_test.cc */,
+				F93803D90F8083D8004D428B /* minidump_generator_test.cc */,
+				F92C53670ECCE3FD009BE4BA /* breakpad_exc_server.c */,
+				F92C53680ECCE3FD009BE4BA /* breakpad_exc_server.h */,
+				F92C53690ECCE3FD009BE4BA /* breakpad_nlist_64.cc */,
+				F92C536A0ECCE3FD009BE4BA /* breakpad_nlist_64.h */,
+				F92C536B0ECCE3FD009BE4BA /* dynamic_images.cc */,
+				F92C536C0ECCE3FD009BE4BA /* dynamic_images.h */,
+				F92C536D0ECCE3FD009BE4BA /* exception_handler.cc */,
+				F92C536E0ECCE3FD009BE4BA /* exception_handler.h */,
+				F92C536F0ECCE3FD009BE4BA /* minidump_generator.cc */,
+				F92C53700ECCE3FD009BE4BA /* minidump_generator.h */,
+				F92C53720ECCE3FD009BE4BA /* protected_memory_allocator.cc */,
+				F92C53730ECCE3FD009BE4BA /* protected_memory_allocator.h */,
+			);
+			name = handler;
+			sourceTree = "<group>";
+		};
+		F92C53600ECCE3D6009BE4BA /* common */ = {
+			isa = PBXGroup;
+			children = (
+				F92C53870ECCE6C0009BE4BA /* convert_UTF.c */,
+				F92C53880ECCE6C0009BE4BA /* convert_UTF.h */,
+				F92C53850ECCE6AD009BE4BA /* string_conversion.cc */,
+				F92C53860ECCE6AD009BE4BA /* string_conversion.h */,
+				F92C53840ECCE68D009BE4BA /* mac */,
+			);
+			name = common;
+			sourceTree = "<group>";
+		};
+		F92C53840ECCE68D009BE4BA /* mac */ = {
+			isa = PBXGroup;
+			children = (
+				F9C77E0F0F7DDF650045F7DB /* testing */,
+				F9C44EE70EF0A3C1003AEBAA /* GTMLogger.h */,
+				F9C44EE80EF0A3C1003AEBAA /* GTMLogger.m */,
+				F92C53740ECCE635009BE4BA /* file_id.cc */,
+				F92C53750ECCE635009BE4BA /* file_id.h */,
+				F92C53760ECCE635009BE4BA /* HTTPMultipartUpload.h */,
+				F92C53770ECCE635009BE4BA /* HTTPMultipartUpload.m */,
+				F92C53780ECCE635009BE4BA /* MachIPC.h */,
+				F92C53790ECCE635009BE4BA /* MachIPC.mm */,
+				F92C537A0ECCE635009BE4BA /* macho_id.cc */,
+				F92C537B0ECCE635009BE4BA /* macho_id.h */,
+				F92C537C0ECCE635009BE4BA /* macho_utilities.cc */,
+				F92C537D0ECCE635009BE4BA /* macho_utilities.h */,
+				F92C537E0ECCE635009BE4BA /* macho_walker.cc */,
+				F92C537F0ECCE635009BE4BA /* macho_walker.h */,
+				F92C53800ECCE635009BE4BA /* SimpleStringDictionary.h */,
+				F92C53810ECCE635009BE4BA /* SimpleStringDictionary.mm */,
+				F92C53820ECCE635009BE4BA /* string_utilities.cc */,
+				F92C53830ECCE635009BE4BA /* string_utilities.h */,
+			);
+			name = mac;
+			sourceTree = "<group>";
+		};
+		F92C538D0ECCE6F2009BE4BA /* client */ = {
+			isa = PBXGroup;
+			children = (
+				F92C53990ECCE78E009BE4BA /* mac */,
+				F92C538E0ECCE70A009BE4BA /* minidump_file_writer-inl.h */,
+				F92C538F0ECCE70A009BE4BA /* minidump_file_writer.cc */,
+				F92C53900ECCE70A009BE4BA /* minidump_file_writer.h */,
+				F93DE2D70F82A70E00608B94 /* minidump_file_writer_unittest.cc */,
+			);
+			name = client;
+			sourceTree = "<group>";
+		};
+		F92C53990ECCE78E009BE4BA /* mac */ = {
+			isa = PBXGroup;
+			children = (
+				F9C77DDF0F7DD7CF0045F7DB /* tests */,
+				F9C44DAB0EF0726F003AEBAA /* testapp */,
+				F92C56A60ECE04B6009BE4BA /* sender */,
+				F92C55CD0ECD0053009BE4BA /* Framework */,
+				F92C53B50ECCE799009BE4BA /* crash_generation */,
+				F92C53590ECCE3BB009BE4BA /* handler */,
+			);
+			name = mac;
+			sourceTree = "<group>";
+		};
+		F92C53B50ECCE799009BE4BA /* crash_generation */ = {
+			isa = PBXGroup;
+			children = (
+				F9286B380F7EB25800A4DCC8 /* Inspector.h */,
+				F9286B390F7EB25800A4DCC8 /* InspectorMain.mm */,
+				F92C53B70ECCE7B3009BE4BA /* Inspector.mm */,
+			);
+			name = crash_generation;
+			sourceTree = "<group>";
+		};
+		F92C55CD0ECD0053009BE4BA /* Framework */ = {
+			isa = PBXGroup;
+			children = (
+				F945859D0F78241E009A47BF /* Info.plist */,
+				F92C56310ECD0DF1009BE4BA /* OnDemandServer.h */,
+				F92C56320ECD0DF1009BE4BA /* OnDemandServer.mm */,
+				F92C55CE0ECD0064009BE4BA /* Breakpad.h */,
+				F92C55CF0ECD0064009BE4BA /* Breakpad.mm */,
+			);
+			name = Framework;
+			sourceTree = "<group>";
+		};
+		F92C56A60ECE04B6009BE4BA /* sender */ = {
+			isa = PBXGroup;
+			children = (
+				F92C56A70ECE04C5009BE4BA /* crash_report_sender.h */,
+				F92C56A80ECE04C5009BE4BA /* crash_report_sender.m */,
+				F945849C0F280E3C009A47BF /* Localizable.strings */,
+				33880C7E0F9E097100817F82 /* InfoPlist.strings */,
+				3329D4EC0FA16D820007BBC5 /* Breakpad.nib */,
+				4084699C0F5D9CF900FDCA37 /* crash_report_sender.icns */,
+				F92C56A20ECE04A7009BE4BA /* crash_report_sender-Info.plist */,
+			);
+			name = sender;
+			sourceTree = "<group>";
+		};
+		F9C44DAB0EF0726F003AEBAA /* testapp */ = {
+			isa = PBXGroup;
+			children = (
+				F9C44DBF0EF0778F003AEBAA /* Controller.h */,
+				F9C44DC00EF0778F003AEBAA /* TestClass.h */,
+				F9C44DB80EF072A0003AEBAA /* InfoPlist.strings */,
+				F9C44DBA0EF072A0003AEBAA /* MainMenu.nib */,
+				F9C44DAC0EF07288003AEBAA /* Controller.m */,
+				F9C44DAD0EF07288003AEBAA /* crashduringload */,
+				F9C44DAE0EF07288003AEBAA /* crashInMain */,
+				F9C44DAF0EF07288003AEBAA /* Info.plist */,
+				F9C44DB00EF07288003AEBAA /* main.m */,
+				F9C44DB10EF07288003AEBAA /* TestClass.mm */,
+			);
+			name = testapp;
+			sourceTree = "<group>";
+		};
+		F9C77DDF0F7DD7CF0045F7DB /* tests */ = {
+			isa = PBXGroup;
+			children = (
+				F9C77DE00F7DD7E30045F7DB /* SimpleStringDictionaryTest.h */,
+				F9C77DE10F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm */,
+				F91AF5CF0FD60393009D8BE2 /* BreakpadFramework_Test.mm */,
+			);
+			name = tests;
+			sourceTree = "<group>";
+		};
+		F9C77E0F0F7DDF650045F7DB /* testing */ = {
+			isa = PBXGroup;
+			children = (
+				F9C77E110F7DDF810045F7DB /* GTMSenTestCase.h */,
+				F9C77E120F7DDF810045F7DB /* GTMSenTestCase.m */,
+			);
+			name = testing;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		8DC2EF500486A6940098B216 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F92C55D00ECD0064009BE4BA /* Breakpad.h in Headers */,
+				F92C56330ECD0DF1009BE4BA /* OnDemandServer.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C56380ECD10B3009BE4BA /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		8DC2EF4F0486A6940098B216 /* Breakpad */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "Breakpad" */;
+			buildPhases = (
+				F97A0E850ED4EC15008784D3 /* Change install name of breakpadUtilities */,
+				8DC2EF500486A6940098B216 /* Headers */,
+				8DC2EF520486A6940098B216 /* Resources */,
+				8DC2EF540486A6940098B216 /* Sources */,
+				8DC2EF560486A6940098B216 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				F92C56860ECD15EF009BE4BA /* PBXTargetDependency */,
+				F92C56880ECD15F1009BE4BA /* PBXTargetDependency */,
+				F9C44E970EF09F4B003AEBAA /* PBXTargetDependency */,
+			);
+			name = Breakpad;
+			productInstallPath = "$(HOME)/Library/Frameworks";
+			productName = Breakpad;
+			productReference = 8DC2EF5B0486A6940098B216 /* Breakpad.framework */;
+			productType = "com.apple.product-type.framework";
+		};
+		F92C53530ECCE349009BE4BA /* Inspector */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F92C53580ECCE36D009BE4BA /* Build configuration list for PBXNativeTarget "Inspector" */;
+			buildPhases = (
+				F94584840F27FB40009A47BF /* Change install name of breakpadUtilities */,
+				F92C53510ECCE349009BE4BA /* Sources */,
+				F92C53520ECCE349009BE4BA /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				F92C564E0ECD10E5009BE4BA /* PBXTargetDependency */,
+			);
+			name = Inspector;
+			productName = Inspector;
+			productReference = F92C53540ECCE349009BE4BA /* Inspector */;
+			productType = "com.apple.product-type.tool";
+		};
+		F92C563B0ECD10B3009BE4BA /* breakpadUtilities */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F92C56670ECD11A3009BE4BA /* Build configuration list for PBXNativeTarget "breakpadUtilities" */;
+			buildPhases = (
+				F92C56380ECD10B3009BE4BA /* Headers */,
+				F92C56390ECD10B3009BE4BA /* Sources */,
+				F92C563A0ECD10B3009BE4BA /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = breakpadUtilities;
+			productName = breakpadUtilities;
+			productReference = F92C563C0ECD10B3009BE4BA /* breakpadUtilities.dylib */;
+			productType = "com.apple.product-type.library.dynamic";
+		};
+		F92C569F0ECE04A7009BE4BA /* crash_report_sender */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F92C56A50ECE04A8009BE4BA /* Build configuration list for PBXNativeTarget "crash_report_sender" */;
+			buildPhases = (
+				F92C569C0ECE04A7009BE4BA /* Resources */,
+				F92C569D0ECE04A7009BE4BA /* Sources */,
+				F92C569E0ECE04A7009BE4BA /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = crash_report_sender;
+			productName = crash_report_sender;
+			productReference = F92C56A00ECE04A7009BE4BA /* crash_report_sender.app */;
+			productType = "com.apple.product-type.application";
+		};
+		F93803BD0F80820F004D428B /* generator_test */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F93803C40F80822E004D428B /* Build configuration list for PBXNativeTarget "generator_test" */;
+			buildPhases = (
+				F93803BB0F80820F004D428B /* Sources */,
+				F93803BC0F80820F004D428B /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = generator_test;
+			productName = generator_test;
+			productReference = F93803BE0F80820F004D428B /* generator_test */;
+			productType = "com.apple.product-type.tool";
+		};
+		F93DE2D00F82A67300608B94 /* minidump_file_writer_unittest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F93DE2D60F82A67700608B94 /* Build configuration list for PBXNativeTarget "minidump_file_writer_unittest" */;
+			buildPhases = (
+				F93DE2CE0F82A67300608B94 /* Sources */,
+				F93DE2CF0F82A67300608B94 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = minidump_file_writer_unittest;
+			productName = minidump_file_writer_unittest;
+			productReference = F93DE2D10F82A67300608B94 /* minidump_file_writer_unittest */;
+			productType = "com.apple.product-type.tool";
+		};
+		F93DE32B0F82C55600608B94 /* handler_test */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F93DE3320F82C5D800608B94 /* Build configuration list for PBXNativeTarget "handler_test" */;
+			buildPhases = (
+				F93DE3290F82C55600608B94 /* Sources */,
+				F93DE32A0F82C55600608B94 /* Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = handler_test;
+			productName = handler_test;
+			productReference = F93DE32C0F82C55600608B94 /* handler_test */;
+			productType = "com.apple.product-type.tool";
+		};
+		F9C44DA40EF060A8003AEBAA /* BreakpadTest */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F9C44DAA0EF060A9003AEBAA /* Build configuration list for PBXNativeTarget "BreakpadTest" */;
+			buildPhases = (
+				F9C44DA10EF060A8003AEBAA /* Resources */,
+				F9C44DA20EF060A8003AEBAA /* Sources */,
+				F9C44DA30EF060A8003AEBAA /* Frameworks */,
+				F9C44E410EF08B17003AEBAA /* Copy Frameworks */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				F9C44E1A0EF0790F003AEBAA /* PBXTargetDependency */,
+			);
+			name = BreakpadTest;
+			productName = BreakpadTest;
+			productReference = F9C44DA50EF060A8003AEBAA /* BreakpadTest.app */;
+			productType = "com.apple.product-type.application";
+		};
+		F9C77DD90F7DD5CF0045F7DB /* UnitTests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F9C77DDE0F7DD5D00045F7DB /* Build configuration list for PBXNativeTarget "UnitTests" */;
+			buildPhases = (
+				F9C77DD50F7DD5CF0045F7DB /* Resources */,
+				F9C77DD60F7DD5CF0045F7DB /* Sources */,
+				F9C77DD70F7DD5CF0045F7DB /* Frameworks */,
+				F9C77DD80F7DD5CF0045F7DB /* ShellScript */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				F93DE2FC0F82C3C600608B94 /* PBXTargetDependency */,
+				F93DE3700F82CC1300608B94 /* PBXTargetDependency */,
+				F91AF6380FD60A74009D8BE2 /* PBXTargetDependency */,
+			);
+			name = UnitTests;
+			productName = UnitTests;
+			productReference = F9C77DDA0F7DD5CF0045F7DB /* UnitTests.octest */;
+			productType = "com.apple.product-type.bundle";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		0867D690FE84028FC02AAC07 /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "Breakpad" */;
+			compatibilityVersion = "Xcode 2.4";
+			hasScannedForEncodings = 1;
+			mainGroup = 0867D691FE84028FC02AAC07 /* Breakpad */;
+			productRefGroup = 034768DFFF38A50411DB9C8B /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				8DC2EF4F0486A6940098B216 /* Breakpad */,
+				F92C53530ECCE349009BE4BA /* Inspector */,
+				F92C563B0ECD10B3009BE4BA /* breakpadUtilities */,
+				F92C569F0ECE04A7009BE4BA /* crash_report_sender */,
+				F9C44DA40EF060A8003AEBAA /* BreakpadTest */,
+				F94585840F782326009A47BF /* All */,
+				F9C77DD90F7DD5CF0045F7DB /* UnitTests */,
+				F93803BD0F80820F004D428B /* generator_test */,
+				F93DE2D00F82A67300608B94 /* minidump_file_writer_unittest */,
+				F93DE32B0F82C55600608B94 /* handler_test */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8DC2EF520486A6940098B216 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F9C44E980EF09F56003AEBAA /* crash_report_sender.app in Resources */,
+				F92C568A0ECD15F9009BE4BA /* Inspector in Resources */,
+				F92C56650ECD1185009BE4BA /* breakpadUtilities.dylib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C569C0ECE04A7009BE4BA /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F945849E0F280E3C009A47BF /* Localizable.strings in Resources */,
+				4084699D0F5D9CF900FDCA37 /* crash_report_sender.icns in Resources */,
+				33880C800F9E097100817F82 /* InfoPlist.strings in Resources */,
+				3329D4ED0FA16D820007BBC5 /* Breakpad.nib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F9C44DA10EF060A8003AEBAA /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F9C44DB30EF07288003AEBAA /* crashduringload in Resources */,
+				F9C44DB40EF07288003AEBAA /* crashInMain in Resources */,
+				F9C44DBC0EF072A0003AEBAA /* InfoPlist.strings in Resources */,
+				F9C44DBD0EF072A0003AEBAA /* MainMenu.nib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F9C77DD50F7DD5CF0045F7DB /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		F94584840F27FB40009A47BF /* Change install name of breakpadUtilities */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Change install name of breakpadUtilities";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "install_name_tool -id \"@executable_path/../Resources/breakpadUtilities.dylib\" \"${BUILT_PRODUCTS_DIR}/breakpadUtilities.dylib\"\n";
+		};
+		F97A0E850ED4EC15008784D3 /* Change install name of breakpadUtilities */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Change install name of breakpadUtilities";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "#!/bin/bash\ninstall_name_tool -id \"@executable_path/../Frameworks/Breakpad.framework/Resources/breakpadUtilities.dylib\" \"${BUILT_PRODUCTS_DIR}/breakpadUtilities.dylib\"\n";
+		};
+		F9C77DD80F7DD5CF0045F7DB /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n\necho running minidump generator tests...\n\"${BUILT_PRODUCTS_DIR}/generator_test\"\necho Running exception handler tests...\n\"${BUILT_PRODUCTS_DIR}/handler_test\"\n";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		8DC2EF540486A6940098B216 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F92C565F0ECD116B009BE4BA /* protected_memory_allocator.cc in Sources */,
+				F92C56630ECD1179009BE4BA /* exception_handler.cc in Sources */,
+				F92C55D10ECD0064009BE4BA /* Breakpad.mm in Sources */,
+				F92C56340ECD0DF1009BE4BA /* OnDemandServer.mm in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C53510ECCE349009BE4BA /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F92C53B80ECCE7B3009BE4BA /* Inspector.mm in Sources */,
+				F9286B3A0F7EB25800A4DCC8 /* InspectorMain.mm in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C56390ECD10B3009BE4BA /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F92C563F0ECD10CA009BE4BA /* convert_UTF.c in Sources */,
+				F92C56400ECD10CA009BE4BA /* dynamic_images.cc in Sources */,
+				F92C56410ECD10CA009BE4BA /* file_id.cc in Sources */,
+				F92C56420ECD10CA009BE4BA /* macho_id.cc in Sources */,
+				F92C56430ECD10CA009BE4BA /* macho_utilities.cc in Sources */,
+				F92C56440ECD10CA009BE4BA /* macho_walker.cc in Sources */,
+				F92C56450ECD10CA009BE4BA /* MachIPC.mm in Sources */,
+				F92C56460ECD10CA009BE4BA /* minidump_file_writer.cc in Sources */,
+				F92C56470ECD10CA009BE4BA /* minidump_generator.cc in Sources */,
+				F92C56480ECD10CA009BE4BA /* SimpleStringDictionary.mm in Sources */,
+				F92C56490ECD10CA009BE4BA /* string_utilities.cc in Sources */,
+				F92C564A0ECD10CA009BE4BA /* string_conversion.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F92C569D0ECE04A7009BE4BA /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F9C44EA20EF09F93003AEBAA /* HTTPMultipartUpload.m in Sources */,
+				F92C56A90ECE04C5009BE4BA /* crash_report_sender.m in Sources */,
+				F9C44EE90EF0A3C1003AEBAA /* GTMLogger.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F93803BB0F80820F004D428B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F93803CD0F8083B7004D428B /* dynamic_images.cc in Sources */,
+				F93803CE0F8083B7004D428B /* exception_handler.cc in Sources */,
+				F93803CF0F8083B7004D428B /* minidump_generator.cc in Sources */,
+				F93803D00F8083B7004D428B /* minidump_file_writer.cc in Sources */,
+				F93803D10F8083B7004D428B /* convert_UTF.c in Sources */,
+				F93803D20F8083B7004D428B /* string_conversion.cc in Sources */,
+				F93803D30F8083B7004D428B /* file_id.cc in Sources */,
+				F93803D40F8083B7004D428B /* macho_id.cc in Sources */,
+				F93803D50F8083B7004D428B /* macho_utilities.cc in Sources */,
+				F93803D60F8083B7004D428B /* macho_walker.cc in Sources */,
+				F93803D70F8083B7004D428B /* string_utilities.cc in Sources */,
+				F93803DA0F8083D8004D428B /* minidump_generator_test.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F93DE2CE0F82A67300608B94 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F93DE2D90F82A73500608B94 /* minidump_file_writer.cc in Sources */,
+				F93DE2DA0F82A73500608B94 /* convert_UTF.c in Sources */,
+				F93DE2DB0F82A73500608B94 /* string_conversion.cc in Sources */,
+				F93DE2D80F82A70E00608B94 /* minidump_file_writer_unittest.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F93DE3290F82C55600608B94 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F93DE3350F82C66B00608B94 /* dynamic_images.cc in Sources */,
+				F93DE3360F82C66B00608B94 /* exception_handler.cc in Sources */,
+				F93DE3370F82C66B00608B94 /* minidump_generator.cc in Sources */,
+				F93DE3380F82C66B00608B94 /* minidump_file_writer.cc in Sources */,
+				F93DE3390F82C66B00608B94 /* convert_UTF.c in Sources */,
+				F93DE33A0F82C66B00608B94 /* string_conversion.cc in Sources */,
+				F93DE33B0F82C66B00608B94 /* file_id.cc in Sources */,
+				F93DE33C0F82C66B00608B94 /* macho_id.cc in Sources */,
+				F93DE33D0F82C66B00608B94 /* macho_utilities.cc in Sources */,
+				F93DE33E0F82C66B00608B94 /* macho_walker.cc in Sources */,
+				F93DE33F0F82C66B00608B94 /* string_utilities.cc in Sources */,
+				F93DE3410F82C68300608B94 /* exception_handler_test.cc in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F9C44DA20EF060A8003AEBAA /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F9C44DB20EF07288003AEBAA /* Controller.m in Sources */,
+				F9C44DB60EF07288003AEBAA /* main.m in Sources */,
+				F9C44DB70EF07288003AEBAA /* TestClass.mm in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		F9C77DD60F7DD5CF0045F7DB /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F9C77DE40F7DD82F0045F7DB /* SimpleStringDictionary.mm in Sources */,
+				F9C77DE20F7DD7E30045F7DB /* SimpleStringDictionaryTest.mm in Sources */,
+				F9C77E130F7DDF810045F7DB /* GTMSenTestCase.m in Sources */,
+				F91AF5D00FD60393009D8BE2 /* BreakpadFramework_Test.mm in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		F91AF6380FD60A74009D8BE2 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 8DC2EF4F0486A6940098B216 /* Breakpad */;
+			targetProxy = F91AF6370FD60A74009D8BE2 /* PBXContainerItemProxy */;
+		};
+		F92C564E0ECD10E5009BE4BA /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F92C563B0ECD10B3009BE4BA /* breakpadUtilities */;
+			targetProxy = F92C564D0ECD10E5009BE4BA /* PBXContainerItemProxy */;
+		};
+		F92C56860ECD15EF009BE4BA /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F92C563B0ECD10B3009BE4BA /* breakpadUtilities */;
+			targetProxy = F92C56850ECD15EF009BE4BA /* PBXContainerItemProxy */;
+		};
+		F92C56880ECD15F1009BE4BA /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F92C53530ECCE349009BE4BA /* Inspector */;
+			targetProxy = F92C56870ECD15F1009BE4BA /* PBXContainerItemProxy */;
+		};
+		F93DE2FC0F82C3C600608B94 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F93803BD0F80820F004D428B /* generator_test */;
+			targetProxy = F93DE2FB0F82C3C600608B94 /* PBXContainerItemProxy */;
+		};
+		F93DE3700F82CC1300608B94 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F93DE32B0F82C55600608B94 /* handler_test */;
+			targetProxy = F93DE36F0F82CC1300608B94 /* PBXContainerItemProxy */;
+		};
+		F93DE3A70F830D1D00608B94 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F9C77DD90F7DD5CF0045F7DB /* UnitTests */;
+			targetProxy = F93DE3A60F830D1D00608B94 /* PBXContainerItemProxy */;
+		};
+		F94585880F78232B009A47BF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 8DC2EF4F0486A6940098B216 /* Breakpad */;
+			targetProxy = F94585870F78232B009A47BF /* PBXContainerItemProxy */;
+		};
+		F945858A0F78232E009A47BF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F92C53530ECCE349009BE4BA /* Inspector */;
+			targetProxy = F94585890F78232E009A47BF /* PBXContainerItemProxy */;
+		};
+		F945858C0F782330009A47BF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F92C563B0ECD10B3009BE4BA /* breakpadUtilities */;
+			targetProxy = F945858B0F782330009A47BF /* PBXContainerItemProxy */;
+		};
+		F945858E0F782333009A47BF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F92C569F0ECE04A7009BE4BA /* crash_report_sender */;
+			targetProxy = F945858D0F782333009A47BF /* PBXContainerItemProxy */;
+		};
+		F94585900F782336009A47BF /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F9C44DA40EF060A8003AEBAA /* BreakpadTest */;
+			targetProxy = F945858F0F782336009A47BF /* PBXContainerItemProxy */;
+		};
+		F9C44E1A0EF0790F003AEBAA /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 8DC2EF4F0486A6940098B216 /* Breakpad */;
+			targetProxy = F9C44E190EF0790F003AEBAA /* PBXContainerItemProxy */;
+		};
+		F9C44E970EF09F4B003AEBAA /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = F92C569F0ECE04A7009BE4BA /* crash_report_sender */;
+			targetProxy = F9C44E960EF09F4B003AEBAA /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		33880C7E0F9E097100817F82 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				33880C7F0F9E097100817F82 /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		F945849C0F280E3C009A47BF /* Localizable.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F945849D0F280E3C009A47BF /* English */,
+			);
+			name = Localizable.strings;
+			sourceTree = "<group>";
+		};
+		F9C44DB80EF072A0003AEBAA /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F9C44DB90EF072A0003AEBAA /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		F9C44DBA0EF072A0003AEBAA /* MainMenu.nib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F9C44DBB0EF072A0003AEBAA /* English */,
+			);
+			name = MainMenu.nib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		1DEB91AE08733DA50010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_VERSION = A;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = Framework/Breakpad_Prefix.pch;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INFOPLIST_FILE = Framework/Info.plist;
+				INSTALL_PATH = "@executable_path/../Frameworks";
+				PRODUCT_NAME = Breakpad;
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Debug;
+		};
+		1DEB91AF08733DA50010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_VERSION = A;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = Framework/Breakpad_Prefix.pch;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INFOPLIST_FILE = Framework/Info.plist;
+				INSTALL_PATH = "@executable_path/../Frameworks";
+				PRODUCT_NAME = Breakpad;
+				WRAPPER_EXTENSION = framework;
+			};
+			name = Release;
+		};
+		1DEB91B208733DA50010E9CD /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)";
+				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH)";
+				PREBINDING = NO;
+				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+			};
+			name = Debug;
+		};
+		1DEB91B308733DA50010E9CD /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386";
+				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = "../..//**";
+				PREBINDING = NO;
+				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+			};
+			name = Release;
+		};
+		F92C53560ECCE34A009BE4BA /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-lcrypto",
+					"$(inherited)",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = Inspector;
+			};
+			name = Debug;
+		};
+		F92C53570ECCE34A009BE4BA /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEAD_CODE_STRIPPING = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INSTALL_PATH = /usr/local/bin;
+				LD_GENERATE_MAP_FILE = YES;
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-lcrypto",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = Inspector;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F92C563D0ECD10B3009BE4BA /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INSTALL_PATH = /usr/local/lib;
+				LD_DYLIB_INSTALL_NAME = "@executable_path/../Resources/$(EXECUTABLE_PATH)";
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-headerpad_max_install_names",
+					"-lcrypto",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = breakpadUtilities;
+			};
+			name = Debug;
+		};
+		F92C563E0ECD10B3009BE4BA /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INSTALL_PATH = /usr/local/lib;
+				LD_DYLIB_INSTALL_NAME = "@executable_path/../Resources/$(EXECUTABLE_PATH)";
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-headerpad_max_install_names",
+					"-lcrypto",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = breakpadUtilities;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F92C56A30ECE04A8009BE4BA /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INFOPLIST_FILE = "sender/crash_report_sender-Info.plist";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = crash_report_sender;
+			};
+			name = Debug;
+		};
+		F92C56A40ECE04A8009BE4BA /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INFOPLIST_FILE = "sender/crash_report_sender-Info.plist";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = crash_report_sender;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F93803C00F808210004D428B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-lcrypto",
+					"-framework",
+					Foundation,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = generator_test;
+				USER_HEADER_SEARCH_PATHS = ../../;
+			};
+			name = Debug;
+		};
+		F93803C10F808210004D428B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-lcrypto",
+					"-framework",
+					Foundation,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = generator_test;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F93DE2D30F82A67400608B94 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_CHAR_IS_UNSIGNED_CHAR = YES;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = minidump_file_writer_unittest;
+				USER_HEADER_SEARCH_PATHS = ../../;
+			};
+			name = Debug;
+		};
+		F93DE2D40F82A67400608B94 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = minidump_file_writer_unittest;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F93DE32E0F82C55700608B94 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-lcrypto",
+					"-framework",
+					Foundation,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = handler_test;
+				USER_HEADER_SEARCH_PATHS = ../../;
+			};
+			name = Debug;
+		};
+		F93DE32F0F82C55700608B94 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_MODEL_TUNING = G5;
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-lcrypto",
+					"-framework",
+					Foundation,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = handler_test;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F93DE3B90F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)";
+				GCC_C_LANGUAGE_STANDARD = c99;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH)";
+				PREBINDING = NO;
+				SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3BA0F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				FRAMEWORK_VERSION = A;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = Framework/Breakpad_Prefix.pch;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INFOPLIST_FILE = Framework/Info.plist;
+				INSTALL_PATH = "@executable_path/../Frameworks";
+				PRODUCT_NAME = Breakpad;
+				WRAPPER_EXTENSION = framework;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3BB0F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INSTALL_PATH = /usr/local/bin;
+				OTHER_LDFLAGS = (
+					"-lcrypto",
+					"$(inherited)",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = Inspector;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3BC0F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				DYLIB_COMPATIBILITY_VERSION = 1;
+				DYLIB_CURRENT_VERSION = 1;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INSTALL_PATH = /usr/local/lib;
+				LD_DYLIB_INSTALL_NAME = "@executable_path/../Resources/$(EXECUTABLE_PATH)";
+				OTHER_LDFLAGS = (
+					"$(inherited)",
+					"-headerpad_max_install_names",
+					"-lcrypto",
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = breakpadUtilities;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3BD0F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				HEADER_SEARCH_PATHS = "../..//**";
+				INFOPLIST_FILE = "sender/crash_report_sender-Info.plist";
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = crash_report_sender;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3BE0F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+				INFOPLIST_FILE = testapp/Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = BreakpadTest;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3BF0F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				PRODUCT_NAME = All;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3C00F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
+				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h";
+				INFOPLIST_FILE = "UnitTests-Info.plist";
+				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
+				LIBRARY_SEARCH_PATHS = ./gcov;
+				OTHER_LDFLAGS = (
+					"-lgcov",
+					"-framework",
+					Cocoa,
+					"-framework",
+					SenTestingKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = UnitTests;
+				USER_HEADER_SEARCH_PATHS = "../../ ../../common/mac/**";
+				WRAPPER_EXTENSION = octest;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3C10F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
+				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				LIBRARY_SEARCH_PATHS = ./gcov;
+				OTHER_LDFLAGS = (
+					"-lgcov",
+					"-lcrypto",
+					"-framework",
+					Foundation,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = generator_test;
+				USER_HEADER_SEARCH_PATHS = ../../;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3C20F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_CHAR_IS_UNSIGNED_CHAR = YES;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
+				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				LIBRARY_SEARCH_PATHS = ./gcov;
+				OTHER_LDFLAGS = (
+					"-lgcov",
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = minidump_file_writer_unittest;
+				USER_HEADER_SEARCH_PATHS = ../../;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F93DE3C30F830E7000608B94 /* Debug With Code Coverage */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_TEST_COVERAGE_FILES = YES;
+				GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				INSTALL_PATH = /usr/local/bin;
+				LIBRARY_SEARCH_PATHS = ./gcov;
+				OTHER_LDFLAGS = (
+					"-lcrypto",
+					"-lgcov",
+					"-framework",
+					Foundation,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = handler_test;
+				USER_HEADER_SEARCH_PATHS = ../../;
+			};
+			name = "Debug With Code Coverage";
+		};
+		F94585850F782326009A47BF /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				PRODUCT_NAME = All;
+			};
+			name = Debug;
+		};
+		F94585860F782326009A47BF /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				PRODUCT_NAME = All;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F9C44DA80EF060A8003AEBAA /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = NO;
+				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h";
+				INFOPLIST_FILE = testapp/Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = BreakpadTest;
+			};
+			name = Debug;
+		};
+		F9C44DA90EF060A8003AEBAA /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)/build/$(CONFIGURATION)";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				INFOPLIST_FILE = testapp/Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Foundation,
+					"-framework",
+					AppKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = BreakpadTest;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		F9C77DDC0F7DD5D00045F7DB /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_MODEL_TUNING = G5;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Cocoa.framework/Headers/Cocoa.h";
+				INFOPLIST_FILE = "UnitTests-Info.plist";
+				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Cocoa,
+					"-framework",
+					SenTestingKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = UnitTests;
+				USER_HEADER_SEARCH_PATHS = "../../ ../../common/mac/**";
+				WRAPPER_EXTENSION = octest;
+			};
+			name = Debug;
+		};
+		F9C77DDD0F7DD5D00045F7DB /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_MODEL_TUNING = G5;
+				INFOPLIST_FILE = "UnitTests-Info.plist";
+				INSTALL_PATH = "$(USER_LIBRARY_DIR)/Bundles";
+				OTHER_LDFLAGS = (
+					"-framework",
+					Cocoa,
+					"-framework",
+					SenTestingKit,
+				);
+				PREBINDING = NO;
+				PRODUCT_NAME = UnitTests;
+				WRAPPER_EXTENSION = octest;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "Breakpad" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB91AE08733DA50010E9CD /* Debug */,
+				F93DE3BA0F830E7000608B94 /* Debug With Code Coverage */,
+				1DEB91AF08733DA50010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "Breakpad" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				1DEB91B208733DA50010E9CD /* Debug */,
+				F93DE3B90F830E7000608B94 /* Debug With Code Coverage */,
+				1DEB91B308733DA50010E9CD /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F92C53580ECCE36D009BE4BA /* Build configuration list for PBXNativeTarget "Inspector" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F92C53560ECCE34A009BE4BA /* Debug */,
+				F93DE3BB0F830E7000608B94 /* Debug With Code Coverage */,
+				F92C53570ECCE34A009BE4BA /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F92C56670ECD11A3009BE4BA /* Build configuration list for PBXNativeTarget "breakpadUtilities" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F92C563D0ECD10B3009BE4BA /* Debug */,
+				F93DE3BC0F830E7000608B94 /* Debug With Code Coverage */,
+				F92C563E0ECD10B3009BE4BA /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F92C56A50ECE04A8009BE4BA /* Build configuration list for PBXNativeTarget "crash_report_sender" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F92C56A30ECE04A8009BE4BA /* Debug */,
+				F93DE3BD0F830E7000608B94 /* Debug With Code Coverage */,
+				F92C56A40ECE04A8009BE4BA /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F93803C40F80822E004D428B /* Build configuration list for PBXNativeTarget "generator_test" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F93803C00F808210004D428B /* Debug */,
+				F93DE3C10F830E7000608B94 /* Debug With Code Coverage */,
+				F93803C10F808210004D428B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F93DE2D60F82A67700608B94 /* Build configuration list for PBXNativeTarget "minidump_file_writer_unittest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F93DE2D30F82A67400608B94 /* Debug */,
+				F93DE3C20F830E7000608B94 /* Debug With Code Coverage */,
+				F93DE2D40F82A67400608B94 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F93DE3320F82C5D800608B94 /* Build configuration list for PBXNativeTarget "handler_test" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F93DE32E0F82C55700608B94 /* Debug */,
+				F93DE3C30F830E7000608B94 /* Debug With Code Coverage */,
+				F93DE32F0F82C55700608B94 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F94585930F78235C009A47BF /* Build configuration list for PBXAggregateTarget "All" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F94585850F782326009A47BF /* Debug */,
+				F93DE3BF0F830E7000608B94 /* Debug With Code Coverage */,
+				F94585860F782326009A47BF /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F9C44DAA0EF060A9003AEBAA /* Build configuration list for PBXNativeTarget "BreakpadTest" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F9C44DA80EF060A8003AEBAA /* Debug */,
+				F93DE3BE0F830E7000608B94 /* Debug With Code Coverage */,
+				F9C44DA90EF060A8003AEBAA /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F9C77DDE0F7DD5D00045F7DB /* Build configuration list for PBXNativeTarget "UnitTests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F9C77DDC0F7DD5D00045F7DB /* Debug */,
+				F93DE3C00F830E7000608B94 /* Debug With Code Coverage */,
+				F9C77DDD0F7DD5D00045F7DB /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.h
@@ -0,0 +1,303 @@
+// Copyright (c) 2006, 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.
+//
+// Framework to provide a simple C API to crash reporting for
+// applications.  By default, if any machine-level exception (e.g.,
+// EXC_BAD_ACCESS) occurs, it will be handled by the BreakpadRef
+// object as follows:
+//
+// 1. Create a minidump file (see Breakpad for details)
+// 2. Prompt the user (using CFUserNotification)
+// 3. Invoke a command line reporting tool to send the minidump to a
+//    server
+//
+// By specifying parameters to the BreakpadCreate function, you can
+// modify the default behavior to suit your needs and wants and
+// desires.
+
+typedef void *BreakpadRef;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <Foundation/Foundation.h>
+
+  // Keys for configuration file
+#define kReporterMinidumpDirectoryKey "MinidumpDir"
+#define kReporterMinidumpIDKey        "MinidumpID"
+
+// The default subdirectory of the Library to put crash dumps in
+// The subdirectory is
+//  ~/Library/<kDefaultLibrarySubdirectory>/<GoogleBreakpadProduct>
+#define kDefaultLibrarySubdirectory   "Breakpad"
+
+// Specify some special keys to be used in the configuration file that is
+// generated by Breakpad and consumed by the crash_sender.
+#define BREAKPAD_PRODUCT               "BreakpadProduct"
+#define BREAKPAD_PRODUCT_DISPLAY       "BreakpadProductDisplay"
+#define BREAKPAD_VERSION               "BreakpadVersion"
+#define BREAKPAD_VENDOR                "BreakpadVendor"
+#define BREAKPAD_URL                   "BreakpadURL"
+#define BREAKPAD_REPORT_INTERVAL       "BreakpadReportInterval"
+#define BREAKPAD_SKIP_CONFIRM          "BreakpadSkipConfirm"
+#define BREAKPAD_CONFIRM_TIMEOUT       "BreakpadConfirmTimeout"
+#define BREAKPAD_SEND_AND_EXIT         "BreakpadSendAndExit"
+#define BREAKPAD_DUMP_DIRECTORY        "BreakpadMinidumpLocation"
+#define BREAKPAD_INSPECTOR_LOCATION    "BreakpadInspectorLocation"
+#define BREAKPAD_REPORTER_EXE_LOCATION \
+  "BreakpadReporterExeLocation"
+#define BREAKPAD_LOGFILES              "BreakpadLogFiles"
+#define BREAKPAD_LOGFILE_UPLOAD_SIZE   "BreakpadLogFileTailSize"
+#define BREAKPAD_REQUEST_COMMENTS      "BreakpadRequestComments"
+#define BREAKPAD_COMMENTS              "BreakpadComments"
+#define BREAKPAD_REQUEST_EMAIL         "BreakpadRequestEmail"
+#define BREAKPAD_EMAIL                 "BreakpadEmail"
+#define BREAKPAD_SERVER_TYPE           "BreakpadServerType"
+#define BREAKPAD_SERVER_PARAMETER_DICT "BreakpadServerParameters"
+
+// The keys below are NOT user supplied, and are used internally.
+#define BREAKPAD_PROCESS_START_TIME       "BreakpadProcStartTime"
+#define BREAKPAD_PROCESS_UP_TIME          "BreakpadProcessUpTime"
+#define BREAKPAD_PROCESS_CRASH_TIME       "BreakpadProcessCrashTime"
+#define BREAKPAD_LOGFILE_KEY_PREFIX       "BreakpadAppLogFile"
+#define BREAKPAD_SERVER_PARAMETER_PREFIX  "BreakpadServerParameterPrefix_"
+
+// Optional user-defined function to dec to decide if we should handle
+// this crash or forward it along.
+// Return true if you want Breakpad to handle it.
+// Return false if you want Breakpad to skip it
+// The exception handler always returns false, as if SEND_AND_EXIT were false
+// (which means the next exception handler will take the exception)
+typedef bool (*BreakpadFilterCallback)(int exception_type,
+                                       int exception_code,
+                                       mach_port_t crashing_thread,
+                                       void *context);
+
+// Create a new BreakpadRef object and install it as an exception
+// handler.  The |parameters| will typically be the contents of your
+// bundle's Info.plist.
+//
+// You can also specify these additional keys for customizable behavior:
+// Key:                           Value:
+// BREAKPAD_PRODUCT               Product name (e.g., "MyAwesomeProduct")
+//                                This one is used as the key to identify
+//                                the product when uploading
+//                                REQUIRED
+//
+// BREAKPAD_PRODUCT_DISPLAY       This is the display name, e.g. a pretty
+//                                name for the product when the crash_sender
+//                                pops up UI for the user.  Falls back to
+//                                BREAKPAD_PRODUCT if not specified.
+//
+// BREAKPAD_VERSION               Product version (e.g., 1.2.3), used
+//                                as metadata for crash report
+//                                REQUIRED
+//
+// BREAKPAD_VENDOR                Vendor name, used in UI (e.g. "A report has
+//                                been created that you can send to <vendor>")
+//
+// BREAKPAD_URL                   URL destination for reporting
+//                                REQUIRED
+//
+// BREAKPAD_REPORT_INTERVAL       # of seconds between sending
+//                                reports.  If an additional report is
+//                                generated within this time, it will
+//                                be ignored.  Default: 3600sec.
+//                                Specify 0 to send all reports.
+//
+// BREAKPAD_SKIP_CONFIRM          If true, the reporter will send the report
+//                                without any user intervention.
+//                                Defaults to NO
+//
+// BREAKPAD_CONFIRM_TIMEOUT       Number of seconds before the upload
+//                                confirmation dialog will be automatically
+//                                dismissed (cancelling the upload).
+//                                Default: 300 seconds (min of 60).
+//                                Specify 0 to prevent timeout.
+//
+// BREAKPAD_SEND_AND_EXIT         If true, the handler will exit after sending.
+//                                This will prevent any other handler (e.g.,
+//                                CrashReporter) from getting the crash.
+//                                Defaults TO YES
+//
+// BREAKPAD_DUMP_DIRECTORY        The directory to store crash-dumps
+//                                in. By default, we use
+//                                ~/Library/Breakpad/<BREAKPAD_PRODUCT>
+//                                The path you specify here is tilde-expanded.
+//
+// BREAKPAD_INSPECTOR_LOCATION    The full path to the Inspector executable.
+//                                Defaults to <Framework resources>/Inspector
+//
+// BREAKPAD_REPORTER_EXE_LOCATION The full path to the Reporter/sender
+//                                executable.
+//                                Default:
+//                                <Framework Resources>/crash_report_sender.app
+//
+// BREAKPAD_LOGFILES              Indicates an array of log file paths that
+//                                should be uploaded at crash time.
+//
+// BREAKPAD_REQUEST_COMMENTS      If true, the message dialog will have a
+//                                text box for the user to enter comments.
+//                                Default: NO
+//
+// BREAKPAD_REQUEST_EMAIL         If true and BREAKPAD_REQUEST_COMMENTS is also
+//                                true, the message dialog will have a text
+//                                box for the user to enter their email address.
+//                                Default: NO
+//
+// BREAKPAD_SERVER_TYPE           A parameter that tells Breakpad how to
+//                                rewrite the upload parameters for a specific
+//                                server type.  The currently valid values are
+//                                'socorro' or 'google'.  If you want to add
+//                                other types, see the function in
+//                                crash_report_sender.m that maps parameters to
+//                                URL parameters.  Defaults to 'google'.
+//
+// BREAKPAD_SERVER_PARAMETER_DICT A plist dictionary of static
+//                                parameters that are uploaded to the
+//                                server.  The parameters are sent as
+//                                is to the crash server.  Their
+//                                content isn't added to the minidump
+//                                but pass as URL parameters when
+//                                uploading theminidump to the crash
+//                                server.
+//=============================================================================
+// The BREAKPAD_PRODUCT, BREAKPAD_VERSION and BREAKPAD_URL are
+// required to have non-NULL values.  By default, the BREAKPAD_PRODUCT
+// will be the CFBundleName and the BREAKPAD_VERSION will be the
+// CFBundleVersion when these keys are present in the bundle's
+// Info.plist, which is usually passed in to BreakpadCreate() as an
+// NSDictionary (you could also pass in another dictionary that had
+// the same keys configured).  If the BREAKPAD_PRODUCT or
+// BREAKPAD_VERSION are ultimately undefined, BreakpadCreate() will
+// fail.  You have been warned.
+//
+// If you are running in a debugger, Breakpad will not install, unless the
+// BREAKPAD_IGNORE_DEBUGGER envionment variable is set and/or non-zero.
+//
+// The BREAKPAD_SKIP_CONFIRM and BREAKPAD_SEND_AND_EXIT default
+// values are NO and YES.  However, they can be controlled by setting their
+// values in a user or global plist.
+//
+// It's easiest to use Breakpad via the Framework, but if you're compiling the
+// code in directly, BREAKPAD_INSPECTOR_LOCATION and
+// BREAKPAD_REPORTER_EXE_LOCATION allow you to specify custom paths
+// to the helper executables.
+//
+//=============================================================================
+// The following are NOT user-supplied but are documented here for
+// completeness.  They are calculated by Breakpad during initialization &
+// crash-dump generation.
+//
+// BREAKPAD_PROCESS_START_TIME       The time the process started.
+//
+// BREAKPAD_PROCESS_CRASH_TIME       The time the process crashed.
+//
+// BREAKPAD_PROCESS_UP_TIME          The total time the process has been
+//                                   running.  This parameter is not set
+//                                   until the crash-dump-generation phase.
+//
+// BREAKPAD_LOGFILE_KEY_PREFIX       Used to find out which parameters in the
+//                                   parameter dictionary correspond to log
+//                                   file paths.
+//
+// BREAKPAD_SERVER_PARAMETER_PREFIX  This prefix is used by Breakpad
+//                                   internally, because Breakpad uses
+//                                   the same dictionary internally to
+//                                   track both its internal
+//                                   configuration parameters and
+//                                   parameters meant to be uploaded
+//                                   to the server.  This string is
+//                                   used internally by Breakpad to
+//                                   prefix user-supplied parameter
+//                                   names so those can be sent to the
+//                                   server without leaking Breakpad's
+//                                   internal values.
+//
+
+// Returns a new BreakpadRef object on success, NULL otherwise.
+BreakpadRef BreakpadCreate(NSDictionary *parameters);
+
+// Uninstall and release the data associated with |ref|.
+void BreakpadRelease(BreakpadRef ref);
+
+// Clients may set an optional callback which gets called when a crash
+// occurs.  The callback function should return |true| if we should
+// handle the crash, generate a crash report, etc. or |false| if we
+// should ignore it and forward the crash (normally to CrashReporter).
+// Context is a pointer to arbitrary data to make the callback with.
+void BreakpadSetFilterCallback(BreakpadRef ref,
+                               BreakpadFilterCallback callback,
+                               void *context);
+
+// User defined key and value string storage.  Generally this is used
+// to configure Breakpad's internal operation, such as whether the
+// crash_sender should prompt the user, or the filesystem location for
+// the minidump file.  See Breakpad.h for some parameters that can be
+// set.  Anything longer than 255 bytes will be truncated. Note that
+// the string is converted to UTF8 before truncation, so any multibyte
+// character that straddles the 255(256 - 1 for terminator) byte limit
+// will be mangled.
+//
+// A maximum number of 64 key/value pairs are supported.  An assert()
+// will fire if more than this number are set.  Unfortunately, right
+// now, the same dictionary is used for both Breakpad's parameters AND
+// the Upload parameters.
+//
+// TODO (nealsid): Investigate how necessary this is if we don't
+// automatically upload parameters to the server anymore.
+// TODO (nealsid): separate server parameter dictionary from the
+// dictionary used to configure Breakpad, and document limits for each
+// independently.
+void BreakpadSetKeyValue(BreakpadRef ref, NSString *key, NSString *value);
+NSString *BreakpadKeyValue(BreakpadRef ref, NSString *key);
+void BreakpadRemoveKeyValue(BreakpadRef ref, NSString *key);
+
+// You can use this method to specify parameters that will be uploaded
+// to the crash server.  They will be automatically encoded as
+// necessary.  Note that as mentioned above there are limits on both
+// the number of keys and their length.
+void BreakpadAddUploadParameter(BreakpadRef ref, NSString *key,
+				NSString *value);
+
+// This method will remove a previously-added parameter from the
+// upload parameter set.
+void BreakpadRemoveUploadParameter(BreakpadRef ref, NSString *key);
+
+// Add a log file for Breakpad to read and send upon crash dump
+void BreakpadAddLogFile(BreakpadRef ref, NSString *logPathname);
+
+// Generate a minidump and send
+void BreakpadGenerateAndSendReport(BreakpadRef ref);
+
+#ifdef __cplusplus
+}
+#endif
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad.mm
@@ -0,0 +1,1003 @@
+// Copyright (c) 2006, 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.
+//
+
+#define VERBOSE 0
+
+#if VERBOSE
+  static bool gDebugLog = true;
+#else
+  static bool gDebugLog = false;
+#endif
+
+#define DEBUGLOG if (gDebugLog) fprintf
+#define IGNORE_DEBUGGER "BREAKPAD_IGNORE_DEBUGGER"
+
+#import "common/mac/MachIPC.h"
+#import "common/mac/SimpleStringDictionary.h"
+
+#import "client/mac/crash_generation/Inspector.h"
+#import "client/mac/handler/exception_handler.h"
+#import "client/mac/Framework/Breakpad.h"
+#import "client/mac/Framework/OnDemandServer.h"
+#import "client/mac/handler/protected_memory_allocator.h"
+
+#import <sys/stat.h>
+#import <sys/sysctl.h>
+
+#import <Foundation/Foundation.h>
+
+
+using google_breakpad::KeyValueEntry;
+using google_breakpad::SimpleStringDictionary;
+using google_breakpad::SimpleStringDictionaryIterator;
+
+//=============================================================================
+// We want any memory allocations which are used by breakpad during the
+// exception handling process (after a crash has happened) to be read-only
+// to prevent them from being smashed before a crash occurs.  Unfortunately
+// we cannot protect against smashes to our exception handling thread's
+// stack.
+//
+// NOTE: Any memory allocations which are not used during the exception
+// handling process may be allocated in the normal ways.
+//
+// The ProtectedMemoryAllocator class provides an Allocate() method which
+// we'll using in conjunction with placement operator new() to control
+// allocation of C++ objects.  Note that we don't use operator delete()
+// but instead call the objects destructor directly:  object->~ClassName();
+//
+ProtectedMemoryAllocator *gMasterAllocator = NULL;
+ProtectedMemoryAllocator *gKeyValueAllocator = NULL;
+ProtectedMemoryAllocator *gBreakpadAllocator = NULL;
+
+// Mutex for thread-safe access to the key/value dictionary used by breakpad.
+// It's a global instead of an instance variable of Breakpad
+// since it can't live in a protected memory area.
+pthread_mutex_t gDictionaryMutex;
+
+//=============================================================================
+// Stack-based object for thread-safe access to a memory-protected region.
+// It's assumed that normally the memory block (allocated by the allocator)
+// is protected (read-only).  Creating a stack-based instance of
+// ProtectedMemoryLocker will unprotect this block after taking the lock.
+// Its destructor will first re-protect the memory then release the lock.
+class ProtectedMemoryLocker {
+public:
+  // allocator may be NULL, in which case no Protect() or Unprotect() calls
+  // will be made, but a lock will still be taken
+  ProtectedMemoryLocker(pthread_mutex_t *mutex,
+                        ProtectedMemoryAllocator *allocator)
+  : mutex_(mutex), allocator_(allocator) {
+    // Lock the mutex
+    assert(pthread_mutex_lock(mutex_) == 0);
+
+    // Unprotect the memory
+    if (allocator_ ) {
+      allocator_->Unprotect();
+    }
+  }
+
+  ~ProtectedMemoryLocker() {
+    // First protect the memory
+    if (allocator_) {
+      allocator_->Protect();
+    }
+
+    // Then unlock the mutex
+    assert(pthread_mutex_unlock(mutex_) == 0);
+  };
+
+private:
+  //  Keep anybody from ever creating one of these things not on the stack.
+  ProtectedMemoryLocker() { }
+  ProtectedMemoryLocker(const ProtectedMemoryLocker&);
+  ProtectedMemoryLocker & operator=(ProtectedMemoryLocker&);
+
+  pthread_mutex_t           *mutex_;
+  ProtectedMemoryAllocator  *allocator_;
+};
+
+//=============================================================================
+class Breakpad {
+ public:
+  // factory method
+  static Breakpad *Create(NSDictionary *parameters) {
+    // Allocate from our special allocation pool
+    Breakpad *breakpad =
+      new (gBreakpadAllocator->Allocate(sizeof(Breakpad)))
+        Breakpad();
+
+    if (!breakpad)
+      return NULL;
+
+    if (!breakpad->Initialize(parameters)) {
+      // Don't use operator delete() here since we allocated from special pool
+      breakpad->~Breakpad();
+      return NULL;
+    }
+
+    return breakpad;
+  }
+
+  ~Breakpad();
+
+  void SetKeyValue(NSString *key, NSString *value);
+  NSString *KeyValue(NSString *key);
+  void RemoveKeyValue(NSString *key);
+
+  void GenerateAndSendReport();
+
+  void SetFilterCallback(BreakpadFilterCallback callback, void *context) {
+    filter_callback_ = callback;
+    filter_callback_context_ = context;
+  }
+
+ private:
+  Breakpad()
+    : handler_(NULL),
+      config_params_(NULL),
+      send_and_exit_(true),
+      filter_callback_(NULL), 
+      filter_callback_context_(NULL) {
+    inspector_path_[0] = 0;
+  }
+
+  bool Initialize(NSDictionary *parameters);
+
+  bool ExtractParameters(NSDictionary *parameters);
+
+  // Dispatches to HandleException()
+  static bool ExceptionHandlerDirectCallback(void *context,
+                                             int exception_type,
+                                             int exception_code,
+                                             int exception_subcode,
+                                             mach_port_t crashing_thread);
+
+  bool HandleException(int exception_type,
+                       int exception_code,
+                       int exception_subcode,
+                       mach_port_t crashing_thread);
+
+  // Since ExceptionHandler (w/o namespace) is defined as typedef in OSX's
+  // MachineExceptions.h, we have to explicitly name the handler.
+  google_breakpad::ExceptionHandler *handler_; // The actual handler (STRONG)
+
+  char                    inspector_path_[PATH_MAX];  // Path to inspector tool
+
+  SimpleStringDictionary  *config_params_; // Create parameters (STRONG)
+
+  OnDemandServer          inspector_;
+
+  bool                    send_and_exit_;  // Exit after sending, if true
+
+  BreakpadFilterCallback  filter_callback_;
+  void                    *filter_callback_context_;
+};
+
+#pragma mark -
+#pragma mark Helper functions
+
+//=============================================================================
+// Helper functions
+
+//=============================================================================
+static BOOL IsDebuggerActive() {
+  BOOL result = NO;
+  NSUserDefaults *stdDefaults = [NSUserDefaults standardUserDefaults];
+
+  // We check both defaults and the environment variable here
+
+  BOOL ignoreDebugger = [stdDefaults boolForKey:@IGNORE_DEBUGGER];
+
+  if (!ignoreDebugger) {
+    char *ignoreDebuggerStr = getenv(IGNORE_DEBUGGER);
+    ignoreDebugger = (ignoreDebuggerStr ? strtol(ignoreDebuggerStr, NULL, 10) : 0) != 0;
+  }
+
+  if (!ignoreDebugger) {
+    pid_t pid = getpid();
+    int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
+    int mibSize = sizeof(mib) / sizeof(int);
+    size_t actualSize;
+
+    if (sysctl(mib, mibSize, NULL, &actualSize, NULL, 0) == 0) {
+      struct kinfo_proc *info = (struct kinfo_proc *)malloc(actualSize);
+
+      if (info) {
+        // This comes from looking at the Darwin xnu Kernel
+        if (sysctl(mib, mibSize, info, &actualSize, NULL, 0) == 0)
+          result = (info->kp_proc.p_flag & P_TRACED) ? YES : NO;
+
+        free(info);
+      }
+    }
+  }
+
+  return result;
+}
+
+//=============================================================================
+bool Breakpad::ExceptionHandlerDirectCallback(void *context,
+                                                    int exception_type,
+                                                    int exception_code,
+                                                    int exception_subcode,
+                                                    mach_port_t crashing_thread) {
+  Breakpad *breakpad = (Breakpad *)context;
+
+  // If our context is damaged or something, just return false to indicate that
+  // the handler should continue without us.
+  if (!breakpad)
+    return false;
+
+  return breakpad->HandleException( exception_type,
+                                    exception_code,
+                                    exception_subcode,
+                                    crashing_thread);
+}
+
+//=============================================================================
+#pragma mark -
+
+#include <mach-o/dyld.h>
+
+//=============================================================================
+// Returns the pathname to the Resources directory for this version of
+// Breakpad which we are now running.
+//
+// Don't make the function static, since _dyld_lookup_and_bind_fully needs a
+// simple non-static C name
+//
+extern "C" {
+NSString * GetResourcePath();
+NSString * GetResourcePath() {
+  NSString *resourcePath = nil;
+
+  // If there are multiple breakpads installed then calling bundleWithIdentifier
+  // will not work properly, so only use that as a backup plan.
+  // We want to find the bundle containing the code where this function lives
+  // and work from there
+  //
+
+  // Get the pathname to the code which contains this function
+  void *address = nil;
+  NSModule module = nil;
+  _dyld_lookup_and_bind_fully("_GetResourcePath",
+                              &address,
+                              &module);
+
+  if (module && address) {
+    const char* moduleName = NSNameOfModule(module);
+    if (moduleName) {
+      // The "Resources" directory should be in the same directory as the
+      // executable code, since that's how the Breakpad framework is built.
+      resourcePath = [NSString stringWithUTF8String:moduleName];
+      resourcePath = [resourcePath stringByDeletingLastPathComponent];
+      resourcePath = [resourcePath stringByAppendingPathComponent:@"Resources/"];
+     } else {
+      DEBUGLOG(stderr, "Missing moduleName\n");
+    }
+  } else {
+    DEBUGLOG(stderr, "Could not find GetResourcePath\n");
+    // fallback plan
+    NSBundle *bundle =
+      [NSBundle bundleWithIdentifier:@"com.Google.BreakpadFramework"];
+    resourcePath = [bundle resourcePath];
+  }
+
+  return resourcePath;
+}
+}  // extern "C"
+
+//=============================================================================
+bool Breakpad::Initialize(NSDictionary *parameters) {
+  // Initialize
+  config_params_ = NULL;
+  handler_ = NULL;
+
+  // Check for debugger
+  if (IsDebuggerActive()) {
+    DEBUGLOG(stderr, "Debugger is active:  Not installing handler\n");
+    return true;
+  }
+
+  // Gather any user specified parameters
+  if (!ExtractParameters(parameters)) {
+    return false;
+  }
+
+  // Get path to Inspector executable.
+  NSString *inspectorPathString = KeyValue(@BREAKPAD_INSPECTOR_LOCATION);
+
+  // Standardize path (resolve symlinkes, etc.)  and escape spaces
+  inspectorPathString = [inspectorPathString stringByStandardizingPath];
+  inspectorPathString = [[inspectorPathString componentsSeparatedByString:@" "]
+                                              componentsJoinedByString:@"\\ "];
+
+  // Create an on-demand server object representing the Inspector.
+  // In case of a crash, we simply need to call the LaunchOnDemand()
+  // method on it, then send a mach message to its service port.
+  // It will then launch and perform a process inspection of our crashed state.
+  // See the HandleException() method for the details.
+#define RECEIVE_PORT_NAME "com.Breakpad.Inspector"
+
+  name_t portName;
+  snprintf(portName, sizeof(name_t),  "%s%d", RECEIVE_PORT_NAME, getpid());
+
+  // Save the location of the Inspector
+  strlcpy(inspector_path_, [inspectorPathString fileSystemRepresentation],
+          sizeof(inspector_path_));
+
+  // Append a single command-line argument to the Inspector path
+  // representing the bootstrap name of the launch-on-demand receive port.
+  // When the Inspector is launched, it can use this to lookup the port
+  // by calling bootstrap_check_in().
+  strlcat(inspector_path_, " ", sizeof(inspector_path_));
+  strlcat(inspector_path_, portName, sizeof(inspector_path_));
+
+  kern_return_t kr = inspector_.Initialize(inspector_path_,
+                                           portName,
+                                           true);        // shutdown on exit
+
+  if (kr != KERN_SUCCESS) {
+    return false;
+  }
+
+  // Create the handler (allocating it in our special protected pool)
+  handler_ =
+    new (gBreakpadAllocator->Allocate(sizeof(google_breakpad::ExceptionHandler)))
+      google_breakpad::ExceptionHandler(
+        Breakpad::ExceptionHandlerDirectCallback, this, true);
+  return true;
+}
+
+//=============================================================================
+Breakpad::~Breakpad() {
+  // Note that we don't use operator delete() on these pointers,
+  // since they were allocated by ProtectedMemoryAllocator objects.
+  //
+  if (config_params_) {
+    config_params_->~SimpleStringDictionary();
+  }
+
+  if (handler_)
+    handler_->~ExceptionHandler();
+}
+
+//=============================================================================
+bool Breakpad::ExtractParameters(NSDictionary *parameters) {
+  NSUserDefaults *stdDefaults = [NSUserDefaults standardUserDefaults];
+  NSString *skipConfirm = [stdDefaults stringForKey:@BREAKPAD_SKIP_CONFIRM];
+  NSString *sendAndExit = [stdDefaults stringForKey:@BREAKPAD_SEND_AND_EXIT];
+
+  NSString *serverType = [parameters objectForKey:@BREAKPAD_SERVER_TYPE];
+  NSString *display = [parameters objectForKey:@BREAKPAD_PRODUCT_DISPLAY];
+  NSString *product = [parameters objectForKey:@BREAKPAD_PRODUCT];
+  NSString *version = [parameters objectForKey:@BREAKPAD_VERSION];
+  NSString *urlStr = [parameters objectForKey:@BREAKPAD_URL];
+  NSString *interval = [parameters objectForKey:@BREAKPAD_REPORT_INTERVAL];
+  NSString *inspectorPathString =
+                [parameters objectForKey:@BREAKPAD_INSPECTOR_LOCATION];
+  NSString *reporterPathString =
+                [parameters objectForKey:@BREAKPAD_REPORTER_EXE_LOCATION];
+  NSString *timeout = [parameters objectForKey:@BREAKPAD_CONFIRM_TIMEOUT];
+  NSArray  *logFilePaths = [parameters objectForKey:@BREAKPAD_LOGFILES];
+  NSString *logFileTailSize = [parameters objectForKey:@BREAKPAD_LOGFILE_UPLOAD_SIZE];
+  NSString *reportEmail = [parameters objectForKey:@BREAKPAD_EMAIL];
+  NSString *requestUserText =
+                [parameters objectForKey:@BREAKPAD_REQUEST_COMMENTS];
+  NSString *requestEmail = [parameters objectForKey:@BREAKPAD_REQUEST_EMAIL];
+  NSString *vendor =
+    [parameters objectForKey:@BREAKPAD_VENDOR];
+  NSString *dumpSubdirectory =
+    [parameters objectForKey:@BREAKPAD_DUMP_DIRECTORY];
+
+  NSDictionary *serverParameters = 
+    [parameters objectForKey:@BREAKPAD_SERVER_PARAMETER_DICT];
+
+  // These may have been set above as user prefs, which take priority.
+  if (!skipConfirm) {
+    skipConfirm = [parameters objectForKey:@BREAKPAD_SKIP_CONFIRM];
+  }
+  if (!sendAndExit) {
+    sendAndExit = [parameters objectForKey:@BREAKPAD_SEND_AND_EXIT];
+  }
+
+  if (!product)
+    product = [parameters objectForKey:@"CFBundleName"];
+
+  if (!display)
+    display = product;
+
+  if (!version)
+    version = [parameters objectForKey:@"CFBundleVersion"];
+
+  if (!interval)
+    interval = @"3600";
+
+  if (!timeout)
+    timeout = @"300";
+
+  if (!logFileTailSize)
+    logFileTailSize = @"200000";
+
+  if (!vendor) {
+    vendor = @"Vendor not specified";
+  }
+
+  // Normalize the values
+  if (skipConfirm) {
+    skipConfirm = [skipConfirm uppercaseString];
+
+    if ([skipConfirm isEqualToString:@"YES"] ||
+        [skipConfirm isEqualToString:@"TRUE"] ||
+        [skipConfirm isEqualToString:@"1"])
+      skipConfirm = @"YES";
+    else
+      skipConfirm = @"NO";
+  } else {
+    skipConfirm = @"NO";
+  }
+
+  send_and_exit_ = true;
+  if (sendAndExit) {
+    sendAndExit = [sendAndExit uppercaseString];
+
+    if ([sendAndExit isEqualToString:@"NO"] ||
+        [sendAndExit isEqualToString:@"FALSE"] ||
+        [sendAndExit isEqualToString:@"0"])
+      send_and_exit_ = false;
+  }
+
+  if (requestUserText) {
+    requestUserText = [requestUserText uppercaseString];
+
+    if ([requestUserText isEqualToString:@"YES"] ||
+        [requestUserText isEqualToString:@"TRUE"] ||
+        [requestUserText isEqualToString:@"1"])
+      requestUserText = @"YES";
+    else
+      requestUserText = @"NO";
+  } else {
+    requestUserText = @"NO";
+  }
+
+  // Find the helper applications if not specified in user config.
+  NSString *resourcePath = nil;
+  if (!inspectorPathString || !reporterPathString) {
+    resourcePath = GetResourcePath();
+    if (!resourcePath) {
+      DEBUGLOG(stderr, "Could not get resource path\n");
+      return false;
+    }
+  }
+
+  // Find Inspector.
+  if (!inspectorPathString) {
+    inspectorPathString =
+        [resourcePath stringByAppendingPathComponent:@"Inspector"];
+  }
+
+  // Verify that there is an Inspector tool
+  if (![[NSFileManager defaultManager] fileExistsAtPath:inspectorPathString]) {
+    DEBUGLOG(stderr, "Cannot find Inspector tool\n");
+    return false;
+  }
+
+  // Find Reporter.
+  if (!reporterPathString) {
+    reporterPathString =
+      [resourcePath stringByAppendingPathComponent:@"crash_report_sender.app"];
+    reporterPathString = [[NSBundle bundleWithPath:reporterPathString] executablePath];
+  }
+
+  // Verify that there is a Reporter application
+  if (![[NSFileManager defaultManager]
+             fileExistsAtPath:reporterPathString]) {
+    DEBUGLOG(stderr, "Cannot find Reporter tool\n");
+    return false;
+  }
+
+  if (!dumpSubdirectory) {
+    dumpSubdirectory = @"";
+  }
+
+  // The product, version, and URL are required values.
+  if (![product length]) {
+    DEBUGLOG(stderr, "Missing required product key.\n");
+    return false;
+  }
+
+  if (![version length]) {
+    DEBUGLOG(stderr, "Missing required version key.\n");
+    return false;
+  }
+
+  if (![urlStr length]) {
+    DEBUGLOG(stderr, "Missing required URL key.\n");
+    return false;
+  }
+
+  config_params_ =
+      new (gKeyValueAllocator->Allocate(sizeof(SimpleStringDictionary)) )
+        SimpleStringDictionary();
+
+  SimpleStringDictionary &dictionary = *config_params_;
+
+  dictionary.SetKeyValue(BREAKPAD_SERVER_TYPE,     [serverType UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_PRODUCT_DISPLAY, [display UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_PRODUCT,         [product UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_VERSION,         [version UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_URL,             [urlStr UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_REPORT_INTERVAL, [interval UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_SKIP_CONFIRM,    [skipConfirm UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_CONFIRM_TIMEOUT, [timeout UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_INSPECTOR_LOCATION,
+                           [inspectorPathString fileSystemRepresentation]);
+  dictionary.SetKeyValue(BREAKPAD_REPORTER_EXE_LOCATION,
+                           [reporterPathString fileSystemRepresentation]);
+  dictionary.SetKeyValue(BREAKPAD_LOGFILE_UPLOAD_SIZE,
+                         [logFileTailSize UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_REQUEST_COMMENTS,
+                         [requestUserText UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_REQUEST_EMAIL, [requestEmail UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_VENDOR, [vendor UTF8String]);
+  dictionary.SetKeyValue(BREAKPAD_DUMP_DIRECTORY,
+                         [dumpSubdirectory UTF8String]);
+  
+  struct timeval tv;
+  gettimeofday(&tv, NULL);
+  char timeStartedString[32];
+  sprintf(timeStartedString, "%d", tv.tv_sec);
+  dictionary.SetKeyValue(BREAKPAD_PROCESS_START_TIME,
+                         timeStartedString);
+
+  if (logFilePaths) {
+    char logFileKey[255];
+    for(unsigned int i = 0; i < [logFilePaths count]; i++) {
+      sprintf(logFileKey,"%s%d", BREAKPAD_LOGFILE_KEY_PREFIX, i);
+      dictionary.SetKeyValue(logFileKey,
+                             [[logFilePaths objectAtIndex:i]
+                               fileSystemRepresentation]);
+    }
+  }
+
+  if (reportEmail) {
+    dictionary.SetKeyValue(BREAKPAD_EMAIL,
+                           [reportEmail UTF8String]);
+  }
+
+  if (serverParameters) {
+    // For each key-value pair, call BreakpadAddUploadParameter()
+    NSEnumerator *keyEnumerator = [serverParameters keyEnumerator];
+    NSString *aParameter;
+    while (aParameter = [keyEnumerator nextObject]) {
+      BreakpadAddUploadParameter(this, aParameter,
+				 [serverParameters objectForKey:aParameter]);
+    }
+  }
+  return true;
+}
+
+//=============================================================================
+void        Breakpad::SetKeyValue(NSString *key, NSString *value) {
+  // We allow nil values. This is the same as removing the keyvalue.
+  if (!config_params_ || !key)
+    return;
+
+  config_params_->SetKeyValue([key UTF8String], [value UTF8String]);
+}
+
+//=============================================================================
+NSString *  Breakpad::KeyValue(NSString *key) {
+  if (!config_params_ || !key)
+    return nil;
+
+  const char *value = config_params_->GetValueForKey([key UTF8String]);
+  return value ? [NSString stringWithUTF8String:value] : nil;
+}
+
+//=============================================================================
+void        Breakpad::RemoveKeyValue(NSString *key) {
+  if (!config_params_ || !key)
+    return;
+
+  config_params_->RemoveKey([key UTF8String]);
+}
+
+//=============================================================================
+void        Breakpad::GenerateAndSendReport() {
+  HandleException(0, 0, 0, mach_thread_self()); 
+}
+
+//=============================================================================
+bool Breakpad::HandleException(int           exception_type,
+                               int           exception_code,
+                               int           exception_subcode,
+                               mach_port_t   crashing_thread) {
+  DEBUGLOG(stderr, "Breakpad: an exception occurred\n");
+
+  if (filter_callback_) {
+    bool should_handle = filter_callback_(exception_type,
+                                          exception_code,
+                                          crashing_thread,
+                                          filter_callback_context_);
+    if (!should_handle) return false;
+  }
+
+  // We need to reset the memory protections to be read/write,
+  // since LaunchOnDemand() requires changing state.
+  gBreakpadAllocator->Unprotect();
+  // Configure the server to launch when we message the service port.
+  // The reason we do this here, rather than at startup, is that we
+  // can leak a bootstrap service entry if this method is called and
+  // there never ends up being a crash.
+  inspector_.LaunchOnDemand();
+  gBreakpadAllocator->Protect();
+
+  // The Inspector should send a message to this port to verify it
+  // received our information and has finished the inspection.
+  ReceivePort acknowledge_port;
+
+  // Send initial information to the Inspector.
+  MachSendMessage message(kMsgType_InspectorInitialInfo);
+  message.AddDescriptor(mach_task_self());          // our task
+  message.AddDescriptor(crashing_thread);           // crashing thread
+  message.AddDescriptor(mach_thread_self());        // exception-handling thread
+  message.AddDescriptor(acknowledge_port.GetPort());// message receive port
+
+  InspectorInfo info;
+  info.exception_type = exception_type;
+  info.exception_code = exception_code;
+  info.exception_subcode = exception_subcode;
+  info.parameter_count = config_params_->GetCount();
+  message.SetData(&info, sizeof(info));
+
+  MachPortSender sender(inspector_.GetServicePort());
+
+  kern_return_t result = sender.SendMessage(message, 2000);
+
+  if (result == KERN_SUCCESS) {
+    // Now, send a series of key-value pairs to the Inspector.
+    const KeyValueEntry *entry = NULL;
+    SimpleStringDictionaryIterator iter(*config_params_);
+
+    while ( (entry = iter.Next()) ) {
+      KeyValueMessageData keyvalue_data(*entry);
+
+      MachSendMessage keyvalue_message(kMsgType_InspectorKeyValuePair);
+      keyvalue_message.SetData(&keyvalue_data, sizeof(keyvalue_data));
+
+      result = sender.SendMessage(keyvalue_message, 2000);
+
+      if (result != KERN_SUCCESS) {
+        break;
+      }
+    }
+
+    if (result == KERN_SUCCESS) {
+      // Wait for acknowledgement that the inspection has finished.
+      MachReceiveMessage acknowledge_messsage;
+      result = acknowledge_port.WaitForMessage(&acknowledge_messsage, 5000);
+    }
+  }
+
+#if VERBOSE
+  PRINT_MACH_RESULT(result, "Breakpad: SendMessage ");
+  printf("Breakpad: Inspector service port = %#x\n",
+    inspector_.GetServicePort());
+#endif
+
+  // If we don't want any forwarding, return true here to indicate that we've
+  // processed things as much as we want.
+  if (send_and_exit_)
+    return true;
+
+  return false;
+}
+
+//=============================================================================
+//=============================================================================
+
+#pragma mark -
+#pragma mark Public API
+
+//=============================================================================
+BreakpadRef BreakpadCreate(NSDictionary *parameters) {
+  try {
+    // This is confusing.  Our two main allocators for breakpad memory are:
+    //    - gKeyValueAllocator for the key/value memory
+    //    - gBreakpadAllocator for the Breakpad, ExceptionHandler, and other
+    //      breakpad allocations which are accessed at exception handling time.
+    //
+    // But in order to avoid these two allocators themselves from being smashed,
+    // we'll protect them as well by allocating them with gMasterAllocator.
+    //
+    // gMasterAllocator itself will NOT be protected, but this doesn't matter,
+    // since once it does its allocations and locks the memory, smashes to itself
+    // don't affect anything we care about.
+    gMasterAllocator =
+      new ProtectedMemoryAllocator(sizeof(ProtectedMemoryAllocator) * 2);
+
+    gKeyValueAllocator =
+      new (gMasterAllocator->Allocate(sizeof(ProtectedMemoryAllocator)))
+        ProtectedMemoryAllocator(sizeof(SimpleStringDictionary));
+
+    // Create a mutex for use in accessing the SimpleStringDictionary
+    int mutexResult = pthread_mutex_init(&gDictionaryMutex, NULL);
+    if (mutexResult != 0) {
+      throw mutexResult;   // caught down below
+    }
+
+    // With the current compiler, gBreakpadAllocator is allocating 1444 bytes.
+    // Let's round up to the nearest page size.
+    //
+    int breakpad_pool_size = 4096;
+
+    /*
+     sizeof(Breakpad)
+     + sizeof(google_breakpad::ExceptionHandler)
+     + sizeof( STUFF ALLOCATED INSIDE ExceptionHandler )
+     */
+
+    gBreakpadAllocator =
+      new (gMasterAllocator->Allocate(sizeof(ProtectedMemoryAllocator)))
+        ProtectedMemoryAllocator(breakpad_pool_size);
+
+    // Stack-based autorelease pool for Breakpad::Create() obj-c code.
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    Breakpad *breakpad = Breakpad::Create(parameters);
+
+    if (breakpad) {
+      // Make read-only to protect against memory smashers
+      gMasterAllocator->Protect();
+      gKeyValueAllocator->Protect();
+      gBreakpadAllocator->Protect();
+    } else {
+      [pool release];
+#ifdef __EXCEPTIONS
+      throw(-1);
+#else
+      return NULL;
+#endif
+    }
+
+    // Can uncomment this line to figure out how much space was actually
+    // allocated using this allocator
+    //     printf("gBreakpadAllocator allocated size = %d\n",
+    //         gBreakpadAllocator->GetAllocatedSize() );
+
+    [pool release];
+    return (BreakpadRef)breakpad;
+  } catch(...) {    // don't let exceptions leave this C API
+    if (gKeyValueAllocator) {
+      gKeyValueAllocator->~ProtectedMemoryAllocator();
+      gKeyValueAllocator = NULL;
+    }
+
+    if (gBreakpadAllocator) {
+      gBreakpadAllocator->~ProtectedMemoryAllocator();
+      gBreakpadAllocator = NULL;
+    }
+
+    delete gMasterAllocator;
+    gMasterAllocator = NULL;
+  }
+
+  return NULL;
+}
+
+//=============================================================================
+void BreakpadRelease(BreakpadRef ref) {
+  try {
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (gMasterAllocator) {
+      gMasterAllocator->Unprotect();
+      gKeyValueAllocator->Unprotect();
+      gBreakpadAllocator->Unprotect();
+
+      breakpad->~Breakpad();
+
+      // Unfortunately, it's not possible to deallocate this stuff
+      // because the exception handling thread is still finishing up
+      // asynchronously at this point...  OK, it could be done with
+      // locks, etc.  But since BreakpadRelease() should usually only
+      // be called right before the process exits, it's not worth
+      // deallocating this stuff.
+#if 0
+      gKeyValueAllocator->~ProtectedMemoryAllocator();
+      gBreakpadAllocator->~ProtectedMemoryAllocator();
+      delete gMasterAllocator;
+
+      gMasterAllocator = NULL;
+      gKeyValueAllocator = NULL;
+      gBreakpadAllocator = NULL;
+#endif
+
+      pthread_mutex_destroy(&gDictionaryMutex);
+    }
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadRelease() : error\n");
+  }
+}
+
+//=============================================================================
+void BreakpadSetKeyValue(BreakpadRef ref, NSString *key, NSString *value) {
+  try {
+    // Not called at exception time
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (breakpad && key && gKeyValueAllocator) {
+      ProtectedMemoryLocker locker(&gDictionaryMutex, gKeyValueAllocator);
+
+      breakpad->SetKeyValue(key, value);
+    }
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadSetKeyValue() : error\n");
+  }
+}
+
+void BreakpadAddUploadParameter(BreakpadRef ref,
+                                NSString *key,
+                                NSString *value) {
+  // The only difference, internally, between an upload parameter and
+  // a key value one that is set with BreakpadSetKeyValue is that we
+  // prepend the keyname with a special prefix.  This informs the
+  // crash sender that the parameter should be sent along with the
+  // POST of the crash dump upload.
+  try {
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (breakpad && key && gKeyValueAllocator) {
+      ProtectedMemoryLocker locker(&gDictionaryMutex, gKeyValueAllocator);
+
+      NSString *prefixedKey = [@BREAKPAD_SERVER_PARAMETER_PREFIX
+				stringByAppendingString:key];
+      breakpad->SetKeyValue(prefixedKey, value);
+    }
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadSetKeyValue() : error\n");
+  }
+}
+
+void BreakpadRemoveUploadParameter(BreakpadRef ref,
+                                   NSString *key) {
+  try {
+    // Not called at exception time
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (breakpad && key && gKeyValueAllocator) {
+      ProtectedMemoryLocker locker(&gDictionaryMutex, gKeyValueAllocator);
+
+      NSString *prefixedKey = [NSString stringWithFormat:@"%@%@",
+                                        @BREAKPAD_SERVER_PARAMETER_PREFIX, key];
+      breakpad->RemoveKeyValue(prefixedKey);
+    }
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadRemoveKeyValue() : error\n");
+  }
+}
+//=============================================================================
+NSString *BreakpadKeyValue(BreakpadRef ref, NSString *key) {
+  NSString *value = nil;
+
+  try {
+    // Not called at exception time
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (!breakpad || !key || !gKeyValueAllocator)
+      return nil;
+
+    ProtectedMemoryLocker locker(&gDictionaryMutex, gKeyValueAllocator);
+
+    value = breakpad->KeyValue(key);
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadKeyValue() : error\n");
+  }
+
+  return value;
+}
+
+//=============================================================================
+void BreakpadRemoveKeyValue(BreakpadRef ref, NSString *key) {
+  try {
+    // Not called at exception time
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (breakpad && key && gKeyValueAllocator) {
+      ProtectedMemoryLocker locker(&gDictionaryMutex, gKeyValueAllocator);
+
+      breakpad->RemoveKeyValue(key);
+    }
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadRemoveKeyValue() : error\n");
+  }
+}
+
+//=============================================================================
+void BreakpadGenerateAndSendReport(BreakpadRef ref) {
+  try {
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (breakpad && gKeyValueAllocator) {
+      ProtectedMemoryLocker locker(&gDictionaryMutex, gKeyValueAllocator);
+
+      gBreakpadAllocator->Unprotect();
+      breakpad->GenerateAndSendReport();
+      gBreakpadAllocator->Protect();
+    }
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadGenerateAndSendReport() : error\n");
+  }
+}
+
+//=============================================================================
+void BreakpadSetFilterCallback(BreakpadRef ref,
+                               BreakpadFilterCallback callback,
+                               void *context) {
+
+  try {
+    Breakpad *breakpad = (Breakpad *)ref;
+
+    if (breakpad && gBreakpadAllocator) {
+      // share the dictionary mutex here (we really don't need a mutex)
+      ProtectedMemoryLocker locker(&gDictionaryMutex, gBreakpadAllocator);
+
+      breakpad->SetFilterCallback(callback, context);
+    }
+  } catch(...) {    // don't let exceptions leave this C API
+    fprintf(stderr, "BreakpadSetFilterCallback() : error\n");
+  }
+}
+
+//============================================================================
+void BreakpadAddLogFile(BreakpadRef ref, NSString *logPathname) {
+  int logFileCounter = 0;
+
+  NSString *logFileKey = [NSString stringWithFormat:@"%@%d",
+                                   @BREAKPAD_LOGFILE_KEY_PREFIX,
+                                   logFileCounter];
+
+  NSString *existingLogFilename = nil;
+  existingLogFilename = BreakpadKeyValue(ref, logFileKey);
+  // Find the first log file key that we can use by testing for existence
+  while (existingLogFilename) {
+    if ([existingLogFilename isEqualToString:logPathname]) {
+      return;
+    }
+    logFileCounter++;
+    logFileKey = [NSString stringWithFormat:@"%@%d",
+                           @BREAKPAD_LOGFILE_KEY_PREFIX,
+                           logFileCounter];
+    existingLogFilename = BreakpadKeyValue(ref, logFileKey);
+  }
+
+  BreakpadSetKeyValue(ref, logFileKey, logPathname);
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Breakpad_Prefix.pch
@@ -0,0 +1,8 @@
+//
+// Prefix header for all source files of the 'Breakpad' target in the
+// 'Breakpad' project.
+//
+
+#ifdef __OBJC__
+    #import <Cocoa/Cocoa.h>
+#endif
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/Info.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundleIconFile</key>
+	<string></string>
+	<key>CFBundleIdentifier</key>
+	<string>com.googlecode.google-breakpad</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>NSPrincipalClass</key>
+	<string></string>
+</dict>
+</plist>
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/OnDemandServer.h
@@ -0,0 +1,146 @@
+// Copyright (c) 2007, 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.
+
+#import <iostream>
+#import <mach/mach.h>
+#import <servers/bootstrap.h>
+#import <stdio.h>
+#import <stdlib.h>
+#import <sys/stat.h>
+#import <unistd.h>
+
+//==============================================================================
+// class OnDemandServer :
+//    A basic on-demand server launcher supporting a single named service port
+//
+// Example Usage :
+//
+//  kern_return_t result;
+//  OnDemandServer *server = OnDemandServer::Create("/tmp/myserver",
+//                                                  "com.MyCompany.MyServiceName",
+//                                                  true,
+//                                                  &result);
+//
+//  if (server) {
+//    server->LaunchOnDemand();
+//    mach_port_t service_port = GetServicePort();
+//
+//    // Send a mach message to service_port and "myserver" will be launched
+//  }
+//
+//
+//                  ---- Now in the server code ----
+//
+//  // "myserver" should get the service port and read the message which
+//  // launched it:
+//  mach_port_t service_rcv_port_;
+//  kern_return_t kr = bootstrap_check_in(bootstrap_port,
+//                                      "com.MyCompany.MyServiceName",
+//                                      &service_rcv_port_);
+//  // mach_msg() read service_rcv_port_ ....
+//
+//  ....
+//
+//  // Later "myserver" may want to unregister the service if it doesn't
+//  // want its bootstrap service to stick around after it exits.
+//
+//  // DO NOT use mach_port_deallocate() here -- it will fail and the
+//  // following bootstrap_register() will also fail leaving our service
+//  // name hanging around forever (until reboot)
+//  kern_return_t kr = mach_port_destroy(mach_task_self(), service_rcv_port_);
+//
+//  kr = bootstrap_register(bootstrap_port,
+//                          "com.MyCompany.MyServiceName",
+//                          MACH_PORT_NULL);
+
+class OnDemandServer {
+ public:
+  // must call Initialize() to be useful
+  OnDemandServer()
+    : server_port_(MACH_PORT_NULL),
+      service_port_(MACH_PORT_NULL),
+      unregister_on_cleanup_(true) {
+  }
+
+  // Creates the bootstrap server and service
+  kern_return_t Initialize(const char *server_command,
+                           const char *service_name,
+                           bool unregister_on_cleanup);
+
+  // Returns an OnDemandServer object if successful, or NULL if there's
+  // an error.  The error result will be returned in out_result.
+  //
+  //    server_command : the full path name including optional command-line
+  //      arguments to the executable representing the server
+  //
+  //    service_name : represents service name
+  //      something like "com.company.ServiceName"
+  //
+  //    unregister_on_cleanup : if true, unregisters the service name
+  //      when the OnDemandServer is deleted -- unregistering will
+  //      ONLY be possible if LaunchOnDemand() has NOT been called.
+  //      If false, then the service will continue to be registered
+  //      even after the current process quits.
+  //
+  //    out_result : if non-NULL, returns the result
+  //      this value will be KERN_SUCCESS if Create() returns non-NULL
+  //
+  static OnDemandServer *Create(const char *server_command,
+                                const char *service_name,
+                                bool unregister_on_cleanup,
+                                kern_return_t *out_result);
+
+  // Cleans up and if LaunchOnDemand() has not yet been called then
+  // the bootstrap service will be unregistered.
+  ~OnDemandServer();
+
+  // This must be called if we intend to commit to launching the server
+  // by sending a mach message to our service port.  Do not call it otherwise
+  // or it will be difficult (impossible?) to unregister the service name.
+  void LaunchOnDemand();
+
+  // This is the port we need to send a mach message to after calling
+  // LaunchOnDemand().  Sending a message causing an immediate launch
+  // of the server
+  mach_port_t GetServicePort() { return service_port_; };
+
+ private:
+  // Disallow copy constructor
+  OnDemandServer(const OnDemandServer&);
+
+  // Cleans up and if LaunchOnDemand() has not yet been called then
+  // the bootstrap service will be unregistered.
+  void Unregister();
+
+  name_t      service_name_;
+
+  mach_port_t server_port_;
+  mach_port_t service_port_;
+  bool        unregister_on_cleanup_;
+};
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/Framework/OnDemandServer.mm
@@ -0,0 +1,145 @@
+// Copyright (c) 2007, 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.
+
+#import "OnDemandServer.h"
+
+#if DEBUG
+  #define PRINT_MACH_RESULT(result_, message_) \
+    printf(message_"%s (%d)\n", mach_error_string(result_), result_ );
+#else
+  #define PRINT_MACH_RESULT(result_, message_)
+#endif
+
+//==============================================================================
+OnDemandServer *OnDemandServer::Create(const char *server_command,
+                                       const char *service_name,
+                                       bool unregister_on_cleanup,
+                                       kern_return_t *out_result) {
+  OnDemandServer *server = new OnDemandServer();
+
+  if (!server) return NULL;
+
+  kern_return_t result = server->Initialize(server_command,
+                                            service_name,
+                                            unregister_on_cleanup);
+
+  if (out_result) {
+    *out_result = result;
+  }
+
+  if (result == KERN_SUCCESS) {
+    return server;
+  }
+
+  delete server;
+  return NULL;
+};
+
+//==============================================================================
+kern_return_t OnDemandServer::Initialize(const char *server_command,
+                                         const char *service_name,
+                                         bool unregister_on_cleanup) {
+  unregister_on_cleanup_ = unregister_on_cleanup;
+
+  kern_return_t kr =
+    bootstrap_create_server(bootstrap_port,
+                            const_cast<char*>(server_command),
+                            geteuid(),       // server uid
+                            true,
+                            &server_port_);
+
+  if (kr != KERN_SUCCESS) {
+    PRINT_MACH_RESULT(kr, "bootstrap_create_server() : ");
+    return kr;
+  }
+
+  strlcpy(service_name_, service_name, sizeof(service_name_));
+
+  // Create a service called service_name, and return send rights to
+  // that port in service_port_.
+  kr = bootstrap_create_service(server_port_,
+                                const_cast<char*>(service_name),
+                                &service_port_);
+
+  if (kr != KERN_SUCCESS) {
+    PRINT_MACH_RESULT(kr, "bootstrap_create_service() : ");
+
+    // perhaps the service has already been created - try to look it up
+    kr = bootstrap_look_up(bootstrap_port, (char*)service_name, &service_port_);
+
+    if (kr != KERN_SUCCESS) {
+      PRINT_MACH_RESULT(kr, "bootstrap_look_up() : ");
+      Unregister();  // clean up server port
+      return kr;
+    }
+  }
+
+  return KERN_SUCCESS;
+}
+
+//==============================================================================
+OnDemandServer::~OnDemandServer() {
+  if (unregister_on_cleanup_) {
+    Unregister();
+  }
+}
+
+//==============================================================================
+void OnDemandServer::LaunchOnDemand() {
+  // We need to do this, since the launched server is another process
+  // and holding on to this port delays launching until the current process
+  // exits!
+  mach_port_deallocate(mach_task_self(), server_port_);
+  server_port_ = NULL;
+
+  // Now, the service is still registered and all we need to do is send
+  // a mach message to the service port in order to launch the server.
+}
+
+//==============================================================================
+void OnDemandServer::Unregister() {
+  if (service_port_ != MACH_PORT_NULL) {
+    mach_port_deallocate(mach_task_self(), service_port_);
+    service_port_ = MACH_PORT_NULL;
+  }
+
+  if (server_port_ != MACH_PORT_NULL) {
+    // unregister the service
+    kern_return_t kr = bootstrap_register(server_port_,
+                                          service_name_,
+                                          MACH_PORT_NULL);
+
+    if (kr != KERN_SUCCESS) {
+      PRINT_MACH_RESULT(kr, "Breakpad UNREGISTER : bootstrap_register() : ");
+    }
+
+    mach_port_deallocate(mach_task_self(), server_port_);
+    server_port_ = MACH_PORT_NULL;
+  }
+}
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/UnitTests-Info.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.yourcompany.${PRODUCT_NAME:identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundlePackageType</key>
+	<string>BNDL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+</dict>
+</plist>
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.h
@@ -0,0 +1,193 @@
+// Copyright (c) 2007, 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.
+//
+// Interface file between the Breakpad.framework and
+// the Inspector process.
+
+#import "common/mac/SimpleStringDictionary.h"
+
+#import <Foundation/Foundation.h>
+#import "client/mac/handler/minidump_generator.h"
+
+#define VERBOSE 0
+
+extern bool gDebugLog;
+
+#define DEBUGLOG if (gDebugLog) fprintf
+
+// Types of mach messsages (message IDs)
+enum {
+  kMsgType_InspectorInitialInfo = 0,    // data is InspectorInfo
+  kMsgType_InspectorKeyValuePair = 1,   // data is KeyValueMessageData
+  kMsgType_InspectorAcknowledgement = 2 // no data sent
+};
+
+// Initial information sent from the crashed process by
+// Breakpad.framework to the Inspector process
+// The mach message with this struct as data will also include
+// several descriptors for sending mach port rights to the crashed
+// task, etc.
+struct InspectorInfo {
+  int           exception_type;
+  int           exception_code;
+  int           exception_subcode;
+  unsigned int  parameter_count;  // key-value pairs
+};
+
+// Key/value message data to be sent to the Inspector
+struct KeyValueMessageData {
+ public:
+  KeyValueMessageData() {}
+  KeyValueMessageData(const google_breakpad::KeyValueEntry &inEntry) {
+    strlcpy(key, inEntry.GetKey(), sizeof(key) );
+    strlcpy(value, inEntry.GetValue(), sizeof(value) );
+  }
+
+  char key[google_breakpad::KeyValueEntry::MAX_STRING_STORAGE_SIZE];
+  char value[google_breakpad::KeyValueEntry::MAX_STRING_STORAGE_SIZE];
+};
+
+using std::string;
+using google_breakpad::MinidumpGenerator;
+
+namespace google_breakpad {
+
+static BOOL EnsureDirectoryPathExists(NSString *dirPath);
+
+//=============================================================================
+class ConfigFile {
+ public:
+  ConfigFile() {
+    config_file_ = -1;
+    config_file_path_[0] = 0;
+    has_created_file_ = false;
+  };
+
+  ~ConfigFile() {
+  };
+
+  void WriteFile(const SimpleStringDictionary *configurationParameters,
+                 const char *dump_dir,
+                 const char *minidump_id);
+
+  const char *GetFilePath() { return config_file_path_; }
+
+  void Unlink() {
+    if (config_file_ != -1)
+      unlink(config_file_path_);
+
+    config_file_ = -1;
+  }
+
+ private:
+  BOOL WriteData(const void *data, size_t length);
+
+  BOOL AppendConfigData(const char *key,
+                        const void *data,
+                        size_t length);
+
+  BOOL AppendConfigString(const char *key,
+                          const char *value);
+
+  int   config_file_;                    // descriptor for config file
+  char  config_file_path_[PATH_MAX];     // Path to configuration file
+  bool  has_created_file_;
+};
+
+//=============================================================================
+class MinidumpLocation {
+ public:
+  MinidumpLocation(const NSString *minidumpDir) {
+    // Ensure that the path exists.  Fallback to /tmp if unable to locate path.
+    assert(minidumpDir);
+    if (!EnsureDirectoryPathExists(minidumpDir)) {
+      DEBUGLOG(stderr, "Unable to create: %s\n", [minidumpDir UTF8String]);
+      minidumpDir = @"/tmp";
+    }
+
+    strlcpy(minidump_dir_path_, [minidumpDir fileSystemRepresentation],
+            sizeof(minidump_dir_path_));
+
+    // now generate a unique ID
+    string dump_path(minidump_dir_path_);
+    string next_minidump_id;
+
+    string next_minidump_path_ =
+      (MinidumpGenerator::UniqueNameInDirectory(dump_path, &next_minidump_id));
+
+    strlcpy(minidump_id_, next_minidump_id.c_str(), sizeof(minidump_id_));
+  };
+
+  const char *GetPath() { return minidump_dir_path_; }
+  const char *GetID() { return minidump_id_; }
+
+ private:
+  char minidump_dir_path_[PATH_MAX];             // Path to minidump directory
+  char minidump_id_[128];
+};
+
+//=============================================================================
+class Inspector {
+ public:
+  Inspector() {};
+
+  // given a bootstrap service name, receives mach messages
+  // from a crashed process, then inspects it, creates a minidump file
+  // and asks the user if he wants to upload it to a server.
+  void            Inspect(const char *receive_port_name);
+
+ private:
+  kern_return_t   ServiceCheckIn(const char *receive_port_name);
+  kern_return_t   ServiceCheckOut(const char *receive_port_name);
+
+  kern_return_t   ReadMessages();
+
+  bool            InspectTask();
+  kern_return_t   SendAcknowledgement();
+  void            LaunchReporter(const char *inConfigFilePath);
+
+  void            SetCrashTimeParameters();
+
+  mach_port_t     service_rcv_port_;
+
+  int             exception_type_;
+  int             exception_code_;
+  int             exception_subcode_;
+  mach_port_t     remote_task_;
+  mach_port_t     crashing_thread_;
+  mach_port_t     handler_thread_;
+  mach_port_t     ack_port_;
+
+  SimpleStringDictionary config_params_;
+
+  ConfigFile      config_file_;
+};
+
+
+} // namespace google_breakpad
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/Inspector.mm
@@ -0,0 +1,534 @@
+// Copyright (c) 2007, 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.
+//
+// Utility that can inspect another process and write a crash dump
+
+#include <cstdio>
+#include <iostream>
+#include <stdio.h>
+#include <string.h>
+#include <string>
+#include <sys/time.h>
+
+#import "client/mac/crash_generation/Inspector.h"
+
+#import "client/mac/Framework/Breakpad.h"
+#import "client/mac/handler/minidump_generator.h"
+
+#import "common/mac/SimpleStringDictionary.h"
+#import "common/mac/MachIPC.h"
+
+#import <Foundation/Foundation.h>
+
+#if VERBOSE
+  bool gDebugLog = true;
+#else
+  bool gDebugLog = false;
+#endif
+
+namespace google_breakpad {
+
+//=============================================================================
+static BOOL EnsureDirectoryPathExists(NSString *dirPath) {
+  NSFileManager *mgr = [NSFileManager defaultManager];
+
+  // If we got a relative path, prepend the current directory
+  if (![dirPath isAbsolutePath])
+    dirPath = [[mgr currentDirectoryPath] stringByAppendingPathComponent:dirPath];
+
+  NSString *path = dirPath;
+
+  // Ensure that no file exists within the path which would block creation
+  while (1) {
+    BOOL isDir;
+    if ([mgr fileExistsAtPath:path isDirectory:&isDir]) {
+      if (isDir)
+        break;
+
+      return NO;
+    }
+
+    path = [path stringByDeletingLastPathComponent];
+  }
+
+  // Path now contains the first valid directory (or is empty)
+  if (![path length])
+    return NO;
+
+  NSString *common =
+    [dirPath commonPrefixWithString:path options:NSLiteralSearch];
+
+  // If everything is good
+  if ([common isEqualToString:dirPath])
+    return YES;
+
+  // Break up the difference into components
+  NSString *diff = [dirPath substringFromIndex:[common length] + 1];
+  NSArray *components = [diff pathComponents];
+  unsigned count = [components count];
+
+  // Rebuild the path one component at a time
+  NSDictionary *attrs =
+    [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedLong:0750]
+                                forKey:NSFilePosixPermissions];
+  path = common;
+  for (unsigned i = 0; i < count; ++i) {
+    path = [path stringByAppendingPathComponent:[components objectAtIndex:i]];
+
+    if (![mgr createDirectoryAtPath:path attributes:attrs])
+      return NO;
+  }
+
+  return YES;
+}
+
+//=============================================================================
+BOOL ConfigFile::WriteData(const void *data, size_t length) {
+  size_t result = write(config_file_, data, length);
+
+  return result == length;
+}
+
+//=============================================================================
+BOOL ConfigFile::AppendConfigData(const char *key,
+                                  const void *data, size_t length) {
+  assert(config_file_ != -1);
+
+  if (!key) {
+    DEBUGLOG(stderr, "Breakpad: Missing Key\n");
+    return NO;
+  }
+
+  if (!data) {
+    DEBUGLOG(stderr, "Breakpad: Missing data for key: %s\n", key ? key :
+            "<Unknown Key>");
+    return NO;
+  }
+
+  // Write the key, \n, length of data (ascii integer), \n, data
+  char buffer[16];
+  char nl = '\n';
+  BOOL result = WriteData(key, strlen(key));
+
+  snprintf(buffer, sizeof(buffer) - 1, "\n%lu\n", length);
+  result &= WriteData(buffer, strlen(buffer));
+  result &= WriteData(data, length);
+  result &= WriteData(&nl, 1);
+  return result;
+}
+
+//=============================================================================
+BOOL ConfigFile::AppendConfigString(const char *key,
+                                    const char *value) {
+  return AppendConfigData(key, value, strlen(value));
+}
+
+//=============================================================================
+void ConfigFile::WriteFile(const SimpleStringDictionary *configurationParameters,
+                           const char *dump_dir,
+                           const char *minidump_id) {
+
+  assert(config_file_ == -1);
+
+  // Open and write out configuration file preamble
+  strlcpy(config_file_path_, "/tmp/Config-XXXXXX",
+          sizeof(config_file_path_));
+  config_file_ = mkstemp(config_file_path_);
+
+  if (config_file_ == -1) {
+    DEBUGLOG(stderr,
+             "mkstemp(config_file_path_) == -1 (%s)\n",
+             strerror(errno));
+    return;
+  }
+  else {
+    DEBUGLOG(stderr, "Writing config file to (%s)\n", config_file_path_);
+  }
+
+  has_created_file_ = true;
+
+  // Add the minidump dir
+  AppendConfigString(kReporterMinidumpDirectoryKey, dump_dir);
+  AppendConfigString(kReporterMinidumpIDKey, minidump_id);
+
+  // Write out the configuration parameters
+  BOOL result = YES;
+  const SimpleStringDictionary &dictionary = *configurationParameters;
+
+  const KeyValueEntry *entry = NULL;
+  SimpleStringDictionaryIterator iter(dictionary);
+
+  while ((entry = iter.Next())) {
+    DEBUGLOG(stderr,
+             "config: (%s) -> (%s)\n",
+             entry->GetKey(),
+             entry->GetValue());
+    result = AppendConfigString(entry->GetKey(), entry->GetValue());
+
+    if (!result)
+      break;
+  }
+
+  close(config_file_);
+  config_file_ = -1;
+}
+
+//=============================================================================
+void Inspector::Inspect(const char *receive_port_name) {
+  kern_return_t result = ServiceCheckIn(receive_port_name);
+
+  if (result == KERN_SUCCESS) {
+    result = ReadMessages();
+
+    if (result == KERN_SUCCESS) {
+      // Inspect the task and write a minidump file.
+      bool wrote_minidump = InspectTask();
+
+      // Send acknowledgement to the crashed process that the inspection
+      // has finished.  It will then be able to cleanly exit.
+      // The return value is ignored because failure isn't fatal. If the process
+      // didn't get the message there's nothing we can do, and we still want to
+      // send the report.
+      SendAcknowledgement();
+
+      if (wrote_minidump) {
+        // Ask the user if he wants to upload the crash report to a server,
+        // and do so if he agrees.
+        LaunchReporter(config_file_.GetFilePath());
+      } else {
+        fprintf(stderr, "Inspection of crashed process failed\n");
+      }
+
+      // Now that we're done reading messages, cleanup the service, but only
+      // if there was an actual exception
+      // Otherwise, it means the dump was generated on demand and the process
+      // lives on, and we might be needed again in the future.
+      if (exception_code_) {
+        ServiceCheckOut(receive_port_name);
+      }
+    } else {
+        PRINT_MACH_RESULT(result, "Inspector: WaitForMessage()");
+    }
+  }
+}
+
+//=============================================================================
+kern_return_t Inspector::ServiceCheckIn(const char *receive_port_name) {
+  // We need to get the mach port representing this service, so we can
+  // get information from the crashed process.
+  kern_return_t kr = bootstrap_check_in(bootstrap_port,
+                                        (char*)receive_port_name,
+                                        &service_rcv_port_);
+
+  if (kr != KERN_SUCCESS) {
+#if VERBOSE
+    PRINT_MACH_RESULT(kr, "Inspector: bootstrap_check_in()");
+#endif
+  }
+
+  return kr;
+}
+
+//=============================================================================
+kern_return_t Inspector::ServiceCheckOut(const char *receive_port_name) {
+  // We're done receiving mach messages from the crashed process,
+  // so clean up a bit.
+  kern_return_t kr;
+
+  // DO NOT use mach_port_deallocate() here -- it will fail and the
+  // following bootstrap_register() will also fail leaving our service
+  // name hanging around forever (until reboot)
+  kr = mach_port_destroy(mach_task_self(), service_rcv_port_);
+
+  if (kr != KERN_SUCCESS) {
+    PRINT_MACH_RESULT(kr,
+      "Inspector: UNREGISTERING: service_rcv_port mach_port_deallocate()");
+    return kr;
+  }
+
+  // Unregister the service associated with the receive port.
+  kr = bootstrap_register(bootstrap_port,
+                          (char*)receive_port_name,
+                          MACH_PORT_NULL);
+
+  if (kr != KERN_SUCCESS) {
+    PRINT_MACH_RESULT(kr, "Inspector: UNREGISTERING: bootstrap_register()");
+  }
+
+  return kr;
+}
+
+//=============================================================================
+kern_return_t Inspector::ReadMessages() {
+  // Wait for an initial message from the crashed process containing basic
+  // information about the crash.
+  ReceivePort receive_port(service_rcv_port_);
+
+  MachReceiveMessage message;
+  kern_return_t result = receive_port.WaitForMessage(&message, 1000);
+
+  if (result == KERN_SUCCESS) {
+    InspectorInfo &info = (InspectorInfo &)*message.GetData();
+    exception_type_ = info.exception_type;
+    exception_code_ = info.exception_code;
+    exception_subcode_ = info.exception_subcode;
+
+#if VERBOSE
+    printf("message ID = %d\n", message.GetMessageID());
+#endif
+
+    remote_task_ = message.GetTranslatedPort(0);
+    crashing_thread_ = message.GetTranslatedPort(1);
+    handler_thread_ = message.GetTranslatedPort(2);
+    ack_port_ = message.GetTranslatedPort(3);
+
+#if VERBOSE
+    printf("exception_type = %d\n", exception_type_);
+    printf("exception_code = %d\n", exception_code_);
+    printf("exception_subcode = %d\n", exception_subcode_);
+    printf("remote_task = %d\n", remote_task_);
+    printf("crashing_thread = %d\n", crashing_thread_);
+    printf("handler_thread = %d\n", handler_thread_);
+    printf("ack_port_ = %d\n", ack_port_);
+    printf("parameter count = %d\n", info.parameter_count);
+#endif
+
+    // The initial message contains the number of key value pairs that
+    // we are expected to read.
+    // Read each key/value pair, one mach message per key/value pair.
+    for (unsigned int i = 0; i < info.parameter_count; ++i) {
+      MachReceiveMessage message;
+      result = receive_port.WaitForMessage(&message, 1000);
+
+      if(result == KERN_SUCCESS) {
+        KeyValueMessageData &key_value_data =
+          (KeyValueMessageData&)*message.GetData();
+
+        config_params_.SetKeyValue(key_value_data.key, key_value_data.value);
+      } else {
+        PRINT_MACH_RESULT(result, "Inspector: key/value message");
+        break;
+      }
+    }
+  }
+
+  return result;
+}
+
+//=============================================================================
+// Sets keys in the parameters dictionary that are specific to process uptime.
+// The two we set are process up time, and process crash time.
+void Inspector::SetCrashTimeParameters() {
+  // Set process uptime parameter
+  struct timeval tv;
+  gettimeofday(&tv, NULL);
+
+  char processUptimeString[32], processCrashtimeString[32];
+  const char *processStartTimeString =
+    config_params_.GetValueForKey(BREAKPAD_PROCESS_START_TIME);
+
+  // Set up time if we've received the start time.
+  if (processStartTimeString) {
+    time_t processStartTime = strtol(processStartTimeString, NULL, 10);
+    time_t processUptime = tv.tv_sec - processStartTime;
+    sprintf(processUptimeString, "%d", processUptime);
+    config_params_.SetKeyValue(BREAKPAD_PROCESS_UP_TIME, processUptimeString);
+  }
+
+  sprintf(processCrashtimeString, "%d", tv.tv_sec);
+  config_params_.SetKeyValue(BREAKPAD_PROCESS_CRASH_TIME,
+                             processCrashtimeString);
+}
+
+bool Inspector::InspectTask() {
+  // keep the task quiet while we're looking at it
+  task_suspend(remote_task_);
+  DEBUGLOG(stderr, "Suspended Remote task\n");
+
+  NSString *minidumpDir;
+
+  const char *minidumpDirectory =
+    config_params_.GetValueForKey(BREAKPAD_DUMP_DIRECTORY);
+
+  SetCrashTimeParameters();
+  // If the client app has not specified a minidump directory,
+  // use a default of Library/<kDefaultLibrarySubdirectory>/<Product Name>
+  if (0 == strlen(minidumpDirectory)) {
+    NSArray *libraryDirectories =
+      NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
+                                          NSUserDomainMask,
+                                          YES);
+
+    NSString *applicationSupportDirectory =
+        [libraryDirectories objectAtIndex:0];
+    NSString *library_subdirectory = [NSString 
+        stringWithUTF8String:kDefaultLibrarySubdirectory];
+    NSString *breakpad_product = [NSString 
+        stringWithUTF8String:config_params_.GetValueForKey(BREAKPAD_PRODUCT)];
+        
+    NSArray *path_components = [NSArray
+        arrayWithObjects:applicationSupportDirectory,
+                         library_subdirectory,
+                         breakpad_product,
+                         nil];
+
+    minidumpDir = [NSString pathWithComponents:path_components];
+  } else {
+    minidumpDir = [[NSString stringWithUTF8String:minidumpDirectory]
+                    stringByExpandingTildeInPath];
+  }
+  DEBUGLOG(stderr, 
+           "Writing minidump to directory (%s)\n",
+           [minidumpDir UTF8String]);
+
+  MinidumpLocation minidumpLocation(minidumpDir);
+
+  // Obscure bug alert:
+  // Don't use [NSString stringWithFormat] to build up the path here since it
+  // assumes system encoding and in RTL locales will prepend an LTR override
+  // character for paths beginning with '/' which fileSystemRepresentation does
+  // not remove. Filed as rdar://6889706 .
+  NSString *path_ns = [NSString
+      stringWithUTF8String:minidumpLocation.GetPath()];
+  NSString *pathid_ns = [NSString
+      stringWithUTF8String:minidumpLocation.GetID()];
+  NSString *minidumpPath = [path_ns stringByAppendingPathComponent:pathid_ns];
+  minidumpPath = [minidumpPath 
+      stringByAppendingPathExtension:@"dmp"];
+  
+  DEBUGLOG(stderr, 
+           "minidump path (%s)\n",
+           [minidumpPath UTF8String]);
+
+
+  config_file_.WriteFile( &config_params_,
+                          minidumpLocation.GetPath(),
+                          minidumpLocation.GetID());
+
+
+  MinidumpGenerator generator(remote_task_, handler_thread_);
+
+  if (exception_type_ && exception_code_) {
+    generator.SetExceptionInformation(exception_type_,
+                                      exception_code_,
+                                      exception_subcode_,
+                                      crashing_thread_);
+  }
+
+
+  bool result = generator.Write([minidumpPath fileSystemRepresentation]);
+
+  if (result) {
+    DEBUGLOG(stderr, "Wrote minidump - OK\n");
+  } else {
+    DEBUGLOG(stderr, "Error writing minidump - errno=%s\n",  strerror(errno));
+  }
+
+  // let the task continue
+  task_resume(remote_task_);
+  DEBUGLOG(stderr, "Resumed remote task\n");
+
+  return result;
+}
+
+//=============================================================================
+// The crashed task needs to be told that the inspection has finished.
+// It will wait on a mach port (with timeout) until we send acknowledgement.
+kern_return_t Inspector::SendAcknowledgement() {
+  if (ack_port_ != MACH_PORT_DEAD) {
+    MachPortSender sender(ack_port_);
+    MachSendMessage ack_message(kMsgType_InspectorAcknowledgement);
+
+    DEBUGLOG(stderr, "Inspector: trying to send acknowledgement to port %d\n",
+      ack_port_);
+
+    kern_return_t result = sender.SendMessage(ack_message, 2000);
+
+#if VERBOSE
+    PRINT_MACH_RESULT(result, "Inspector: sent acknowledgement");
+#endif
+
+    return result;
+  }
+
+  DEBUGLOG(stderr, "Inspector: port translation failure!\n");
+  return KERN_INVALID_NAME;
+}
+
+//=============================================================================
+void Inspector::LaunchReporter(const char *inConfigFilePath) {
+  // Extract the path to the reporter executable.
+  const char *reporterExecutablePath =
+          config_params_.GetValueForKey(BREAKPAD_REPORTER_EXE_LOCATION);
+  DEBUGLOG(stderr, "reporter path = %s\n", reporterExecutablePath);
+
+  // Setup and launch the crash dump sender.
+  const char *argv[3];
+  argv[0] = reporterExecutablePath;
+  argv[1] = inConfigFilePath;
+  argv[2] = NULL;
+
+  // Launch the reporter
+  pid_t pid = fork();
+
+  // If we're in the child, load in our new executable and run.
+  // The parent will not wait for the child to complete.
+  if (pid == 0) {
+    execv(argv[0], (char * const *)argv);
+    config_file_.Unlink();  // launch failed - get rid of config file
+    DEBUGLOG(stderr, "Inspector: unable to launch reporter app\n");
+    _exit(1);
+  }
+
+  // Wait until the Reporter child process exits.
+  //
+
+  // We'll use a timeout of one minute.
+  int timeoutCount = 60;   // 60 seconds
+
+  while (timeoutCount-- > 0) {
+    int status;
+    pid_t result = waitpid(pid, &status, WNOHANG);
+
+    if (result == 0) {
+      // The child has not yet finished.
+      sleep(1);
+    } else if (result == -1) {
+      DEBUGLOG(stderr, "Inspector: waitpid error (%d) waiting for reporter app\n",
+        errno);
+      break;
+    } else {
+      // child has finished
+      break;
+    }
+  }
+}
+
+} // namespace google_breakpad
+
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/InspectorMain.mm
@@ -0,0 +1,65 @@
+// Copyright (c) 2007, 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.
+//
+// Main driver for Inspector
+
+#import "client/mac/crash_generation/Inspector.h"
+#import <Cocoa/Cocoa.h>
+
+namespace google_breakpad {
+
+//=============================================================================
+extern "C" {
+
+int main(int argc, char *const argv[]) {
+#if DEBUG
+  // Since we're launched on-demand, this is necessary to see debugging
+  // output in the console window.
+  freopen("/dev/console", "w", stdout);
+  freopen("/dev/console", "w", stderr);
+#endif
+
+  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+  if (argc != 2) {
+    exit(0);
+  }
+  // Our first command-line argument contains the name of the service
+  // that we're providing.
+  google_breakpad::Inspector inspector;
+  inspector.Inspect(argv[1]);
+
+  [pool release];
+
+  return 0;
+}
+
+} // extern "C"
+
+} // namespace google_breakpad
new file mode 100644
index 0000000000000000000000000000000000000000..f45a58d71d01b554fbf4db03f4805f2123797e18
GIT binary patch
literal 35048
zc%1Eh4SZD9weLPNCvXB2W&#5pOTa;5g&JXE1I{E-lSo1k&{z|piY6f$J}!a8WCnws
zBoij1IX$Ee0<TzuhDs?<(pUNfixq5wlt4@SsHK)yxi;R?+etxhtf@vt=B~B(J~L+~
zUl8cM_SX6RCTp+#vG&?)|JU04oU_m5=a+u+Dj`G%-_h{Z!`DVgYCF#xPv|GLhmgg6
zm^UrGxUyu`9b={^&%V`W4S$l8=QvW5Z%s~4v07O^`<raD%}s&4xuM!cV+spr-T$@4
z^RjcS_uu=~{Oozy!$H;&*$2JeDG-vEM94Cr&B@R+(4JX@tO1&lLP#UfMmr%JfELXq
zWE^jIEAaL&6OzFB4}qF)AY>}GyNQrkl$%J%OkO^h(}kQCak`#UAE!@q`a@2SbNUBP
zw}afm!orm$<?9Pe%F3&pA#O#PyJ}U4TfJ_zE5wvnIM;=kN@sCtVM)1roy%DnnOWst
zySBJ;Lu96VUDfK9>zt*b+$yJYO^A7{a<$9ZPa4aO7RPd3#VZTToa<J)Rz($PJ6b*0
zK6lnir>n4{q|mj>y>88{<<+6;Yn_!VorT4vrBOLmtJke8b4F#BI?G(eVH=fKhIMyV
zJ4?zUxr#{E8NsfP<Ra^?cM<|PO}@1sPHl5;n>#R0Z*$ysYY3+(X;wMK<*z<|=aT9m
z0;hKL5G&(P31q-e>jXmbq29MAFbBi$C|*`r=yF!O!gUJ^^Rt)cN4D>XXYKKGVIm>B
zF(DFfxJ^lws}ig{h>WAq{xQ(aVrCAlezfVr!sS&}5&XQ&{LC=F9dwrlXeUIp`4{)v
z3P93wm?6q9Seysmt(K>Oj69&<nix4gNhA$OV`!U-^3@31Dph8r42A3QhbS3nPg6(_
zv}s9saarLy*8uj|G6Bs;$e*KRjMdl_$7q3X!em0e1T<+1*d7KumasA4N1e+!_=0KG
zKsn&&T*AQR1@fPkJaB*gg%(H${v#L+uIS7@rzi0D-wEl=K81BUvrjW}hLN*K0$+wv
z$k|<ruND%W86qvqFfbx9VgiA|&I~i<<|Rrm36zRD7@m?X$zo!l9kh~<`P+?+PeG-o
znp3hTQNlX0z{)9!f$u;Cf4gf;-~~wd?4s+fCf|#IC>iQtxf`;TS5OIgG}K$x<gb8E
z)zUSzb@j~7`4)jGK^0X-W8dqc@E~T_AI0%M^hn{uud$L9P|}IECCTlYLX?;@9y8B(
zGt2odBm@p#g8n*{7w4lUqo8L4juquLiHA`JD$|scfPy~)&3ysEHM%p$j5UN>ab~UL
zJDNb{gG>}@3OGTe@?tMkR>t{HxDu5d$=~jt1=2yr3CQlG4&0eT?agX-=2$3`WA+_2
zJ@g0+<pGQT^$ouWd=>0*{-~<2As}&mzYUG*Yo#E>k;f)N4^3vf{D9On?}-H8Q3KWI
zAmTJI9@<j{T)$VINC1?}ISB(+hc0{<Bx=z>6E-T4WYdY)XwQmUQfdqb5!Zo7ae{2}
zCAmV>G^0fisLhlDgPbSw#$Xb~ZBS9ck@GXGN)6Hgsis;{$r0(SV*Y%ZTtkzRvcv$K
zoS!HLDrk;LSz=am9-%oFWl4ezatjP#JW#58K4gcd__r6C$x2OVU`ctvF!PAx<EmUC
zNA$n$UfOg|LT3)ey!?P63;~P?s5FDZX4L2nBgE5yPM>3ta}18o$7Y0NHswE&&?JtQ
zb0qnciU*LZi1lFZ^Q|*Gg<2Dz@8s9dzZrr`>P3Xg2_qE(a}*O;{wX*ecF%0p(WOHG
zGE+Teq!@*i6E*46$vGm23rGZkDS_@!V5}YWA7|QZDK4jcsv}@&%<e^MYRvu{QmHZf
zgT{gnk7f6y9Ls*sb}aj^@O?kC32MztG&N=SpaGOj0}!dn_oF!G0gBHBUB>J~D?$HV
z<Is<MM^hdGoS}tSQnh(fpcwQ3^%WCX7(672T7&`wMp+CXQ64uaTRsIb#+ODnW}lHe
zI^MRticTvZPd?Srcm0h&p3)%-uO}Z7PWavxe3ydmfA@6?-kLMS{Y#lPRFse4FF4qA
z#fK?GUY00tq3LX?lZHsO>n7j50#ki56rca47VWQpO107{B#c-F=!2|ex?)o@#N^lI
zBXpM;drWrs$OXMhc8^lf%OLk!XLb(@u)S>NG)1Zl1)fCL83kYu)L<${47icb7XyAu
zC3%S<@HkDH<R#`nIZayRB?%!h5bfJQ>45Mtcumcwi^=V;(pdZ6`+J*e_90PTd>ZHM
zfEjK5fw7@hhulewNr&;TuQNeDOwe!q$bOJv5sVG3ROkK5Hq6pzfj8|}vJxP$H#~uZ
z@}GfhIxhDirKVjz(2h~)@KF@ngk>FX>lG$+zNq9&q9RIqKUSKs4J*ksEwgm?A-SL(
z>!nDFM-m-1$Lr!eF%I|9s!_80s9ba0N4pagN|bFVHceOgzmz6Ahy|id6aEuM|Ccd#
z99V^BI&cW`nhwvy^x-y0tEN#7V+pkk&8I199pAA8`M@b^7-W^lEFT_2Ko}c3u${jQ
zGWGKlWSUUsQ*(H55%lBINX_AQVbQi~?A5=Ij&VOV3f4fQY@_nC!baIgjk5nzWCNKB
zlBpnt>68;TkhgAvM{*qSKw(v^OsQPs^-(nh<*<oPCN^@|A8Syy(ZN(&l20TD8RI)*
zrAYrxm;ac{pg=@9d>Wj|cf{c95PToSxZiF{Ka3GaKHP;}Q|l->7<U8PKSURB=O9ZX
zf?!Z1!lpP)MEKPhFh>(@h%-dd2Q#!D<kcTV$g&8~aFKdc#qGtVB`aNba?8)>vZo9z
zyAosvcJ#qQxPy1`sHJ-f(7+rF?MD<pW(N8`rm}w<xE`Y_9eG-oWNbL0$2sfa5bpH%
zs$kyI483$_S?ES5i*16kBz3<-v|A1x>M<V2NChDjQb8>1<%2AX;98{k7on}&1(_uR
z;8*i-ujJ1~O(=?t4R=6JlWzeVsDV#b79W2BWOsi;5s7X5LHB9pKq7Ty_s^B=t<bIi
zs{$H&2D5L&JmmaXMb2(k{4;1`tKv_hiS3HtMiVWHKZPb*6~CP(b}9aJn%JZGGiaiX
z&wDK*=YxL8>14<`aN2iFiyXzb1H+Bq8l>x%hzn1rn26IG==w0^Tk|CqOt66CFy2SY
z9H0*AN)(|5^s+PX3#>pV2<sd|TT#gf3RdU&!1rk#br!C}O-}s>plTmD?&F`TGY>X3
zZdwL~O<SyN4U=%k5QQuY%yM@&HY(WUf8FT+=n~EpTG8l#2LsCDX1QrACg?QC2O1#V
z=|2vCtsvr}{43=!X1$Eu`@8A#;2L9mDJN)r>E7VX<EY{Hu(@x)I^zt$>iT+MV8nYz
z<5IE-f!R&BlN3ENMUvvrqd_Mh!xN1g6L<j1qcJ3(*74B2nAfpw84l)~c-bfTiy$4p
zt&~=np@MaW3f4d9R4k=s?>G7%K(kOFDccZ5`s_m!3fg4`Et;cbA5{vDJGLRB>c$(J
zevC^E0~*Z}D8%BoWzf15y=cqs+dsunjq`f(Wg4RCY`(v@`v>5-9)rWb6m|A3qJvsW
z#o;Kr)9AcX_%!KM|5ff5l}br?Pi{ik1g1lnpqC^K6A&3@VCyd-Zj4)x7+?C>*B5K_
zdoT#W3||Cj)54ub|0;|beu_u1{{m>n#p_VkyXa<FX6!itNq^AQs8C?0QTRigL)8xV
z(q$0`)BU|qLK*3afw2J4?quBB`2(Riv`dXc+jh|@Mqudk%<{IgmzXc%9)zJ@2yE@e
zWd%zV0X1BV{DHG<rNE5zUX*@1B;62HQ+sIMPT~AiA1xQ^d6tg&4r4|PfRym7DdS5`
znDv`377hG47S{>ouz^B`_U1V#$%ilCxcY>43f*leO*SV6dfrDJX<b*-X)w|>Sb;_<
z4~V{FlDcDWdmpzTf`f{H@Igh(F1jGelo?b>|3kDiz%~cCQVG<CN>kucDB$01GH%?9
z6Yv~N05cv5SfSJIH|Umhzf2L{eFI{UPGR?0TsbLhjlKnt-ED_I)EL}Z?=#>fZi|4C
zdpkO8exlT!{}Bk-BEamkuKc39DQH5~j6ZC`47o`PhE~+|W`rqb1U!F3m<HT`<M0%W
z{)Hgl*QYc3vv7m=(BBY0ST}97(LWorav>{izG(DM11=eQJQtemRzAf{VP8k0+|+W3
z4?_M(Gnwvtz|Qr&KA1Kb<Nm!C=rPpADA0qrS)`)^Yl}fOlso2|j8Ec{*}ajv%sFa%
zI?8z)CE0(G&ItCd#L7*5=#$^-rGsrmawP2lcJ3}xXicHram1a^rMUd3m2H@dNP)}s
z;I=+046~ZVUnvK$7GHv7%J}@)k)iu0+z9$MsB?1=mI&Wr)EQRXZ}wps-rVSx`*5Pv
zod6qm_a`5QFBX#md)@_wH=}d;GBBKFpMx#MET!fg?3<H6U<Q2;3|er`pJj1R!Nu@W
zjQh{Z;&Zs~S$xia!u`5>(V>j)=+Y}oL=5%nP6GV|@1*!T4d;&lUwQL#Qc+pHVs+W-
zbt_YEtV(^rSy{EZe4Tae>Z-NHu98*OTddCN3TKJSS!%s;R!Wt1Wx0zc#zeNet9acy
zD8bvpuuX|9y9Wx2t#~)mT3YNXwnB+>3|Zk`SK@-M2)n7f+F2FdZZY0&4QsNZywZAO
zbienmcUG<_D}T(2_hun4syMr{5?Y1IA`2I+TVGyM?1~z0Rry+HSkEf!+Tsn?RmJO_
z*5yv;I%}nKZTWg<>5Wxn5IykD^I&>}%6hNyhwzV*koX!o7*FpJ#uUbrU3l*kSD2-c
z_qBL>&od?;C}hWFLix9Nc`$~MB;fBHALdQKS8MnmnppcioGvg$w*L<!%RkHM5l&y>
z)Mq5Sh^9VV((n4VM*d7*Z~r((n>mf+^kN*N7dU-^Q-2)U)uNGG6c?%2gS_5!PR*PO
zQT2X5mf7u>W63T>lm8m<`!#yD0so?g&*JUoM76sK`0F)%>{!<C2V)q0ozow2+REt@
zV<N}%>sYcYU(?@DfX~(N6|t=U%-G2BSYnwxBd0n}-;o#%NUYtPQl#F$20lR}|3zMZ
z6R%$vRo@Lf(bO;H^}jGGj6cl(B!=OxD~6T-meZeedW6%TaJrAvVov9CIwywdaZ3!@
z^==H4{~TmYiV63J{Fo@7MDZVsVLKz=5yk&VWc@uOGQA%cS-)$=@c6#~8706Uj}P+`
zc>Ry{tbPxtr}a$Uaea86jzQiLJ*)52<lhW=6};W-sQjCF{p+|q9j84yM&IJ}H=O>A
z(^oic=G4vU*Emh&6!xW|{`w%JS77~}6Igktru-Sm*e@_WcSPlXo42dr<%=}sxsW%H
zm*2|Ezrg9IgwZZekCSjaH1iRj{}SXMjSuJV<@w*`w4T$uqS~kOe0=tS{XYr)j)QM1
ze4pm&zrc4dPfr2+9^&b-(D3J&hCIZ|8$6A;dYjjIm*JBbA^lB(Jv+hl-SPBs8%=M9
z3b*hy;W}aZerS6yPk$eMiKo*b{Wwp*4E;UH)1@$HJ9v60q+jIe21uXe>BW%#Bc!h%
z<)zP$J|Q@dtYeYQDX~IKHwocqVv~e$ovE7ijhgf=nskaLovuk|YtoA}>H9V52Q}$p
zO?tH^{ir6rL6ff2q$k7oi}1xw_Y@p2e7`{0^DTU)j<&x6zSH149mhi0bF%Ajj5uca
zs*lzFd7p<nai<b$x4xLBt8z$TvCCPF1Lh`K5u)o{Wk5=q1y)p4u3qO_0SO!$5H^+-
zRjy)ayTaux!^%`0QV88wtcFT!oolO{P|QR?a=9BMXcS*wR$j6uBImL4%F-&LF`_nO
zJ=?@`uB5W$E4T7=+3G46Q6I6xXz(0}{R*D1&q<zZjd;EuK03gkw6o7Z&)a7RB=o$!
zoeccJN4*#qk*d#V)o0e1^Su3D-X1^ORez3n-ahnmZfuWB>K1`Se6-KG)#uBt0!w3T
zOd^rbm(`D;`409uC=6U4dVH4+7r^e(p(h>u5r?GMlxi`6UMw7o{~bQrv&q$>uU(R}
zC0};0pk((tvJLLv@`iMy{3WJ;j2fTuGl_&_h^oin2SXx!`-<^1*KzBB_+bZ4!VnrM
ze!2;pf21S9&p8stk4?w=y%PLjd&I~L?LiANFn)4%ERAcJjf@;WMY<vJV>`I_g%@7<
z&}sPfU*v*wh$9=rQ5RM^pIs+8-Y`D#ErOT|C<Pak#gZ(@_lY;Vk58^SDL*R78w~7$
z8k7i`ruh5JzU(f+*I|(tOG<W^Bm10dZvZb|<?Mi5a3Qb?lgH%W1qx{%eO3ozv!$=(
ziP*(r=_^9)5tjpUC|FNJj&h%*EHKCg$K}N*9skeRv@#eB&U7EYuI8kYeOxIxsVqKC
zmFlj<8zPTN@f!@?SVz73t7mqNspfPo>5ud4$Z$B1I_?w+butD%SBm%BY_<XMPR~$j
zBIaiW@AM|g-wE$|9PedUiT72*;2q*+M?fcM_s4n;!}=DY#d@YB-)B(4Zjv{cHDI^I
z-<QC^ZViL|g#ex~3_MCgh+jcC;vXhj!~@Xp1J?<BB~uFF-K65(q%1Ip@m?|*-peW8
zP4OGd-K845`<Pv09_O^2(|;lTac?2R;Xd+2Uli;^xbJ^nba33K+!no0z;l9EAK!70
zi+Dvk61>NgFy4#!`h6vM$M$%Cui!HF2YB6w<H9@FGsw_*k8+=g&sJgJa(0L!fTx*G
zbYsVw`(bfRW(>Da1Rml^7!TKzNNj{{Il$>ozWt|pWEfoBHpu#)9KHV2Q=uVXj1(7m
z&5QGjbR@XgPQthdi~twd9&vH@GH}tyae?<6t_Bwgx<PS)anKr2fN9Exh|>#OL77Ii
zrYsTJ@&4Ccr9Z{SzD^;Wt%H5$yZqptuYIbot7qoXCRZZvK;==sps@anFQZZrAe-_;
zxu8cOviMD3hv4|geIB19^V4NG$R=kWMqb*-L425h{{Lui*Q)DvEa{KW@g$5%D;XM}
zkq3@BK-tOSYl+Va6`=oY_#E!K=ARLt6G#}7)5vAuvtmGiR$#p=#%E~v8G%pd)#CF<
zgy9S6Nbvc662@oW2=IyR5ufKT1D_JVE=##ed?pQt&*#Wc_^i6N_*4pdsFWT&=94IC
z;EH(b57*}+o_;lxE61yj^xqFgy`!PUE1kD1#cPT^WdOXczv}fK*Ufo+Uo{fEP9<Ty
zmW=?f*dFn^{4((B;qi3ORqg}T`%TdwcEGhpQrw0BzDp&$4RVcy2eBhJg<oXyV+`c#
z*WC4kthrZ=kAC-qSZuu7c=nHqkE@Aie@}c|>6*8Gh&68{`?5K<f!4kCSH14xb0?f<
zq$9zJjf8RH9RW_TJ>tZ588~U?IJunr%|qd2|4=xg_nReL%xVmZ+Z4bDN3z=_1BYv%
z#9#5i`q~93iS-#XkzD=yvwn#6XQc11&arFoGr;?+@Y%<R4wh2kCPHpI2o%aPP|G=l
zq@4kJKg>3S6ajF2H`Eu337L<#JIC>M;6f>Q3o?Q6_=@SwrH~KT=r+uM4=m*+^c7ZG
zK9|#loECAqo>L#EPjmW1PLK2cy#Mo`)BOX!pK5d1=gb)xhYtH(dqf=L0qoK{AODJk
zUo+$(OlN1SG4jHxfxUTB3e<ymG6`KU;uY1)iC@rV5^ImQel3X2x4i5wFmF?_x}<8u
z+U4bCRWA4P<o+_ogM;WmN%K}h!`1Z|<L7}4^_5fWaPPQ6+akm=jA1_+<Tcmf-f`vQ
zAM!QV!osrRLN=Dd3RmR-GA4GR?qG)$CSw}<8s07&%_+25S2nbaNr_AkOLdeUI43t~
z^n;Lo1BP{oHHjWxb)Z*NaXH2iY9@nzre7fJv46zJBk6Ykv_9D5uo9B>9Eovc5MqaK
zT|l=R))EQ8rT5fKuHHH=XuA`xb@mBl(Y{P_&*o_)V{;~%2h<KUJ(o<lu0DN|1>4$5
zFxXs7a_wH7uI~Bs)%I55rRD|13||qx2KY+NvBZ>1#>ZfNkiQ|*OZFFmKD54<#M*Zf
zdoGFp*=&ezna>h4)ZO3(w9f|6WIh`_oBkZH+hERvdNsbYlPp-bxfY`Fvm^n_Kqo3c
zmyo3>J0!oJV4H5NpV30B-de0P{v#MG9eeXs+9na}+YxljU|e3BZ}Bdtb(^4`V4p@#
zdG4A}4Qsme3fRyi>384bC04bsBGtY-gT48src|^q+S1-i1l7J^*L~@Q5X6s|587)<
zg7+<yAO8;MCcwB2*gy1Z_D&_D_Ys(nX(Z1xMQ8RrY|4Xtu^IAc|Io)!{bS$SKJSE8
z$NPvm-K(QEMH^?p*d%W61jx5wKG?^!Fc`dDmFIgE+SE`TPoTY;r@(wpVX~<GK)+@k
zwUc=uy;Qt;Jd>;Y>GV^O|F0AFz*wc5z4~Cr4w7gu63N2grNfxV^)z{>ni62_2`JC|
z@Ps|sC+hCFfh2hJ|7OlFF{OeIlBeWubM)M(_Mr1n1h(aU!x&eioGs7OJ(`5F2eN5M
z{~gn-aSR|sr;%}EoqVaH?i-^jR9Tzvf_WPbAKV@&3+0C8UHUDTBX03Ay`tr4^+CT$
z+X0ve>+?OFE1+>eMW8WW57JAY0+qZi!~l88kTyZujQUesdSL!q00Wx-piBz&R~)>6
z_KTXoR*Vn6v+)7MDa@Cl<_3~iCtETALz@u4vt>dYfN_sbXGZLzU*~6;Qa!q*v())a
zgFl<^AclhJrd0F=7?ZH27U%Lov%S>>xEmLbvhz!NUiIj8=DHmu1KJt@D>I;9lZOQI
zz>Wmk7(8S=_5*Q-%uwy^T?YCAHXO@ILe1?ub3QSpZoUEJ7lHg~q==3g$2S08qVdZ7
z*3<{_L-iYJVen!+#*-zxOsU}KsBZ_0FLD2$`fkaj3W!nSU_OieZFxI*(X)JVwdWht
zX`hHwwcm7-VnbUO5nE<m1MRaky$<%}84Y)Mze@~HXOgshCFc%riOIWNAP$U^;Fl>7
z-)&D96MI3{kvkwi-QF;+{po4s4*1@_J(HwDolJWP*=O&7vbTvH>f8ys--xzU?czhd
z2J#0SM{R%mc)=#KnU1Z1pPAf7o6>`X)IUND^(&2Cjbmucl{^ddyFJoqS3zw1IIVxw
zSRdSwo*{M=Wli}ptPv8%=Yk?By<n!4?pdg-&LY9C*^Pj!yNQtTY;Zrukj)_1JH>dG
z#xKAa+Q(iZbmbDmM9fF*ZTVN@SsK5lvY0j0d_=~HPX%n31Zz>|M!>nAwfE@tbR8I^
zy(UIn>~KJV19bDOf^}~r_}MBV)&od!&e7hUg%hf47C{>1)|5O{UDHr9pzH|$2Yg2P
z{(@%a`<czm_Z`jD_k)iDm71CFJ0WdqX1@P58oR;wo1=U`Vmuk-OW5b(ox%OMCIZG2
zao(|CI`^4G+&b-2tG$?1<dU)3Ko_a?fS*HsW_jGX+0P&rq@KE!Z&qu^;~h;bj?pBc
zLI>;LMzYI0pX!oFeHke7vo}&4HP%lfOY1YqGJAWteLdJRzujW5S)((1;fl$-hKMzH
zTg){x<IS*FSqgiVW!_vOda`u5HWb0SA$qf5U*I*7Ot1ss#RB=IbzT~`3^1M|*vpi9
zVYg;K27dSi$;fO8wuJQkGsLwg5of_%@Etpj@Af-kes_|s_5T)kwz)$vq)sCT>rcdW
zL0VF6QS<y7*q@BKv39yr9k$PyiS-Y`_$QNuM>FX7TfGm_@o(qj-;O*VzZb^e3gh2p
z?}{3K*P!EXh4JswjDOD{<8RZ9e-DhmjgJ4%Fn+H+BXdWv1@#2G#~_yJp0A4to)h}r
z4uRMmX&StAEwy<@<vCz17H=%n%OZkfCddVO4vC14HADa(KI{ED#B^8-QnN6I{%tMY
zn>|Ysy{`}hjbY^wn;H!Hxg>UTE*aI9=B0bI3h<|5=8L-R>11U|5h*RMQ}-~DZ2^z5
z1-Wn?18r{cluoX$D|xeeVesS4EH3HNA%CKGGT@l@t;>b9iS0RrQt*#vUmE(!C-2oQ
z+x!Ol8>Ih~4wnwF29es|{~T?%6lCdu=0VvB&liu+VzNjE@GpBO5s~w@G_YAJ%p3H9
zduG9tb;{<+A!w(AFs^y3{nEU_;Ov%Q5XXXhAH<jah+!+#G4OP&W{hpQM0zxr2o(uS
zh~a@gQ)-R<|C&8nzc>44Li|2L5<!n-uKUa-S&a$lS;Ee`9VWzY%Mz=U&h!g5*TGzR
z1wpDy{6%%$$@i;MKZLnINM_;w`5v!0ZHd)luRDwwf;tC<S+l=G#Iy%#47RboWn7nL
zZ+Q~ZW*(2*(5`7Mh@~#T(k0NDNVLs8fW>h{s)hXl%!^E~3pSEANY|9NK2NM*GmlO%
zgN<V|p1l;91@_5&3iimw<SfWAr<0v@E}-lr`W3YMQ<NU_G<qavJ{4?68v@?Xdb8pJ
z=mVg?r<VA@H%T7g-%M@1(QpcQ6V3<cdvHF`=DB3FurS!W16<02>jKoXXyX~?;eA8Y
z75&7!j$I$o>xp|H4#SvnpU^yxSOC}CGM*x498WkVj1mwdEFKCrZzgF+AA%SlfN!>E
z;C>k50>p+xXah(ef;!vTSUx@KeH(mSASdgK$<g|HavaK9y~Si#J@s)rsaXWE;bs~e
zjzVlWu89Gs>bw~&2E0v9ZU!FW%{gd)8rq)$9~NLgCqTP%HMt<;CMx4J$T-7w$^)Ic
zxK3TrE|2SE1D$X`(E~aKK&J~(wiIM8tEX`{LZ<-8yP(mjSEEx8=+p~s`=ISbjShX#
z<|6cqaq|$H>x+j_2cF&sZK^SbqMzcJa9>KX!SuWUGH?&>0zLpX_Cj7S@E+6|_(tF_
z0^b09AMnkP-h|hfz*lf=ErRs9I@U)9%%=;kIlEv!t+_;>%=bYv)cBPC2i1S$4EAGj
zO94wipx4kK&yMeC;F@5CcnQ~n4%owaV)eW24-sn($yH;k88HsHFf@;adJyw*esFJu
zcug-_S(5Heu_4BbN=l218f=-M_t}NP_x%ueA>RJ=op7up=Td>D!k#A;aOrym@aQGF
z^df=KnAMJZiuV`aX%%*Q+<{qj2mWGCn?hy$Z+4CG*PRjTIbgSTc__A(`nJPbGyNCU
z5B$!Qx}-sZnESpky9IqvFx35+%!2-t(lqNiUcY!@Uz7G05z-FRe(LL5deBb;*e3N2
z$hSaT{jo3$>th_c(?N7R7B%3wQnwPJ_P|r-x~+8Wwxt*CB(;ecAO8BY+0As!hFZN3
z_}+=>Mb8tMtFt(s42&&BINtYuxiHxCGM_gaUK6u85VtH8hd0J~!ZAVjj;g=!>##p~
z264~_*X{z{M+5G~mtp^ed#jp?dTYP^G+ci~Ut28<ejwAm(?+ow?FD)i!L^c*c8DZI
z*eiip>X!G|JPWA36TOG24MmJ6U_V3t_bhf;AAX?LpZzSeE!gU~uLX2%q4B?MplcyA
zzz6k3U29h9cHh1RdHrs`qTgO4V;j*rNV#X2@}gnN=M7UnW0-Qo(B-<GVaiVrQ+{xm
z@|I!By~C834pW{xOnK5U<))#_h2CMx&#2}9jqgr}U!I1~HGY43$QP)u<@?hlTHpTf
zP!IVM^|k%P_Y$IeZ7+%6hxgKVvb>fy65qynu^D;z?t!K1HK6&tK7`4MM_GL-7wXSr
ze4Gb)C{G7|m!{m#__$@rgPa*$ULvO!P7REjE^@k$Q!l4^oaS<x!l}rpk+$1Qj2A$E
zTeyE?7vtjstbgNHHVz|<Z(^%j5BN>M=WE(Eu=2R2ocFTwI0KhcfpQ3mYvptkr}LOT
zaT%<iIM8#VJuElQ#&|;y>o*SUFwvqZw=&*vikC}~<H3`@;qmMx1{~iEwH%hPv#fu^
zE>5>2Z6k(8RxhrLw_B=h2j%(Naze)TvG!woI6cM2Gxj8G1AD{m#vWz7p^eEM+YWp{
zQ+|l?hE`s_ANaGH@_mdqY~}r~;{7e<G@Vl$ryM8v=mhDQUQRDC{l<V@%m>5r$8<5?
zP{HJnY3KF#@%o^*xkXcd7vs?$wEk9BKbFsLtcSIWU8S`j@XPR7P*_fEggt@JW94yY
zS$)YB_B$+>Di|Mkj`b^*vHqlGoJvfO(cC{q^LZH^;Ixa=Gn`g%YGZyesxRE%s660%
zv^;#d{YD|KY-)ZR8Fh~FLKkm$CQ8ofFg|JhQ>@&0mX~{?%3X{%cJY4se2+?C{l|cw
z=2BKaW>*`1EgJc8?Z`v<nXsK{`BBDWoQQ$Bi&@3&6;s4%9vgp5MtHtrY|t*9@uoiH
z_Y$!uTrNUgk>f+m)8@AkaS`L=1H2xOXClX?$Z@IXxYS?Z^c<($KlLq~F5*;Tdg|K4
z{pny#x?McKS)1QRbekAIVGr_9o*OO~F0g0GsK3q@m7mDu2^Y2bZA9o}yg8lK6L_2y
z8a4GQpk4#7caWWn5K?%(#Be?QF;78a_9uOuo@Mp$EQ7WlIm+`fZWO8cZS*I`kvHe@
zdV9E>7EZYzl0{MSaxuS+9#O&kN%+jw1a>e3Z)Nq&;BPtu<ApQGgZ?mIlM;COj5cZm
z<T2ko1IiKSJWiV>C_l+~oe6m;hqyM$%*rPOpuCOox+LWHQhQD^@$%zPzKQWTZxfC~
zIr@cxm+yh{GREslk%w}OClW7jgz`m<M~qBp+)L+SlE}+fL3tA6buGw4IgX$3au`4U
zupsifgUEv&VVn~$@^TnIxxjecY2=|C=)^u=4&%qy?UC2@AP?m*{)v2D7!TtoZH(6&
zkcV;@|HK|%4&x`A7_Xm!Je0%uCtl#?Fn&_Tc>O%&_tIB{C-QY=Jd7Xb9eI5b@=%WJ
z>^WY(ip@XrdJpn@>GSl7UA!E|kI&hW*KbFj(1Sl;Lae28YUebCQyZsAoX+4hky9(D
z37lFuHFIj>)WE64smLi|RM<X_o?sAQT*3=1twTRM#L^<h^Ix)b44w&ka~wUsF$wek
z%+sKw@K;tx!XsxQJDY_uoQ!Abcs%Q1W$95cc5;h)ehWUSEIk@@AoucgJNzl-X&5Vc
zoTXzh{Ul54v9BFGjrCvTX}~Bs$<l}y@<$<jPU8Ygm{3li=2+aNa2;WkCLO0qPt>Fn
zH0eZ5dX6TYu1VjeN#CtW-=|4`O_MIxq*rUwk80A7Y0`C?vEWfld>s|fY~Yy?JY}c;
z1OuM+z}K?ys2tj0I$=N6fIsDcu?v6NVe&PSfyedexsw0+=g6+j?>ZzdnwPaG`BwWC
z|Gq=X+KNGb=b>~%8Q96?US7C-^}15HvMXHWEUUnw|5y9~1R3JJW<19>$a%`!Qlih}
z4*WY11D|Wdwam(SK_mlzaG%r2Xy`1Io?-QJ&b8rB$I$j5AJ<$wV0I<v+UOZxP*R6y
z%3^@xnJ_W(T-$Kx$w({jACIBy_&Ga)k3|g!{4AJm85^Gtb;dKPBRt-V>wo`pdhana
z81Q^&`UZTSuiksi+(_(rE+g&hMDRU}XMl(Zi(f(Acg~QShppzC^y|!<?;vFJBlKRP
zl<{ov3{(%D8+Zj}4sj1r+kgLiNyMVwOXAg%_#O^p62BHFjcjeEJjSj@K2Ew;YSySp
znl<ERO{`UIcDcW4F{nQd=_iAo_nb5E@1;cl-o?oMMBq3_Iubv@eR{}G@EoE3%KSvg
zAk0tj-|B#$=&`YQWqyKt8`?iyLm_tciDXbe(I>I->6a3^w;!pW=<^0Dr+y*?yHp=Z
zCojCf&g8tX*V8~I<!|q+1E0B&W@Y!-bBPe|d3<uU=b7o%kd9H$j)7tyd0{p7Yyy7G
z<mx)_DSTd(f@h`byk{^ygPx_TC5D=ZE#PPI=w}l6nE~1^L)rLM>o}mSuEj($cMub_
zO{&{r$-pyoo|1scll8V~%Omt$6g@N8TuWupXO*5Bi^;Pr-qgH+kml9k!w!gpkHE!o
zEiu<^KOTM_cLy;+-)8V}3;1}F+JDH;(I(f<&vW@TTRNw<u-^;(nor<+a?0a9!CVf5
zXurQs<M*?M_xquK<6}_QANY4}hVuKl(eJ$t{JS5YA-@-|((euA>is^64DR<SY<zlb
zb2Waybf9w8@AJ3!{4{EP>_cA%-<}5FDd^ki<J9lL=h64k@9_+)1AH&+?_KEQN!~H&
z?*U9(Rllow2z)Lz>~k=fQnd{H+*J3Ske{d5JwyFGWy?3fzh59?NXA`fOf@(B+N6;Y
zd3NmU;P(&q^Lq=lO^EV)3$#xFzqf+lC#dcJPJSQZ?}T2vP-?vj|F>xT|CZtXe~8~Y
z8QlE`ey?!||G(|F==T~UfB)nv_Qj3dZ}B^leen#9-{bu;-4*VOGuT()ey>A?r7PSQ
zdkMYYLHE|UFD_y<;`KXqUtGa;-N*YL%J21q*bK$B5<>dfl=^)~uunZ(2_Q=jof(CE
z#Bnag?ZBTwaBm;_87fJL@(cW^zF^|Mfbp(@?}7RKE6U?_KEHoOyu6(I3g!7xB^;}s
z+eshoGw~Xqxn7gLG0J~*8an)M!dyfDaX6y)&5^$oa~136D!y*wdwU~UHzke#;JvFW
z^dA8g%z$Ql2wOKX^9uckuA7o(-OM0^`j4L9Q`9$;tMVUu&u(D<;qN$T-fw92+%dKq
z)|TexSBbazEz;0@i8OAWN;bh-gXbIHu}>vl2cDgtO7IvC?sM(1cTLAMe(Ucbc6%)B
zXQA8+YZyP%WybU5&^}3956_wQuNw>$EH|avb!4g+Y<IIlZ<x>Z5OT_sDXjA(j;;Ro
zE`n=ol4DIUShHHc+fhnzeNBfpC@a1G2Dt9MnVq@HBEdkN?~k~zzt20Z|N9z)S?wCe
zhaMguQo`{;DAlZ$Nt{nWK58wUp;=4uwWAqi==d;R6BDeO^i7u&ABOl%o<SqTmBt64
zDFeiZ(C-F(9v?;&ABMZ{^m%;vJU-xOf+i+R)1+r!c6=D@_aTPZLk#-65f~>1`5nSR
z;)L@v5GO33$BFP~WN|`>`$vouScb7eE%$zxZrG;{6*sP3oS^RbS&9?d7!h&3KICsv
zUE?^>|9U<0cdGsyuh;FLU$2Kh+IJ#7E#dd6!GC7rbvwSpRM+swi1+q$*|l@1{WV%|
zQ@9^l{tK?xuX;Z|$nSMs`F?yb|FK8^&UNJPczy0aBl4fCSZ6=?pKG~a9rX9iuJt-J
zupeE6{pwZwQO4(f6#i&`D+B$=^UBSkJu84Q8=s%3zEtOYllc>W-wMjbYv@PnGnItT
Rh#w8PpBwbI-G=d_{{+ece?9;J
--- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.cc
@@ -291,23 +291,25 @@ bool ExceptionHandler::WriteMinidump(con
                                      MinidumpCallback callback,
                                      void *callback_context) {
   ExceptionHandler handler(dump_path, NULL, callback, callback_context, false);
   return handler.WriteMinidump();
 }
 
 bool ExceptionHandler::WriteMinidumpWithException(int exception_type,
                                                   int exception_code,
+                                                  int exception_subcode,
                                                   mach_port_t thread_name) {
   bool result = false;
 
   if (directCallback_) {
     if (directCallback_(callback_context_,
                         exception_type,
                         exception_code,
+                        exception_subcode,
                         thread_name) ) {
       if (exception_type && exception_code)
         _exit(exception_type);
     }
   } else {
     string minidump_id;
 
     // Putting the MinidumpGenerator in its own context will ensure that the
@@ -315,17 +317,18 @@ bool ExceptionHandler::WriteMinidumpWith
     if (!dump_path_.empty()) {
       MinidumpGenerator md;
       if (exception_type && exception_code) {
         // If this is a real exception, give the filter (if any) a chance to
         // decided if this should be sent
         if (filter_ && !filter_(callback_context_))
           return false;
 
-        md.SetExceptionInformation(exception_type, exception_code, thread_name);
+        md.SetExceptionInformation(exception_type, exception_code,
+                                   exception_subcode, thread_name);
       }
 
       result = md.Write(next_minidump_path_c_);
     }
 
     // Call user specified callback (if any)
     if (callback_) {
       // If the user callback returned true and we're handling an exception
@@ -471,52 +474,55 @@ void *ExceptionHandler::WaitForMessage(v
 
 #if USE_PROTECTED_ALLOCATIONS
         if(gBreakpadAllocator)
           gBreakpadAllocator->Unprotect();
 #endif
 
         // Write out the dump and save the result for later retrieval
         self->last_minidump_write_result_ =
-          self->WriteMinidumpWithException(0, 0, 0);
+          self->WriteMinidumpWithException(0, 0, 0, 0);
 
         self->UninstallHandler(false);
 
 #if USE_PROTECTED_ALLOCATIONS
         if(gBreakpadAllocator)
           gBreakpadAllocator->Protect();
 #endif
 
         self->ResumeThreads();
 
         if (self->use_minidump_write_mutex_)
           pthread_mutex_unlock(&self->minidump_write_mutex_);
       } else {
-
         // When forking a child process with the exception handler installed,
         // if the child crashes, it will send the exception back to the parent
         // process.  The check for task == self_task() ensures that only
         // exceptions that occur in the parent process are caught and
         // processed.  If the exception was not caused by this task, we
         // still need to call into the exception server and have it return
         // KERN_FAILURE (see breakpad_exception_raise) in order for the kernel
         // to move onto the host exception handler for the child task
         if (receive.task.name == mach_task_self()) {
           self->SuspendThreads();
 
 #if USE_PROTECTED_ALLOCATIONS
         if(gBreakpadAllocator)
           gBreakpadAllocator->Unprotect();
 #endif
 
-          // Generate the minidump with the exception data.
-          self->WriteMinidumpWithException(receive.exception, receive.code[0],
-                                           receive.thread.name);
+        int subcode = 0;
+        if (receive.exception == EXC_BAD_ACCESS && receive.code_count > 1)
+          subcode = receive.code[1];
 
-          self->UninstallHandler(true);
+        // Generate the minidump with the exception data.
+        self->WriteMinidumpWithException(receive.exception, receive.code[0],
+                                         subcode, receive.thread.name);
+
+        self->UninstallHandler(true);
 
 #if USE_PROTECTED_ALLOCATIONS
         if(gBreakpadAllocator)
           gBreakpadAllocator->Protect();
 #endif
         }
         // Pass along the exception to the server, which will setup the
         // message and call breakpad_exception_raise() and put the return
--- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler.h
@@ -72,16 +72,17 @@ class ExceptionHandler {
                                    void *context, bool succeeded);
 
   // A callback function which will be called directly if an exception occurs.
   // This bypasses the minidump file writing and simply gives the client
   // the exception information.
   typedef bool (*DirectCallback)( void *context,
                                   int exception_type,
                                   int exception_code,
+                                  int exception_subcode,
                                   mach_port_t thread_name);
 
   // Creates a new ExceptionHandler instance to handle writing minidumps.
   // Minidump files will be written to dump_path, and the optional callback
   // is called after writing the dump file, as described above.
   // If install_handler is true, then a minidump will be written whenever
   // an unhandled exception occurs.  If it is false, minidumps will only
   // be written when WriteMinidump is called.
@@ -130,17 +131,17 @@ class ExceptionHandler {
   bool Teardown();
 
   // Send an "empty" mach message to the exception handler.  Return true on
   // success, false otherwise
   bool SendEmptyMachMessage();
 
   // All minidump writing goes through this one routine
   bool WriteMinidumpWithException(int exception_type, int exception_code,
-                                  mach_port_t thread_name);
+                                  int exception_subcode, mach_port_t thread_name);
 
   // When installed, this static function will be call from a newly created
   // pthread with |this| as the argument
   static void *WaitForMessage(void *exception_handler_class);
 
   // disallow copy ctor and operator=
   explicit ExceptionHandler(const ExceptionHandler &);
   void operator=(const ExceptionHandler &);
--- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler_test.cc
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/exception_handler_test.cc
@@ -23,25 +23,17 @@
 // 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.
 
 /*
-g++ -framework CoreFoundation -I../../.. \
-	../../minidump_file_writer.cc \
-	../../../common/convert_UTF.c \
-	../../../common/string_conversion.cc \
-	../../../common/mac/string_utilities.cc \
-	exception_handler.cc \
-	minidump_generator.cc \
-	exception_handler_test.cc \
-	-o exception_handler_test
+g++ -framework CoreFoundation -I../../.. ../../minidump_file_writer.cc ../../../common/convert_UTF.c ../../../common/string_conversion.cc ../../../common/mac/string_utilities.cc exception_handler.cc minidump_generator.cc exception_handler_test.cc -o exception_handler_test -mmacosx-version-min=10.4 ../../../common/mac/file_id.cc  dynamic_images.cc ../../../common/mac/macho_id.cc  ../../../common/mac/macho_walker.cc  -lcrypto ../../../common/mac/macho_utilities.cc 
 */
 
 #include <pthread.h>
 #include <pwd.h>
 #include <unistd.h>
 
 #include <CoreFoundation/CoreFoundation.h>
 
@@ -50,20 +42,21 @@ g++ -framework CoreFoundation -I../../..
 
 using std::string;
 using google_breakpad::ExceptionHandler;
 
 static void *SleepyFunction(void *) {
   while (1) {
     sleep(10000);
   }
+  return NULL;
 }
 
 static void Crasher() {
-  int *a = NULL;
+  int *a = (int*)0x42;
 
 	fprintf(stdout, "Going to crash...\n");
   fprintf(stdout, "A = %d", *a);
 }
 
 static void SoonToCrash() {
   Crasher();
 }
@@ -72,36 +65,35 @@ bool MDCallback(const char *dump_dir, co
                 void *context, bool success) {
   string path(dump_dir);
   string dest(dump_dir);
   path.append(file_name);
   path.append(".dmp");
 
   fprintf(stdout, "Minidump: %s\n", path.c_str());
   // Indicate that we've handled the callback
-  return true;
+  exit(0);
 }
 
 int main(int argc, char * const argv[]) {
   char buffer[PATH_MAX];
-  struct passwd *user = getpwuid(getuid());
 
   // Home dir
-  snprintf(buffer, sizeof(buffer), "/Users/%s/Desktop/", user->pw_name);
+  snprintf(buffer, sizeof(buffer), "/tmp/");
 
   string path(buffer);
   ExceptionHandler eh(path, NULL, MDCallback, NULL, true);
   pthread_t t;
 
   if (pthread_create(&t, NULL, SleepyFunction, NULL) == 0) {
     pthread_detach(t);
   } else {
     perror("pthread_create");
   }
 
-  // Dump a test
-  eh.WriteMinidump();
+//   // Dump a test
+//   eh.WriteMinidump();
 
 	// Test the handler
   SoonToCrash();
 
   return 0;
 }
--- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.cc
@@ -49,29 +49,31 @@ using MacStringUtils::ConvertToString;
 using MacStringUtils::IntegerValueAtIndex;
 
 namespace google_breakpad {
 
 // constructor when generating from within the crashed process
 MinidumpGenerator::MinidumpGenerator()
     : exception_type_(0),
       exception_code_(0),
+      exception_subcode_(0),
       exception_thread_(0),
       crashing_task_(mach_task_self()),
       handler_thread_(mach_thread_self()),
       dynamic_images_(NULL) {
   GatherSystemInformation();
 }
 
 // constructor when generating from a different process than the
 // crashed process
 MinidumpGenerator::MinidumpGenerator(mach_port_t crashing_task,
                                      mach_port_t handler_thread)
     : exception_type_(0),
       exception_code_(0),
+      exception_subcode_(0),
       exception_thread_(0),
       crashing_task_(crashing_task),
       handler_thread_(handler_thread) {
   if (crashing_task != mach_task_self()) {
     dynamic_images_ = new DynamicImages(crashing_task_);
   } else {
     dynamic_images_ = NULL;
   }
@@ -167,17 +169,17 @@ bool MinidumpGenerator::Write(const char
     &MinidumpGenerator::WriteModuleListStream,
     &MinidumpGenerator::WriteMiscInfoStream,
     &MinidumpGenerator::WriteBreakpadInfoStream,
     // Exception stream needs to be the last entry in this array as it may
     // be omitted in the case where the minidump is written without an
     // exception.
     &MinidumpGenerator::WriteExceptionStream,
   };
-  bool result = true;
+  bool result = false;
 
   // If opening was successful, create the header, directory, and call each
   // writer.  The destructor for the TypedMDRVAs will cause the data to be
   // flushed.  The destructor for the MinidumpFileWriter will close the file.
   if (writer_.Open(path)) {
     TypedMDRVA<MDRawHeader> header(&writer_);
     TypedMDRVA<MDRawDirectory> dir(&writer_);
 
@@ -198,16 +200,17 @@ bool MinidumpGenerator::Write(const char
     MDRawHeader *header_ptr = header.get();
     header_ptr->signature = MD_HEADER_SIGNATURE;
     header_ptr->version = MD_HEADER_VERSION;
     time(reinterpret_cast<time_t *>(&(header_ptr->time_date_stamp)));
     header_ptr->stream_count = writer_count;
     header_ptr->stream_directory_rva = dir.position();
 
     MDRawDirectory local_dir;
+    result = true;
     for (int i = 0; (result) && (i < writer_count); ++i) {
       result = (this->*writers[i])(&local_dir);
 
       if (result)
         dir.CopyIndex(i, &local_dir);
     }
   }
   return result;
@@ -413,51 +416,50 @@ bool MinidumpGenerator::WriteContext(bre
 #elif TARGET_CPU_X86 || TARGET_CPU_X86_64
 
 bool MinidumpGenerator::WriteStack(breakpad_thread_state_data_t state,
                                    MDMemoryDescriptor *stack_location) {
   breakpad_thread_state_t *machine_state =
     reinterpret_cast<breakpad_thread_state_t *>(state);
 
 #if TARGET_CPU_X86_64
-  mach_vm_address_t start_addr = machine_state->__rsp;
+  mach_vm_address_t start_addr = REGISTER_FROM_THREADSTATE(machine_state, rsp);
 #else
-  mach_vm_address_t start_addr = machine_state->esp;
+  mach_vm_address_t start_addr = REGISTER_FROM_THREADSTATE(machine_state, esp);
 #endif
   return WriteStackFromStartAddress(start_addr, stack_location);
 }
 
 u_int64_t
 MinidumpGenerator::CurrentPCForStack(breakpad_thread_state_data_t state) {
   breakpad_thread_state_t *machine_state =
     reinterpret_cast<breakpad_thread_state_t *>(state);
 
 #if TARGET_CPU_X86_64
-  return machine_state->__rip;
+  return REGISTER_FROM_THREADSTATE(machine_state, rip);
 #else
-  return machine_state->eip;
+  return REGISTER_FROM_THREADSTATE(machine_state, eip);
 #endif
 }
 
 bool MinidumpGenerator::WriteContext(breakpad_thread_state_data_t state,
                                      MDLocationDescriptor *register_location) {
   TypedMDRVA<MinidumpContext> context(&writer_);
   breakpad_thread_state_t *machine_state =
     reinterpret_cast<breakpad_thread_state_t *>(state);
 
   if (!context.Allocate())
     return false;
 
   *register_location = context.location();
   MinidumpContext *context_ptr = context.get();
 
+#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a)
 #if TARGET_CPU_X86
   context_ptr->context_flags = MD_CONTEXT_X86;
-
-#define AddReg(a) context_ptr->a = machine_state->a
   AddReg(eax);
   AddReg(ebx);
   AddReg(ecx);
   AddReg(edx);
   AddReg(esi);
   AddReg(edi);
   AddReg(ebp);
   AddReg(esp);
@@ -467,18 +469,16 @@ bool MinidumpGenerator::WriteContext(bre
   AddReg(ss);
   AddReg(es);
   AddReg(fs);
   AddReg(gs);
   AddReg(eflags);
 
   AddReg(eip);
 #else
-
-#define AddReg(a) context_ptr->a = machine_state->__ ## a
   context_ptr->context_flags = MD_CONTEXT_AMD64;
   AddReg(rax);
   AddReg(rbx);
   AddReg(rcx);
   AddReg(rdx);
   AddReg(rdi);
   AddReg(rsi);
   AddReg(rbp);
@@ -496,16 +496,17 @@ bool MinidumpGenerator::WriteContext(bre
   // not used in the flags register.  Since the minidump format
   // specifies 32 bits for the flags register, we can truncate safely
   // with no loss.
   context_ptr->eflags = machine_state->__rflags;
   AddReg(cs);
   AddReg(fs);
   AddReg(gs);
 #endif
+#undef AddReg(a)
 
   return true;
 }
 #endif
 
 bool MinidumpGenerator::WriteThreadStream(mach_port_t thread_id,
                                           MDRawThread *thread) {
   breakpad_thread_state_data_t state;
@@ -590,17 +591,20 @@ MinidumpGenerator::WriteExceptionStream(
                        BREAKPAD_MACHINE_THREAD_STATE,
                        state,
                        &stateCount) != KERN_SUCCESS)
     return false;
 
   if (!WriteContext(state, &exception_ptr->thread_context))
     return false;
 
-  exception_ptr->exception_record.exception_address = CurrentPCForStack(state);
+  if (exception_type_ == EXC_BAD_ACCESS)
+    exception_ptr->exception_record.exception_address = exception_subcode_;
+  else
+    exception_ptr->exception_record.exception_address = CurrentPCForStack(state);
 
   return true;
 }
 
 bool MinidumpGenerator::WriteSystemInfoStream(
     MDRawDirectory *system_info_stream) {
   TypedMDRVA<MDRawSystemInfo> info(&writer_);
 
--- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator.h
@@ -61,16 +61,28 @@ typedef MDRawContextX86 MinidumpContext;
 #elif TARGET_CPU_PPC64
 typedef ppc_thread_state64_t breakpad_thread_state_t;
 typedef MDRawContextPPC64 MinidumpContext;
 #elif TARGET_CPU_PPC
 typedef ppc_thread_state_t breakpad_thread_state_t;
 typedef MDRawContextPPC MinidumpContext;
 #endif
 
+// Use the REGISTER_FROM_THREADSTATE to access a register name from the
+// breakpad_thread_state_t structure.
+#if __DARWIN_UNIX03 || !TARGET_CPU_X86 || TARGET_CPU_X86_64
+// In The 10.5 SDK Headers Apple prepended __ to the variable names in the
+// i386_thread_state_t structure.  There's no good way to tell what version of
+// the SDK we're compiling against so we just toggle on the same preprocessor
+// symbol Apple's headers use.
+#define REGISTER_FROM_THREADSTATE(a, b) ((a)->__ ## b)
+#else
+#define REGISTER_FROM_THREADSTATE(a, b) (a->b)
+#endif
+
 // Creates a minidump file of the current process.  If there is exception data,
 // use SetExceptionInformation() to add this to the minidump.  The minidump
 // file is generated by the Write() function.
 // Usage:
 // MinidumpGenerator minidump();
 // minidump.Write("/tmp/minidump");
 //
 class MinidumpGenerator {
@@ -85,19 +97,21 @@ class MinidumpGenerator {
   static string UniqueNameInDirectory(const string &dir, string *unique_name);
 
   // Write out the minidump into |path|
   // All of the components of |path| must exist and be writable
   // Return true if successful, false otherwise
   bool Write(const char *path);
 
   // Specify some exception information, if applicable
-  void SetExceptionInformation(int type, int code, mach_port_t thread_name) {
+  void SetExceptionInformation(int type, int code, int subcode,
+                               mach_port_t thread_name) {
     exception_type_ = type;
     exception_code_ = code;
+    exception_subcode_ = subcode;
     exception_thread_ = thread_name;
   }
 
   // Gather system information.  This should be call at least once before using
   // the MinidumpGenerator class.
   static void GatherSystemInformation();
 
  private:
@@ -133,16 +147,17 @@ class MinidumpGenerator {
   void operator=(const MinidumpGenerator &);
 
   // Use this writer to put the data to disk
   MinidumpFileWriter writer_;
 
   // Exception information
   int exception_type_;
   int exception_code_;
+  int exception_subcode_;
   mach_port_t exception_thread_;
   mach_port_t crashing_task_;
   mach_port_t handler_thread_;
   
   // System information
   static char build_string_[16];
   static int os_major_version_;
   static int os_minor_version_;
--- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator_test.cc
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/minidump_generator_test.cc
@@ -40,24 +40,23 @@
 using std::string;
 using google_breakpad::MinidumpGenerator;
 
 static bool doneWritingReport = false;
 
 static void *Reporter(void *) {
   char buffer[PATH_MAX];
   MinidumpGenerator md;
-  struct passwd *user = getpwuid(getuid());
 
   // Write it to the desktop
   snprintf(buffer,
            sizeof(buffer),
-           "/Users/%s/Desktop/test.dmp",
-           user->pw_name);
-  
+           "/tmp/test.dmp");
+
+
   fprintf(stdout, "Writing %s\n", buffer);
   unlink(buffer);
   md.Write(buffer);
   doneWritingReport = true;
 
   return NULL;
 }
 
--- a/toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/testdata/dump_syms_i386_breakpad.sym
+++ b/toolkit/crashreporter/google-breakpad/src/client/mac/handler/testcases/testdata/dump_syms_i386_breakpad.sym
@@ -75,49 +75,49 @@ FILE 73 /Developer/SDKs/MacOSX10.4u.sdk/
 FILE 74 ../../../common/mac/dwarf/dwarf2reader.h
 FILE 75 /Developer/SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/bits/stl_stack.h
 FILE 76 /Developer/SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/bits/deque.tcc
 FILE 77 /Developer/SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/bits/list.tcc
 FILE 78 /Developer/SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/bits/vector.tcc
 FILE 79 /Developer/SDKs/MacOSX10.4u.sdk/usr/include/c++/4.0.0/bits/stl_uninitialized.h
 FILE 80 /var/tmp/gcc/gcc-5484~1/src/gcc/libgcc2.c
 FUNC 162a 28 0 _OSSwapInt16
-162a 10 44 1
-163a 16 46 1
-1650 2 47 1
+162a 10 44 55
+163a 16 46 55
+1650 2 47 55
 FUNC 1652 1c 0 _OSSwapInt32
-1652 f 53 1
-1661 8 55 1
-1669 3 56 1
-166c 2 57 1
+1652 f 53 55
+1661 8 55 55
+1669 3 56 55
+166c 2 57 55
 FUNC 166e 2b 0 _OSSwapInt64
-166e 12 64 1
-1680 11 69 1
-1691 6 70 1
-1697 2 71 1
-1699 1 71 1
+166e 12 64 55
+1680 11 69 55
+1691 6 70 55
+1697 2 71 55
+1699 1 71 55
 FUNC 169a 1e 0 NXSwapShort
-169a 10 43 2
-16aa c 45 2
-16b6 2 46 2
+169a 10 43 56
+16aa c 45 56
+16b6 2 46 56
 FUNC 16b8 19 0 NXSwapInt
-16b8 f 52 2
-16c7 8 54 2
-16cf 2 55 2
-16d1 1 55 2
+16b8 f 52 56
+16c7 8 54 56
+16cf 2 55 56
+16d1 1 55 56
 FUNC 16d2 19 0 NXSwapLong
-16d2 f 61 2
-16e1 8 63 2
-16e9 2 64 2
-16eb 1 64 2
+16d2 f 61 56
+16e1 8 63 56
+16e9 2 64 56
+16eb 1 64 56
 FUNC 16ec 1f 0 NXSwapLongLong
-16ec 12 70 2
-16fe b 72 2
-1709 2 73 2
-170b 1 73 2
+16ec 12 70 56
+16fe b 72 56
+1709 2 73 56
+170b 1 73 56
 FUNC 170c 181 0 -[DumpSymbols convertCPlusPlusSymbols:]
 170c 14 128 3
 1720 54 130 3
 1774 f 132 3
 1783 7 133 3
 178a 1a 136 3
 17a4 5 138 3
 17a9 1a 139 3
@@ -144,2237 +144,2201 @@ 19d0 1e 171 3
 19ee 11 162 3
 19ff 7 181 3
 1a06 6 182 3
 1a0c 5 184 3
 1a11 15 185 3
 1a26 6 18 4
 1a2c 6 19 4
 1a32 6 20 4
-1a38 6 185 4
-1a3e 28 186 4
-1a66 21 187 4
-1a87 1a 188 4
-1aa1 a 190 4
-1aab c 194 4
-1ab7 43 198 4
-1afa 21 199 4
-1b1b 20 202 4
-1b3b 2e 203 4
-1b69 1e 194 4
-1b87 c 184 4
-1b93 17 207 4
-1baa 7 208 4
-1bb1 1 208 4
+1a38 6 185 3
+1a3e 28 186 3
+1a66 21 187 3
+1a87 1a 188 3
+1aa1 a 190 3
+1aab c 194 3
+1ab7 43 198 3
+1afa 21 199 3
+1b1b 20 202 3
+1b3b 2e 203 3
+1b69 1e 194 3
+1b87 c 184 3
+1b93 17 207 3
+1baa 7 208 3
+1bb1 1 208 3
 FUNC 1bb2 4a2 0 -[DumpSymbols addFunction:line:address:section:]
-1bb2 21 211 4
-1bd3 2f 212 4
-1c02 e 214 4
-1c10 4 219 4
-1c14 2a 221 4
-1c3e 22 223 4
-1c60 6 224 4
-1c66 2a 225 4
-1c90 4 226 4
-1c94 2e 230 4
-1cc2 2e 233 4
-1cf0 2e 236 4
-1d1e a 239 4
-1d28 2b 253 4
-1d53 e 254 4
-1d61 3c 255 4
+1bb2 21 211 3
+1bd3 2f 212 3
+1c02 e 214 3
+1c10 4 219 3
+1c14 2a 221 3
+1c3e 22 223 3
+1c60 6 224 3
+1c66 2a 225 3
+1c90 4 226 3
+1c94 2e 230 3
+1cc2 2e 233 3
+1cf0 2e 236 3
+1d1e a 239 3
+1d28 2b 253 3
+1d53 e 254 3
+1d61 3c 255 3
 1d9d 22 32 4
-1dbf 3 256 4
-1dc2 6 259 4
-1dc8 a 260 4
-1dd2 3c 261 4
-1e0e 25 262 4
-1e33 2a 263 4
-1e5d 22 265 4
-1e7f 26 270 4
-1ea5 6 272 4
-1eab 37 273 4
-1ee2 2a 274 4
-1f0c 17 275 4
-1f23 43 278 4
-1f66 2e 279 4
-1f94 23 282 4
-1fb7 43 285 4
-1ffa 52 287 4
-204c 8 289 4
+1dbf 3 256 3
+1dc2 6 259 3
+1dc8 a 260 3
+1dd2 3c 261 3
+1e0e 25 262 3
+1e33 2a 263 3
+1e5d 22 265 3
+1e7f 26 270 3
+1ea5 6 272 3
+1eab 37 273 3
+1ee2 2a 274 3
+1f0c 17 275 3
+1f23 43 278 3
+1f66 2e 279 3
+1f94 23 282 3
+1fb7 43 285 3
+1ffa 52 287 3
+204c 8 289 3
 FUNC 2054 5a4 0 -[DumpSymbols processSymbolItem:stringTable:]
-2054 18 292 4
-206c 8 293 4
-2074 4 294 4
-2078 16 297 4
-208e c 298 4
-209a f 300 4
-20a9 b 301 4
-20b4 16 303 4
-20ca 4d 309 4
-2117 38 311 4
-214f 30 315 4
-217f 60 317 4
-21df d 322 4
-21ec 2b 325 4
-2217 3a 327 4
-2251 f 332 4
-2260 2d 333 4
-228d 1a 334 4
-22a7 32 335 4
-22d9 20 342 4
-22f9 c 343 4
-2305 24 348 4
-2329 a 349 4
-2333 3c 350 4
-236f 2a 352 4
-2399 1c 353 4
-23b5 9 354 4
-23be f 356 4
-23cd 2d 357 4
-23fa 2f 358 4
-2429 20 360 4
-2449 c 361 4
-2455 7 363 4
-245c 21 365 4
-247d 4a 368 4
-24c7 9 370 4
-24d0 1a 371 4
-24ea 4b 372 4
-2535 4 373 4
-2539 5 371 4
-253e 29 374 4
-2567 2d 376 4
-2594 4b 378 4
-25df 4 379 4
-25e3 a 382 4
-25ed b 383 4
+2054 18 292 3
+206c 8 293 3
+2074 4 294 3
+2078 16 297 3
+208e c 298 3
+209a f 300 3
+20a9 b 301 3
+20b4 16 303 3
+20ca 4d 309 3
+2117 38 311 3
+214f 30 315 3
+217f 60 317 3
+21df d 322 3
+21ec 2b 325 3
+2217 3a 327 3
+2251 f 332 3
+2260 2d 333 3
+228d 1a 334 3
+22a7 32 335 3
+22d9 20 342 3
+22f9 c 343 3
+2305 24 348 3
+2329 a 349 3
+2333 3c 350 3
+236f 2a 352 3
+2399 1c 353 3
+23b5 9 354 3
+23be f 356 3
+23cd 2d 357 3
+23fa 2f 358 3
+2429 20 360 3
+2449 c 361 3
+2455 7 363 3
+245c 21 365 3
+247d 4a 368 3
+24c7 9 370 3
+24d0 1a 371 3
+24ea 4b 372 3
+2535 4 373 3
+2539 5 371 3
+253e 29 374 3
+2567 2d 376 3
+2594 4b 378 3
+25df 4 379 3
+25e3 a 382 3
+25ed b 383 3
 FUNC 25f8 c9 0 -[DumpSymbols loadSymbolInfo:offset:]
-25f8 13 391 4
-260b 2b 392 4
-2636 2a 393 4
-2660 2d 395 4
-268d 2e 398 4
-26bb 6 399 4
-26c1 1 399 4
+25f8 13 391 3
+260b 2b 392 3
+2636 2a 393 3
+2660 2d 395 3
+268d 2e 398 3
+26bb 6 399 3
+26c1 1 399 3
 FUNC 26c2 2be 0 -[DumpSymbols loadSTABSSymbolInfo:offset:]
-26c2 16 537 4
-26d8 9 538 4
-26e1 10 539 4
-26f1 2e 540 4
-271f 9 542 4
-2728 22 543 4
-274a 4 544 4
-274e a 546 4
-2758 3c 547 4
-2794 c 549 4
-27a0 e 550 4
-27ae 6 551 4
-27b4 25 552 4
-27d9 25 553 4
-27fe 25 554 4
-2823 c 555 4
-282f c 556 4
-283b c 559 4
-2847 23 562 4
-286a a 563 4
-2874 a 564 4
-287e 2e 565 4
-28ac 39 566 4
-28e5 2e 570 4
-2913 4 571 4
-2917 17 559 4
-292e 25 575 4
-2953 9 576 4
-295c 17 549 4
-2973 4 579 4
-2977 9 580 4
+26c2 16 537 3
+26d8 9 538 3
+26e1 10 539 3
+26f1 2e 540 3
+271f 9 542 3
+2728 22 543 3
+274a 4 544 3
+274e a 546 3
+2758 3c 547 3
+2794 c 549 3
+27a0 e 550 3
+27ae 6 551 3
+27b4 25 552 3
+27d9 25 553 3
+27fe 25 554 3
+2823 c 555 3
+282f c 556 3
+283b c 559 3
+2847 23 562 3
+286a a 563 3
+2874 a 564 3
+287e 2e 565 3
+28ac 39 566 3
+28e5 2e 570 3
+2913 4 571 3
+2917 17 559 3
+292e 25 575 3
+2953 9 576 3
+295c 17 549 3
+2973 4 579 3
+2977 9 580 3
 FUNC 2980 28a 0 -[DumpSymbols loadSymbolInfo64:offset:]
-2980 16 583 4
-2996 9 585 4
-299f 10 586 4
-29af 2e 587 4
-29dd 9 589 4
-29e6 22 590 4
-2a08 4 591 4
-2a0c c 593 4
-2a18 e 594 4
-2a26 6 595 4
-2a2c 25 596 4
-2a51 25 597 4
-2a76 25 598 4
-2a9b 9 599 4
-2aa4 c 600 4
-2ab0 c 603 4
-2abc 17 604 4
-2ad3 23 609 4
-2af6 a 610 4
-2b00 a 611 4
-2b0a 2e 612 4
-2b38 37 613 4
-2b6f 2e 615 4
-2b9d 4 616 4
-2ba1 17 603 4
-2bb8 25 620 4
-2bdd 9 621 4
-2be6 17 593 4
-2bfd 4 624 4
-2c01 9 625 4
+2980 16 583 3
+2996 9 585 3
+299f 10 586 3
+29af 2e 587 3
+29dd 9 589 3
+29e6 22 590 3
+2a08 4 591 3
+2a0c c 593 3
+2a18 e 594 3
+2a26 6 595 3
+2a2c 25 596 3
+2a51 25 597 3
+2a76 25 598 3
+2a9b 9 599 3
+2aa4 c 600 3
+2ab0 c 603 3
+2abc 17 604 3
+2ad3 23 609 3
+2af6 a 610 3
+2b00 a 611 3
+2b0a 2e 612 3
+2b38 37 613 3
+2b6f 2e 615 3
+2b9d 4 616 3
+2ba1 17 603 3
+2bb8 25 620 3
+2bdd 9 621 3
+2be6 17 593 3
+2bfd 4 624 3
+2c01 9 625 3
 FUNC 2c0a 199 0 -[DumpSymbols loadSymbolInfoForArchitecture]
-2c0a 13 628 4
-2c1d 41 630 4
-2c5e 2b 631 4
-2c89 1a 632 4
-2ca3 40 634 4
-2ce3 40 635 4
-2d23 5f 637 4
-2d82 17 639 4
-2d99 4 640 4
-2d9d 6 641 4
-2da3 1 641 4
+2c0a 13 628 3
+2c1d 41 630 3
+2c5e 2b 631 3
+2c89 1a 632 3
+2ca3 40 634 3
+2ce3 40 635 3
+2d23 5f 637 3
+2d82 17 639 3
+2d99 4 640 3
+2d9d 6 641 3
+2da3 1 641 3
 FUNC 2da4 3e5 0 -[DumpSymbols loadHeader:offset:]
-2da4 18 728 4
-2dbc 9 729 4
-2dc5 10 730 4
-2dd5 2e 731 4
-2e03 9 733 4
-2e0c 2b 734 4
-2e37 1e 736 4
-2e55 c 738 4
-2e61 e 739 4
-2e6f 6 740 4
-2e75 50 742 4
-2ec5 2e 743 4
-2ef3 2e 744 4
-2f21 2e 745 4
-2f4f 20 746 4
-2f6f 1b7 755 4
-3126 9 757 4
-312f 25 761 4
-3154 9 762 4
-315d 17 738 4
-3174 a 765 4
-317e b 766 4
-3189 1 766 4
+2da4 18 728 3
+2dbc 9 729 3
+2dc5 10 730 3
+2dd5 2e 731 3
+2e03 9 733 3
+2e0c 2b 734 3
+2e37 1e 736 3
+2e55 c 738 3
+2e61 e 739 3
+2e6f 6 740 3
+2e75 50 742 3
+2ec5 2e 743 3
+2ef3 2e 744 3
+2f21 2e