bug 1069556 - sync to Breakpad c53ed143108948eb7e2d7ee77dc8c0d92050ce7c. r=glandium, benwa
authorTed Mielczarek <ted@mielczarek.org>
Wed, 27 Jan 2016 09:39:53 -0500
changeset 309281 62a0d8c93da2ca24f3f87642a2989c4741f214d4
parent 309280 c9bf35bec8aec0ea8e151097434875f0db0559fa
child 309290 714c60cf29d9fbcfcb7be96fb8a4345abf6dfb1d
push idunknown
push userunknown
push dateunknown
reviewersglandium, benwa
bugs1069556
milestone47.0a1
bug 1069556 - sync to Breakpad c53ed143108948eb7e2d7ee77dc8c0d92050ce7c. r=glandium, benwa This commit contains a few things: * Update our copy of google-breakpad to upstream c53ed143108948eb7e2d7ee77dc8c0d92050ce7c * Get rid of all but one local patch, fold a few related local patches into one * Misc build fixup to sync with upstream--adding a few new moz.build files, source files * The final bits of unhooking Breakpad from the profiler: ** Revert to only building toolkit/crashreporter if MOZ_CRASHREPORTER. ** Stop building bits of Breakpad that we only needed for the profiler. ** Remove a few bits of profiler code that were used to interface with Breakpad. ** Remove toolkit/crashreporter/breakpad-logging, which was only used to suppress Breakpad logging for the in-process stackwalker. * Upstream removed their Android-compat sys/ucontext.h because the Android NDK added it, but the bionic we're using for Gonk builds is too old, so add a copy of the previous version of those files to toolkit/crashreporter/gonk-include to keep Gonk building. * Consolidate moz.build files under toolkit/crashreporter/google-breakpad/client/linux
testing/mochitest/Makefile.in
testing/tools/fileid/moz.build
testing/xpcshell/selftest.py
toolkit/crashreporter/Makefile.in
toolkit/crashreporter/breakpad-logging/BreakpadLogging.cpp
toolkit/crashreporter/breakpad-logging/BreakpadLogging.h
toolkit/crashreporter/breakpad-logging/moz.build
toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch
toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch
toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch
toolkit/crashreporter/breakpad-patches/03-unique-string.patch
toolkit/crashreporter/breakpad-patches/04-uniquestringmap.patch
toolkit/crashreporter/breakpad-patches/08-dwarf2reader-dynamic-cast.patch
toolkit/crashreporter/breakpad-patches/09-bug779291.patch
toolkit/crashreporter/breakpad-patches/10-logging.patch
toolkit/crashreporter/breakpad-patches/11-readsymboldatainternal-proto.patch
toolkit/crashreporter/breakpad-patches/12-bug863475.patch
toolkit/crashreporter/breakpad-patches/13-bug836829.patch
toolkit/crashreporter/breakpad-patches/14-bug883126.patch
toolkit/crashreporter/breakpad-patches/15-bug859745.patch
toolkit/crashreporter/breakpad-patches/16-sht-arm-exidx-define.patch
toolkit/crashreporter/breakpad-patches/17-bug942407-usersig.patch
toolkit/crashreporter/breakpad-patches/18-bug945498-expose-handle-signal.patch
toolkit/crashreporter/breakpad-patches/19-bug942290-breakpad-exidx-merge.patch
toolkit/crashreporter/breakpad-patches/20-bug1068410-no-procfs-search.patch
toolkit/crashreporter/breakpad-patches/21-bug1068410-crash-server-pipe.patch
toolkit/crashreporter/client/moz.build
toolkit/crashreporter/crashreporter.mozbuild
toolkit/crashreporter/gonk-include/elf.h
toolkit/crashreporter/gonk-include/link.h
toolkit/crashreporter/gonk-include/stab.h
toolkit/crashreporter/gonk-include/sys/procfs.h
toolkit/crashreporter/gonk-include/sys/signal.h
toolkit/crashreporter/gonk-include/sys/stat.h
toolkit/crashreporter/gonk-include/sys/ucontext.h
toolkit/crashreporter/gonk-include/sys/user.h
toolkit/crashreporter/gonk-include/ucontext.h
toolkit/crashreporter/google-breakpad/.gitignore
toolkit/crashreporter/google-breakpad/COPYING
toolkit/crashreporter/google-breakpad/DEPS
toolkit/crashreporter/google-breakpad/GIT-INFO
toolkit/crashreporter/google-breakpad/INSTALL
toolkit/crashreporter/google-breakpad/LICENSE
toolkit/crashreporter/google-breakpad/Makefile.am
toolkit/crashreporter/google-breakpad/README
toolkit/crashreporter/google-breakpad/README.ANDROID
toolkit/crashreporter/google-breakpad/README.md
toolkit/crashreporter/google-breakpad/SVN-INFO
toolkit/crashreporter/google-breakpad/aclocal.m4
toolkit/crashreporter/google-breakpad/android/google_breakpad/Android.mk
toolkit/crashreporter/google-breakpad/android/run-checks.sh
toolkit/crashreporter/google-breakpad/android/sample_app/jni/Application.mk
toolkit/crashreporter/google-breakpad/android/test-driver
toolkit/crashreporter/google-breakpad/android/test-shell.sh
toolkit/crashreporter/google-breakpad/autotools/compile
toolkit/crashreporter/google-breakpad/autotools/config.guess
toolkit/crashreporter/google-breakpad/autotools/config.sub
toolkit/crashreporter/google-breakpad/autotools/depcomp
toolkit/crashreporter/google-breakpad/autotools/install-sh
toolkit/crashreporter/google-breakpad/autotools/missing
toolkit/crashreporter/google-breakpad/autotools/test-driver
toolkit/crashreporter/google-breakpad/breakpad-client.pc.in
toolkit/crashreporter/google-breakpad/breakpad.pc.in
toolkit/crashreporter/google-breakpad/codereview.settings
toolkit/crashreporter/google-breakpad/configure
toolkit/crashreporter/google-breakpad/configure.ac
toolkit/crashreporter/google-breakpad/src/breakpad_googletest_includes.h
toolkit/crashreporter/google-breakpad/src/build/all.gyp
toolkit/crashreporter/google-breakpad/src/build/common.gypi
toolkit/crashreporter/google-breakpad/src/build/filename_rules.gypi
toolkit/crashreporter/google-breakpad/src/build/gyp_breakpad
toolkit/crashreporter/google-breakpad/src/build/testing.gypi
toolkit/crashreporter/google-breakpad/src/client/apple/Framework/BreakpadDefines.h
toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.h
toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.mm
toolkit/crashreporter/google-breakpad/src/client/ios/Breakpad.xcodeproj/project.pbxproj
toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.h
toolkit/crashreporter/google-breakpad/src/client/ios/BreakpadController.mm
toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.h
toolkit/crashreporter/google-breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm
toolkit/crashreporter/google-breakpad/src/client/linux/Makefile.in
toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.cc
toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_client.h
toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/crash_generation_server.cc
toolkit/crashreporter/google-breakpad/src/client/linux/crash_generation/moz.build
toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/mapping_info.h
toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/raw_context_cpu.h
toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.cc
toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/thread_info.h
toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
toolkit/crashreporter/google-breakpad/src/client/linux/dump_writer_common/ucontext_reader.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/exception_handler_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/handler/microdump_extra_info.h
toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.cc
toolkit/crashreporter/google-breakpad/src/client/linux/handler/minidump_descriptor.h
toolkit/crashreporter/google-breakpad/src/client/linux/handler/moz.build
toolkit/crashreporter/google-breakpad/src/client/linux/log/log.cc
toolkit/crashreporter/google-breakpad/src/client/linux/log/log.h
toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.cc
toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer.h
toolkit/crashreporter/google-breakpad/src/client/linux/microdump_writer/microdump_writer_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set.h
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper.h
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper.h
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer.h
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/moz.build
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h
toolkit/crashreporter/google-breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc
toolkit/crashreporter/google-breakpad/src/client/linux/moz.build
toolkit/crashreporter/google-breakpad/src/client/linux/sender/google_crash_report_sender.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/crash_generation/ConfigFile.h
toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/ConfigFile.mm
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/crash_generation_server.cc
toolkit/crashreporter/google-breakpad/src/client/mac/crash_generation/crash_generation_server.h
toolkit/crashreporter/google-breakpad/src/client/mac/handler/breakpad_nlist_64.cc
toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.cc
toolkit/crashreporter/google-breakpad/src/client/mac/handler/dynamic_images.h
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/mach_vm_compat.h
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/ucontext_compat.h
toolkit/crashreporter/google-breakpad/src/client/mac/sender/crash_report_sender.m
toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.h
toolkit/crashreporter/google-breakpad/src/client/mac/sender/uploader.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/mac/tests/exception_handler_test.cc
toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.cc
toolkit/crashreporter/google-breakpad/src/client/minidump_file_writer.h
toolkit/crashreporter/google-breakpad/src/client/solaris/handler/minidump_generator.cc
toolkit/crashreporter/google-breakpad/src/client/windows/breakpad_client.gyp
toolkit/crashreporter/google-breakpad/src/client/windows/build/common.gypi
toolkit/crashreporter/google-breakpad/src/client/windows/build/external_code.gypi
toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_defaults.gypi
toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl.gypi
toolkit/crashreporter/google-breakpad/src/client/windows/build/internal/release_impl_official.gypi
toolkit/crashreporter/google-breakpad/src/client/windows/build/release.gypi
toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.cc
toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/client_info.h
toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation.gyp
toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/crash_generation_client.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/crash_generation/minidump_generator.cc
toolkit/crashreporter/google-breakpad/src/client/windows/crash_generation/minidump_generator.h
toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.cc
toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.gyp
toolkit/crashreporter/google-breakpad/src/client/windows/handler/exception_handler.h
toolkit/crashreporter/google-breakpad/src/client/windows/sender/crash_report_sender.gyp
toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
toolkit/crashreporter/google-breakpad/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/client_tests.gyp
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/crash_generation_server_test.cc
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_death_test.cc
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_nesting_test.cc
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.cc
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/exception_handler_test.h
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/minidump_test.cc
toolkit/crashreporter/google-breakpad/src/client/windows/unittests/testing.gyp
toolkit/crashreporter/google-breakpad/src/common/Makefile.in
toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext.S
toolkit/crashreporter/google-breakpad/src/common/android/breakpad_getcontext_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/android/include/elf.h
toolkit/crashreporter/google-breakpad/src/common/android/include/link.h
toolkit/crashreporter/google-breakpad/src/common/android/include/sgidefs.h
toolkit/crashreporter/google-breakpad/src/common/android/include/sys/procfs.h
toolkit/crashreporter/google-breakpad/src/common/android/include/sys/stat.h
toolkit/crashreporter/google-breakpad/src/common/android/include/sys/ucontext.h
toolkit/crashreporter/google-breakpad/src/common/android/include/sys/user.h
toolkit/crashreporter/google-breakpad/src/common/android/include/ucontext.h
toolkit/crashreporter/google-breakpad/src/common/android/testing/include/wchar.h
toolkit/crashreporter/google-breakpad/src/common/android/testing/mkdtemp.h
toolkit/crashreporter/google-breakpad/src/common/android/ucontext_constants.h
toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.cc
toolkit/crashreporter/google-breakpad/src/common/arm_ex_reader.h
toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/arm_ex_to_module.h
toolkit/crashreporter/google-breakpad/src/common/basictypes.h
toolkit/crashreporter/google-breakpad/src/common/common.gyp
toolkit/crashreporter/google-breakpad/src/common/convert_UTF.c
toolkit/crashreporter/google-breakpad/src/common/convert_UTF.h
toolkit/crashreporter/google-breakpad/src/common/dwarf/dwarf2reader.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf/functioninfo.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf/moz.build
toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module.h
toolkit/crashreporter/google-breakpad/src/common/dwarf_cfi_to_module_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module.h
toolkit/crashreporter/google-breakpad/src/common/dwarf_cu_to_module_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/dwarf_line_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/linux/Makefile.in
toolkit/crashreporter/google-breakpad/src/common/linux/crc32.cc
toolkit/crashreporter/google-breakpad/src/common/linux/crc32.h
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/dump_symbols_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/linux/eintr_wrapper.h
toolkit/crashreporter/google-breakpad/src/common/linux/elf_core_dump_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/linux/elf_gnu_compat.h
toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/linux/elf_symbols_to_module_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.cc
toolkit/crashreporter/google-breakpad/src/common/linux/elfutils.h
toolkit/crashreporter/google-breakpad/src/common/linux/file_id.cc
toolkit/crashreporter/google-breakpad/src/common/linux/file_id.h
toolkit/crashreporter/google-breakpad/src/common/linux/file_id_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.cc
toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader.h
toolkit/crashreporter/google-breakpad/src/common/linux/google_crashdump_uploader_test.cc
toolkit/crashreporter/google-breakpad/src/common/linux/http_upload.cc
toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.cc
toolkit/crashreporter/google-breakpad/src/common/linux/libcurl_wrapper.h
toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.cc
toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support.h
toolkit/crashreporter/google-breakpad/src/common/linux/linux_libc_support_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.cc
toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file.h
toolkit/crashreporter/google-breakpad/src/common/linux/memory_mapped_file_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/linux/moz.build
toolkit/crashreporter/google-breakpad/src/common/linux/synth_elf.cc
toolkit/crashreporter/google-breakpad/src/common/linux/tests/auto_testfile.h
toolkit/crashreporter/google-breakpad/src/common/linux/tests/crash_generator.cc
toolkit/crashreporter/google-breakpad/src/common/logging.cc
toolkit/crashreporter/google-breakpad/src/common/logging.h
toolkit/crashreporter/google-breakpad/src/common/mac/BreakpadRelease.xcconfig
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.m
toolkit/crashreporter/google-breakpad/src/common/mac/HTTPMultipartUpload.m
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/arch_utilities.cc
toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.cc
toolkit/crashreporter/google-breakpad/src/common/mac/dump_syms.h
toolkit/crashreporter/google-breakpad/src/common/mac/file_id.cc
toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.cc
toolkit/crashreporter/google-breakpad/src/common/mac/launch_reporter.h
toolkit/crashreporter/google-breakpad/src/common/mac/macho_id.cc
toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.cc
toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader.h
toolkit/crashreporter/google-breakpad/src/common/mac/macho_reader_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/mac/macho_walker.cc
toolkit/crashreporter/google-breakpad/src/common/mac/moz.build
toolkit/crashreporter/google-breakpad/src/common/mac/super_fat_arch.h
toolkit/crashreporter/google-breakpad/src/common/md5.cc
toolkit/crashreporter/google-breakpad/src/common/md5.h
toolkit/crashreporter/google-breakpad/src/common/memory.h
toolkit/crashreporter/google-breakpad/src/common/memory_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/minidump_type_helper.h
toolkit/crashreporter/google-breakpad/src/common/module.cc
toolkit/crashreporter/google-breakpad/src/common/module.h
toolkit/crashreporter/google-breakpad/src/common/module_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/moz.build
toolkit/crashreporter/google-breakpad/src/common/pathname_stripper.cc
toolkit/crashreporter/google-breakpad/src/common/pathname_stripper.h
toolkit/crashreporter/google-breakpad/src/common/pathname_stripper_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/scoped_ptr.h
toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.cc
toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary.h
toolkit/crashreporter/google-breakpad/src/common/simple_string_dictionary_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/solaris/guid_creator.cc
toolkit/crashreporter/google-breakpad/src/common/stabs_reader.h
toolkit/crashreporter/google-breakpad/src/common/stabs_to_module.cc
toolkit/crashreporter/google-breakpad/src/common/string_conversion.cc
toolkit/crashreporter/google-breakpad/src/common/tests/file_utils.cc
toolkit/crashreporter/google-breakpad/src/common/unique_string.cc
toolkit/crashreporter/google-breakpad/src/common/unique_string.h
toolkit/crashreporter/google-breakpad/src/common/unordered.h
toolkit/crashreporter/google-breakpad/src/common/windows/common_windows.gyp
toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.cc
toolkit/crashreporter/google-breakpad/src/common/windows/dia_util.h
toolkit/crashreporter/google-breakpad/src/common/windows/guid_string.h
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/common/windows/omap.cc
toolkit/crashreporter/google-breakpad/src/common/windows/omap.h
toolkit/crashreporter/google-breakpad/src/common/windows/omap_internal.h
toolkit/crashreporter/google-breakpad/src/common/windows/omap_unittest.cc
toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.cc
toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.h
toolkit/crashreporter/google-breakpad/src/common/windows/string_utils-inl.h
toolkit/crashreporter/google-breakpad/src/config.h.in
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/breakpad_types.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_arm64.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_mips.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_ppc64.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_cpu_sparc.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_ps3.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_exception_win32.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/common/minidump_format.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/basic_source_line_resolver.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_context.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/dump_object.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/exploitability.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/fast_source_line_resolver.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/memory_region.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/microdump_processor.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/proc_maps_linux.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_result.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/process_state.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_base.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/source_line_resolver_interface.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_cpu.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stack_frame_symbolizer.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/stackwalker.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/symbol_supplier.h
toolkit/crashreporter/google-breakpad/src/google_breakpad/processor/system_info.h
toolkit/crashreporter/google-breakpad/src/processor/address_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.cc
toolkit/crashreporter/google-breakpad/src/processor/basic_code_modules.h
toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver.cc
toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_types.h
toolkit/crashreporter/google-breakpad/src/processor/basic_source_line_resolver_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/binarystream.cc
toolkit/crashreporter/google-breakpad/src/processor/binarystream.h
toolkit/crashreporter/google-breakpad/src/processor/binarystream_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info-inl.h
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.cc
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info.h
toolkit/crashreporter/google-breakpad/src/processor/cfi_frame_info_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/contained_range_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/disassembler_x86_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/dump_context.cc
toolkit/crashreporter/google-breakpad/src/processor/dump_object.cc
toolkit/crashreporter/google-breakpad/src/processor/exploitability.cc
toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.cc
toolkit/crashreporter/google-breakpad/src/processor/exploitability_linux.h
toolkit/crashreporter/google-breakpad/src/processor/exploitability_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/exploitability_win.cc
toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver.cc
toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_types.h
toolkit/crashreporter/google-breakpad/src/processor/fast_source_line_resolver_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/logging.cc
toolkit/crashreporter/google-breakpad/src/processor/logging.h
toolkit/crashreporter/google-breakpad/src/processor/map_serializers_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/microdump.cc
toolkit/crashreporter/google-breakpad/src/processor/microdump_processor.cc
toolkit/crashreporter/google-breakpad/src/processor/microdump_processor_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk.cc
toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_machine_readable_test
toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test
toolkit/crashreporter/google-breakpad/src/processor/microdump_stackwalk_test_vars
toolkit/crashreporter/google-breakpad/src/processor/minidump.cc
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/minidump_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/module_comparer.cc
toolkit/crashreporter/google-breakpad/src/processor/module_serializer.cc
toolkit/crashreporter/google-breakpad/src/processor/moz.build
toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.cc
toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper.h
toolkit/crashreporter/google-breakpad/src/processor/pathname_stripper_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator-inl.h
toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator.h
toolkit/crashreporter/google-breakpad/src/processor/postfix_evaluator_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux.cc
toolkit/crashreporter/google-breakpad/src/processor/proc_maps_linux_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/process_state.cc
toolkit/crashreporter/google-breakpad/src/processor/processor.gyp
toolkit/crashreporter/google-breakpad/src/processor/processor_tools.gypi
toolkit/crashreporter/google-breakpad/src/processor/proto/process_state.proto
toolkit/crashreporter/google-breakpad/src/processor/range_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/simple_serializer-inl.h
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/source_line_resolver_base.cc
toolkit/crashreporter/google-breakpad/src/processor/source_line_resolver_base_types.h
toolkit/crashreporter/google-breakpad/src/processor/stack_frame_cpu.cc
toolkit/crashreporter/google-breakpad/src/processor/stack_frame_symbolizer.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalk_common.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_address_list_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_amd64_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm64_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_arm_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_mips_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_ppc64.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_selftest.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_sparc.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_unittest_utils.h
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86.cc
toolkit/crashreporter/google-breakpad/src/processor/stackwalker_x86_unittest.cc
toolkit/crashreporter/google-breakpad/src/processor/static_address_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/static_contained_range_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/static_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/static_map_iterator-inl.h
toolkit/crashreporter/google-breakpad/src/processor/static_range_map-inl.h
toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.cc
toolkit/crashreporter/google-breakpad/src/processor/symbolic_constants_win.h
toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.cc
toolkit/crashreporter/google-breakpad/src/processor/synth_minidump.h
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_block_write.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_clobber_write.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_conditional.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_then_jmp.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_read_av_xchg_write.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/ascii_write_av_arg_to_call.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/exec_av_on_stack.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/linux_test_app.cc
toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.dump.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.machine_readable.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/minidump2.stackwalk.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/module0.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/module1.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/module2.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/module3_bad.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/module4_bad.out
toolkit/crashreporter/google-breakpad/src/processor/testdata/null_read_av.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/null_write_av.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_clobber_write.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_conditional.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/read_av_non_null.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/stack_exhaustion.dmp
toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/kernel32.pdb/BCE8785C57B44245A669896B6A19B9542/kernel32.sym
toolkit/crashreporter/google-breakpad/src/processor/testdata/symbols/test_app.pdb/5A9832E5287241C1838ED98914E9B7FF1/test_app.sym
toolkit/crashreporter/google-breakpad/src/processor/testdata/test_app.cc
toolkit/crashreporter/google-breakpad/src/processor/testdata/write_av_non_null.dmp
toolkit/crashreporter/google-breakpad/src/processor/tokenize.cc
toolkit/crashreporter/google-breakpad/src/processor/windows_frame_info.h
toolkit/crashreporter/google-breakpad/src/third_party/curl/curl.h
toolkit/crashreporter/google-breakpad/src/third_party/curl/curlbuild.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/AUTHORS
toolkit/crashreporter/google-breakpad/src/third_party/glog/COPYING
toolkit/crashreporter/google-breakpad/src/third_party/glog/ChangeLog
toolkit/crashreporter/google-breakpad/src/third_party/glog/INSTALL
toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.am
toolkit/crashreporter/google-breakpad/src/third_party/glog/NEWS
toolkit/crashreporter/google-breakpad/src/third_party/glog/README
toolkit/crashreporter/google-breakpad/src/third_party/glog/README.windows
toolkit/crashreporter/google-breakpad/src/third_party/glog/aclocal.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/compile
toolkit/crashreporter/google-breakpad/src/third_party/glog/config.guess
toolkit/crashreporter/google-breakpad/src/third_party/glog/config.sub
toolkit/crashreporter/google-breakpad/src/third_party/glog/configure
toolkit/crashreporter/google-breakpad/src/third_party/glog/configure.ac
toolkit/crashreporter/google-breakpad/src/third_party/glog/depcomp
toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/designstyle.css
toolkit/crashreporter/google-breakpad/src/third_party/glog/doc/glog.html
toolkit/crashreporter/google-breakpad/src/third_party/glog/google-glog.sln
toolkit/crashreporter/google-breakpad/src/third_party/glog/install-sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/libglog.pc.in
toolkit/crashreporter/google-breakpad/src/third_party/glog/ltmain.sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_attribute.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_builtin_expect.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_have_sync_val_compare_and_swap.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ac_rwlock.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/acx_pthread.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/google_namespace.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/libtool.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltoptions.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltsugar.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/ltversion.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/lt~obsolete.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/namespaces.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/pc_from_ucontext.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/stl_namespace.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/m4/using_operator.m4
toolkit/crashreporter/google-breakpad/src/third_party/glog/missing
toolkit/crashreporter/google-breakpad/src/third_party/glog/mkinstalldirs
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb.sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/README
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/changelog
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/compat
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/control
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/copyright
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/docs
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.dirs
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog-dev.install
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.dirs
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/libgoogle-glog0.install
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/deb/rules
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm.sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/packages/rpm/rpm.spec
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/commandlineflags.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/googleinit.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/base/mutex.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config.h.in
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/config_for_unittests.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/demangle_unittest.txt
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/log_severity.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/logging.h.in
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/raw_logging.h.in
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/stl_logging.h.in
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/glog/vlog_is_on.h.in
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/googletest.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striplog_test.sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest10.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest2.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_striptest_main.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/logging_unittest.err
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/mock-log_test.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/raw_logging.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/signalhandler_unittest.sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_generic-inl.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_libunwind-inl.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_powerpc-inl.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_unittest.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86-inl.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stacktrace_x86_64-inl.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/stl_logging_unittest.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/symbolize_unittest.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/utilities_unittest.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/vlog_is_on.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/config.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/log_severity.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/logging.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/raw_logging.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/stl_logging.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/glog/vlog_is_on.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.cc
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/port.h
toolkit/crashreporter/google-breakpad/src/third_party/glog/src/windows/preprocess.sh
toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog/libglog.vcproj
toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/libglog_static/libglog_static.vcproj
toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest/logging_unittest.vcproj
toolkit/crashreporter/google-breakpad/src/third_party/glog/vsprojects/logging_unittest_static/logging_unittest_static.vcproj
toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/ia32_insn.c
toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/libdisasm.gyp
toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_disasm.c
toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_format.c
toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_insn.c
toolkit/crashreporter/google-breakpad/src/third_party/libdisasm/x86_misc.c
toolkit/crashreporter/google-breakpad/src/third_party/lss/codereview.settings
toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h
toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/dump_syms.cc
toolkit/crashreporter/google-breakpad/src/tools/linux/dump_syms/moz.build
toolkit/crashreporter/google-breakpad/src/tools/linux/md2core/minidump-2-core.cc
toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/minidump_upload.cc
toolkit/crashreporter/google-breakpad/src/tools/linux/symupload/sym_upload.cc
toolkit/crashreporter/google-breakpad/src/tools/linux/tools_linux.gypi
toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.mm
toolkit/crashreporter/google-breakpad/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
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/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj
toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc
toolkit/crashreporter/google-breakpad/src/tools/mac/dump_syms/moz.build
toolkit/crashreporter/google-breakpad/src/tools/mac/tools_mac.gypi
toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_constants.h
toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/arch_reader.go
toolkit/crashreporter/google-breakpad/src/tools/mac/upload_system_symbols/upload_system_symbols.go
toolkit/crashreporter/google-breakpad/src/tools/solaris/dump_syms/moz.build
toolkit/crashreporter/google-breakpad/src/tools/tools.gyp
toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/dump_syms.exe
toolkit/crashreporter/google-breakpad/src/tools/windows/binaries/symupload.exe
toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.cc
toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.gyp
toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.h
toolkit/crashreporter/google-breakpad/src/tools/windows/converter/ms_symbol_server_converter.vcproj
toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.gyp
toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms.vcproj
toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/dump_syms_unittest.cc
toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.cc
toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.pdb
toolkit/crashreporter/google-breakpad/src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym
toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.cc
toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.gyp
toolkit/crashreporter/google-breakpad/src/tools/windows/symupload/symupload.vcproj
toolkit/crashreporter/moz.build
toolkit/crashreporter/test/moz.build
toolkit/crashreporter/tools/symbolstore.py
toolkit/moz.build
tools/profiler/core/shim_mac_dump_syms.h
tools/profiler/core/shim_mac_dump_syms.mm
tools/profiler/gecko/local_debug_info_symbolizer.cc
tools/profiler/gecko/local_debug_info_symbolizer.h
tools/profiler/moz.build
xpcom/threads/ThreadStackHelper.cpp
xpcom/threads/moz.build
--- a/testing/mochitest/Makefile.in
+++ b/testing/mochitest/Makefile.in
@@ -32,18 +32,21 @@ TEST_HARNESS_BINS := \
 ifeq ($(OS_ARCH),WINNT)
 TEST_HARNESS_BINS += \
   crashinject$(BIN_SUFFIX) \
   crashinjectdll$(DLL_SUFFIX) \
   minidumpwriter$(BIN_SUFFIX) \
   $(NULL)
 endif
 
+# The fileid utility depends on mozglue. See bug 1069556.
 ifeq ($(OS_ARCH),Darwin)
-TEST_HARNESS_BINS += fix_macosx_stack.py
+TEST_HARNESS_BINS += \
+  fix_macosx_stack.py \
+  $(DLL_PREFIX)mozglue$(DLL_SUFFIX)
 endif
 
 ifeq ($(OS_ARCH),Linux)
 TEST_HARNESS_BINS += fix_linux_stack.py
 endif
 
 ifdef MOZ_X11
 ifneq (,$(filter gtk%,$(MOZ_WIDGET_TOOLKIT)))
--- a/testing/tools/fileid/moz.build
+++ b/testing/tools/fileid/moz.build
@@ -16,14 +16,13 @@ if CONFIG['OS_ARCH'] == 'Darwin':
         'breakpad_mac_common_s',
     ]
     SOURCES += ['mac_fileid.cpp']
 
 
 if CONFIG['OS_ARCH'] == 'Linux' or CONFIG['OS_ARCH'] == 'Darwin':
     USE_LIBS += [
         'breakpad_common_s',
-        'breakpad_logging',
     ]
     LOCAL_INCLUDES += [
         '/toolkit/crashreporter/google-breakpad/src',
     ]
-    Program('fileid')
+    GeckoProgram('fileid', linkage=None)
--- a/testing/xpcshell/selftest.py
+++ b/testing/xpcshell/selftest.py
@@ -444,23 +444,25 @@ class XPCShellTestsTests(unittest.TestCa
                 testlines.extend(t[1:])
         self.manifest = self.writeFile("xpcshell.ini", """
 [DEFAULT]
 head =
 tail =
 
 """ + "\n".join(testlines))
 
-    def assertTestResult(self, expected, shuffle=False, verbose=False):
+    def assertTestResult(self, expected, shuffle=False, verbose=False,
+                         symbolsPath=None):
         """
         Assert that self.x.runTests with manifest=self.manifest
         returns |expected|.
         """
         self.assertEquals(expected,
                           self.x.runTests(xpcshellBin,
+                                          symbolsPath=symbolsPath,
                                           manifest=self.manifest,
                                           mozInfo=mozinfo.info,
                                           shuffle=shuffle,
                                           verbose=verbose,
                                           sequential=True,
                                           testingModulesDir=os.path.join(objdir, '_tests', 'modules'),
                                           utility_path=self.utility_path),
                           msg="""Tests should have %s, log:
@@ -520,28 +522,35 @@ tail =
         self.assertNotInLog(TEST_PASS_STRING)
 
     @unittest.skipIf(mozinfo.isWin or not mozinfo.info.get('debug'),
                      'We don\'t have a stack fixer on hand for windows.')
     def testAssertStack(self):
         """
         When an assertion is hit, we should produce a useful stack.
         """
+        # Passing symbolsPath will cause the stack fixer to use
+        # fix_stack_using_bpsyms and exercise the fileid utility in
+        # this test.
+        symbolsPath = None
+        candidate_path = os.path.join(build_obj.distdir, 'crashreporter-symbols')
+        if os.path.isdir(candidate_path):
+          symbolsPath = candidate_path
+
         self.writeFile("test_assert.js", '''
           add_test(function test_asserts_immediately() {
             Components.classes["@mozilla.org/xpcom/debug;1"]
                       .getService(Components.interfaces.nsIDebug2)
                       .assertion("foo", "assertion failed", "test.js", 1)
             run_next_test();
           });
         ''')
 
         self.writeManifest(["test_assert.js"])
-
-        self.assertTestResult(False)
+        self.assertTestResult(False, symbolsPath=symbolsPath)
 
         self.assertInLog("###!!! ASSERTION")
         log_lines = self.log.getvalue().splitlines()
         line_pat = "#\d\d:"
         unknown_pat = "#\d\d\: \?\?\?\[.* \+0x[a-f0-9]+\]"
         self.assertFalse(any(re.search(unknown_pat, line) for line in log_lines),
                          "An stack frame without symbols was found in\n%s" % pprint.pformat(log_lines))
         self.assertTrue(any(re.search(line_pat, line) for line in log_lines),
deleted file mode 100644
--- a/toolkit/crashreporter/Makefile.in
+++ /dev/null
@@ -1,15 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-ifeq ($(OS_TARGET),Android)
-# NDK5 workarounds
-TARGET_LOCAL_INCLUDES = \
-  -I$(topsrcdir)/toolkit/crashreporter/google-breakpad/src/common/android/include/ \
-  $(NULL)
-endif
-
-include $(topsrcdir)/config/rules.mk
-
-check::
-	$(PYTHON) $(srcdir)/tools/unit-symbolstore.py
deleted file mode 100644
--- a/toolkit/crashreporter/breakpad-logging/BreakpadLogging.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "BreakpadLogging.h"
-
-#include <ostream>
-
-namespace mozilla {
-
-// An output stream that acts like /dev/null and drops all output directed to it
-// Passing 0 here causes the ostream to enter an error state, and so it silently
-// drops all output directed to it.
-std::ostream gNullStream(0);
-
-} // namespace mozilla
deleted file mode 100644
--- a/toolkit/crashreporter/breakpad-logging/BreakpadLogging.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef BreakpadLogging_h
-#define BreakpadLogging_h
-
-#include <ostream>
-
-namespace mozilla {
-
-// An output stream that acts like /dev/null and drops all output directed to it
-extern std::ostream gNullStream;
-
-} // namespace mozilla
-
-// Override the breakpad info stream to disable INFO logs
-#define BPLOG_INFO_STREAM mozilla::gNullStream
-
-#endif // BreakpadLogging_h
deleted file mode 100644
--- a/toolkit/crashreporter/breakpad-logging/moz.build
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-UNIFIED_SOURCES += [
-    'BreakpadLogging.cpp',
-]
-
-Library('breakpad_logging')
-
-FINAL_LIBRARY = 'xul'
-
-with Files('**'):
-    BUG_COMPONENT = ('Toolkit', 'Breakpad Integration')
new file mode 100644
--- /dev/null
+++ b/toolkit/crashreporter/breakpad-patches/00-arm-exidx-rollup.patch
@@ -0,0 +1,1347 @@
+diff --git a/Makefile.am b/Makefile.am
+index 42386be..e8f7402 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -524,6 +524,8 @@ src_tools_linux_dump_syms_dump_syms_SOURCES = \
+ 	src/common/dwarf/bytereader.cc \
+ 	src/common/dwarf/dwarf2diehandler.cc \
+ 	src/common/dwarf/dwarf2reader.cc \
++	src/common/arm_ex_reader.cc \
++	src/common/arm_ex_to_module.cc \
+ 	src/common/linux/crc32.cc \
+ 	src/common/linux/dump_symbols.cc \
+ 	src/common/linux/elf_symbols_to_module.cc \
+@@ -573,6 +575,8 @@ src_tools_mac_dump_syms_dump_syms_CXXFLAGS= \
+ 	-DHAVE_MACH_O_NLIST_H
+ 
+ src_common_dumper_unittest_SOURCES = \
++	src/common/arm_ex_reader.cc \
++	src/common/arm_ex_to_module.cc \
+ 	src/common/byte_cursor_unittest.cc \
+ 	src/common/dwarf_cfi_to_module.cc \
+ 	src/common/dwarf_cfi_to_module_unittest.cc \
+@@ -1336,6 +1340,10 @@ EXTRA_DIST = \
+ 	src/common/linux/crc32.cc \
+ 	src/common/linux/dump_symbols.cc \
+ 	src/common/linux/dump_symbols.h \
++	src/common/arm_ex_reader.cc \
++	src/common/arm_ex_reader.h \
++	src/common/arm_ex_to_module.cc \
++	src/common/arm_ex_to_module.h \
+ 	src/common/linux/elf_symbols_to_module.cc \
+ 	src/common/linux/elf_symbols_to_module.h \
+ 	src/common/linux/elfutils.cc \
+diff --git a/src/common/arm_ex_reader.cc b/src/common/arm_ex_reader.cc
+new file mode 100644
+index 0000000..2d1ed98
+--- /dev/null
++++ b/src/common/arm_ex_reader.cc
+@@ -0,0 +1,487 @@
++
++/* libunwind - a platform-independent unwind library
++   Copyright 2011 Linaro Limited
++
++This file is part of libunwind.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++"Software"), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++// Copyright (c) 2010 Google Inc.
++// All rights reserved.
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++//     * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++//     * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++//     * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++
++// Derived from libunwind, with extensive modifications.
++
++
++#include "common/arm_ex_reader.h"
++
++#include <assert.h>
++#include <stdio.h>
++
++// This file, in conjunction with arm_ex_to_module.cc, translates
++// EXIDX unwind information into the same format that Breakpad uses
++// for CFI information.  Hence Breakpad's CFI unwinding abilities
++// also become usable for EXIDX.
++//
++// See: "Exception Handling ABI for the ARM Architecture", ARM IHI 0038A
++// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf
++
++// EXIDX data is presented in two parts:
++//
++// * an index table.  This contains two words per routine,
++//   the first of which identifies the routine, and the second
++//   of which is a reference to the unwind bytecode.  If the
++//   bytecode is very compact -- 3 bytes or less -- it can be
++//   stored directly in the second word.
++//
++// * an area containing the unwind bytecodes.
++
++// General flow is: ExceptionTableInfo::Start iterates over all
++// of the index table entries (pairs).  For each entry, it:
++//
++// * calls ExceptionTableInfo::ExtabEntryExtract to copy the bytecode
++//   out into an intermediate buffer.
++
++// * uses ExceptionTableInfo::ExtabEntryDecode to parse the intermediate
++//   buffer.  Each bytecode instruction is bundled into a
++//   arm_ex_to_module::extab_data structure, and handed to ..
++//
++// * .. ARMExToModule::ImproveStackFrame, which in turn hands it to
++//   ARMExToModule::TranslateCmd, and that generates the pseudo-CFI
++//   records that Breakpad stores.
++
++#define ARM_EXIDX_CANT_UNWIND 0x00000001
++#define ARM_EXIDX_COMPACT     0x80000000
++#define ARM_EXTBL_OP_FINISH   0xb0
++#define ARM_EXIDX_TABLE_LIMIT (255*4)
++
++namespace arm_ex_reader {
++
++using arm_ex_to_module::ARM_EXIDX_CMD_FINISH;
++using arm_ex_to_module::ARM_EXIDX_CMD_SUB_FROM_VSP;
++using arm_ex_to_module::ARM_EXIDX_CMD_ADD_TO_VSP;
++using arm_ex_to_module::ARM_EXIDX_CMD_REG_POP;
++using arm_ex_to_module::ARM_EXIDX_CMD_REG_TO_SP;
++using arm_ex_to_module::ARM_EXIDX_CMD_VFP_POP;
++using arm_ex_to_module::ARM_EXIDX_CMD_WREG_POP;
++using arm_ex_to_module::ARM_EXIDX_CMD_WCGR_POP;
++using arm_ex_to_module::ARM_EXIDX_CMD_RESERVED;
++using arm_ex_to_module::ARM_EXIDX_CMD_REFUSED;
++using arm_ex_to_module::exidx_entry;
++using arm_ex_to_module::ARM_EXIDX_VFP_SHIFT_16;
++using arm_ex_to_module::ARM_EXIDX_VFP_FSTMD;
++using google_breakpad::MemoryRange;
++
++
++static void* Prel31ToAddr(const void* addr) {
++  uint32_t offset32 = *reinterpret_cast<const uint32_t*>(addr);
++  // sign extend offset32[30:0] to 64 bits -- copy bit 30 to positions
++  // 63:31 inclusive.
++  uint64_t offset64 = offset32;
++  if (offset64 & (1ULL << 30))
++    offset64 |= 0xFFFFFFFF80000000ULL;
++  else
++    offset64 &= 0x000000007FFFFFFFULL;
++  return ((char*)addr) + (uintptr_t)offset64;
++}
++
++
++// Extract unwind bytecode for the function denoted by |entry| into |buf|,
++// and return the number of bytes of |buf| written, along with a code
++// indicating the outcome.
++
++ExceptionTableInfo::ExExtractResult ExceptionTableInfo::ExtabEntryExtract(
++    const struct exidx_entry* entry,
++    uint8_t* buf, size_t buf_size,
++    size_t* buf_used) {
++  MemoryRange mr_out(buf, buf_size);
++
++  *buf_used = 0;
++
++# define PUT_BUF_U8(_byte) \
++  do { if (!mr_out.Covers(*buf_used, 1)) return ExOutBufOverflow; \
++       buf[(*buf_used)++] = (_byte); } while (0)
++
++# define GET_EX_U32(_lval, _addr, _sec_mr) \
++  do { if (!(_sec_mr).Covers(reinterpret_cast<const uint8_t*>(_addr) \
++                             - (_sec_mr).data(), 4)) \
++         return ExInBufOverflow; \
++       (_lval) = *(reinterpret_cast<const uint32_t*>(_addr)); } while (0)
++
++# define GET_EXIDX_U32(_lval, _addr) \
++            GET_EX_U32(_lval, _addr, mr_exidx_)
++# define GET_EXTAB_U32(_lval, _addr) \
++            GET_EX_U32(_lval, _addr, mr_extab_)
++
++  uint32_t data;
++  GET_EXIDX_U32(data, &entry->data);
++
++  // A function can be marked CANT_UNWIND if (eg) it is known to be
++  // at the bottom of the stack.
++  if (data == ARM_EXIDX_CANT_UNWIND)
++    return ExCantUnwind;
++
++  uint32_t  pers;          // personality number
++  uint32_t  extra;         // number of extra data words required
++  uint32_t  extra_allowed; // number of extra data words allowed
++  uint32_t* extbl_data;    // the handler entry, if not inlined
++
++  if (data & ARM_EXIDX_COMPACT) {
++    // The handler table entry has been inlined into the index table entry.
++    // In this case it can only be an ARM-defined compact model, since
++    // bit 31 is 1.  Only personalities 0, 1 and 2 are defined for the
++    // ARM compact model, but 1 and 2 are "Long format" and may require
++    // extra data words.  Hence the allowable personalities here are:
++    //   personality 0, in which case 'extra' has no meaning
++    //   personality 1, with zero extra words
++    //   personality 2, with zero extra words
++    extbl_data = NULL;
++    pers  = (data >> 24) & 0x0F;
++    extra = (data >> 16) & 0xFF;
++    extra_allowed = 0;
++  }
++  else {
++    // The index table entry is a pointer to the handler entry.  Note
++    // that Prel31ToAddr will read the given address, but we already
++    // range-checked above.
++    extbl_data = reinterpret_cast<uint32_t*>(Prel31ToAddr(&entry->data));
++    GET_EXTAB_U32(data, extbl_data);
++    if (!(data & ARM_EXIDX_COMPACT)) {
++      // This denotes a "generic model" handler.  That will involve
++      // executing arbitary machine code, which is something we
++      // can't represent here; hence reject it.
++      return ExCantRepresent;
++    }
++    // So we have a compact model representation.  Again, 3 possible
++    // personalities, but this time up to 255 allowable extra words.
++    pers  = (data >> 24) & 0x0F;
++    extra = (data >> 16) & 0xFF;
++    extra_allowed = 255;
++    extbl_data++;
++  }
++
++  // Now look at the the handler table entry.  The first word is
++  // |data| and subsequent words start at |*extbl_data|.  The number
++  // of extra words to use is |extra|, provided that the personality
++  // allows extra words.  Even if it does, none may be available --
++  // extra_allowed is the maximum number of extra words allowed. */
++  if (pers == 0) {
++    // "Su16" in the documentation -- 3 unwinding insn bytes
++    // |extra| has no meaning here; instead that byte is an unwind-info byte
++    PUT_BUF_U8(data >> 16);
++    PUT_BUF_U8(data >> 8);
++    PUT_BUF_U8(data);
++  }
++  else if ((pers == 1 || pers == 2) && extra <= extra_allowed) {
++    // "Lu16" or "Lu32" respectively -- 2 unwinding insn bytes,
++    // and up to 255 extra words.
++    PUT_BUF_U8(data >> 8);
++    PUT_BUF_U8(data);
++    for (uint32_t j = 0; j < extra; j++) {
++      GET_EXTAB_U32(data, extbl_data);
++      extbl_data++;
++      PUT_BUF_U8(data >> 24);
++      PUT_BUF_U8(data >> 16);
++      PUT_BUF_U8(data >> 8);
++      PUT_BUF_U8(data >> 0);
++    }
++  }
++  else {
++    // The entry is invalid.
++    return ExInvalid;
++  }
++
++  // Make sure the entry is terminated with "FINISH"
++  if (*buf_used > 0 && buf[(*buf_used) - 1] != ARM_EXTBL_OP_FINISH)
++    PUT_BUF_U8(ARM_EXTBL_OP_FINISH);
++
++  return ExSuccess;
++
++# undef GET_EXTAB_U32
++# undef GET_EXIDX_U32
++# undef GET_U32
++# undef PUT_BUF_U8
++}
++
++
++// Take the unwind information extracted by ExtabEntryExtract
++// and parse it into frame-unwind instructions.  These are as
++// specified in "Table 4, ARM-defined frame-unwinding instructions"
++// in the specification document detailed in comments at the top
++// of this file.
++//
++// This reads from |buf[0, +data_size)|.  It checks for overruns of
++// the input buffer and returns a negative value if that happens, or
++// for any other failure cases.  It returns zero in case of success.
++int ExceptionTableInfo::ExtabEntryDecode(const uint8_t* buf, size_t buf_size) {
++  if (buf == NULL || buf_size == 0)
++    return -1;
++
++  MemoryRange mr_in(buf, buf_size);
++  const uint8_t* buf_initially = buf;
++
++# define GET_BUF_U8(_lval) \
++  do { if (!mr_in.Covers(buf - buf_initially, 1)) return -1; \
++       (_lval) = *(buf++); } while (0)
++
++  const uint8_t* end = buf + buf_size;
++
++  while (buf < end) {
++    struct arm_ex_to_module::extab_data edata;
++    memset(&edata, 0, sizeof(edata));
++
++    uint8_t op;
++    GET_BUF_U8(op);
++    if ((op & 0xc0) == 0x00) {
++      // vsp = vsp + (xxxxxx << 2) + 4
++      edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP;
++      edata.data = (((int)op & 0x3f) << 2) + 4;
++    } else if ((op & 0xc0) == 0x40) {
++      // vsp = vsp - (xxxxxx << 2) - 4
++      edata.cmd = ARM_EXIDX_CMD_SUB_FROM_VSP;
++      edata.data = (((int)op & 0x3f) << 2) + 4;
++    } else if ((op & 0xf0) == 0x80) {
++      uint8_t op2;
++      GET_BUF_U8(op2);
++      if (op == 0x80 && op2 == 0x00) {
++        // Refuse to unwind
++        edata.cmd = ARM_EXIDX_CMD_REFUSED;
++      } else {
++        // Pop up to 12 integer registers under masks {r15-r12},{r11-r4}
++        edata.cmd = ARM_EXIDX_CMD_REG_POP;
++        edata.data = ((op & 0xf) << 8) | op2;
++        edata.data = edata.data << 4;
++      }
++    } else if ((op & 0xf0) == 0x90) {
++      if (op == 0x9d || op == 0x9f) {
++        // 9d: Reserved as prefix for ARM register to register moves
++        // 9f: Reserved as perfix for Intel Wireless MMX reg to reg moves
++        edata.cmd = ARM_EXIDX_CMD_RESERVED;
++      } else {
++        // Set vsp = r[nnnn]
++        edata.cmd = ARM_EXIDX_CMD_REG_TO_SP;
++        edata.data = op & 0x0f;
++      }
++    } else if ((op & 0xf0) == 0xa0) {
++      // Pop r4 to r[4+nnn],          or
++      // Pop r4 to r[4+nnn] and r14   or
++      unsigned end = (op & 0x07);
++      edata.data = (1 << (end + 1)) - 1;
++      edata.data = edata.data << 4;
++      if (op & 0x08) edata.data |= 1 << 14;
++      edata.cmd = ARM_EXIDX_CMD_REG_POP;
++    } else if (op == ARM_EXTBL_OP_FINISH) {
++      // Finish
++      edata.cmd = ARM_EXIDX_CMD_FINISH;
++      buf = end;
++    } else if (op == 0xb1) {
++      uint8_t op2;
++      GET_BUF_U8(op2);
++      if (op2 == 0 || (op2 & 0xf0)) {
++        // Spare
++        edata.cmd = ARM_EXIDX_CMD_RESERVED;
++      } else {
++        // Pop integer registers under mask {r3,r2,r1,r0}
++        edata.cmd = ARM_EXIDX_CMD_REG_POP;
++        edata.data = op2 & 0x0f;
++      }
++    } else if (op == 0xb2) {
++      // vsp = vsp + 0x204 + (uleb128 << 2)
++      uint64_t offset = 0;
++      uint8_t byte, shift = 0;
++      do {
++        GET_BUF_U8(byte);
++        offset |= (byte & 0x7f) << shift;
++        shift += 7;
++      } while ((byte & 0x80) && buf < end);
++      edata.data = offset * 4 + 0x204;
++      edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP;
++    } else if (op == 0xb3 || op == 0xc8 || op == 0xc9) {
++      // b3: Pop VFP regs D[ssss]    to D[ssss+cccc],    FSTMFDX-ishly
++      // c8: Pop VFP regs D[16+ssss] to D[16+ssss+cccc], FSTMFDD-ishly
++      // c9: Pop VFP regs D[ssss]    to D[ssss+cccc],    FSTMFDD-ishly
++      edata.cmd = ARM_EXIDX_CMD_VFP_POP;
++      GET_BUF_U8(edata.data);
++      if (op == 0xc8) edata.data |= ARM_EXIDX_VFP_SHIFT_16;
++      if (op != 0xb3) edata.data |= ARM_EXIDX_VFP_FSTMD;
++    } else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) {
++      // b8: Pop VFP regs D[8] to D[8+nnn], FSTMFDX-ishly
++      // d0: Pop VFP regs D[8] to D[8+nnn], FSTMFDD-ishly
++      edata.cmd = ARM_EXIDX_CMD_VFP_POP;
++      edata.data = 0x80 | (op & 0x07);
++      if ((op & 0xf8) == 0xd0) edata.data |= ARM_EXIDX_VFP_FSTMD;
++    } else if (op >= 0xc0 && op <= 0xc5) {
++      // Intel Wireless MMX pop wR[10]-wr[10+nnn], nnn != 6,7
++      edata.cmd = ARM_EXIDX_CMD_WREG_POP;
++      edata.data = 0xa0 | (op & 0x07);
++    } else if (op == 0xc6) {
++      // Intel Wireless MMX pop wR[ssss] to wR[ssss+cccc]
++      edata.cmd = ARM_EXIDX_CMD_WREG_POP;
++      GET_BUF_U8(edata.data);
++    } else if (op == 0xc7) {
++      uint8_t op2;
++      GET_BUF_U8(op2);
++      if (op2 == 0 || (op2 & 0xf0)) {
++        // Spare
++        edata.cmd = ARM_EXIDX_CMD_RESERVED;
++      } else {
++        // Intel Wireless MMX pop wCGR registers under mask {wCGR3,2,1,0}
++        edata.cmd = ARM_EXIDX_CMD_WCGR_POP;
++        edata.data = op2 & 0x0f;
++      }
++    } else {
++      // Spare
++      edata.cmd = ARM_EXIDX_CMD_RESERVED;
++    }
++
++    int ret = handler_->ImproveStackFrame(&edata);
++    if (ret < 0)
++      return ret;
++  }
++  return 0;
++
++# undef GET_BUF_U8
++}
++
++void ExceptionTableInfo::Start() {
++  const struct exidx_entry* start
++    = reinterpret_cast<const struct exidx_entry*>(mr_exidx_.data());
++  const struct exidx_entry* end
++    = reinterpret_cast<const struct exidx_entry*>(mr_exidx_.data()
++                                                  + mr_exidx_.length());
++
++  // Iterate over each of the EXIDX entries (pairs of 32-bit words).
++  // These occupy the entire .exidx section.
++  for (const struct exidx_entry* entry = start; entry < end; ++entry) {
++    // Figure out the code address range that this table entry is
++    // associated with.
++    uint32_t addr = (reinterpret_cast<char*>(Prel31ToAddr(&entry->addr))
++                     - mapping_addr_ + loading_addr_) & 0x7fffffff;
++    uint32_t next_addr;
++    if (entry < end - 1) {
++      next_addr = (reinterpret_cast<char*>(Prel31ToAddr(&((entry + 1)->addr)))
++                   - mapping_addr_ + loading_addr_) & 0x7fffffff;
++    } else {
++      // This is the last EXIDX entry in the sequence, so we don't
++      // have an address for the start of the next function, to limit
++      // this one.  Instead use the address of the last byte of the
++      // text section associated with this .exidx section, that we
++      // have been given.  So as to avoid junking up the CFI unwind
++      // tables with absurdly large address ranges in the case where
++      // text_last_svma_ is wrong, only use the value if it is nonzero
++      // and within one page of |addr|.  Otherwise assume a length of 1.
++      //
++      // In some cases, gcc has been observed to finish the exidx
++      // section with an entry of length 1 marked CANT_UNWIND,
++      // presumably exactly for the purpose of giving a definite
++      // length for the last real entry, without having to look at
++      // text segment boundaries.
++      bool plausible = false;
++      next_addr = addr + 1;
++      if (text_last_svma_ != 0) {
++        uint32_t maybe_next_addr = text_last_svma_ + 1;
++        if (maybe_next_addr > addr && maybe_next_addr - addr <= 4096) {
++          next_addr = maybe_next_addr;
++          plausible = true;
++        }
++      }
++      if (!plausible) {
++        fprintf(stderr, "ExceptionTableInfo: implausible EXIDX last entry size "
++                "%d, using 1 instead.", (int32_t)(text_last_svma_ - addr));
++      }
++    }
++
++    // Extract the unwind info into |buf|.  This might fail for
++    // various reasons.  It involves reading both the .exidx and
++    // .extab sections.  All accesses to those sections are
++    // bounds-checked.
++    uint8_t buf[ARM_EXIDX_TABLE_LIMIT];
++    size_t buf_used = 0;
++    ExExtractResult res = ExtabEntryExtract(entry, buf, sizeof(buf), &buf_used);
++    if (res != ExSuccess) {
++      // Couldn't extract the unwind info, for some reason.  Move on.
++      switch (res) {
++        case ExInBufOverflow:
++          fprintf(stderr, "ExtabEntryExtract: .exidx/.extab section overrun");
++          break;
++        case ExOutBufOverflow:
++          fprintf(stderr, "ExtabEntryExtract: bytecode buffer overflow");
++          break;
++        case ExCantUnwind:
++          fprintf(stderr, "ExtabEntryExtract: function is marked CANT_UNWIND");
++          break;
++        case ExCantRepresent:
++          fprintf(stderr, "ExtabEntryExtract: bytecode can't be represented");
++          break;
++        case ExInvalid:
++          fprintf(stderr, "ExtabEntryExtract: index table entry is invalid");
++          break;
++        default:
++          fprintf(stderr, "ExtabEntryExtract: unknown error: %d", (int)res);
++          break;
++      }
++      continue;
++    }
++
++    // Finally, work through the unwind instructions in |buf| and
++    // create CFI entries that Breakpad can use.  This can also fail.
++    // First, add a new stack frame entry, into which ExtabEntryDecode
++    // will write the CFI entries.
++    if (!handler_->HasStackFrame(addr, next_addr - addr)) {
++      handler_->AddStackFrame(addr, next_addr - addr);
++      int ret = ExtabEntryDecode(buf, buf_used);
++      if (ret < 0) {
++	handler_->DeleteStackFrame();
++	fprintf(stderr, "ExtabEntryDecode: failed with error code: %d", ret);
++	continue;
++      }
++      handler_->SubmitStackFrame();
++    }
++
++  } /* iterating over .exidx */
++}
++
++}  // namespace arm_ex_reader
+diff --git a/src/common/arm_ex_reader.h b/src/common/arm_ex_reader.h
+new file mode 100644
+index 0000000..9b54e8a
+--- /dev/null
++++ b/src/common/arm_ex_reader.h
+@@ -0,0 +1,114 @@
++/* libunwind - a platform-independent unwind library
++   Copyright 2011 Linaro Limited
++
++This file is part of libunwind.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++"Software"), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++// Copyright (c) 2010 Google Inc.
++// All rights reserved.
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++//     * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++//     * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++//     * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++
++// Derived from libunwind, with extensive modifications.
++
++#ifndef COMMON_ARM_EX_READER_H__
++#define COMMON_ARM_EX_READER_H__
++
++#include "common/arm_ex_to_module.h"
++#include "common/memory_range.h"
++
++namespace arm_ex_reader {
++
++// This class is a reader for ARM unwind information
++// from .ARM.exidx and .ARM.extab sections.
++class ExceptionTableInfo {
++ public:
++  ExceptionTableInfo(const char* exidx, size_t exidx_size,
++                     const char* extab, size_t extab_size,
++                     uint32_t text_last_svma,
++                     arm_ex_to_module::ARMExToModule* handler,
++                     const char* mapping_addr,
++                     uint32_t loading_addr)
++      : mr_exidx_(google_breakpad::MemoryRange(exidx, exidx_size)),
++        mr_extab_(google_breakpad::MemoryRange(extab, extab_size)),
++        text_last_svma_(text_last_svma),
++        handler_(handler), mapping_addr_(mapping_addr),
++        loading_addr_(loading_addr) { }
++
++  ~ExceptionTableInfo() { }
++
++  // Parses the entries in .ARM.exidx and possibly
++  // in .ARM.extab tables, reports what we find to
++  // arm_ex_to_module::ARMExToModule.
++  void Start();
++
++ private:
++  google_breakpad::MemoryRange mr_exidx_;
++  google_breakpad::MemoryRange mr_extab_;
++  uint32_t text_last_svma_;
++  arm_ex_to_module::ARMExToModule* handler_;
++  const char* mapping_addr_;
++  uint32_t loading_addr_;
++
++  enum ExExtractResult {
++    ExSuccess,        // success
++    ExInBufOverflow,  // out-of-range while reading .exidx
++    ExOutBufOverflow, // output buffer is too small
++    ExCantUnwind,     // this function is marked CANT_UNWIND
++    ExCantRepresent,  // entry valid, but we can't represent it
++    ExInvalid         // entry is invalid
++  };
++  ExExtractResult
++    ExtabEntryExtract(const struct arm_ex_to_module::exidx_entry* entry,
++                      uint8_t* buf, size_t buf_size,
++                      size_t* buf_used);
++
++  int ExtabEntryDecode(const uint8_t* buf, size_t buf_size);
++};
++
++}  // namespace arm_ex_reader
++
++#endif // COMMON_ARM_EX_READER_H__
+diff --git a/src/common/arm_ex_to_module.cc b/src/common/arm_ex_to_module.cc
+new file mode 100644
+index 0000000..c326744
+--- /dev/null
++++ b/src/common/arm_ex_to_module.cc
+@@ -0,0 +1,209 @@
++
++/* libunwind - a platform-independent unwind library
++   Copyright 2011 Linaro Limited
++
++This file is part of libunwind.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++"Software"), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++// Copyright (c) 2010 Google Inc.
++// All rights reserved.
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++//     * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++//     * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++//     * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++
++// Derived from libunwind, with extensive modifications.
++
++#include "common/arm_ex_to_module.h"
++
++#include <stdio.h>
++#include <assert.h>
++
++// For big-picture comments on how the EXIDX reader works,
++// see arm_ex_reader.cc.
++
++#define ARM_EXBUF_START(x) (((x) >> 4) & 0x0f)
++#define ARM_EXBUF_COUNT(x) ((x) & 0x0f)
++#define ARM_EXBUF_END(x)   (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x))
++
++using google_breakpad::Module;
++
++namespace arm_ex_to_module {
++
++static const char* const regnames[] = {
++ "r0", "r1", "r2",  "r3",  "r4",  "r5", "r6", "r7",
++ "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc",
++ "f0", "f1", "f2",  "f3",  "f4",  "f5", "f6", "f7",
++ "fps", "cpsr"
++};
++
++// Translate command from extab_data to command for Module.
++int ARMExToModule::TranslateCmd(const struct extab_data* edata,
++                                Module::StackFrameEntry* entry, string& vsp) {
++  int ret = 0;
++  switch (edata->cmd) {
++    case ARM_EXIDX_CMD_FINISH:
++      /* Copy LR to PC if there isn't currently a rule for PC in force. */
++      if (entry->initial_rules.find("pc")
++          == entry->initial_rules.end()) {
++        if (entry->initial_rules.find("lr")
++            == entry->initial_rules.end()) {
++          entry->initial_rules["pc"] = "lr";
++        } else {
++          entry->initial_rules["pc"] = entry->initial_rules["lr"];
++        }
++      }
++      break;
++    case ARM_EXIDX_CMD_SUB_FROM_VSP:
++      {
++        char c[16];
++        sprintf(c, " %d -", edata->data);
++        vsp += c;
++      }
++      break;
++    case ARM_EXIDX_CMD_ADD_TO_VSP:
++      {
++        char c[16];
++        sprintf(c, " %d +", edata->data);
++        vsp += c;
++      }
++      break;
++    case ARM_EXIDX_CMD_REG_POP:
++      for (unsigned int i = 0; i < 16; i++) {
++        if (edata->data & (1 << i)) {
++          entry->initial_rules[regnames[i]]
++            = vsp + " ^";
++          vsp += " 4 +";
++        }
++      }
++      /* Set cfa in case the SP got popped. */
++      if (edata->data & (1 << 13)) {
++        vsp = entry->initial_rules["sp"];
++      }
++      break;
++    case ARM_EXIDX_CMD_REG_TO_SP: {
++      assert (edata->data < 16);
++      const char* const regname = regnames[edata->data];
++      if (entry->initial_rules.find(regname) == entry->initial_rules.end()) {
++        entry->initial_rules["sp"] = regname;
++      } else {
++        entry->initial_rules["sp"] = entry->initial_rules[regname];
++      }
++      vsp = entry->initial_rules["sp"];
++      break;
++    }
++    case ARM_EXIDX_CMD_VFP_POP:
++      /* Don't recover VFP registers, but be sure to adjust the stack
++         pointer. */
++      for (unsigned int i = ARM_EXBUF_START(edata->data);
++           i <= ARM_EXBUF_END(edata->data); i++) {
++        vsp += " 8 +";
++      }
++      if (!(edata->data & ARM_EXIDX_VFP_FSTMD)) {
++        vsp += " 4 +";
++      }
++      break;
++    case ARM_EXIDX_CMD_WREG_POP:
++      for (unsigned int i = ARM_EXBUF_START(edata->data);
++           i <= ARM_EXBUF_END(edata->data); i++) {
++        vsp += " 8 +";
++      }
++      break;
++    case ARM_EXIDX_CMD_WCGR_POP:
++      // Pop wCGR registers under mask {wCGR3,2,1,0}, hence "i < 4"
++      for (unsigned int i = 0; i < 4; i++) {
++        if (edata->data & (1 << i)) {
++          vsp += " 4 +";
++        }
++      }
++      break;
++    case ARM_EXIDX_CMD_REFUSED:
++    case ARM_EXIDX_CMD_RESERVED:
++      ret = -1;
++      break;
++  }
++  return ret;
++}
++
++bool ARMExToModule::HasStackFrame(uintptr_t addr, size_t size) {
++  // Invariant: the range [addr,covered) is covered by existing stack
++  // frame entries.
++  uintptr_t covered = addr;
++  while (covered < addr + size) {
++    const Module::StackFrameEntry *old_entry =
++      module_->FindStackFrameEntryByAddress(covered);
++    if (!old_entry) {
++      return false;
++    }
++    covered = old_entry->address + old_entry->size;
++  }
++  return true;
++}
++
++void ARMExToModule::AddStackFrame(uintptr_t addr, size_t size) {
++  stack_frame_entry_ = new Module::StackFrameEntry;
++  stack_frame_entry_->address = addr;
++  stack_frame_entry_->size = size;
++  stack_frame_entry_->initial_rules[".cfa"] = "sp";
++  vsp_ = "sp";
++}
++
++int ARMExToModule::ImproveStackFrame(const struct extab_data* edata) {
++  return TranslateCmd(edata, stack_frame_entry_, vsp_) ;
++}
++
++void ARMExToModule::DeleteStackFrame() {
++  delete stack_frame_entry_;
++}
++
++void ARMExToModule::SubmitStackFrame() {
++  // return address always winds up in pc
++  stack_frame_entry_->initial_rules[".ra"]
++    = stack_frame_entry_->initial_rules["pc"];
++  // the final value of vsp is the new value of sp
++  stack_frame_entry_->initial_rules["sp"] = vsp_;
++  module_->AddStackFrameEntry(stack_frame_entry_);
++}
++
++}  // namespace arm_ex_to_module
+diff --git a/src/common/arm_ex_to_module.h b/src/common/arm_ex_to_module.h
+new file mode 100644
+index 0000000..f413a16
+--- /dev/null
++++ b/src/common/arm_ex_to_module.h
+@@ -0,0 +1,119 @@
++/* libunwind - a platform-independent unwind library
++   Copyright 2011 Linaro Limited
++
++This file is part of libunwind.
++
++Permission is hereby granted, free of charge, to any person obtaining
++a copy of this software and associated documentation files (the
++"Software"), to deal in the Software without restriction, including
++without limitation the rights to use, copy, modify, merge, publish,
++distribute, sublicense, and/or sell copies of the Software, and to
++permit persons to whom the Software is furnished to do so, subject to
++the following conditions:
++
++The above copyright notice and this permission notice shall be
++included in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
++
++// Copyright (c) 2010 Google Inc.
++// All rights reserved.
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++//     * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++//     * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++//     * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++
++// Derived from libunwind, with extensive modifications.
++
++#ifndef COMMON_ARM_EX_TO_MODULE__
++#define COMMON_ARM_EX_TO_MODULE__
++
++#include "common/module.h"
++
++#include <string.h>
++
++namespace arm_ex_to_module {
++
++using google_breakpad::Module;
++
++typedef enum extab_cmd {
++  ARM_EXIDX_CMD_FINISH,
++  ARM_EXIDX_CMD_SUB_FROM_VSP,
++  ARM_EXIDX_CMD_ADD_TO_VSP,
++  ARM_EXIDX_CMD_REG_POP,
++  ARM_EXIDX_CMD_REG_TO_SP,
++  ARM_EXIDX_CMD_VFP_POP,
++  ARM_EXIDX_CMD_WREG_POP,
++  ARM_EXIDX_CMD_WCGR_POP,
++  ARM_EXIDX_CMD_RESERVED,
++  ARM_EXIDX_CMD_REFUSED,
++} extab_cmd_t;
++
++struct exidx_entry {
++  uint32_t addr;
++  uint32_t data;
++};
++
++struct extab_data {
++  extab_cmd_t cmd;
++  uint32_t data;
++};
++
++enum extab_cmd_flags {
++  ARM_EXIDX_VFP_SHIFT_16 = 1 << 16,
++  ARM_EXIDX_VFP_FSTMD = 1 << 17, // distinguishes FSTMxxD from FSTMxxX
++};
++
++// Receives information from arm_ex_reader::ExceptionTableInfo
++// and adds it to the Module object
++class ARMExToModule {
++ public:
++  ARMExToModule(Module* module)
++      : module_(module) { }
++  ~ARMExToModule() { }
++  bool HasStackFrame(uintptr_t addr, size_t size);
++  void AddStackFrame(uintptr_t addr, size_t size);
++  int ImproveStackFrame(const struct extab_data* edata);
++  void DeleteStackFrame();
++  void SubmitStackFrame();
++ private:
++  Module* module_;
++  Module::StackFrameEntry* stack_frame_entry_;
++  string vsp_;
++  int TranslateCmd(const struct extab_data* edata,
++                   Module::StackFrameEntry* entry,
++                   string& vsp);
++};
++
++} // namespace arm_ex_to_module
++
++#endif // COMMON_ARM_EX_TO_MODULE__
+diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
+index 1e96ca6..4222ce3 100644
+--- a/src/common/linux/dump_symbols.cc
++++ b/src/common/linux/dump_symbols.cc
+@@ -52,6 +52,7 @@
+ #include <utility>
+ #include <vector>
+ 
++#include "common/arm_ex_reader.h"
+ #include "common/dwarf/bytereader-inl.h"
+ #include "common/dwarf/dwarf2diehandler.h"
+ #include "common/dwarf_cfi_to_module.h"
+@@ -71,6 +72,11 @@
+ #endif
+ #include "common/using_std_string.h"
+ 
++#ifndef SHT_ARM_EXIDX
++// bionic and older glibc don't define this
++# define SHT_ARM_EXIDX (SHT_LOPROC + 1)
++#endif
++
+ // This namespace contains helper functions.
+ namespace {
+ 
+@@ -373,6 +379,52 @@ bool LoadDwarfCFI(const string& dwarf_filename,
+   return true;
+ }
+ 
++template<typename ElfClass>
++bool LoadARMexidx(const typename ElfClass::Ehdr* elf_header,
++                  const typename ElfClass::Shdr* exidx_section,
++                  const typename ElfClass::Shdr* extab_section,
++                  uint32_t loading_addr,
++                  Module* module) {
++  // To do this properly we need to know:
++  // * the bounds of the .ARM.exidx section in the mapped image
++  // * the bounds of the .ARM.extab section in the mapped image
++  // * the vma of the last byte in the text section associated with the .exidx
++  // The first two are easy.  The third is a bit tricky.  If we can't
++  // figure out what it is, just pass in zero.
++  const char *exidx_img
++    = GetOffset<ElfClass, char>(elf_header, exidx_section->sh_offset);
++  size_t exidx_size = exidx_section->sh_size;
++  const char *extab_img
++    = GetOffset<ElfClass, char>(elf_header, extab_section->sh_offset);
++  size_t extab_size = extab_section->sh_size;
++
++  // The sh_link field of the exidx section gives the section number
++  // for the associated text section.
++  uint32_t exidx_text_last_svma = 0;
++  int exidx_text_sno = exidx_section->sh_link;
++  typedef typename ElfClass::Shdr Shdr;
++  // |sections| points to the section header table
++  const Shdr* sections
++    = GetOffset<ElfClass, Shdr>(elf_header, elf_header->e_shoff);
++  const int num_sections = elf_header->e_shnum;
++  if (exidx_text_sno >= 0 && exidx_text_sno < num_sections) {
++    const Shdr* exidx_text_shdr = &sections[exidx_text_sno];
++    if (exidx_text_shdr->sh_size > 0) {
++      exidx_text_last_svma
++        = exidx_text_shdr->sh_addr + exidx_text_shdr->sh_size - 1;
++    }
++  }
++
++  arm_ex_to_module::ARMExToModule handler(module);
++  arm_ex_reader::ExceptionTableInfo
++    parser(exidx_img, exidx_size, extab_img, extab_size, exidx_text_last_svma,
++           &handler,
++           reinterpret_cast<const char*>(elf_header),
++           loading_addr);
++  parser.Start();
++  return true;
++}
++
+ bool LoadELF(const string& obj_file, MmapWrapper* map_wrapper,
+              void** elf_header) {
+   int obj_fd = open(obj_file.c_str(), O_RDONLY);
+@@ -756,6 +808,29 @@ bool LoadSymbols(const string& obj_file,
+     }
+   }
+ 
++  // ARM has special unwind tables that can be used.
++  const Shdr* arm_exidx_section =
++      FindElfSectionByName<ElfClass>(".ARM.exidx", SHT_ARM_EXIDX,
++                                     sections, names, names_end,
++                                     elf_header->e_shnum);
++  const Shdr* arm_extab_section =
++      FindElfSectionByName<ElfClass>(".ARM.extab", SHT_PROGBITS,
++                                     sections, names, names_end,
++                                     elf_header->e_shnum);
++  // Load information from these sections even if there is
++  // .debug_info, because some functions (e.g., hand-written or
++  // script-generated assembly) could have exidx entries but no DWARF.
++  // (For functions with both, the DWARF info that has already been
++  // parsed will take precedence.)
++  if (arm_exidx_section && arm_extab_section && options.symbol_data != NO_CFI) {
++    info->LoadedSection(".ARM.exidx");
++    info->LoadedSection(".ARM.extab");
++    bool result = LoadARMexidx<ElfClass>(elf_header,
++                                         arm_exidx_section, arm_extab_section,
++                                         loading_addr, module);
++    found_usable_info = found_usable_info || result;
++  }
++
+   if (!found_debug_info_section) {
+     fprintf(stderr, "%s: file contains no debugging information"
+             " (no \".stab\" or \".debug_info\" sections)\n",
+diff --git a/src/common/module.cc b/src/common/module.cc
+index fa798f4..ca52f9f 100644
+--- a/src/common/module.cc
++++ b/src/common/module.cc
+@@ -63,7 +63,7 @@ Module::~Module() {
+        it != functions_.end(); ++it) {
+     delete *it;
+   }
+-  for (vector<StackFrameEntry *>::iterator it = stack_frame_entries_.begin();
++  for (StackFrameEntrySet::iterator it = stack_frame_entries_.begin();
+        it != stack_frame_entries_.end(); ++it) {
+     delete *it;
+   }
+@@ -119,8 +119,14 @@ void Module::AddFunctions(vector<Function *>::iterator begin,
+     AddFunction(*it);
+ }
+ 
+-void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) {
+-  stack_frame_entries_.push_back(stack_frame_entry);
++void Module::AddStackFrameEntry(StackFrameEntry* stack_frame_entry) {
++  std::pair<StackFrameEntrySet::iterator,bool> ret =
++      stack_frame_entries_.insert(stack_frame_entry);
++  if (!ret.second) {
++    // Free the duplicate that was not inserted because this Module
++    // now owns it.
++    delete stack_frame_entry;
++  }
+ }
+ 
+ void Module::AddExtern(Extern *ext) {
+@@ -180,8 +186,25 @@ void Module::GetFiles(vector<File *> *vec) {
+     vec->push_back(it->second);
+ }
+ 
+-void Module::GetStackFrameEntries(vector<StackFrameEntry *> *vec) const {
+-  *vec = stack_frame_entries_;
++void Module::GetStackFrameEntries(vector<StackFrameEntry*>* vec) const {
++  vec->clear();
++  vec->insert(vec->begin(), stack_frame_entries_.begin(),
++              stack_frame_entries_.end());
++}
++
++Module::StackFrameEntry* Module::FindStackFrameEntryByAddress(Address address) {
++  StackFrameEntry search;
++  search.address = address;
++  StackFrameEntrySet::iterator it = stack_frame_entries_.upper_bound(&search);
++
++  if (it == stack_frame_entries_.begin())
++    return NULL;
++
++  it--;
++  if ((*it)->address <= address && address < (*it)->address + (*it)->size)
++    return *it;
++
++  return NULL;
+ }
+ 
+ void Module::AssignSourceIds() {
+@@ -286,7 +309,7 @@ bool Module::Write(std::ostream &stream, SymbolData symbol_data) {
+ 
+   if (symbol_data != NO_CFI) {
+     // Write out 'STACK CFI INIT' and 'STACK CFI' records.
+-    vector<StackFrameEntry *>::const_iterator frame_it;
++    StackFrameEntrySet::const_iterator frame_it;
+     for (frame_it = stack_frame_entries_.begin();
+          frame_it != stack_frame_entries_.end(); ++frame_it) {
+       StackFrameEntry *entry = *frame_it;
+diff --git a/src/common/module.h b/src/common/module.h
+index 65b5595..299bc38 100644
+--- a/src/common/module.h
++++ b/src/common/module.h
+@@ -176,6 +176,13 @@ class Module {
+     }
+   };
+ 
++  struct StackFrameEntryCompare {
++    bool operator() (const StackFrameEntry* lhs,
++                     const StackFrameEntry* rhs) const {
++      return lhs->address < rhs->address;
++    }
++  };
++
+   // Create a new module with the given name, operating system,
+   // architecture, and ID string.
+   Module(const string &name, const string &os, const string &architecture,
+@@ -256,6 +263,10 @@ class Module {
+   // a more appropriate interface.)
+   void GetStackFrameEntries(vector<StackFrameEntry *> *vec) const;
+ 
++  // If this module has a StackFrameEntry whose address range covers
++  // ADDRESS, return it. Otherwise return NULL.
++  StackFrameEntry* FindStackFrameEntryByAddress(Address address);
++
+   // Find those files in this module that are actually referred to by
+   // functions' line number data, and assign them source id numbers.
+   // Set the source id numbers for all other files --- unused by the
+@@ -316,6 +327,9 @@ class Module {
+   // A set containing Extern structures, sorted by address.
+   typedef set<Extern *, ExternCompare> ExternSet;
+ 
++  // A set containing StackFrameEntry structures, sorted by address.
++  typedef set<StackFrameEntry*, StackFrameEntryCompare> StackFrameEntrySet;
++
+   // The module owns all the files and functions that have been added
+   // to it; destroying the module frees the Files and Functions these
+   // point to.
+@@ -324,7 +338,7 @@ class Module {
+ 
+   // The module owns all the call frame info entries that have been
+   // added to it.
+-  vector<StackFrameEntry *> stack_frame_entries_;
++  StackFrameEntrySet stack_frame_entries_;
+ 
+   // The module owns all the externs that have been added to it;
+   // destroying the module frees the Externs these point to.
+diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
+index 0b64327..bf72736 100644
+--- a/src/common/module_unittest.cc
++++ b/src/common/module_unittest.cc
+@@ -326,11 +326,6 @@ TEST(Construct, AddFrames) {
+   m.Write(s, ALL_SYMBOL_DATA);
+   string contents = s.str();
+   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
+-               "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n"
+-               "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407"
+-               " .cfa: I think that I shall never see"
+-               " cannoli: a tree whose hungry mouth is prest"
+-               " stromboli: a poem lovely as a tree\n"
+                "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229"
+                " .cfa: Whose woods are these\n"
+                "STACK CFI 36682fad3763ffff"
+@@ -338,7 +333,12 @@ TEST(Construct, AddFrames) {
+                " stromboli: his house is in\n"
+                "STACK CFI 47ceb0f63c269d7f"
+                " calzone: the village though"
+-               " cannoli: he will not see me stopping here\n",
++               " cannoli: he will not see me stopping here\n"
++               "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407"
++               " .cfa: I think that I shall never see"
++               " cannoli: a tree whose hungry mouth is prest"
++               " stromboli: a poem lovely as a tree\n"
++               "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n",
+                contents.c_str());
+ 
+   // Check that GetStackFrameEntries works.
+@@ -346,10 +346,18 @@ TEST(Construct, AddFrames) {
+   m.GetStackFrameEntries(&entries);
+   ASSERT_EQ(3U, entries.size());
+   // Check first entry.
+-  EXPECT_EQ(0xddb5f41285aa7757ULL, entries[0]->address);
+-  EXPECT_EQ(0x1486493370dc5073ULL, entries[0]->size);
+-  ASSERT_EQ(0U, entries[0]->initial_rules.size());
+-  ASSERT_EQ(0U, entries[0]->rule_changes.size());
++  EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address);
++  EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size);
++  Module::RuleMap entry1_initial;
++  entry1_initial[".cfa"] = "Whose woods are these";
++  EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial));
++  Module::RuleChangeMap entry1_changes;
++  entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know";
++  entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in";
++  entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though";
++  entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
++    "he will not see me stopping here";
++  EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes));
+   // Check second entry.
+   EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address);
+   EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size);
+@@ -361,18 +369,10 @@ TEST(Construct, AddFrames) {
+   EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial));
+   ASSERT_EQ(0U, entries[1]->rule_changes.size());
+   // Check third entry.
+-  EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[2]->address);
+-  EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[2]->size);
+-  Module::RuleMap entry3_initial;
+-  entry3_initial[".cfa"] = "Whose woods are these";
+-  EXPECT_THAT(entries[2]->initial_rules, ContainerEq(entry3_initial));
+-  Module::RuleChangeMap entry3_changes;
+-  entry3_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know";
+-  entry3_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in";
+-  entry3_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though";
+-  entry3_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
+-    "he will not see me stopping here";
+-  EXPECT_THAT(entries[2]->rule_changes, ContainerEq(entry3_changes));
++  EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address);
++  EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size);
++  ASSERT_EQ(0U, entries[2]->initial_rules.size());
++  ASSERT_EQ(0U, entries[2]->rule_changes.size());
+ }
+ 
+ TEST(Construct, UniqueFiles) {
+@@ -544,3 +544,62 @@ TEST(Construct, FunctionsAndThumbExternsWithSameAddress) {
+                "PUBLIC cc00 0 arm_func\n",
+                contents.c_str());
+ }
++
++TEST(Lookup, StackFrameEntries) {
++  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
++
++  // First STACK CFI entry, with no initial rules or deltas.
++  Module::StackFrameEntry *entry1 = new Module::StackFrameEntry();
++  entry1->address = 0x2000;
++  entry1->size = 0x900;
++  m.AddStackFrameEntry(entry1);
++
++  // Second STACK CFI entry, with initial rules but no deltas.
++  Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
++  entry2->address = 0x3000;
++  entry2->size = 0x900;
++  entry2->initial_rules[".cfa"] = "I think that I shall never see";
++  entry2->initial_rules["stromboli"] = "a poem lovely as a tree";
++  entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest";
++  m.AddStackFrameEntry(entry2);
++
++  // Third STACK CFI entry, with initial rules and deltas.
++  Module::StackFrameEntry *entry3 = new Module::StackFrameEntry();
++  entry3->address = 0x1000;
++  entry3->size = 0x900;
++  entry3->initial_rules[".cfa"] = "Whose woods are these";
++  entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] =
++    "the village though";
++  entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
++    "he will not see me stopping here";
++  entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
++    "his house is in";
++  entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
++    "I think I know";
++  m.AddStackFrameEntry(entry3);
++
++  Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000);
++  EXPECT_EQ(entry3, s);
++  s = m.FindStackFrameEntryByAddress(0x18FF);
++  EXPECT_EQ(entry3, s);
++
++  s = m.FindStackFrameEntryByAddress(0x1900);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++  s = m.FindStackFrameEntryByAddress(0x1A00);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++
++  s = m.FindStackFrameEntryByAddress(0x2000);
++  EXPECT_EQ(entry1, s);
++  s = m.FindStackFrameEntryByAddress(0x28FF);
++  EXPECT_EQ(entry1, s);
++
++  s = m.FindStackFrameEntryByAddress(0x3000);
++  EXPECT_EQ(entry2, s);
++  s = m.FindStackFrameEntryByAddress(0x38FF);
++  EXPECT_EQ(entry2, s);
++
++  s = m.FindStackFrameEntryByAddress(0x3900);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++  s = m.FindStackFrameEntryByAddress(0x3A00);
++  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
++}
deleted file mode 100644
--- a/toolkit/crashreporter/breakpad-patches/00-module-api-extras.patch
+++ /dev/null
@@ -1,526 +0,0 @@
-# HG changeset patch
-# User Ted Mielczarek <ted@mielczarek.org>
-# Date 1352220493 18000
-# Node ID c3b1109dd392c16a9fe4e85da693010966dbbf0b
-# Parent  03db269a2868503cca9e80f62ce676aabbf967fd
-Add APIs for querying Module data
-R=glandium at https://breakpad.appspot.com/511003/
-
-diff --git a/src/common/module.cc b/src/common/module.cc
---- a/src/common/module.cc
-+++ b/src/common/module.cc
-@@ -58,17 +58,17 @@
- 
- Module::~Module() {
-   for (FileByNameMap::iterator it = files_.begin(); it != files_.end(); ++it)
-     delete it->second;
-   for (FunctionSet::iterator it = functions_.begin();
-        it != functions_.end(); ++it) {
-     delete *it;
-   }
--  for (vector<StackFrameEntry *>::iterator it = stack_frame_entries_.begin();
-+  for (StackFrameEntrySet::iterator it = stack_frame_entries_.begin();
-        it != stack_frame_entries_.end(); ++it) {
-     delete *it;
-   }
-   for (ExternSet::iterator it = externs_.begin(); it != externs_.end(); ++it)
-     delete *it;
- }
- 
- void Module::SetLoadAddress(Address address) {
-@@ -88,39 +88,84 @@
- }
- 
- void Module::AddFunctions(vector<Function *>::iterator begin,
-                           vector<Function *>::iterator end) {
-   for (vector<Function *>::iterator it = begin; it != end; ++it)
-     AddFunction(*it);
- }
- 
--void Module::AddStackFrameEntry(StackFrameEntry *stack_frame_entry) {
--  stack_frame_entries_.push_back(stack_frame_entry);
-+void Module::AddStackFrameEntry(StackFrameEntry* stack_frame_entry) {
-+  std::pair<StackFrameEntrySet::iterator,bool> ret =
-+      stack_frame_entries_.insert(stack_frame_entry);
-+  if (!ret.second) {
-+    // Free the duplicate that was not inserted because this Module
-+    // now owns it.
-+    delete stack_frame_entry;
-+  }
- }
- 
- void Module::AddExtern(Extern *ext) {
-   std::pair<ExternSet::iterator,bool> ret = externs_.insert(ext);
-   if (!ret.second) {
-     // Free the duplicate that was not inserted because this Module
-     // now owns it.
-     delete ext;
-   }
- }
- 
- void Module::GetFunctions(vector<Function *> *vec,
-                           vector<Function *>::iterator i) {
-   vec->insert(i, functions_.begin(), functions_.end());
- }
- 
-+template<typename T>
-+bool EntryContainsAddress(T entry, Module::Address address) {
-+  return entry->address <= address && address < entry->address + entry->size;
-+}
-+
-+Module::Function* Module::FindFunctionByAddress(Address address) {
-+  Function search;
-+  search.address = address;
-+  // Ensure that name always sorts higher than the function name,
-+  // so that upper_bound always returns the function just after
-+  // the function containing this address.
-+  search.name = "\xFF";
-+  FunctionSet::iterator it = functions_.upper_bound(&search);
-+  if (it == functions_.begin())
-+    return NULL;
-+
-+  it--;
-+
-+  if (EntryContainsAddress(*it, address))
-+    return *it;
-+
-+  return NULL;
-+}
-+
- void Module::GetExterns(vector<Extern *> *vec,
-                         vector<Extern *>::iterator i) {
-   vec->insert(i, externs_.begin(), externs_.end());
- }
- 
-+Module::Extern* Module::FindExternByAddress(Address address) {
-+  Extern search;
-+  search.address = address;
-+  ExternSet::iterator it = externs_.upper_bound(&search);
-+
-+  if (it == externs_.begin())
-+    return NULL;
-+
-+  it--;
-+  if ((*it)->address > address)
-+    return NULL;
-+
-+  return *it;
-+}
-+
- Module::File *Module::FindFile(const string &name) {
-   // A tricky bit here.  The key of each map entry needs to be a
-   // pointer to the entry's File's name string.  This means that we
-   // can't do the initial lookup with any operation that would create
-   // an empty entry for us if the name isn't found (like, say,
-   // operator[] or insert do), because such a created entry's key will
-   // be a pointer the string passed as our argument.  Since the key of
-   // a map's value type is const, we can't fix it up once we've
-@@ -150,18 +195,35 @@
- }
- 
- void Module::GetFiles(vector<File *> *vec) {
-   vec->clear();
-   for (FileByNameMap::iterator it = files_.begin(); it != files_.end(); ++it)
-     vec->push_back(it->second);
- }
- 
--void Module::GetStackFrameEntries(vector<StackFrameEntry *> *vec) {
--  *vec = stack_frame_entries_;
-+void Module::GetStackFrameEntries(vector<StackFrameEntry *>* vec) {
-+  vec->clear();
-+  vec->insert(vec->begin(), stack_frame_entries_.begin(),
-+              stack_frame_entries_.end());
-+}
-+
-+Module::StackFrameEntry* Module::FindStackFrameEntryByAddress(Address address) {
-+  StackFrameEntry search;
-+  search.address = address;
-+  StackFrameEntrySet::iterator it = stack_frame_entries_.upper_bound(&search);
-+
-+  if (it == stack_frame_entries_.begin())
-+    return NULL;
-+
-+  it--;
-+  if (EntryContainsAddress(*it, address))
-+    return *it;
-+
-+  return NULL;
- }
- 
- void Module::AssignSourceIds() {
-   // First, give every source file an id of -1.
-   for (FileByNameMap::iterator file_it = files_.begin();
-        file_it != files_.end(); ++file_it) {
-     file_it->second->source_id = -1;
-   }
-@@ -256,17 +318,17 @@
-       stream << "PUBLIC " << hex
-              << (ext->address - load_address_) << " 0 "
-              << ext->name << dec << endl;
-     }
-   }
- 
-   if (symbol_data != NO_CFI) {
-     // Write out 'STACK CFI INIT' and 'STACK CFI' records.
--    vector<StackFrameEntry *>::const_iterator frame_it;
-+    StackFrameEntrySet::const_iterator frame_it;
-     for (frame_it = stack_frame_entries_.begin();
-          frame_it != stack_frame_entries_.end(); ++frame_it) {
-       StackFrameEntry *entry = *frame_it;
-       stream << "STACK CFI INIT " << hex
-              << (entry->address - load_address_) << " "
-              << entry->size << " " << dec;
-       if (!stream.good()
-           || !WriteRuleMap(entry->initial_rules, stream))
-diff --git a/src/common/module.h b/src/common/module.h
---- a/src/common/module.h
-+++ b/src/common/module.h
-@@ -164,16 +164,23 @@
- 
-   struct ExternCompare {
-     bool operator() (const Extern *lhs,
-                      const Extern *rhs) const {
-       return lhs->address < rhs->address;
-     }
-   };
- 
-+  struct StackFrameEntryCompare {
-+    bool operator() (const StackFrameEntry* lhs,
-+                     const StackFrameEntry* rhs) const {
-+      return lhs->address < rhs->address;
-+    }
-+  };
-+
-   // Create a new module with the given name, operating system,
-   // architecture, and ID string.
-   Module(const string &name, const string &os, const string &architecture,
-          const string &id);
-   ~Module();
- 
-   // Set the module's load address to LOAD_ADDRESS; addresses given
-   // for functions and lines will be written to the Breakpad symbol
-@@ -223,37 +230,49 @@
- 
-   // Insert pointers to the functions added to this module at I in
-   // VEC. The pointed-to Functions are still owned by this module.
-   // (Since this is effectively a copy of the function list, this is
-   // mostly useful for testing; other uses should probably get a more
-   // appropriate interface.)
-   void GetFunctions(vector<Function *> *vec, vector<Function *>::iterator i);
- 
-+  // If this module has a function at ADDRESS, return a pointer to it.
-+  // Otherwise, return NULL.
-+  Function* FindFunctionByAddress(Address address);
-+
-   // Insert pointers to the externs added to this module at I in
-   // VEC. The pointed-to Externs are still owned by this module.
-   // (Since this is effectively a copy of the extern list, this is
-   // mostly useful for testing; other uses should probably get a more
-   // appropriate interface.)
-   void GetExterns(vector<Extern *> *vec, vector<Extern *>::iterator i);
- 
-+  // If this module has an extern whose base address is less than ADDRESS,
-+  // return a pointer to it. Otherwise, return NULL.
-+  Extern* FindExternByAddress(Address address);
-+
-   // Clear VEC and fill it with pointers to the Files added to this
-   // module, sorted by name. The pointed-to Files are still owned by
-   // this module. (Since this is effectively a copy of the file list,
-   // this is mostly useful for testing; other uses should probably get
-   // a more appropriate interface.)
-   void GetFiles(vector<File *> *vec);
- 
-   // Clear VEC and fill it with pointers to the StackFrameEntry
-   // objects that have been added to this module. (Since this is
-   // effectively a copy of the stack frame entry list, this is mostly
-   // useful for testing; other uses should probably get
-   // a more appropriate interface.)
-   void GetStackFrameEntries(vector<StackFrameEntry *> *vec);
- 
-+  // If this module has a StackFrameEntry whose address range covers
-+  // ADDRESS, return it. Otherwise return NULL.
-+  StackFrameEntry* FindStackFrameEntryByAddress(Address address);
-+
-   // Find those files in this module that are actually referred to by
-   // functions' line number data, and assign them source id numbers.
-   // Set the source id numbers for all other files --- unused by the
-   // source line data --- to -1.  We do this before writing out the
-   // symbol file, at which point we omit any unused files.
-   void AssignSourceIds();
- 
-   // Call AssignSourceIds, and write this module to STREAM in the
-@@ -299,25 +318,28 @@
-   typedef map<const string *, File *, CompareStringPtrs> FileByNameMap;
- 
-   // A set containing Function structures, sorted by address.
-   typedef set<Function *, FunctionCompare> FunctionSet;
- 
-   // A set containing Extern structures, sorted by address.
-   typedef set<Extern *, ExternCompare> ExternSet;
- 
-+  // A set containing StackFrameEntry structures, sorted by address.
-+  typedef set<StackFrameEntry*, StackFrameEntryCompare> StackFrameEntrySet;
-+
-   // The module owns all the files and functions that have been added
-   // to it; destroying the module frees the Files and Functions these
-   // point to.
-   FileByNameMap files_;    // This module's source files.
-   FunctionSet functions_;  // This module's functions.
- 
-   // The module owns all the call frame info entries that have been
-   // added to it.
--  vector<StackFrameEntry *> stack_frame_entries_;
-+  StackFrameEntrySet stack_frame_entries_;
- 
-   // The module owns all the externs that have been added to it;
-   // destroying the module frees the Externs these point to.
-   ExternSet externs_;
- };
- 
- }  // namespace google_breakpad
- 
-diff --git a/src/common/module_unittest.cc b/src/common/module_unittest.cc
---- a/src/common/module_unittest.cc
-+++ b/src/common/module_unittest.cc
-@@ -329,63 +329,63 @@
-   entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
-     "I think I know";
-   m.AddStackFrameEntry(entry3);
- 
-   // Check that Write writes STACK CFI records properly.
-   m.Write(s, ALL_SYMBOL_DATA);
-   string contents = s.str();
-   EXPECT_STREQ("MODULE os-name architecture id-string name with spaces\n"
--               "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n"
--               "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407"
--               " .cfa: I think that I shall never see"
--               " cannoli: a tree whose hungry mouth is prest"
--               " stromboli: a poem lovely as a tree\n"
-                "STACK CFI INIT 5e8d0db0a7075c6c 1c7edb12a7aea229"
-                " .cfa: Whose woods are these\n"
-                "STACK CFI 36682fad3763ffff"
-                " .cfa: I think I know"
-                " stromboli: his house is in\n"
-                "STACK CFI 47ceb0f63c269d7f"
-                " calzone: the village though"
--               " cannoli: he will not see me stopping here\n",
-+               " cannoli: he will not see me stopping here\n"
-+               "STACK CFI INIT 8064f3af5e067e38 de2a5ee55509407"
-+               " .cfa: I think that I shall never see"
-+               " cannoli: a tree whose hungry mouth is prest"
-+               " stromboli: a poem lovely as a tree\n"
-+               "STACK CFI INIT ddb5f41285aa7757 1486493370dc5073 \n",
-                contents.c_str());
- 
-   // Check that GetStackFrameEntries works.
-   vector<Module::StackFrameEntry *> entries;
-   m.GetStackFrameEntries(&entries);
-   ASSERT_EQ(3U, entries.size());
-   // Check first entry.
--  EXPECT_EQ(0xddb5f41285aa7757ULL, entries[0]->address);
--  EXPECT_EQ(0x1486493370dc5073ULL, entries[0]->size);
--  ASSERT_EQ(0U, entries[0]->initial_rules.size());
--  ASSERT_EQ(0U, entries[0]->rule_changes.size());
-+  EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[0]->address);
-+  EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[0]->size);
-+  Module::RuleMap entry1_initial;
-+  entry1_initial[".cfa"] = "Whose woods are these";
-+  EXPECT_THAT(entries[0]->initial_rules, ContainerEq(entry1_initial));
-+  Module::RuleChangeMap entry1_changes;
-+  entry1_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know";
-+  entry1_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in";
-+  entry1_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though";
-+  entry1_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
-+    "he will not see me stopping here";
-+  EXPECT_THAT(entries[0]->rule_changes, ContainerEq(entry1_changes));
-   // Check second entry.
-   EXPECT_EQ(0x8064f3af5e067e38ULL, entries[1]->address);
-   EXPECT_EQ(0x0de2a5ee55509407ULL, entries[1]->size);
-   ASSERT_EQ(3U, entries[1]->initial_rules.size());
-   Module::RuleMap entry2_initial;
-   entry2_initial[".cfa"] = "I think that I shall never see";
-   entry2_initial["stromboli"] = "a poem lovely as a tree";
-   entry2_initial["cannoli"] = "a tree whose hungry mouth is prest";
-   EXPECT_THAT(entries[1]->initial_rules, ContainerEq(entry2_initial));
-   ASSERT_EQ(0U, entries[1]->rule_changes.size());
-   // Check third entry.
--  EXPECT_EQ(0x5e8d0db0a7075c6cULL, entries[2]->address);
--  EXPECT_EQ(0x1c7edb12a7aea229ULL, entries[2]->size);
--  Module::RuleMap entry3_initial;
--  entry3_initial[".cfa"] = "Whose woods are these";
--  EXPECT_THAT(entries[2]->initial_rules, ContainerEq(entry3_initial));
--  Module::RuleChangeMap entry3_changes;
--  entry3_changes[0x36682fad3763ffffULL][".cfa"] = "I think I know";
--  entry3_changes[0x36682fad3763ffffULL]["stromboli"] = "his house is in";
--  entry3_changes[0x47ceb0f63c269d7fULL]["calzone"] = "the village though";
--  entry3_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
--    "he will not see me stopping here";
--  EXPECT_THAT(entries[2]->rule_changes, ContainerEq(entry3_changes));
-+  EXPECT_EQ(0xddb5f41285aa7757ULL, entries[2]->address);
-+  EXPECT_EQ(0x1486493370dc5073ULL, entries[2]->size);
-+  ASSERT_EQ(0U, entries[2]->initial_rules.size());
-+  ASSERT_EQ(0U, entries[2]->rule_changes.size());
- }
- 
- TEST(Construct, UniqueFiles) {
-   Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
-   Module::File *file1 = m.FindFile("foo");
-   Module::File *file2 = m.FindFile(string("bar"));
-   Module::File *file3 = m.FindFile(string("foo"));
-   Module::File *file4 = m.FindFile("bar");
-@@ -483,8 +483,155 @@
-   m.Write(s, ALL_SYMBOL_DATA);
-   string contents = s.str();
- 
-   EXPECT_STREQ("MODULE " MODULE_OS " " MODULE_ARCH " "
-                MODULE_ID " " MODULE_NAME "\n"
-                "PUBLIC ffff 0 _xyz\n",
-                contents.c_str());
- }
-+
-+TEST(Lookup, Function) {
-+  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
-+
-+  Module::Function *function1 = new(Module::Function);
-+  function1->name = "_abc1";
-+  function1->address = 0x1000;
-+  function1->size = 0x900;
-+  function1->parameter_size = 0x0;
-+
-+  Module::Function *function2 = new(Module::Function);
-+  function2->name = "_xyz2";
-+  function2->address = 0x2000;
-+  function2->size = 0x900;
-+  function2->parameter_size = 0x0;
-+
-+  Module::Function *function3 = new(Module::Function);
-+  function3->name = "_def3";
-+  function3->address = 0x3000;
-+  function3->size = 0x900;
-+  function3->parameter_size = 0x0;
-+
-+  // Put them in a vector.
-+  vector<Module::Function *> vec;
-+  vec.push_back(function1);
-+  vec.push_back(function2);
-+  vec.push_back(function3);
-+
-+  m.AddFunctions(vec.begin(), vec.end());
-+
-+  // Try looking up functions by address.
-+  Module::Function* f = m.FindFunctionByAddress(0x1000);
-+  EXPECT_EQ(function1, f);
-+  f = m.FindFunctionByAddress(0x18FF);
-+  EXPECT_EQ(function1, f);
-+
-+  f = m.FindFunctionByAddress(0x1900);
-+  EXPECT_EQ((Module::Function*)NULL, f);
-+  f = m.FindFunctionByAddress(0x1A00);
-+  EXPECT_EQ((Module::Function*)NULL, f);
-+
-+  f = m.FindFunctionByAddress(0x2000);
-+  EXPECT_EQ(function2, f);
-+  f = m.FindFunctionByAddress(0x28FF);
-+  EXPECT_EQ(function2, f);
-+
-+  f = m.FindFunctionByAddress(0x3000);
-+  EXPECT_EQ(function3, f);
-+  f = m.FindFunctionByAddress(0x38FF);
-+  EXPECT_EQ(function3, f);
-+
-+  f = m.FindFunctionByAddress(0x3900);
-+  EXPECT_EQ((Module::Function*)NULL, f);
-+  f = m.FindFunctionByAddress(0x3A00);
-+  EXPECT_EQ((Module::Function*)NULL, f);
-+}
-+
-+TEST(Lookup, Externs) {
-+  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
-+
-+  // Two externs.
-+  Module::Extern* extern1 = new(Module::Extern);
-+  extern1->address = 0x1000;
-+  extern1->name = "_abc";
-+  Module::Extern* extern2 = new(Module::Extern);
-+  extern2->address = 0x2000;
-+  extern2->name = "_xyz";
-+
-+  m.AddExtern(extern1);
-+  m.AddExtern(extern2);
-+
-+  Module::Extern* e = m.FindExternByAddress(0xFFF);
-+  EXPECT_EQ((Module::Extern*)NULL, e);
-+
-+  e = m.FindExternByAddress(0x1000);
-+  EXPECT_EQ(extern1, e);
-+  e = m.FindExternByAddress(0x1900);
-+  EXPECT_EQ(extern1, e);
-+  e = m.FindExternByAddress(0x1FFF);
-+  EXPECT_EQ(extern1, e);
-+
-+  e = m.FindExternByAddress(0x2000);
-+  EXPECT_EQ(extern2, e);
-+  e = m.FindExternByAddress(0x2900);
-+  EXPECT_EQ(extern2, e);
-+  e = m.FindExternByAddress(0xFFFFFFFF);
-+  EXPECT_EQ(extern2, e);
-+}
-+
-+TEST(Lookup, StackFrameEntries) {
-+  Module m(MODULE_NAME, MODULE_OS, MODULE_ARCH, MODULE_ID);
-+
-+  // First STACK CFI entry, with no initial rules or deltas.
-+  Module::StackFrameEntry *entry1 = new Module::StackFrameEntry();
-+  entry1->address = 0x2000;
-+  entry1->size = 0x900;
-+  m.AddStackFrameEntry(entry1);
-+
-+  // Second STACK CFI entry, with initial rules but no deltas.
-+  Module::StackFrameEntry *entry2 = new Module::StackFrameEntry();
-+  entry2->address = 0x3000;
-+  entry2->size = 0x900;
-+  entry2->initial_rules[".cfa"] = "I think that I shall never see";
-+  entry2->initial_rules["stromboli"] = "a poem lovely as a tree";
-+  entry2->initial_rules["cannoli"] = "a tree whose hungry mouth is prest";
-+  m.AddStackFrameEntry(entry2);
-+
-+  // Third STACK CFI entry, with initial rules and deltas.
-+  Module::StackFrameEntry *entry3 = new Module::StackFrameEntry();
-+  entry3->address = 0x1000;
-+  entry3->size = 0x900;
-+  entry3->initial_rules[".cfa"] = "Whose woods are these";
-+  entry3->rule_changes[0x47ceb0f63c269d7fULL]["calzone"] =
-+    "the village though";
-+  entry3->rule_changes[0x47ceb0f63c269d7fULL]["cannoli"] =
-+    "he will not see me stopping here";
-+  entry3->rule_changes[0x36682fad3763ffffULL]["stromboli"] =
-+    "his house is in";
-+  entry3->rule_changes[0x36682fad3763ffffULL][".cfa"] =
-+    "I think I know";
-+  m.AddStackFrameEntry(entry3);
-+
-+  Module::StackFrameEntry* s = m.FindStackFrameEntryByAddress(0x1000);
-+  EXPECT_EQ(entry3, s);
-+  s = m.FindStackFrameEntryByAddress(0x18FF);
-+  EXPECT_EQ(entry3, s);
-+
-+  s = m.FindStackFrameEntryByAddress(0x1900);
-+  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
-+  s = m.FindStackFrameEntryByAddress(0x1A00);
-+  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
-+
-+  s = m.FindStackFrameEntryByAddress(0x2000);
-+  EXPECT_EQ(entry1, s);
-+  s = m.FindStackFrameEntryByAddress(0x28FF);
-+  EXPECT_EQ(entry1, s);
-+
-+  s = m.FindStackFrameEntryByAddress(0x3000);
-+  EXPECT_EQ(entry2, s);
-+  s = m.FindStackFrameEntryByAddress(0x38FF);
-+  EXPECT_EQ(entry2, s);
-+
-+  s = m.FindStackFrameEntryByAddress(0x3900);
-+  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
-+  s = m.FindStackFrameEntryByAddress(0x3A00);
-+  EXPECT_EQ((Module::StackFrameEntry*)NULL, s);
-+}
deleted file mode 100644
--- a/toolkit/crashreporter/breakpad-patches/02-cfi-rule-repr.patch
+++ /dev/null
@@ -1,6058 +0,0 @@
-# HG changeset patch
-# User Ted Mielczarek <ted.mielczarek@gmail.com>
-# Date 1360255133 18000
-# Node ID d23a69a6c34a1f1c21e241f37b388c8689f2386b
-# Parent  c3b1109dd392c16a9fe4e85da693010966dbbf0b
-Change the representation of CFI rules to avoid postfix expressions in most cases
-Patch by Julian Seward <jseward@acm.org>
-R=ted
-
-diff --git a/Makefile.am b/Makefile.am
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -133,16 +133,17 @@
- 	src/google_breakpad/processor/source_line_resolver_base.h \
- 	src/google_breakpad/processor/source_line_resolver_interface.h \
- 	src/google_breakpad/processor/stack_frame.h \
- 	src/google_breakpad/processor/stack_frame_cpu.h \
- 	src/google_breakpad/processor/stack_frame_symbolizer.h \
- 	src/google_breakpad/processor/stackwalker.h \
- 	src/google_breakpad/processor/symbol_supplier.h \
- 	src/google_breakpad/processor/system_info.h \
-+	src/common/module.cc \
- 	src/processor/address_map-inl.h \
- 	src/processor/address_map.h \
- 	src/processor/basic_code_module.h \
- 	src/processor/basic_code_modules.cc \
- 	src/processor/basic_code_modules.h \
- 	src/processor/basic_source_line_resolver_types.h \
- 	src/processor/basic_source_line_resolver.cc \
- 	src/processor/binarystream.h \
-@@ -555,30 +556,32 @@
- 	src/testing/src/gmock-all.cc
- src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \
- 	-I$(top_srcdir)/src \
- 	-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_basic_source_line_resolver_unittest_LDADD = \
-+	src/common/module.o \
- 	src/processor/basic_source_line_resolver.o \
- 	src/processor/cfi_frame_info.o \
- 	src/processor/pathname_stripper.o \
- 	src/processor/logging.o \
- 	src/processor/source_line_resolver_base.o \
- 	src/processor/tokenize.o \
- 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- 
- src_processor_cfi_frame_info_unittest_SOURCES = \
- 	src/processor/cfi_frame_info_unittest.cc \
- 	src/testing/gtest/src/gtest-all.cc \
- 	src/testing/gtest/src/gtest_main.cc \
- 	src/testing/src/gmock-all.cc
- src_processor_cfi_frame_info_unittest_LDADD = \
-+	src/common/module.o \
- 	src/processor/cfi_frame_info.o \
- 	src/processor/logging.o \
- 	src/processor/pathname_stripper.o \
- 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- src_processor_cfi_frame_info_unittest_CPPFLAGS = \
- 	-I$(top_srcdir)/src \
- 	-I$(top_srcdir)/src/testing/include \
- 	-I$(top_srcdir)/src/testing/gtest/include \
-@@ -598,16 +601,17 @@
- 	src/testing/src/gmock-all.cc
- src_processor_exploitability_unittest_CPPFLAGS = \
- 	-I$(top_srcdir)/src \
- 	-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_exploitability_unittest_LDADD = \
-+	src/common/module.o \
- 	src/processor/minidump_processor.o \
- 	src/processor/process_state.o \
- 	src/processor/disassembler_x86.o \
- 	src/processor/exploitability.o \
- 	src/processor/exploitability_win.o \
- 	src/processor/basic_code_modules.o \
- 	src/processor/basic_source_line_resolver.o \
- 	src/processor/call_stack.o \
-@@ -649,16 +653,17 @@
- 	src/testing/src/gmock-all.cc
- src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \
- 	-I$(top_srcdir)/src \
- 	-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_fast_source_line_resolver_unittest_LDADD = \
-+	src/common/module.o \
- 	src/processor/fast_source_line_resolver.o \
- 	src/processor/basic_source_line_resolver.o \
- 	src/processor/cfi_frame_info.o \
- 	src/processor/module_comparer.o \
- 	src/processor/module_serializer.o \
- 	src/processor/pathname_stripper.o \
- 	src/processor/logging.o \
- 	src/processor/source_line_resolver_base.o \
-@@ -686,16 +691,17 @@
- 	src/testing/src/gmock-all.cc
- src_processor_minidump_processor_unittest_CPPFLAGS = \
- 	-I$(top_srcdir)/src \
- 	-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/common/module.o \
- 	src/processor/basic_code_modules.o \
- 	src/processor/basic_source_line_resolver.o \
- 	src/processor/call_stack.o \
- 	src/processor/cfi_frame_info.o \
- 	src/processor/disassembler_x86.o \
- 	src/processor/exploitability.o \
- 	src/processor/exploitability_win.o \
- 	src/processor/logging.o \
-@@ -799,16 +805,17 @@
- 	src/processor/pathname_stripper_unittest.cc
- src_processor_pathname_stripper_unittest_LDADD = \
- 	src/processor/pathname_stripper.o \
- 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- 
- src_processor_postfix_evaluator_unittest_SOURCES = \
- 	src/processor/postfix_evaluator_unittest.cc
- src_processor_postfix_evaluator_unittest_LDADD = \
-+	src/common/module.o \
- 	src/processor/logging.o \
- 	src/processor/pathname_stripper.o \
- 	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- 
- src_processor_range_map_unittest_SOURCES = \
- 	src/processor/range_map_unittest.cc
- src_processor_range_map_unittest_LDADD = \
- 	src/processor/logging.o \
-@@ -928,16 +935,17 @@
- 	src/processor/basic_code_modules.o \
- 	src/processor/logging.o \
- 	src/processor/minidump.o \
- 	src/processor/pathname_stripper.o
- 
- src_processor_minidump_stackwalk_SOURCES = \
- 	src/processor/minidump_stackwalk.cc
- src_processor_minidump_stackwalk_LDADD = \
-+	src/common/module.o \
- 	src/processor/basic_code_modules.o \
- 	src/processor/basic_source_line_resolver.o \
- 	src/processor/binarystream.o \
- 	src/processor/call_stack.o \
- 	src/processor/cfi_frame_info.o \
- 	src/processor/disassembler_x86.o \
- 	src/processor/exploitability.o \
- 	src/processor/exploitability_win.o \
-diff --git a/Makefile.in b/Makefile.in
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -1,14 +1,14 @@
--# Makefile.in generated by automake 1.11.1 from Makefile.am.
-+# Makefile.in generated by automake 1.11.3 from Makefile.am.
- # @configure_input@
- 
- # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
--# Inc.
-+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-+# Foundation, Inc.
- # This Makefile.in is free software; the Free Software Foundation
- # gives unlimited permission to copy and/or distribute it,
- # with or without modifications, as long as this notice is preserved.
- 
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
- # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- # PARTICULAR PURPOSE.
-@@ -190,16 +190,22 @@
-   sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
-   $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
-     if (++n[$$2] == $(am__install_max)) \
-       { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
-     END { for (dir in files) print dir, files[dir] }'
- am__base_list = \
-   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
-   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-+am__uninstall_files_from_dir = { \
-+  test -z "$$files" \
-+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
-+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
-+         $(am__cd) "$$dir" && rm -f $$files; }; \
-+  }
- am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
- 	"$(DESTDIR)$(docdir)"
- LIBRARIES = $(lib_LIBRARIES) $(noinst_LIBRARIES)
- AR = ar
- ARFLAGS = cru
- src_client_linux_libbreakpad_client_a_AR = $(AR) $(ARFLAGS)
- src_client_linux_libbreakpad_client_a_LIBADD =
- am__src_client_linux_libbreakpad_client_a_SOURCES_DIST =  \
-@@ -261,18 +267,18 @@
- 	src/google_breakpad/processor/source_line_resolver_base.h \
- 	src/google_breakpad/processor/source_line_resolver_interface.h \
- 	src/google_breakpad/processor/stack_frame.h \
- 	src/google_breakpad/processor/stack_frame_cpu.h \
- 	src/google_breakpad/processor/stack_frame_symbolizer.h \
- 	src/google_breakpad/processor/stackwalker.h \
- 	src/google_breakpad/processor/symbol_supplier.h \
- 	src/google_breakpad/processor/system_info.h \
--	src/processor/address_map-inl.h src/processor/address_map.h \
--	src/processor/basic_code_module.h \
-+	src/common/module.cc src/processor/address_map-inl.h \
-+	src/processor/address_map.h src/processor/basic_code_module.h \
- 	src/processor/basic_code_modules.cc \
- 	src/processor/basic_code_modules.h \
- 	src/processor/basic_source_line_resolver_types.h \
- 	src/processor/basic_source_line_resolver.cc \
- 	src/processor/binarystream.h src/processor/binarystream.cc \
- 	src/processor/call_stack.cc src/processor/cfi_frame_info.cc \
- 	src/processor/cfi_frame_info.h \
- 	src/processor/contained_range_map-inl.h \
-@@ -322,17 +328,19 @@
- 	src/processor/static_contained_range_map-inl.h \
- 	src/processor/static_contained_range_map.h \
- 	src/processor/static_map_iterator-inl.h \
- 	src/processor/static_map_iterator.h \
- 	src/processor/static_map-inl.h src/processor/static_map.h \
- 	src/processor/static_range_map-inl.h \
- 	src/processor/static_range_map.h src/processor/tokenize.cc \
- 	src/processor/tokenize.h
--@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS = src/processor/basic_code_modules.$(OBJEXT) \
-+@DISABLE_PROCESSOR_FALSE@am_src_libbreakpad_a_OBJECTS =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.$(OBJEXT) \
-+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.$(OBJEXT) \
-@@ -620,17 +628,19 @@
- am__src_processor_basic_source_line_resolver_unittest_SOURCES_DIST =  \
- 	src/processor/basic_source_line_resolver_unittest.cc \
- 	src/testing/gtest/src/gtest-all.cc \
- 	src/testing/src/gmock-all.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_basic_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_basic_source_line_resolver_unittest-basic_source_line_resolver_unittest.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_basic_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_basic_source_line_resolver_unittest-gmock-all.$(OBJEXT)
- src_processor_basic_source_line_resolver_unittest_OBJECTS = $(am_src_processor_basic_source_line_resolver_unittest_OBJECTS)
--@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES = src/processor/basic_source_line_resolver.o \
-+@DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_DEPENDENCIES =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
-+@DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
- am__src_processor_binarystream_unittest_SOURCES_DIST =  \
-@@ -653,16 +663,17 @@
- 	src/testing/src/gmock-all.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_cfi_frame_info_unittest_OBJECTS = src/processor/src_processor_cfi_frame_info_unittest-cfi_frame_info_unittest.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest-all.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_cfi_frame_info_unittest-gtest_main.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_cfi_frame_info_unittest-gmock-all.$(OBJEXT)
- src_processor_cfi_frame_info_unittest_OBJECTS =  \
- 	$(am_src_processor_cfi_frame_info_unittest_OBJECTS)
- @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_DEPENDENCIES =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
- am__src_processor_contained_range_map_unittest_SOURCES_DIST =  \
- 	src/processor/contained_range_map_unittest.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_contained_range_map_unittest_OBJECTS = src/processor/contained_range_map_unittest.$(OBJEXT)
-@@ -694,16 +705,17 @@
- 	src/testing/src/gmock-all.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_exploitability_unittest_OBJECTS = src/processor/src_processor_exploitability_unittest-exploitability_unittest.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_exploitability_unittest-gtest-all.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_exploitability_unittest-gtest_main.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_exploitability_unittest-gmock-all.$(OBJEXT)
- src_processor_exploitability_unittest_OBJECTS =  \
- 	$(am_src_processor_exploitability_unittest_OBJECTS)
- @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_DEPENDENCIES =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
-@@ -726,17 +738,19 @@
- am__src_processor_fast_source_line_resolver_unittest_SOURCES_DIST =  \
- 	src/processor/fast_source_line_resolver_unittest.cc \
- 	src/testing/gtest/src/gtest-all.cc \
- 	src/testing/src/gmock-all.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_fast_source_line_resolver_unittest_OBJECTS = src/processor/src_processor_fast_source_line_resolver_unittest-fast_source_line_resolver_unittest.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_fast_source_line_resolver_unittest-gtest-all.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_fast_source_line_resolver_unittest-gmock-all.$(OBJEXT)
- src_processor_fast_source_line_resolver_unittest_OBJECTS = $(am_src_processor_fast_source_line_resolver_unittest_OBJECTS)
--@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES = src/processor/fast_source_line_resolver.o \
-+@DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_DEPENDENCIES =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
-+@DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/module_serializer.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
-@@ -771,16 +785,17 @@
- 	src/testing/gtest/src/gtest-all.cc \
- 	src/testing/src/gmock-all.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_processor_unittest_OBJECTS = src/processor/src_processor_minidump_processor_unittest-minidump_processor_unittest.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/src_processor_minidump_processor_unittest-gtest-all.$(OBJEXT) \
- @DISABLE_PROCESSOR_FALSE@	src/testing/src/src_processor_minidump_processor_unittest-gmock-all.$(OBJEXT)
- src_processor_minidump_processor_unittest_OBJECTS =  \
- 	$(am_src_processor_minidump_processor_unittest_OBJECTS)
- @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_DEPENDENCIES =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
-@@ -801,16 +816,17 @@
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
- am__src_processor_minidump_stackwalk_SOURCES_DIST =  \
- 	src/processor/minidump_stackwalk.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_minidump_stackwalk_OBJECTS = src/processor/minidump_stackwalk.$(OBJEXT)
- src_processor_minidump_stackwalk_OBJECTS =  \
- 	$(am_src_processor_minidump_stackwalk_OBJECTS)
- @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_DEPENDENCIES =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
-@@ -862,16 +878,17 @@
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
- am__src_processor_postfix_evaluator_unittest_SOURCES_DIST =  \
- 	src/processor/postfix_evaluator_unittest.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_postfix_evaluator_unittest_OBJECTS = src/processor/postfix_evaluator_unittest.$(OBJEXT)
- src_processor_postfix_evaluator_unittest_OBJECTS =  \
- 	$(am_src_processor_postfix_evaluator_unittest_OBJECTS)
- @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_DEPENDENCIES =  \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
- @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
- am__src_processor_range_map_unittest_SOURCES_DIST =  \
- 	src/processor/range_map_unittest.cc
- @DISABLE_PROCESSOR_FALSE@am_src_processor_range_map_unittest_OBJECTS = src/processor/range_map_unittest.$(OBJEXT)
- src_processor_range_map_unittest_OBJECTS =  \
-@@ -1212,22 +1229,26 @@
- ETAGS = etags
- CTAGS = ctags
- am__tty_colors = \
- red=; grn=; lgn=; blu=; std=
- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
- distdir = $(PACKAGE)-$(VERSION)
- top_distdir = $(distdir)
- am__remove_distdir = \
--  { test ! -d "$(distdir)" \
--    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
--         && rm -fr "$(distdir)"; }; }
-+  if test -d "$(distdir)"; then \
-+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-+      && rm -rf "$(distdir)" \
-+      || { sleep 5 && rm -rf "$(distdir)"; }; \
-+  else :; fi
- DIST_ARCHIVES = $(distdir).tar.gz
- GZIP_ENV = --best
- distuninstallcheck_listfiles = find . -type f -print
-+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
-+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
- distcleancheck_listfiles = find . -type f -print
- ACLOCAL = @ACLOCAL@
- AMTAR = @AMTAR@
- AUTOCONF = @AUTOCONF@
- AUTOHEADER = @AUTOHEADER@
- AUTOMAKE = @AUTOMAKE@
- AWK = @AWK@
- CC = @CC@
-@@ -1383,16 +1404,17 @@
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/source_line_resolver_base.h \
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/source_line_resolver_interface.h \
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame.h \
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame_cpu.h \
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stack_frame_symbolizer.h \
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/stackwalker.h \
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/symbol_supplier.h \
- @DISABLE_PROCESSOR_FALSE@	src/google_breakpad/processor/system_info.h \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.cc \
- @DISABLE_PROCESSOR_FALSE@	src/processor/address_map-inl.h \
- @DISABLE_PROCESSOR_FALSE@	src/processor/address_map.h \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_module.h \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.cc \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.h \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver_types.h \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.cc \
- @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.h \
-@@ -1715,31 +1737,33 @@
- @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_CPPFLAGS = \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_basic_source_line_resolver_unittest_LDADD = \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
- @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_SOURCES = \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info_unittest.cc \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest-all.cc \
- @DISABLE_PROCESSOR_FALSE@	src/testing/gtest/src/gtest_main.cc \
- @DISABLE_PROCESSOR_FALSE@	src/testing/src/gmock-all.cc
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_LDADD = \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_cfi_frame_info_unittest_CPPFLAGS = \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
-@@ -1763,16 +1787,17 @@
- @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_CPPFLAGS = \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_exploitability_unittest_LDADD = \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_processor.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/process_state.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
-@@ -1818,16 +1843,17 @@
- @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_CPPFLAGS = \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_fast_source_line_resolver_unittest_LDADD = \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/fast_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/module_comparer.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/module_serializer.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
-@@ -1859,16 +1885,17 @@
- @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_CPPFLAGS = \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing/gtest \
- @DISABLE_PROCESSOR_FALSE@	-I$(top_srcdir)/src/testing
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_minidump_processor_unittest_LDADD = \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
-@@ -1984,16 +2011,17 @@
- @DISABLE_PROCESSOR_FALSE@src_processor_pathname_stripper_unittest_LDADD = \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_SOURCES = \
- @DISABLE_PROCESSOR_FALSE@	src/processor/postfix_evaluator_unittest.cc
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_postfix_evaluator_unittest_LDADD = \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
- @DISABLE_PROCESSOR_FALSE@	$(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_SOURCES = \
- @DISABLE_PROCESSOR_FALSE@	src/processor/range_map_unittest.cc
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_range_map_unittest_LDADD = \
-@@ -2122,16 +2150,17 @@
- @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_SOURCES = \
- @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk.cc
- 
- @DISABLE_PROCESSOR_FALSE@src_processor_minidump_stackwalk_LDADD = \
-+@DISABLE_PROCESSOR_FALSE@	src/common/module.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_code_modules.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/basic_source_line_resolver.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/binarystream.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/call_stack.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability.o \
- @DISABLE_PROCESSOR_FALSE@	src/processor/exploitability_win.o \
-@@ -2289,17 +2318,17 @@
- 	src/tools/windows/dump_syms/testdata/dump_syms_regtest.sym \
- 	src/tools/windows/symupload/symupload.cc \
- 	src/tools/windows/symupload/symupload.vcproj
- 
- all: all-am
- 
- .SUFFIXES:
- .SUFFIXES: .S .c .cc .o .obj
--am--refresh:
-+am--refresh: Makefile
- 	@:
- $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
- 	@for dep in $?; do \
- 	  case '$(am__configure_deps)' in \
- 	    *$$dep*) \
- 	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
- 	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
- 		&& exit 0; \
-@@ -2325,20 +2354,18 @@
- 
- $(top_srcdir)/configure:  $(am__configure_deps)
- 	$(am__cd) $(srcdir) && $(AUTOCONF)
- $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
- 	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
- $(am__aclocal_m4_deps):
- 
- src/config.h: src/stamp-h1
--	@if test ! -f $@; then \
--	  rm -f src/stamp-h1; \
--	  $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; \
--	else :; fi
-+	@if test ! -f $@; then rm -f src/stamp-h1; else :; fi
-+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; else :; fi
- 
- src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status
- 	@rm -f src/stamp-h1
- 	cd $(top_builddir) && $(SHELL) ./config.status src/config.h
- $(top_srcdir)/src/config.h.in:  $(am__configure_deps) 
- 	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
- 	rm -f src/stamp-h1
- 	touch $@
-@@ -2366,19 +2393,17 @@
- 	    ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \
- 	  else :; fi; \
- 	done
- 
- uninstall-libLIBRARIES:
- 	@$(NORMAL_UNINSTALL)
- 	@list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
- 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
--	test -n "$$files" || exit 0; \
--	echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \
--	cd "$(DESTDIR)$(libdir)" && rm -f $$files
-+	dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir)
- 
- clean-libLIBRARIES:
- 	-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
- 
- clean-noinstLIBRARIES:
- 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
- src/client/linux/crash_generation/$(am__dirstamp):
- 	@$(MKDIR_P) src/client/linux/crash_generation
-@@ -2477,20 +2502,22 @@
- 	@$(MKDIR_P) src/common/android/$(DEPDIR)
- 	@: > src/common/android/$(DEPDIR)/$(am__dirstamp)
- src/common/android/breakpad_getcontext.$(OBJEXT):  \
- 	src/common/android/$(am__dirstamp) \
- 	src/common/android/$(DEPDIR)/$(am__dirstamp)
- src/client/linux/$(am__dirstamp):
- 	@$(MKDIR_P) src/client/linux
- 	@: > src/client/linux/$(am__dirstamp)
--src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp)
-+src/client/linux/libbreakpad_client.a: $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_DEPENDENCIES) $(EXTRA_src_client_linux_libbreakpad_client_a_DEPENDENCIES) src/client/linux/$(am__dirstamp)
- 	-rm -f src/client/linux/libbreakpad_client.a
- 	$(src_client_linux_libbreakpad_client_a_AR) src/client/linux/libbreakpad_client.a $(src_client_linux_libbreakpad_client_a_OBJECTS) $(src_client_linux_libbreakpad_client_a_LIBADD)
- 	$(RANLIB) src/client/linux/libbreakpad_client.a
-+src/common/module.$(OBJEXT): src/common/$(am__dirstamp) \
-+	src/common/$(DEPDIR)/$(am__dirstamp)
- src/processor/$(am__dirstamp):
- 	@$(MKDIR_P) src/processor
- 	@: > src/processor/$(am__dirstamp)
- src/processor/$(DEPDIR)/$(am__dirstamp):
- 	@$(MKDIR_P) src/processor/$(DEPDIR)
- 	@: > src/processor/$(DEPDIR)/$(am__dirstamp)
- src/processor/basic_code_modules.$(OBJEXT):  \
- 	src/processor/$(am__dirstamp) \
-@@ -2559,17 +2586,17 @@
- src/processor/stackwalker_x86.$(OBJEXT):  \
- 	src/processor/$(am__dirstamp) \
- 	src/processor/$(DEPDIR)/$(am__dirstamp)
- src/processor/tokenize.$(OBJEXT): src/processor/$(am__dirstamp) \
- 	src/processor/$(DEPDIR)/$(am__dirstamp)
- src/$(am__dirstamp):
- 	@$(MKDIR_P) src
- 	@: > src/$(am__dirstamp)
--src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp)
-+src/libbreakpad.a: $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_DEPENDENCIES) $(EXTRA_src_libbreakpad_a_DEPENDENCIES) src/$(am__dirstamp)
- 	-rm -f src/libbreakpad.a
- 	$(src_libbreakpad_a_AR) src/libbreakpad.a $(src_libbreakpad_a_OBJECTS) $(src_libbreakpad_a_LIBADD)
- 	$(RANLIB) src/libbreakpad.a
- src/third_party/libdisasm/$(am__dirstamp):
- 	@$(MKDIR_P) src/third_party/libdisasm
- 	@: > src/third_party/libdisasm/$(am__dirstamp)
- src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp):
- 	@$(MKDIR_P) src/third_party/libdisasm/$(DEPDIR)
-@@ -2611,17 +2638,17 @@
- 	src/third_party/libdisasm/$(am__dirstamp) \
- 	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
- src/third_party/libdisasm/x86_misc.$(OBJEXT):  \
- 	src/third_party/libdisasm/$(am__dirstamp) \
- 	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
- src/third_party/libdisasm/x86_operand_list.$(OBJEXT):  \
- 	src/third_party/libdisasm/$(am__dirstamp) \
- 	src/third_party/libdisasm/$(DEPDIR)/$(am__dirstamp)
--src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp)
-+src/third_party/libdisasm/libdisasm.a: $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) $(EXTRA_src_third_party_libdisasm_libdisasm_a_DEPENDENCIES) src/third_party/libdisasm/$(am__dirstamp)
- 	-rm -f src/third_party/libdisasm/libdisasm.a
- 	$(src_third_party_libdisasm_libdisasm_a_AR) src/third_party/libdisasm/libdisasm.a $(src_third_party_libdisasm_libdisasm_a_OBJECTS) $(src_thir