am bba87008: google-breakpad: Merge with upstream breakpad r1292

* commit 'bba870084bf6b0901b948e1f3b7327b8684a6d0b': (47 commits)
  Ignore warning 4702 to avoid unreachable code error on VS2013 stl when compiling with _HAS_EXCEPTIONS=0
  Check in new Windows binaries.
  Add support for Win64 stack unwind data as STACK CFI
  Fix crash in Windows CrashGenerationServer from r1274.
  Fix a bug in BreakpadController that prevented multiple report uploads per call to sendStoredCrashReports.
  Trim unintentional whitespace and fix style nits
  Fixing compiler warnings:  - Building Breakpad in Xcode with arm64 architecture.  - iOS Patches provided by: Ian Hickson and Greg Vance.
  Renaming file COPYING to LICENSE and appending the disclaimer from src/common/convert_UTF.h to LICENSE.
  Initialize file descriptors to -1, not 0, in MachoWalker.
  Update GTM and enable -Wundef and strict C++11 flags.
  Fixup breakpad compile for Xcode 5.1 iOS release
  Fix up ~14 warnings about 'Implicit conversion loses integer precision' on iOS.
  When the Breakpad.h header gets compiled by standard C compilers (instead of C++) it gets upset about the default argument. Instead of using a default argument I split the function up into two separate functions.
  Make Linux ExceptionHandler::HandleSignal public A=Jed Davis <jld@mozilla.com> R=ted at https://breakpad.appspot.com/1114003/
  Create a new tool to upload Mac system library symbols.
  Support statically-linked libcurl for HTTP uploads in Linux
  Windows: Fix 64-bit compitation of crash_generation_app.
  Fix missing semi-colons from r1267.
  Refactor the Windows MinidumpGenerator interface to get rid of the overloads when generating dumps. All required params are now passed to the constructor and the various options are set through new methods.
  Fix VS project generation for the crash generation app.
  ...
diff --git a/INSTALL b/INSTALL
index 5458714..007e939 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,19 +1,25 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
+Inc.
 
-This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
 
 Basic Installation
 ==================
 
-Briefly, the shell commands `./configure; make; make install' should
+   Briefly, the shell commands `./configure; make; make install' should
 configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
@@ -42,7 +48,7 @@
 you want to change it or regenerate `configure' using a newer version
 of `autoconf'.
 
-The simplest way to compile this package is:
+   The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
      `./configure' to configure the package for your system.
@@ -53,12 +59,22 @@
   2. Type `make' to compile the package.
 
   3. Optionally, type `make check' to run any self-tests that come with
-     the package.
+     the package, generally using the just-built uninstalled binaries.
 
   4. Type `make install' to install the programs and any data files and
-     documentation.
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
 
-  5. You can remove the program binaries and object files from the
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
      source code directory by typing `make clean'.  To also remove the
      files that `configure' created (so you can compile the package for
      a different kind of computer), type `make distclean'.  There is
@@ -67,12 +83,22 @@
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
 Compilers and Options
 =====================
 
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
 
    You can give `configure' initial values for configuration parameters
 by setting variables in the command line or in the environment.  Here
@@ -85,25 +111,41 @@
 Compiling For Multiple Architectures
 ====================================
 
-You can compile the package for more than one kind of computer at the
+   You can compile the package for more than one kind of computer at the
 same time, by placing the object files for each architecture in their
 own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
 
    With a non-GNU `make', it is safer to compile the package for one
 architecture at a time in the source code directory.  After you have
 installed the package for one architecture, use `make distclean' before
 reconfiguring for another architecture.
 
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
 Installation Names
 ==================
 
-By default, `make install' installs the package's commands under
+   By default, `make install' installs the package's commands under
 `/usr/local/bin', include files under `/usr/local/include', etc.  You
 can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
 
    You can specify separate installation prefixes for
 architecture-specific files and architecture-independent files.  If you
@@ -114,16 +156,47 @@
    In addition, if you use an unusual directory layout you can give
 options like `--bindir=DIR' to specify different values for particular
 kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
 
    If the package supports it, you can cause programs to be installed
 with an extra prefix or suffix on their names by giving `configure' the
 option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 
-Optional Features
-=================
-
-Some packages pay attention to `--enable-FEATURE' options to
+   Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
 is something like `gnu-as' or `x' (for the X Window System).  The
@@ -135,14 +208,58 @@
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
 Specifying the System Type
 ==========================
 
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
 `--build=TYPE' option.  TYPE can either be a short name for the system
 type, such as `sun4', or a canonical name which has the form:
 
@@ -150,7 +267,8 @@
 
 where SYSTEM can have one of these forms:
 
-     OS KERNEL-OS
+     OS
+     KERNEL-OS
 
    See the file `config.sub' for the possible values of each field.  If
 `config.sub' isn't included in this package, then this package doesn't
@@ -168,9 +286,9 @@
 Sharing Defaults
 ================
 
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
 `configure' looks for `PREFIX/share/config.site' if it exists, then
 `PREFIX/etc/config.site' if it exists.  Or, you can set the
 `CONFIG_SITE' environment variable to the location of the site script.
@@ -179,7 +297,7 @@
 Defining Variables
 ==================
 
-Variables not defined in a site shell script can be set in the
+   Variables not defined in a site shell script can be set in the
 environment passed to `configure'.  However, some packages may run
 configure again during the build, and the customized values of these
 variables may be lost.  In order to avoid this problem, you should set
@@ -191,18 +309,27 @@
 overridden in the site shell script).
 
 Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
 
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
 `configure' Invocation
 ======================
 
-`configure' recognizes the following options to control how it operates.
+   `configure' recognizes the following options to control how it
+operates.
 
 `--help'
 `-h'
-     Print a summary of the options to `configure', and exit.
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
 
 `--version'
 `-V'
@@ -229,6 +356,15 @@
      Look for the package's source code in directory DIR.  Usually
      `configure' can determine that directory automatically.
 
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
-
diff --git a/COPYING b/LICENSE
similarity index 63%
rename from COPYING
rename to LICENSE
index d15b0c2..95207bd 100644
--- a/COPYING
+++ b/LICENSE
@@ -26,3 +26,25 @@
 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.
+
+--------------------------------------------------------------------
+
+Copyright 2001-2004 Unicode, Inc.
+
+Disclaimer
+
+This source code is provided as is by Unicode, Inc. No claims are
+made as to fitness for any particular purpose. No warranties of any
+kind are expressed or implied. The recipient agrees to determine
+applicability of information provided. If this file has been
+purchased on magnetic or optical media from Unicode, Inc., the
+sole remedy for any claim will be exchange of defective media
+within 90 days of receipt.
+
+Limitations on Rights to Redistribute This Code
+
+Unicode, Inc. hereby grants the right to freely use the information
+supplied in this file in the creation of products supporting the
+Unicode Standard, and to make copies of this file in any form
+for internal or external distribution as long as this notice
+remains attached.
diff --git a/Makefile.am b/Makefile.am
index 105c201..3198ad5 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -64,14 +64,17 @@
 # Specify include paths for ac macros
 ACLOCAL_AMFLAGS = -I m4
 
+# License file is called LICENSE not COPYING
+AUTOMAKE_OPTIONS = foreign
+
 ## Documentation
 docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION)
 
 dist_doc_DATA = \
 	AUTHORS \
-	COPYING \
 	ChangeLog \
 	INSTALL \
+	LICENSE \
 	NEWS \
 	README
 
@@ -343,10 +346,14 @@
 TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
 
 if ANDROID_HOST
-# Wrapper script to run unit test programs on a connected Android device.
-TESTS_ENVIRONMENT = $(top_srcdir)/android/test-shell.sh
+# Since Autotools 1.2, tests are run through a special "test driver" script.
+# Unfortunately, it's not possible anymore to specify an alternative shell to
+# run them on connected devices, so use a slightly modified version of the
+# driver for Android.
+LOG_DRIVER = $(top_srcdir)/android/test-driver
 else
-TESTS_ENVIRONMENT =
+# The default Autotools test driver script.
+LOG_DRIVER = $(top_srcdir)/autotools/test-driver
 endif
 
 if LINUX_HOST
diff --git a/Makefile.in b/Makefile.in
index b3f8fcc..5896e20 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -170,7 +170,7 @@
 DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
 	$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(top_srcdir)/configure $(top_srcdir)/src/config.h.in AUTHORS \
-	COPYING ChangeLog INSTALL NEWS autotools/compile \
+	ChangeLog INSTALL NEWS autotools/compile \
 	autotools/config.guess autotools/config.sub autotools/depcomp \
 	autotools/install-sh autotools/ltmain.sh autotools/missing
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -1386,6 +1386,7 @@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MKDIR_P = @MKDIR_P@
 OBJEXT = @OBJEXT@
@@ -1465,11 +1466,14 @@
 
 # Specify include paths for ac macros
 ACLOCAL_AMFLAGS = -I m4
+
+# License file is called LICENSE not COPYING
+AUTOMAKE_OPTIONS = foreign
 dist_doc_DATA = \
 	AUTHORS \
-	COPYING \
 	ChangeLog \
 	INSTALL \
+	LICENSE \
 	NEWS \
 	README
 
@@ -1633,10 +1637,14 @@
 @DISABLE_PROCESSOR_FALSE@	src/processor/minidump_stackwalk_machine_readable_test
 
 TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
-@ANDROID_HOST_FALSE@TESTS_ENVIRONMENT = 
+# The default Autotools test driver script.
+@ANDROID_HOST_FALSE@LOG_DRIVER = $(top_srcdir)/autotools/test-driver
 
-# Wrapper script to run unit test programs on a connected Android device.
-@ANDROID_HOST_TRUE@TESTS_ENVIRONMENT = $(top_srcdir)/android/test-shell.sh
+# Since Autotools 1.2, tests are run through a special "test driver" script.
+# Unfortunately, it's not possible anymore to specify an alternative shell to
+# run them on connected devices, so use a slightly modified version of the
+# driver for Android.
+@ANDROID_HOST_TRUE@LOG_DRIVER = $(top_srcdir)/android/test-driver
 @LINUX_HOST_TRUE@src_client_linux_linux_dumper_unittest_helper_SOURCES = \
 @LINUX_HOST_TRUE@	src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc
 
@@ -2518,19 +2526,19 @@
 .SUFFIXES: .S .c .cc .o .obj
 am--refresh: Makefile
 	@:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
-	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
 		&& exit 0; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu Makefile
+	  $(AUTOMAKE) --foreign Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -2545,9 +2553,9 @@
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
 	$(SHELL) ./config.status --recheck
 
-$(top_srcdir)/configure:  $(am__configure_deps)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
 	$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
 	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
 $(am__aclocal_m4_deps):
 
@@ -2558,7 +2566,7 @@
 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) 
+$(top_srcdir)/src/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
 	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
 	rm -f src/stamp-h1
 	touch $@
diff --git a/aclocal.m4 b/aclocal.m4
index 34d07a8..8b91572 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -634,6 +634,42 @@
 rmdir .tst 2>/dev/null
 AC_SUBST([am__leading_dot])])
 
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+      am_maintainer_other[ make rules and dependencies not useful
+      (and sometimes confusing) to the casual installer])],
+    [USE_MAINTAINER_MODE=$enableval],
+    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
 # Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
diff --git a/android/test-driver b/android/test-driver
new file mode 100755
index 0000000..eaaac6b
--- /dev/null
+++ b/android/test-driver
@@ -0,0 +1,131 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+# Slightly modified for Android, see ANDROID comment below.
+
+scriptversion=2012-06-27.10; # UTC
+
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+# TODO: better error handling in option parsing (in particular, ensure
+# TODO: $log_file, $trs_file and $test_name are defined).
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+  esac
+  shift
+done
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='' # Red.
+  grn='' # Green.
+  lgn='' # Light green.
+  blu='' # Blue.
+  mgn='' # Magenta.
+  std=''     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+# ANDROID: old line was: "$@" > $log_file 2>&1
+progdir=$(dirname "$0")
+"$progdir/test-shell.sh" "$@" > $log_file 2>&1
+estatus=$?
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  estatus=1
+fi
+
+case $estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/android/test-shell.sh b/android/test-shell.sh
index 526e926..3677d87 100755
--- a/android/test-shell.sh
+++ b/android/test-shell.sh
@@ -52,8 +52,9 @@
 fi
 
 # Create test directory on the device
-TEST_DIR=/data/local/tmp/test-google-breakpad
-adb_shell mkdir "$TEST_DIR" || panic "Can't create test directory on device"
+TEST_DIR=/data/local/tmp/test-google-breakpad-$$
+adb_shell mkdir "$TEST_DIR" ||
+    panic "Can't create test directory on device: $TEST_DIR"
 
 # Ensure that it is always removed when the script exits.
 clean_test_dir () {
diff --git a/autotools/config.guess b/autotools/config.guess
index aa04f04..d622a44 100755
--- a/autotools/config.guess
+++ b/autotools/config.guess
@@ -4,7 +4,7 @@
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
 #   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2012-06-17'
+timestamp='2012-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -200,10 +200,6 @@
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
 	exit ;;
-    *:Bitrig:*:*)
-	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-	exit ;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -1260,7 +1256,7 @@
     NEO-?:NONSTOP_KERNEL:*:*)
 	echo neo-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
+    NSE-?:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
diff --git a/autotools/config.sub b/autotools/config.sub
index aa2cf19..c894da4 100755
--- a/autotools/config.sub
+++ b/autotools/config.sub
@@ -4,7 +4,7 @@
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
 #   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2012-06-17'
+timestamp='2012-02-10'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -225,12 +225,6 @@
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
-	-lynx*178)
-		os=-lynxos178
-		;;
-	-lynx*5)
-		os=-lynxos5
-		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -1352,7 +1346,7 @@
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* \
+	      | -openbsd* | -solidbsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
@@ -1543,9 +1537,6 @@
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
-	hexagon-*)
-		os=-elf
-		;;
 	tic54x-*)
 		os=-coff
 		;;
diff --git a/autotools/depcomp b/autotools/depcomp
index ca5ea4e..4ebd5b3 100755
--- a/autotools/depcomp
+++ b/autotools/depcomp
@@ -1,10 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2006-10-15.18
+scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 Free Software
-# Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,9 +16,7 @@
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -30,9 +27,9 @@
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -42,11 +39,11 @@
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake@gnu.org>.
@@ -59,6 +56,66 @@
     ;;
 esac
 
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -71,6 +128,9 @@
 
 rm -f "$tmpdepfile"
 
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
 # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case
@@ -82,9 +142,32 @@
 fi
 
 if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
 fi
 
 case "$depmode" in
@@ -107,8 +190,7 @@
   done
   "$@"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -116,13 +198,17 @@
   ;;
 
 gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
 ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
 ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).
   if test -z "$gccflag"; then
@@ -130,31 +216,31 @@
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -172,8 +258,7 @@
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -181,99 +266,156 @@
 
   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
     echo "$object : \\" > "$depfile"
-
     # Clip off the initial element (the dependent).  Don't try to be
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> $depfile
-    echo >> $depfile
-
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
   else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
-  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
-  tmpdepfile="$stripped.u"
+  set_dir_from "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
     "$@" -Wc,-M
   else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
     "$@" -M
   fi
   stat=$?
-
-  if test -f "$tmpdepfile"; then :
-  else
-    stripped=`echo "$stripped" | sed 's,^.*/,,'`
-    tmpdepfile="$stripped.u"
-  fi
-
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
 
-  if test -f "$tmpdepfile"; then
-    outname="$stripped.o"
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
   fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\' :
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
 
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -285,8 +427,8 @@
   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
   # Some versions of the HPUX 10.20 sed can't process this invocation
   # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -297,9 +439,8 @@
   # 'foo.d', which lands next to the object file, wherever that
   # happens to be.
   # Much of this is similar to the tru64 case; see comments there.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from  "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.d
     tmpdepfile2=$dir.libs/$base.d
@@ -310,8 +451,7 @@
     "$@" +Maked
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
      rm -f "$tmpdepfile1" "$tmpdepfile2"
      exit $stat
   fi
@@ -321,72 +461,107 @@
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
-    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
   else
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile" "$tmpdepfile2"
   ;;
 
 tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
 
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mechanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
 
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
 
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
 
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
@@ -399,13 +574,13 @@
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -425,18 +600,18 @@
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -450,41 +625,51 @@
   "$@" || exit $?
   # Remove any Libtool call
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
   # X makedepend
   shift
-  cleared=no
-  for arg in "$@"; do
+  cleared=no eat=no
+  for arg
+  do
     case $cleared in
     no)
       set ""; shift
       cleared=yes ;;
     esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
     case "$arg" in
     -D*|-I*)
       set fnord "$@" "$arg"; shift ;;
     # Strip any option that makedepend may not understand.  Remove
     # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
     -*|$object)
       ;;
     *)
       set fnord "$@" "$arg"; shift ;;
     esac
   done
-  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile" "$tmpdepfile".bak
   ;;
 
@@ -495,13 +680,13 @@
 
   # Remove the call to Libtool.
   if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
+    while test "X$1" != 'X--mode=compile'; do
       shift
     done
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -520,10 +705,10 @@
     esac
   done
 
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
+  "$@" -E \
+    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    | sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
   cat < "$tmpdepfile" >> "$depfile"
@@ -533,35 +718,56 @@
 
 msvisualcpp)
   # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o,
-  # because we must use -o when running libtool.
+  # always write the preprocessed file to stdout.
   "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
   IFS=" "
   for arg
   do
     case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-	set fnord "$@"
-	shift
-	shift
-	;;
+        set fnord "$@"
+        shift
+        shift
+        ;;
     *)
-	set fnord "$@" "$arg"
-	shift
-	shift
-	;;
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
     esac
   done
-  "$@" -E |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
-  echo "	" >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 none)
   exec "$@"
   ;;
@@ -580,5 +786,6 @@
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/autotools/install-sh b/autotools/install-sh
index 4fbbae7..377bb86 100755
--- a/autotools/install-sh
+++ b/autotools/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2006-10-14.15
+scriptversion=2011-11-20.07; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,7 +35,7 @@
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
@@ -48,7 +48,7 @@
 # set DOITPROG to echo to test this script
 
 # Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
+doit=${DOITPROG-}
 if test -z "$doit"; then
   doit_exec=exec
 else
@@ -58,34 +58,49 @@
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
 
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
 
-posix_glob=
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
 posix_mkdir=
 
 # Desired mode of installed file.
 mode=0755
 
+chgrpcmd=
 chmodcmd=$chmodprog
 chowncmd=
-chgrpcmd=
-stripcmd=
+mvcmd=$mvprog
 rmcmd="$rmprog -f"
-mvcmd="$mvprog"
+stripcmd=
+
 src=
 dst=
 dir_arg=
-dstarg=
+dst_arg=
+
+copy_on_change=false
 no_target_directory=
 
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
    or: $0 [OPTION]... SRCFILES... DIRECTORY
    or: $0 [OPTION]... -t DIRECTORY SRCFILES...
    or: $0 [OPTION]... -d DIRECTORIES...
@@ -95,65 +110,59 @@
 In the 4th, create DIRECTORIES.
 
 Options:
--c         (ignored)
--d         create directories instead of installing files.
--g GROUP   $chgrpprog installed files to GROUP.
--m MODE    $chmodprog installed files to MODE.
--o USER    $chownprog installed files to USER.
--s         $stripprog installed files.
--t DIRECTORY  install into DIRECTORY.
--T         report an error if DSTFILE is a directory.
---help     display this help and exit.
---version  display version info and exit.
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
 
 Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
 "
 
 while test $# -ne 0; do
   case $1 in
-    -c) shift
-        continue;;
+    -c) ;;
 
-    -d) dir_arg=true
-        shift
-        continue;;
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-        shift
-        shift
-        continue;;
+	shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-        shift
-        shift
 	case $mode in
 	  *' '* | *'	'* | *'
 '*	  | *'*'* | *'?'* | *'['*)
 	    echo "$0: invalid mode: $mode" >&2
 	    exit 1;;
 	esac
-        continue;;
+	shift;;
 
     -o) chowncmd="$chownprog $2"
-        shift
-        shift
-        continue;;
+	shift;;
 
-    -s) stripcmd=$stripprog
-        shift
-        continue;;
+    -s) stripcmd=$stripprog;;
 
-    -t) dstarg=$2
-	shift
-	shift
-	continue;;
+    -t) dst_arg=$2
+	# Protect names problematic for 'test' and other utilities.
+	case $dst_arg in
+	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
+	esac
+	shift;;
 
-    -T) no_target_directory=true
-	shift
-	continue;;
+    -T) no_target_directory=true;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
@@ -165,21 +174,26 @@
 
     *)  break;;
   esac
+  shift
 done
 
-if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
   # Otherwise, the last argument is the destination.  Remove it from $@.
   for arg
   do
-    if test -n "$dstarg"; then
+    if test -n "$dst_arg"; then
       # $@ is not empty: it contains at least $arg.
-      set fnord "$@" "$dstarg"
+      set fnord "$@" "$dst_arg"
       shift # fnord
     fi
     shift # arg
-    dstarg=$arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -188,13 +202,17 @@
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call `install-sh -d' without argument.
+  # It's OK to call 'install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -222,9 +240,9 @@
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for 'test' and other utilities.
   case $src in
-    -*) src=./$src ;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -242,22 +260,17 @@
       exit 1
     fi
 
-    if test -z "$dstarg"; then
+    if test -z "$dst_arg"; then
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
-    dst=$dstarg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst ;;
-    esac
+    dst=$dst_arg
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
       if test -n "$no_target_directory"; then
-	echo "$0: $dstarg: Is a directory" >&2
+	echo "$0: $dst_arg: Is a directory" >&2
 	exit 1
       fi
       dstdir=$dst
@@ -341,7 +354,7 @@
 	      if test -z "$dir_arg" || {
 		   # Check for POSIX incompatibilities with -m.
 		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writeable bit of parent directory when it shouldn't.
+		   # other-writable bit of parent directory when it shouldn't.
 		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
 		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
 		   case $ls_ld_tmpdir in
@@ -378,33 +391,26 @@
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-	/*) prefix=/ ;;
-	-*) prefix=./ ;;
-	*)  prefix= ;;
+	/*) prefix='/';;
+	[-=\(\)!]*) prefix='./';;
+	*)  prefix='';;
       esac
 
-      case $posix_glob in
-        '')
-	  if (set -f) 2>/dev/null; then
-	    posix_glob=true
-	  else
-	    posix_glob=false
-	  fi ;;
-      esac
+      eval "$initialize_posix_glob"
 
       oIFS=$IFS
       IFS=/
-      $posix_glob && set -f
+      $posix_glob set -f
       set fnord $dstdir
       shift
-      $posix_glob && set +f
+      $posix_glob set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-	test -z "$d" && continue
+	test X"$d" = X && continue
 
 	prefix=$prefix$d
 	if test -d "$prefix"; then
@@ -459,41 +465,54 @@
     # ignore errors from any of these, just make sure not to ignore
     # errors from the above "$doit $cpprog $src $dsttmp" command.
     #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
 
-    # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
-      || {
-	   # The rename failed, perhaps because mv can't rename something else
-	   # to itself, or perhaps because mv is so ancient that it does not
-	   # support -f.
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
 
-	   # Now remove or move aside any old file at destination location.
-	   # We try this two ways since rm can't unlink itself on some
-	   # systems and the destination file might be busy for other
-	   # reasons.  In this case, the final cleanup might fail but the new
-	   # file should still install successfully.
-	   {
-	     if test -f "$dst"; then
-	       $doit $rmcmd -f "$dst" 2>/dev/null \
-	       || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
-		     && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
-	       || {
-		 echo "$0: cannot unlink or rename $dst" >&2
-		 (exit 1); exit 1
-	       }
-	     else
-	       :
-	     fi
-	   } &&
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
 
-	   # Now rename the file to the real destination.
-	   $doit $mvcmd "$dsttmp" "$dst"
-	 }
-    } || exit 1
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
 
     trap '' 0
   fi
@@ -503,5 +522,6 @@
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/autotools/missing b/autotools/missing
index 1c8ff70..cdea514 100755
--- a/autotools/missing
+++ b/autotools/missing
@@ -1,11 +1,10 @@
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2006-05-10.23
+scriptversion=2012-06-26.16; # UTC
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
-#   Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -18,9 +17,7 @@
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -28,66 +25,40 @@
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
+  echo 1>&2 "Try '$0 --help' for more information"
   exit 1
 fi
 
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
 case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
 
 Send bug reports to <bug-automake@gnu.org>."
     exit $?
@@ -99,269 +70,146 @@
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    echo 1>&2 "$0: unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case $1 in
-  lex|yacc)
-    # Not GNU programs, they don't have --version.
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'automa4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
     ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
 
-  tar)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
 
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $1 in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-	   sed 's/\.am$/.in/' |
-	   while read f; do touch "$f"; done
-    ;;
-
-  autom4te)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo "#! /bin/sh"
-	echo "# Created by GNU Automake missing as a replacement of"
-	echo "#  $ $@"
-	echo "exit 0"
-	chmod +x $file
-	exit 1
-    fi
-    ;;
-
-  bison|yacc)
-    echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
-         in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG="\${$#}"
-	case $LASTARG in
-	*.y)
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.c
-	    fi
-	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" y.tab.h
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f y.tab.h; then
-	echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-	echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex|flex)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
-         in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG="\${$#}"
-	case $LASTARG in
-	*.l)
-	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-	    if test -f "$SRCFILE"; then
-	         cp "$SRCFILE" lex.yy.c
-	    fi
-	  ;;
-	esac
-    fi
-    if test ! -f lex.yy.c; then
-	echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-	 you modified a dependency of a manual page.  You may need the
-	 \`Help2man' package in order for those modifications to take
-	 effect.  You can get \`Help2man' from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-	touch $file
-    else
-	test -z "$file" || exec >$file
-	echo ".ab help2man is required to generate this page"
-	exit 1
-    fi
-    ;;
-
-  makeinfo)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-	/^@setfilename/{
-	  s/.* \([^ ]*\) *$/\1/
-	  p
-	  q
-	}' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  tar)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-	case $firstarg in
-	*o*)
-	    firstarg=`echo "$firstarg" | sed s/o//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-	case $firstarg in
-	*h*)
-	    firstarg=`echo "$firstarg" | sed s/h//`
-	    tar "$firstarg" "$@" && exit 0
-	    ;;
-	esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
-    exit 1
-    ;;
-esac
-
-exit 0
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
 # End:
diff --git a/configure b/configure
index 4969789..e695730 100755
--- a/configure
+++ b/configure
@@ -658,6 +658,9 @@
 LDFLAGS
 CFLAGS
 CC
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
 am__untar
 am__tar
 AMTAR
@@ -730,8 +733,10 @@
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_maintainer_mode
 enable_dependency_tracking
 enable_m32
+enable_largefile
 enable_processor
 enable_tools
 enable_core2md
@@ -1372,9 +1377,13 @@
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode
+                          enable make rules and dependencies not useful (and
+                          sometimes confusing) to the casual installer
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
   --enable-m32            Compile/build with -m32 (default is no)
+  --disable-largefile     omit support for large files
   --disable-processor     Don't build processor library (default is no)
   --disable-tools         Don't build tool binaries (default is no)
   --disable-core2md       Don't build core2md binaries (default is no)
@@ -2815,6 +2824,29 @@
 ac_config_headers="$ac_config_headers src/config.h"
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
 DEPDIR="${am__leading_dot}deps"
 
 ac_config_commands="$ac_config_commands depfiles"
@@ -5346,6 +5378,26 @@
 fi
    # let the Makefile know if we're gcc
 
+# Check whether --enable-m32 was given.
+if test "${enable_m32+set}" = set; then :
+  enableval=$enable_m32; case "${enableval}" in
+                 yes)
+                   CFLAGS="${CFLAGS} -m32"
+                   CXXFLAGS="${CXXFLAGS} -m32"
+                   usem32=true
+                   ;;
+                 no)
+                   usem32=false
+                   ;;
+                 *)
+                   as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5
+                   ;;
+               esac
+else
+  usem32=false
+fi
+
+
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
@@ -5590,6 +5642,204 @@
 
 fi
 
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+  enableval=$enable_largefile;
+fi
+
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+	 # IRIX 6.2 and later do not support large files by default,
+	 # so use the C compiler's -n32 option if that helps.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 CC="$CC -n32"
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_largefile_CC=' -n32'; break
+fi
+rm -f core conftest.err conftest.$ac_objext
+	 break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=1; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_large_files=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  fi
+fi
+
 # ===========================================================================
 #           http://www.nongnu.org/autoconf-archive/ax_pthread.html
 # ===========================================================================
@@ -6103,26 +6353,6 @@
 fi
 
 
-# Check whether --enable-m32 was given.
-if test "${enable_m32+set}" = set; then :
-  enableval=$enable_m32; case "${enableval}" in
-                 yes)
-                   CFLAGS="${CFLAGS} -m32"
-                   CXXFLAGS="${CXXFLAGS} -m32"
-                   usem32=true
-                   ;;
-                 no)
-                   usem32=false
-                   ;;
-                 *)
-                   as_fn_error $? "bad value ${enableval} for --enable-m32" "$LINENO" 5
-                   ;;
-               esac
-else
-  usem32=false
-fi
-
-
 # Check whether --enable-processor was given.
 if test "${enable_processor+set}" = set; then :
   enableval=$enable_processor; case "${enableval}" in
@@ -6376,6 +6606,10 @@
   am__EXEEXT_FALSE=
 fi
 
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/configure.ac b/configure.ac
index 15a33d6..bf02c57 100644
--- a/configure.ac
+++ b/configure.ac
@@ -39,6 +39,7 @@
 
 AM_INIT_AUTOMAKE(subdir-objects tar-ustar 1.11.1)
 AM_CONFIG_HEADER(src/config.h)
+AM_MAINTAINER_MODE
 
 AM_PROG_AS
 AC_PROG_CC
@@ -48,7 +49,28 @@
 AC_PROG_RANLIB
 AM_CONDITIONAL(GCC, test "$GCC" = yes)   # let the Makefile know if we're gcc
 
+dnl This must come before all the feature tests below.
+AC_ARG_ENABLE(m32,
+              AS_HELP_STRING([--enable-m32],
+                             [Compile/build with -m32]
+                             [(default is no)]),
+              [case "${enableval}" in
+                 yes)
+                   CFLAGS="${CFLAGS} -m32"
+                   CXXFLAGS="${CXXFLAGS} -m32"
+                   usem32=true
+                   ;;
+                 no)
+                   usem32=false
+                   ;;
+                 *)
+                   AC_MSG_ERROR(bad value ${enableval} for --enable-m32)
+                   ;;
+               esac],
+              [usem32=false])
+
 AC_HEADER_STDC
+AC_SYS_LARGEFILE
 m4_include(m4/ax_pthread.m4)
 AX_PTHREAD
 AC_CHECK_HEADERS([a.out.h])
@@ -69,25 +91,6 @@
 esac
 AM_CONDITIONAL(ANDROID_HOST, test x$ANDROID_HOST = xtrue)
 
-AC_ARG_ENABLE(m32,
-              AS_HELP_STRING([--enable-m32],
-                             [Compile/build with -m32]
-                             [(default is no)]),
-              [case "${enableval}" in
-                 yes)
-                   CFLAGS="${CFLAGS} -m32"
-                   CXXFLAGS="${CXXFLAGS} -m32"
-                   usem32=true
-                   ;;
-                 no)
-                   usem32=false
-                   ;;
-                 *)
-                   AC_MSG_ERROR(bad value ${enableval} for --enable-m32)
-                   ;;
-               esac],
-              [usem32=false])
-
 AC_ARG_ENABLE(processor,
               AS_HELP_STRING([--disable-processor],
                              [Don't build processor library]
diff --git a/src/client/ios/Breakpad.h b/src/client/ios/Breakpad.h
index 3bec1a6..9d212f7 100644
--- a/src/client/ios/Breakpad.h
+++ b/src/client/ios/Breakpad.h
@@ -202,6 +202,11 @@
 // Upload next report to the server.
 void BreakpadUploadNextReport(BreakpadRef ref);
 
+// Upload next report to the server.
+// |server_parameters| is additional server parameters to send.
+void BreakpadUploadNextReportWithParameters(BreakpadRef ref,
+                                            NSDictionary *server_parameters);
+
 // Upload a file to the server. |data| is the content of the file to sent.
 // |server_parameters| is additional server parameters to send.
 void BreakpadUploadData(BreakpadRef ref, NSData *data, NSString *name,
diff --git a/src/client/ios/Breakpad.mm b/src/client/ios/Breakpad.mm
index a093283..6612559 100644
--- a/src/client/ios/Breakpad.mm
+++ b/src/client/ios/Breakpad.mm
@@ -27,19 +27,11 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#define VERBOSE 0
-
-#if VERBOSE
-  static bool gDebugLog = true;
-#else
-  static bool gDebugLog = false;
-#endif
-
-#define DEBUGLOG if (gDebugLog) fprintf
 #define IGNORE_DEBUGGER "BREAKPAD_IGNORE_DEBUGGER"
 
 #import "client/ios/Breakpad.h"
 
+#include <assert.h>
 #import <Foundation/Foundation.h>
 #include <pthread.h>
 #include <sys/stat.h>
@@ -100,36 +92,32 @@
 // ProtectedMemoryLocker will unprotect this block after taking the lock.
 // Its destructor will first re-protect the memory then release the lock.
 class ProtectedMemoryLocker {
-public:
-  // allocator may be NULL, in which case no Protect() or Unprotect() calls
-  // will be made, but a lock will still be taken
+ public:
   ProtectedMemoryLocker(pthread_mutex_t *mutex,
                         ProtectedMemoryAllocator *allocator)
-  : mutex_(mutex), allocator_(allocator) {
+      : mutex_(mutex),
+        allocator_(allocator) {
     // Lock the mutex
-    assert(pthread_mutex_lock(mutex_) == 0);
+    __attribute__((unused)) int rv = pthread_mutex_lock(mutex_);
+    assert(rv == 0);
 
     // Unprotect the memory
-    if (allocator_ ) {
-      allocator_->Unprotect();
-    }
+    allocator_->Unprotect();
   }
 
   ~ProtectedMemoryLocker() {
     // First protect the memory
-    if (allocator_) {
-      allocator_->Protect();
-    }
+    allocator_->Protect();
 
     // Then unlock the mutex
-    assert(pthread_mutex_unlock(mutex_) == 0);
+    __attribute__((unused)) int rv = pthread_mutex_unlock(mutex_);
+    assert(rv == 0);
   };
 
-private:
-  //  Keep anybody from ever creating one of these things not on the stack.
-  ProtectedMemoryLocker() { }
+ private:
+  ProtectedMemoryLocker();
   ProtectedMemoryLocker(const ProtectedMemoryLocker&);
-  ProtectedMemoryLocker & operator=(ProtectedMemoryLocker&);
+  ProtectedMemoryLocker& operator=(const ProtectedMemoryLocker&);
 
   pthread_mutex_t           *mutex_;
   ProtectedMemoryAllocator  *allocator_;
@@ -164,7 +152,7 @@
   void RemoveKeyValue(NSString *key);
   NSArray *CrashReportsToUpload();
   NSString *NextCrashReportToUpload();
-  void UploadNextReport();
+  void UploadNextReport(NSDictionary *server_parameters);
   void UploadData(NSData *data, NSString *name,
                   NSDictionary *server_parameters);
   NSDictionary *GenerateReport(NSDictionary *server_parameters);
@@ -289,7 +277,6 @@
 
   // Check for debugger
   if (IsDebuggerActive()) {
-    DEBUGLOG(stderr, "Debugger is active:  Not installing handler\n");
     return true;
   }
 
@@ -368,17 +355,14 @@
 
   // The product, version, and URL are required values.
   if (![product length]) {
-    DEBUGLOG(stderr, "Missing required product key.\n");
     return false;
   }
 
   if (![version length]) {
-    DEBUGLOG(stderr, "Missing required version key.\n");
     return false;
   }
 
   if (![urlStr length]) {
-    DEBUGLOG(stderr, "Missing required URL key.\n");
     return false;
   }
 
@@ -464,13 +448,18 @@
 }
 
 //=============================================================================
-void Breakpad::UploadNextReport() {
+void Breakpad::UploadNextReport(NSDictionary *server_parameters) {
   NSString *configFile = NextCrashReportToUpload();
   if (configFile) {
     Uploader *uploader = [[[Uploader alloc]
         initWithConfigFile:[configFile UTF8String]] autorelease];
-    if (uploader)
+    if (uploader) {
+      for (NSString *key in server_parameters) {
+        [uploader addServerParameter:[server_parameters objectForKey:key]
+                              forKey:key];
+      }
       [uploader report];
+    }
   }
 }
 
@@ -530,8 +519,6 @@
 //=============================================================================
 bool Breakpad::HandleMinidump(const char *dump_dir,
                               const char *minidump_id) {
-  DEBUGLOG(stderr, "Breakpad: a minidump has been created.\n");
-
   config_file_.WriteFile(dump_dir,
                          config_params_,
                          dump_dir,
@@ -793,7 +780,7 @@
     Breakpad *breakpad = (Breakpad *)ref;
 
     if (breakpad) {
-       return [breakpad->CrashReportsToUpload() count];
+       return static_cast<int>([breakpad->CrashReportsToUpload() count]);
     }
   } catch(...) {    // don't let exceptions leave this C API
     fprintf(stderr, "BreakpadGetCrashReportCount() : error\n");
@@ -803,12 +790,18 @@
 
 //=============================================================================
 void BreakpadUploadNextReport(BreakpadRef ref) {
+  BreakpadUploadNextReportWithParameters(ref, nil);
+}
+
+//=============================================================================
+void BreakpadUploadNextReportWithParameters(BreakpadRef ref,
+                                            NSDictionary *server_parameters) {
   try {
     // Not called at exception time
     Breakpad *breakpad = (Breakpad *)ref;
 
     if (breakpad) {
-       breakpad->UploadNextReport();
+       breakpad->UploadNextReport(server_parameters);
     }
   } catch(...) {    // don't let exceptions leave this C API
     fprintf(stderr, "BreakpadUploadNextReport() : error\n");
diff --git a/src/client/ios/Breakpad.xcodeproj/project.pbxproj b/src/client/ios/Breakpad.xcodeproj/project.pbxproj
index 10888c8..e9fcae3 100644
--- a/src/client/ios/Breakpad.xcodeproj/project.pbxproj
+++ b/src/client/ios/Breakpad.xcodeproj/project.pbxproj
@@ -370,6 +370,7 @@
 		0867D690FE84028FC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
+				LastUpgradeCheck = 0510;
 			};
 			buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "Breakpad" */;
 			compatibilityVersion = "Xcode 3.2";
@@ -439,7 +440,6 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
 				COPY_PHASE_STRIP = NO;
 				DSTROOT = /tmp/Breakpad.dst;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -471,7 +471,6 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ALWAYS_SEARCH_USER_PATHS = NO;
-				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
 				DSTROOT = /tmp/Breakpad.dst;
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
@@ -499,7 +498,7 @@
 		1DEB922308733DC00010E9CD /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_OPTIMIZATION_LEVEL = 0;
@@ -517,15 +516,18 @@
 					../../client/apple/Framework,
 					../../common/mac,
 				);
+				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
+				ONLY_ACTIVE_ARCH = YES;
 				OTHER_LDFLAGS = "-ObjC";
 				SDKROOT = iphoneos;
+				WARNING_CFLAGS = "-Wundef";
 			};
 			name = Debug;
 		};
 		1DEB922408733DC00010E9CD /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
-				ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
@@ -542,8 +544,10 @@
 					../../client/apple/Framework,
 					../../common/mac,
 				);
+				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
 				OTHER_LDFLAGS = "-ObjC";
 				SDKROOT = iphoneos;
+				WARNING_CFLAGS = "-Wundef";
 			};
 			name = Release;
 		};
diff --git a/src/client/ios/BreakpadController.h b/src/client/ios/BreakpadController.h
index eb59e22..cf1fa77 100644
--- a/src/client/ios/BreakpadController.h
+++ b/src/client/ios/BreakpadController.h
@@ -62,6 +62,10 @@
   // The interval to wait between two uploads. Value is 0 if no upload must be
   // done.
   int uploadIntervalInSeconds_;
+
+  // The dictionary that contains additional server parameters to send when
+  // uploading crash reports.
+  NSDictionary* uploadTimeParameters_;
 }
 
 // Singleton.
@@ -71,6 +75,10 @@
 // new one. Merge is done by replacing the old values by the new values.
 - (void)updateConfiguration:(NSDictionary*)configuration;
 
+// Reset the controller configuration to its initial value, which is the
+// infoDictionary of the bundle of the application.
+- (void)resetConfiguration;
+
 // Configure the URL to upload the report to. This must be called at least once
 // if the URL is not in the bundle information.
 - (void)setUploadingURL:(NSString*)url;
@@ -80,8 +88,11 @@
 // will prevent uploads.
 - (void)setUploadInterval:(int)intervalInSeconds;
 
-// Specify a parameter that will be uploaded to the crash server. See
-// |BreakpadAddUploadParameter|.
+// Set additional server parameters to send when uploading crash reports.
+- (void)setParametersToAddAtUploadTime:(NSDictionary*)uploadTimeParameters;
+
+// Specify an upload parameter that will be added to the crash report when a
+// crash report is generated. See |BreakpadAddUploadParameter|.
 - (void)addUploadParameter:(NSString*)value forKey:(NSString*)key;
 
 // Remove a previously-added parameter from the upload parameter set. See
diff --git a/src/client/ios/BreakpadController.mm b/src/client/ios/BreakpadController.mm
index ac560d1..a85dd68 100644
--- a/src/client/ios/BreakpadController.mm
+++ b/src/client/ios/BreakpadController.mm
@@ -108,12 +108,9 @@
   self = [super init];
   if (self) {
     queue_ = dispatch_queue_create("com.google.BreakpadQueue", NULL);
-    configuration_ = [[[NSBundle mainBundle] infoDictionary] mutableCopy];
     enableUploads_ = NO;
     started_ = NO;
-    NSString* uploadInterval =
-        [configuration_ valueForKey:@BREAKPAD_REPORT_INTERVAL];
-    [self setUploadInterval:[uploadInterval intValue]];
+    [self resetConfiguration];
   }
   return self;
 }
@@ -123,6 +120,7 @@
   assert(!breakpadRef_);
   dispatch_release(queue_);
   [configuration_ release];
+  [uploadTimeParameters_ release];
   [super dealloc];
 }
 
@@ -187,6 +185,17 @@
     [self setUploadInterval:[uploadInterval intValue]];
 }
 
+- (void)resetConfiguration {
+  NSAssert(!started_,
+      @"The controller must not be started when resetConfiguration is called");
+  [configuration_ autorelease];
+  configuration_ = [[[NSBundle mainBundle] infoDictionary] mutableCopy];
+  NSString* uploadInterval =
+      [configuration_ valueForKey:@BREAKPAD_REPORT_INTERVAL];
+  [self setUploadInterval:[uploadInterval intValue]];
+  [self setParametersToAddAtUploadTime:nil];
+}
+
 - (void)setUploadingURL:(NSString*)url {
   NSAssert(!started_,
       @"The controller must not be started when setUploadingURL is called");
@@ -202,6 +211,13 @@
     uploadIntervalInSeconds_ = 0;
 }
 
+- (void)setParametersToAddAtUploadTime:(NSDictionary*)uploadTimeParameters {
+  NSAssert(!started_, @"The controller must not be started when "
+                      "setParametersToAddAtUploadTime is called");
+  [uploadTimeParameters_ autorelease];
+  uploadTimeParameters_ = [uploadTimeParameters copy];
+}
+
 - (void)addUploadParameter:(NSString*)value forKey:(NSString*)key {
   NSAssert(started_,
       @"The controller must be started before addUploadParameter is called");
@@ -284,7 +300,8 @@
       // A report can be sent now.
       if (timeToWait == 0) {
         [self reportWillBeSent];
-        BreakpadUploadNextReport(breakpadRef_);
+        BreakpadUploadNextReportWithParameters(breakpadRef_,
+                                               uploadTimeParameters_);
 
         // If more reports must be sent, make sure this method is called again.
         if (BreakpadGetCrashReportCount(breakpadRef_) > 0)
@@ -292,10 +309,14 @@
       }
 
       // A report must be sent later.
-      if (timeToWait > 0)
-        [self performSelector:@selector(sendStoredCrashReports)
-                   withObject:nil
-                   afterDelay:timeToWait];
+      if (timeToWait > 0) {
+        // performSelector: doesn't work on queue_
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [self performSelector:@selector(sendStoredCrashReports)
+                       withObject:nil
+                       afterDelay:timeToWait];
+        });
+     }
   });
 }
 
diff --git a/src/client/ios/handler/ios_exception_minidump_generator.mm b/src/client/ios/handler/ios_exception_minidump_generator.mm
index 290ac6c..82ea5bb 100644
--- a/src/client/ios/handler/ios_exception_minidump_generator.mm
+++ b/src/client/ios/handler/ios_exception_minidump_generator.mm
@@ -43,12 +43,13 @@
 
 namespace {
 
-const uintptr_t kExpectedFinalFp = sizeof(uintptr_t);
-const uintptr_t kExpectedFinalSp = 0;
 const int kExceptionType = EXC_SOFTWARE;
 const int kExceptionCode = MD_EXCEPTION_CODE_MAC_NS_EXCEPTION;
 
 #if defined(HAS_ARM_SUPPORT) || defined(HAS_ARM64_SUPPORT)
+const uintptr_t kExpectedFinalFp = sizeof(uintptr_t);
+const uintptr_t kExpectedFinalSp = 0;
+
 // Append the given value to the sp position of the stack represented
 // by memory.
 void AppendToMemory(uint8_t *memory, uintptr_t sp, uintptr_t data) {
@@ -165,6 +166,8 @@
     return MinidumpGenerator::WriteThreadStream(thread_id, thread);
 
   size_t frame_count = [return_addresses_ count];
+  if (frame_count == 0)
+    return false;
   UntypedMDRVA memory(&writer_);
   size_t pointer_size = sizeof(uintptr_t);
   size_t frame_record_size = 2 * pointer_size;
@@ -175,7 +178,7 @@
   uintptr_t sp = stack_size - pointer_size;
   uintptr_t fp = 0;
   uintptr_t lr = 0;
-  for (int current_frame = frame_count - 1;
+  for (size_t current_frame = frame_count - 1;
        current_frame > 0;
        --current_frame) {
     AppendToMemory(stack_memory.get(), sp, lr);
diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc
index b78568d..58fbacb 100644
--- a/src/client/linux/handler/exception_handler.cc
+++ b/src/client/linux/handler/exception_handler.cc
@@ -86,6 +86,7 @@
 #include <utility>
 #include <vector>
 
+#include "common/basictypes.h"
 #include "common/linux/linux_libc_support.h"
 #include "common/memory.h"
 #include "client/linux/log/log.h"
@@ -457,12 +458,12 @@
   // kernels, but we need to know the PID of the cloned process before we
   // can do this. Create a pipe here which we can use to block the
   // cloned process after creating it, until we have explicitly enabled ptrace
-  if(sys_pipe(fdes) == -1) {
+  if (sys_pipe(fdes) == -1) {
     // Creating the pipe failed. We'll log an error but carry on anyway,
     // as we'll probably still get a useful crash report. All that will happen
     // is the write() and read() calls will fail with EBADF
-    static const char no_pipe_msg[] = "ExceptionHandler::GenerateDump \
-                                       sys_pipe failed:";
+    static const char no_pipe_msg[] = "ExceptionHandler::GenerateDump "
+                                      "sys_pipe failed:";
     logger::write(no_pipe_msg, sizeof(no_pipe_msg) - 1);
     logger::write(strerror(errno), strlen(strerror(errno)));
     logger::write("\n", 1);
@@ -501,9 +502,9 @@
   static const char okToContinueMessage = 'a';
   int r;
   r = HANDLE_EINTR(sys_write(fdes[1], &okToContinueMessage, sizeof(char)));
-  if(r == -1) {
-    static const char msg[] = "ExceptionHandler::SendContinueSignalToChild \
-                               sys_write failed:";
+  if (r == -1) {
+    static const char msg[] = "ExceptionHandler::SendContinueSignalToChild "
+                              "sys_write failed:";
     logger::write(msg, sizeof(msg) - 1);
     logger::write(strerror(errno), strlen(strerror(errno)));
     logger::write("\n", 1);
@@ -516,9 +517,9 @@
   int r;
   char receivedMessage;
   r = HANDLE_EINTR(sys_read(fdes[0], &receivedMessage, sizeof(char)));
-  if(r == -1) {
-    static const char msg[] = "ExceptionHandler::WaitForContinueSignal \
-                               sys_read failed:";
+  if (r == -1) {
+    static const char msg[] = "ExceptionHandler::WaitForContinueSignal "
+                              "sys_read failed:";
     logger::write(msg, sizeof(msg) - 1);
     logger::write(strerror(errno), strlen(strerror(errno)));
     logger::write("\n", 1);
@@ -574,7 +575,7 @@
     // Reposition the FD to its beginning and resize it to get rid of the
     // previous minidump info.
     lseek(minidump_descriptor_.fd(), 0, SEEK_SET);
-    static_cast<void>(ftruncate(minidump_descriptor_.fd(), 0));
+    ignore_result(ftruncate(minidump_descriptor_.fd(), 0));
   }
 
   // Allow this process to be dumped.
diff --git a/src/client/linux/handler/exception_handler.h b/src/client/linux/handler/exception_handler.h
index bbd962c..b57f58d 100644
--- a/src/client/linux/handler/exception_handler.h
+++ b/src/client/linux/handler/exception_handler.h
@@ -221,6 +221,9 @@
 
   // Force signal handling for the specified signal.
   bool SimulateSignalDelivery(int sig);
+
+  // Report a crash signal from an SA_SIGINFO signal handler.
+  bool HandleSignal(int sig, siginfo_t* info, void* uc);
  private:
   // Save the old signal handlers and install new ones.
   static bool InstallHandlersLocked();
@@ -233,7 +236,6 @@
   void WaitForContinueSignal();
 
   static void SignalHandler(int sig, siginfo_t* info, void* uc);
-  bool HandleSignal(int sig, siginfo_t* info, void* uc);
   static int ThreadEntry(void* arg);
   bool DoDump(pid_t crashing_process, const void* context,
               size_t context_size);
diff --git a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
index 3256f53..8b96037 100644
--- a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
+++ b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc
@@ -49,6 +49,10 @@
 #include <sys/ptrace.h>
 #include <sys/wait.h>
 
+#if defined(__i386)
+#include <cpuid.h>
+#endif
+
 #include "client/linux/minidump_writer/directory_reader.h"
 #include "client/linux/minidump_writer/line_reader.h"
 #include "common/linux/linux_libc_support.h"
@@ -191,9 +195,20 @@
   }
 
 #if defined(__i386)
-  if (sys_ptrace(PTRACE_GETFPXREGS, tid, NULL, &info->fpxregs) == -1)
-    return false;
+#if !defined(bit_FXSAVE)  // e.g. Clang
+#define bit_FXSAVE bit_FXSR
 #endif
+  // Detect if the CPU supports the FXSAVE/FXRSTOR instructions
+  int eax, ebx, ecx, edx;
+  __cpuid(1, eax, ebx, ecx, edx);
+  if (edx & bit_FXSAVE) {
+    if (sys_ptrace(PTRACE_GETFPXREGS, tid, NULL, &info->fpxregs) == -1) {
+      return false;
+    }
+  } else {
+    memset(&info->fpxregs, 0, sizeof(info->fpxregs));
+  }
+#endif  // defined(__i386)
 
 #if defined(__i386) || defined(__x86_64)
   for (unsigned i = 0; i < ThreadInfo::kNumDebugRegisters; ++i) {
diff --git a/src/client/mac/Framework/Breakpad.mm b/src/client/mac/Framework/Breakpad.mm
index 8967be1..fe592bf 100644
--- a/src/client/mac/Framework/Breakpad.mm
+++ b/src/client/mac/Framework/Breakpad.mm
@@ -28,19 +28,12 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //
 
-#define VERBOSE 0
 
-#if VERBOSE
-  static bool gDebugLog = true;
-#else
-  static bool gDebugLog = false;
-#endif
-
-#define DEBUGLOG if (gDebugLog) fprintf
 #define IGNORE_DEBUGGER "BREAKPAD_IGNORE_DEBUGGER"
 
 #import "client/mac/Framework/Breakpad.h"
 
+#include <assert.h>
 #import <Foundation/Foundation.h>
 #include <pthread.h>
 #include <sys/stat.h>
@@ -103,36 +96,32 @@
 // ProtectedMemoryLocker will unprotect this block after taking the lock.
 // Its destructor will first re-protect the memory then release the lock.
 class ProtectedMemoryLocker {
-public:
-  // allocator may be NULL, in which case no Protect() or Unprotect() calls
-  // will be made, but a lock will still be taken
+ public:
   ProtectedMemoryLocker(pthread_mutex_t *mutex,
                         ProtectedMemoryAllocator *allocator)
-  : mutex_(mutex), allocator_(allocator) {
+      : mutex_(mutex),
+        allocator_(allocator) {
     // Lock the mutex
-    assert(pthread_mutex_lock(mutex_) == 0);
+    __attribute__((unused)) int rv = pthread_mutex_lock(mutex_);
+    assert(rv == 0);
 
     // Unprotect the memory
-    if (allocator_ ) {
-      allocator_->Unprotect();
-    }
+    allocator_->Unprotect();
   }
 
   ~ProtectedMemoryLocker() {
     // First protect the memory
-    if (allocator_) {
-      allocator_->Protect();
-    }
+    allocator_->Protect();
 
     // Then unlock the mutex
-    assert(pthread_mutex_unlock(mutex_) == 0);
+    __attribute__((unused)) int rv = pthread_mutex_unlock(mutex_);
+    assert(rv == 0);
   };
 
-private:
-  //  Keep anybody from ever creating one of these things not on the stack.
-  ProtectedMemoryLocker() { }
+ private:
+  ProtectedMemoryLocker();
   ProtectedMemoryLocker(const ProtectedMemoryLocker&);
-  ProtectedMemoryLocker & operator=(ProtectedMemoryLocker&);
+  ProtectedMemoryLocker& operator=(const ProtectedMemoryLocker&);
 
   pthread_mutex_t           *mutex_;
   ProtectedMemoryAllocator  *allocator_;
@@ -311,7 +300,6 @@
     // executable code, since that's how the Breakpad framework is built.
     resourcePath = [bundlePath stringByAppendingPathComponent:@"Resources/"];
   } else {
-    DEBUGLOG(stderr, "Could not find GetResourcePath\n");
     // fallback plan
     NSBundle *bundle =
         [NSBundle bundleWithIdentifier:@"com.Google.BreakpadFramework"];
@@ -330,7 +318,6 @@
 
   // Check for debugger
   if (IsDebuggerActive()) {
-    DEBUGLOG(stderr, "Debugger is active:  Not installing handler\n");
     return true;
   }
 
@@ -505,7 +492,6 @@
   if (!inspectorPathString || !reporterPathString) {
     resourcePath = GetResourcePath();
     if (!resourcePath) {
-      DEBUGLOG(stderr, "Could not get resource path\n");
       return false;
     }
   }
@@ -518,7 +504,6 @@
 
   // Verify that there is an Inspector tool.
   if (![[NSFileManager defaultManager] fileExistsAtPath:inspectorPathString]) {
-    DEBUGLOG(stderr, "Cannot find Inspector tool\n");
     return false;
   }
 
@@ -534,7 +519,6 @@
   // Verify that there is a Reporter application.
   if (![[NSFileManager defaultManager]
              fileExistsAtPath:reporterPathString]) {
-    DEBUGLOG(stderr, "Cannot find Reporter tool\n");
     return false;
   }
 
@@ -544,17 +528,14 @@
 
   // The product, version, and URL are required values.
   if (![product length]) {
-    DEBUGLOG(stderr, "Missing required product key.\n");
     return false;
   }
 
   if (![version length]) {
-    DEBUGLOG(stderr, "Missing required version key.\n");
     return false;
   }
 
   if (![urlStr length]) {
-    DEBUGLOG(stderr, "Missing required URL key.\n");
     return false;
   }
 
@@ -651,8 +632,6 @@
                                int exception_code,
                                int exception_subcode,
                                mach_port_t crashing_thread) {
-  DEBUGLOG(stderr, "Breakpad: an exception occurred\n");
-
   if (filter_callback_) {
     bool should_handle = filter_callback_(exception_type,
                                           exception_code,
diff --git a/src/client/mac/crash_generation/ConfigFile.mm b/src/client/mac/crash_generation/ConfigFile.mm
index 9764503..dbb0f24 100644
--- a/src/client/mac/crash_generation/ConfigFile.mm
+++ b/src/client/mac/crash_generation/ConfigFile.mm
@@ -36,7 +36,8 @@
 #include <sys/time.h>
 
 #import "client/apple/Framework/BreakpadDefines.h"
-#import "client/mac/crash_generation/Inspector.h"
+#import "GTMDefines.h"
+
 
 namespace google_breakpad {
 
@@ -67,13 +68,10 @@
   assert(config_file_ != -1);
 
   if (!key) {
-    DEBUGLOG(stderr, "Breakpad: Missing Key\n");
     return NO;
   }
 
   if (!data) {
-    DEBUGLOG(stderr, "Breakpad: Missing data for key: %s\n", key ? key :
-            "<Unknown Key>");
     return NO;
   }
 
@@ -137,14 +135,8 @@
   config_file_ = mkstemp(config_file_path_);
 
   if (config_file_ == -1) {
-    DEBUGLOG(stderr,
-             "mkstemp(config_file_path_) == -1 (%s)\n",
-             strerror(errno));
     return;
   }
-  else {
-    DEBUGLOG(stderr, "Writing config file to (%s)\n", config_file_path_);
-  }
 
   has_created_file_ = true;
 
@@ -160,10 +152,6 @@
   SimpleStringDictionary::Iterator iter(dictionary);
 
   while ((entry = iter.Next())) {
-    DEBUGLOG(stderr,
-             "config: (%s) -> (%s)\n",
-             entry->key,
-             entry->value);
     result = AppendConfigString(entry->key, entry->value);
 
     if (!result)
diff --git a/src/client/mac/crash_generation/Inspector.h b/src/client/mac/crash_generation/Inspector.h
index 4fb62f6..7e2eec8 100644
--- a/src/client/mac/crash_generation/Inspector.h
+++ b/src/client/mac/crash_generation/Inspector.h
@@ -38,9 +38,6 @@
 #import "client/mac/crash_generation/ConfigFile.h"
 #import "client/mac/handler/minidump_generator.h"
 
-extern bool gDebugLog;
-
-#define DEBUGLOG if (gDebugLog) fprintf
 
 // Types of mach messsages (message IDs)
 enum {
@@ -87,7 +84,6 @@
     // Ensure that the path exists.  Fallback to /tmp if unable to locate path.
     assert(minidumpDir);
     if (!EnsureDirectoryPathExists(minidumpDir)) {
-      DEBUGLOG(stderr, "Unable to create: %s\n", [minidumpDir UTF8String]);
       minidumpDir = @"/tmp";
     }
 
diff --git a/src/client/mac/crash_generation/Inspector.mm b/src/client/mac/crash_generation/Inspector.mm
index c625912..d226ca3 100644
--- a/src/client/mac/crash_generation/Inspector.mm
+++ b/src/client/mac/crash_generation/Inspector.mm
@@ -252,8 +252,6 @@
       }
     }
     if (parameters_read != info.parameter_count) {
-      DEBUGLOG(stderr, "Only read %d parameters instead of %d, aborting crash "
-               "dump generation.", parameters_read, info.parameter_count);
       return KERN_FAILURE;
     }
   }
@@ -265,7 +263,6 @@
 bool Inspector::InspectTask() {
   // keep the task quiet while we're looking at it
   task_suspend(remote_task_);
-  DEBUGLOG(stderr, "Suspended Remote task\n");
 
   NSString *minidumpDir;
 
@@ -282,11 +279,11 @@
 
     NSString *applicationSupportDirectory =
         [libraryDirectories objectAtIndex:0];
-    NSString *library_subdirectory = [NSString 
+    NSString *library_subdirectory = [NSString
         stringWithUTF8String:kDefaultLibrarySubdirectory];
-    NSString *breakpad_product = [NSString 
+    NSString *breakpad_product = [NSString
         stringWithUTF8String:config_params_.GetValueForKey(BREAKPAD_PRODUCT)];
-        
+
     NSArray *path_components = [NSArray
         arrayWithObjects:applicationSupportDirectory,
                          library_subdirectory,
@@ -298,9 +295,6 @@
     minidumpDir = [[NSString stringWithUTF8String:minidumpDirectory]
                     stringByExpandingTildeInPath];
   }
-  DEBUGLOG(stderr, 
-           "Writing minidump to directory (%s)\n",
-           [minidumpDir UTF8String]);
 
   MinidumpLocation minidumpLocation(minidumpDir);
 
@@ -314,13 +308,8 @@
   NSString *pathid_ns = [NSString
       stringWithUTF8String:minidumpLocation.GetID()];
   NSString *minidumpPath = [path_ns stringByAppendingPathComponent:pathid_ns];
-  minidumpPath = [minidumpPath 
+  minidumpPath = [minidumpPath
       stringByAppendingPathExtension:@"dmp"];
-  
-  DEBUGLOG(stderr, 
-           "minidump path (%s)\n",
-           [minidumpPath UTF8String]);
-
 
   config_file_.WriteFile( 0,
                           &config_params_,
@@ -340,15 +329,8 @@
 
   bool result = generator.Write([minidumpPath fileSystemRepresentation]);
 
-  if (result) {
-    DEBUGLOG(stderr, "Wrote minidump - OK\n");
-  } else {
-    DEBUGLOG(stderr, "Error writing minidump - errno=%s\n",  strerror(errno));
-  }
-
   // let the task continue
   task_resume(remote_task_);
-  DEBUGLOG(stderr, "Resumed remote task\n");
 
   return result;
 }
@@ -361,9 +343,6 @@
     MachPortSender sender(ack_port_);
     MachSendMessage ack_message(kMsgType_InspectorAcknowledgement);
 
-    DEBUGLOG(stderr, "Inspector: trying to send acknowledgement to port %d\n",
-      ack_port_);
-
     kern_return_t result = sender.SendMessage(ack_message, 2000);
 
 #if VERBOSE
@@ -373,7 +352,6 @@
     return result;
   }
 
-  DEBUGLOG(stderr, "Inspector: port translation failure!\n");
   return KERN_INVALID_NAME;
 }
 
@@ -382,7 +360,6 @@
   // Extract the path to the reporter executable.
   const char *reporterExecutablePath =
           config_params_.GetValueForKey(BREAKPAD_REPORTER_EXE_LOCATION);
-  DEBUGLOG(stderr, "reporter path = %s\n", reporterExecutablePath);
 
   // Setup and launch the crash dump sender.
   const char *argv[3];
@@ -398,7 +375,6 @@
   if (pid == 0) {
     execv(argv[0], (char * const *)argv);
     config_file_.Unlink();  // launch failed - get rid of config file
-    DEBUGLOG(stderr, "Inspector: unable to launch reporter app\n");
     _exit(1);
   }
 
@@ -416,8 +392,7 @@
       // The child has not yet finished.
       sleep(1);
     } else if (result == -1) {
-      DEBUGLOG(stderr, "Inspector: waitpid error (%d) waiting for reporter app\n",
-        errno);
+      // error occurred.
       break;
     } else {
       // child has finished
diff --git a/src/client/mac/crash_generation/crash_generation_server.cc b/src/client/mac/crash_generation/crash_generation_server.cc
index b3eb403..b74e21c 100644
--- a/src/client/mac/crash_generation/crash_generation_server.cc
+++ b/src/client/mac/crash_generation/crash_generation_server.cc
@@ -29,6 +29,8 @@
 
 #include "client/mac/crash_generation/crash_generation_server.h"
 
+#include <pthread.h>
+
 #include "client/mac/crash_generation/client_info.h"
 #include "client/mac/handler/minidump_generator.h"
 #include "common/mac/scoped_task_suspend-inl.h"
diff --git a/src/client/mac/handler/breakpad_nlist_64.cc b/src/client/mac/handler/breakpad_nlist_64.cc
index fcb667e..f6e1d95 100644
--- a/src/client/mac/handler/breakpad_nlist_64.cc
+++ b/src/client/mac/handler/breakpad_nlist_64.cc
@@ -281,7 +281,7 @@
 
   off_t sa;  /* symbol address */
   off_t ss;  /* start of strings */
-  register register_t n;
+  register_t n;
   if (*((unsigned int *)&buf) == magic) {
     if (lseek(fd, arch_offset, SEEK_SET) == -1) {
       return -1;
@@ -354,7 +354,7 @@
   // and look for a match
   while (n) {
     nlist_type space[BUFSIZ/sizeof (nlist_type)];
-    register register_t m = sizeof (space);
+    register_t m = sizeof (space);
 
     if (n < m)
       m = n;
diff --git a/src/client/mac/handler/dynamic_images.cc b/src/client/mac/handler/dynamic_images.cc
index fbd6dcf..3dc4f3b 100644
--- a/src/client/mac/handler/dynamic_images.cc
+++ b/src/client/mac/handler/dynamic_images.cc
@@ -567,7 +567,7 @@
 
     cpu_type_t cpu_type;
     size_t cpuTypeSize = sizeof(cpu_type);
-    sysctl(mib, mibLen, &cpu_type, &cpuTypeSize, 0, 0);
+    sysctl(mib, static_cast<u_int>(mibLen), &cpu_type, &cpuTypeSize, 0, 0);
     return cpu_type;
   }
 
diff --git a/src/client/mac/handler/minidump_generator.cc b/src/client/mac/handler/minidump_generator.cc
index a85c670..38baa04 100644
--- a/src/client/mac/handler/minidump_generator.cc
+++ b/src/client/mac/handler/minidump_generator.cc
@@ -62,7 +62,7 @@
 
 namespace google_breakpad {
 
-#if __LP64__
+#if defined(__LP64__) && __LP64__
 #define LC_SEGMENT_ARCH LC_SEGMENT_64
 #else
 #define LC_SEGMENT_ARCH LC_SEGMENT
@@ -627,8 +627,11 @@
   MDRawContextPPC *context_ptr = context.get();
   context_ptr->context_flags = MD_CONTEXT_PPC_BASE;
 
-#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a)
-#define AddGPR(a) context_ptr->gpr[a] = REGISTER_FROM_THREADSTATE(machine_state, r ## a)
+#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \
+    REGISTER_FROM_THREADSTATE(machine_state, a))
+#define AddGPR(a) context_ptr->gpr[a] = \
+    static_cast<__typeof__(context_ptr->a)>( \
+    REGISTER_FROM_THREADSTATE(machine_state, r ## a)
 
   AddReg(srr0);
   AddReg(cr);
@@ -690,8 +693,11 @@
   MDRawContextPPC64 *context_ptr = context.get();
   context_ptr->context_flags = MD_CONTEXT_PPC_BASE;
 
-#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a)
-#define AddGPR(a) context_ptr->gpr[a] = REGISTER_FROM_THREADSTATE(machine_state, r ## a)
+#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \
+    REGISTER_FROM_THREADSTATE(machine_state, a))
+#define AddGPR(a) context_ptr->gpr[a] = \
+    static_cast<__typeof__(context_ptr->a)>( \
+    REGISTER_FROM_THREADSTATE(machine_state, r ## a)
 
   AddReg(srr0);
   AddReg(cr);
@@ -755,7 +761,8 @@
   x86_thread_state64_t *machine_state =
       reinterpret_cast<x86_thread_state64_t *>(state);
 
-  mach_vm_address_t start_addr = REGISTER_FROM_THREADSTATE(machine_state, rsp);
+  mach_vm_address_t start_addr = static_cast<mach_vm_address_t>(
+      REGISTER_FROM_THREADSTATE(machine_state, rsp));
   return WriteStackFromStartAddress(start_addr, stack_location);
 }
 
@@ -788,7 +795,8 @@
   *register_location = context.location();
   MDRawContextX86 *context_ptr = context.get();
 
-#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a)
+#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \
+    REGISTER_FROM_THREADSTATE(machine_state, a))
 
   context_ptr->context_flags = MD_CONTEXT_X86;
   AddReg(eax);
@@ -827,7 +835,8 @@
   *register_location = context.location();
   MDRawContextAMD64 *context_ptr = context.get();
 
-#define AddReg(a) context_ptr->a = REGISTER_FROM_THREADSTATE(machine_state, a)
+#define AddReg(a) context_ptr->a = static_cast<__typeof__(context_ptr->a)>( \
+    REGISTER_FROM_THREADSTATE(machine_state, a))
 
   context_ptr->context_flags = MD_CONTEXT_AMD64;
   AddReg(rax);
@@ -871,7 +880,7 @@
         size_t final_size =
             std::min(static_cast<size_t>(*count), sizeof(arm_thread_state_t));
         memcpy(state, &task_context_->breakpad_uc_mcontext->__ss, final_size);
-        *count = final_size;
+        *count = static_cast<mach_msg_type_number_t>(final_size);
         return true;
 #endif
 #ifdef HAS_ARM64_SUPPORT
@@ -879,7 +888,7 @@
         size_t final_size =
             std::min(static_cast<size_t>(*count), sizeof(arm_thread_state64_t));
         memcpy(state, &task_context_->breakpad_uc_mcontext->__ss, final_size);
-        *count = final_size;
+        *count = static_cast<mach_msg_type_number_t>(final_size);
         return true;
       }
 #endif
@@ -891,7 +900,7 @@
         size_t final_size =
             std::min(static_cast<size_t>(*count), state_size);
         memcpy(state, &task_context_->breakpad_uc_mcontext->__ss, final_size);
-        *count = final_size;
+        *count = static_cast<mach_msg_type_number_t>(final_size);
         return true;
       }
 #endif
@@ -1040,9 +1049,9 @@
         uintptr_t end_of_range = 
           std::min(uintptr_t(ip + (kIPMemorySize / 2)),
                    uintptr_t(addr + size));
-        ip_memory_d.memory.data_size =
-            end_of_range -
+        uintptr_t range_diff = end_of_range -
             static_cast<uintptr_t>(ip_memory_d.start_of_memory_range);
+        ip_memory_d.memory.data_size = static_cast<uint32_t>(range_diff);
         have_ip_memory = true;
         // This needs to get appended to the list even though
         // the memory bytes aren't filled in yet so the entire
@@ -1054,7 +1063,7 @@
   }
 
   // Now fill in the memory list and write it.
-  unsigned memory_count = memory_blocks_.size();
+  size_t memory_count = memory_blocks_.size();
   if (!list.AllocateObjectAndArray(memory_count,
                                    sizeof(MDMemoryDescriptor)))
     return false;
@@ -1062,7 +1071,7 @@
   memory_list_stream->stream_type = MD_MEMORY_LIST_STREAM;
   memory_list_stream->location = list.location();
 
-  list.get()->number_of_memory_ranges = memory_count;
+  list.get()->number_of_memory_ranges = static_cast<uint32_t>(memory_count);
 
   unsigned int i;
   for (i = 0; i < memory_count; ++i) {
@@ -1216,9 +1225,9 @@
       info_ptr->processor_level =
         (info_ptr->cpu.x86_cpu_info.version_information & 0xF00) >> 8;
       // 0xMMSS (Model, Stepping)
-      info_ptr->processor_revision =
-        (info_ptr->cpu.x86_cpu_info.version_information & 0xF) |
-        ((info_ptr->cpu.x86_cpu_info.version_information & 0xF0) << 4);
+      info_ptr->processor_revision = static_cast<uint16_t>(
+          (info_ptr->cpu.x86_cpu_info.version_information & 0xF) |
+          ((info_ptr->cpu.x86_cpu_info.version_information & 0xF0) << 4));
 
       // decode extended model info
       if (info_ptr->processor_level == 0xF ||
@@ -1461,8 +1470,8 @@
     MDRawDirectory *module_list_stream) {
   TypedMDRVA<MDRawModuleList> list(&writer_);
 
-  size_t image_count = dynamic_images_ ?
-      static_cast<size_t>(dynamic_images_->GetImageCount()) :
+  uint32_t image_count = dynamic_images_ ?
+      dynamic_images_->GetImageCount() :
       _dyld_image_count();
 
   if (!list.AllocateObjectAndArray(image_count, MD_MODULE_SIZE))
@@ -1470,22 +1479,22 @@
 
   module_list_stream->stream_type = MD_MODULE_LIST_STREAM;
   module_list_stream->location = list.location();
-  list.get()->number_of_modules = image_count;
+  list.get()->number_of_modules = static_cast<uint32_t>(image_count);
 
   // Write out the executable module as the first one
   MDRawModule module;
-  size_t executableIndex = FindExecutableModule();
+  uint32_t executableIndex = FindExecutableModule();
 
-  if (!WriteModuleStream(executableIndex, &module)) {
+  if (!WriteModuleStream(static_cast<unsigned>(executableIndex), &module)) {
     return false;
   }
 
   list.CopyIndexAfterObject(0, &module, MD_MODULE_SIZE);
   int destinationIndex = 1;  // Write all other modules after this one
 
-  for (size_t i = 0; i < image_count; ++i) {
+  for (uint32_t i = 0; i < image_count; ++i) {
     if (i != executableIndex) {
-      if (!WriteModuleStream(i, &module)) {
+      if (!WriteModuleStream(static_cast<unsigned>(i), &module)) {
         return false;
       }
 
diff --git a/src/client/minidump_file_writer.cc b/src/client/minidump_file_writer.cc
index 1e18d24..9e90533 100644
--- a/src/client/minidump_file_writer.cc
+++ b/src/client/minidump_file_writer.cc
@@ -40,7 +40,7 @@
 #include "client/minidump_file_writer-inl.h"
 #include "common/linux/linux_libc_support.h"
 #include "common/string_conversion.h"
-#if __linux__
+#if defined(__linux__) && __linux__
 #include "third_party/lss/linux_syscall_support.h"
 #endif
 
@@ -62,7 +62,7 @@
 
 bool MinidumpFileWriter::Open(const char *path) {
   assert(file_ == -1);
-#if __linux__
+#if defined(__linux__) && __linux__
   file_ = sys_open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
 #else
   file_ = open(path, O_WRONLY | O_CREAT | O_EXCL, 0600);
@@ -84,7 +84,7 @@
     if (-1 == ftruncate(file_, position_)) {
        return false;
     }
-#if __linux__
+#if defined(__linux__) && __linux__
     result = (sys_close(file_) == 0);
 #else
     result = (close(file_) == 0);
@@ -253,7 +253,7 @@
     return false;
 
   // Seek and write the data
-#if __linux__
+#if defined(__linux__) && __linux__
   if (sys_lseek(file_, position, SEEK_SET) == static_cast<off_t>(position)) {
     if (sys_write(file_, src, size) == size) {
 #else
diff --git a/src/client/windows/build/common.gypi b/src/client/windows/build/common.gypi
index 60a2458..2c792d5 100644
--- a/src/client/windows/build/common.gypi
+++ b/src/client/windows/build/common.gypi
@@ -123,10 +123,10 @@
       # Python version.
       'python_ver%': '2.5',
 
-      # Set ARM-v7 compilation flags
-      'armv7%': 0,
+      # Determine ARM compilation flags.
+      'arm_version%': 7,
 
-      # Set Neon compilation flags (only meaningful if armv7==1).
+      # Set Neon compilation flags (only meaningful if arm_version==7).
       'arm_neon%': 1,
 
       # The system root for cross-compiles. Default: none.
@@ -148,7 +148,7 @@
     'fastbuild%': '<(fastbuild)',
     'linux_fpic%': '<(linux_fpic)',
     'python_ver%': '<(python_ver)',
-    'armv7%': '<(armv7)',
+    'arm_version%': '<(arm_version)',
     'arm_neon%': '<(arm_neon)',
     'sysroot%': '<(sysroot)',
     'disable_sse2%': '<(disable_sse2)',
@@ -254,7 +254,7 @@
     # Set Thumb compilation flags.
     'arm_thumb%': 0,
 
-    # Set ARM fpu compilation flags (only meaningful if armv7==1 and
+    # Set ARM fpu compilation flags (only meaningful if arm_version==7 and
     # arm_neon==0).
     'arm_fpu%': 'vfpv3',
 
@@ -980,7 +980,7 @@
                     '-Wa,-mimplicit-it=thumb',
                     ]
                   }],
-                  ['armv7==1', {
+                  ['arm_version==7', {
                     'cflags': [
                       '-march=armv7-a',
                       '-mtune=cortex-a8',
@@ -1174,7 +1174,9 @@
           '$(VSInstallDir)/VC/atlmfc/include',
         ],
         'msvs_cygwin_dirs': ['<(DEPTH)/third_party/cygwin'],
-        'msvs_disabled_warnings': [4100, 4127, 4396, 4503, 4512, 4819, 4995],
+        'msvs_disabled_warnings': [
+          4100, 4127, 4396, 4503, 4512, 4819, 4995, 4702
+        ],
         'msvs_settings': {
           'VCCLCompilerTool': {
             'MinimalRebuild': 'false',
diff --git a/src/client/windows/crash_generation/crash_generation_server.cc b/src/client/windows/crash_generation/crash_generation_server.cc
index b98fb5e..ae05243 100644
--- a/src/client/windows/crash_generation/crash_generation_server.cc
+++ b/src/client/windows/crash_generation/crash_generation_server.cc
@@ -85,6 +85,15 @@
           msg.assert_info != NULL);
 }
 
+#ifdef _DEBUG
+static bool CheckForIOIncomplete(bool success) {
+  // We should never get an I/O incomplete since we should not execute this
+  // unless the operation has finished and the overlapped event is signaled. If
+  // we do get INCOMPLETE, we have a bug in our code.
+  return success ? false : (GetLastError() == ERROR_IO_INCOMPLETE);
+}
+#endif
+
 CrashGenerationServer::CrashGenerationServer(
     const std::wstring& pipe_name,
     SECURITY_ATTRIBUTES* pipe_sec_attrs,
@@ -112,17 +121,13 @@
       upload_request_callback_(upload_request_callback),
       upload_context_(upload_context),
       generate_dumps_(generate_dumps),
-      dump_generator_(NULL),
+      dump_path_(dump_path ? *dump_path : L""),
       server_state_(IPC_SERVER_STATE_UNINITIALIZED),
       shutting_down_(false),
       overlapped_(),
       client_info_(NULL),
       pre_fetch_custom_info_(true) {
   InitializeCriticalSection(&sync_);
-
-  if (dump_path) {
-    dump_generator_.reset(new MinidumpGenerator(*dump_path));
-  }
 }
 
 // This should never be called from the OnPipeConnected callback.
@@ -388,18 +393,13 @@
                                      &overlapped_,
                                      &bytes_count,
                                      FALSE) != FALSE;
-  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
-
   if (success && bytes_count == sizeof(ProtocolMessage)) {
     EnterStateImmediately(IPC_SERVER_STATE_READ_DONE);
-  } else {
-    // We should never get an I/O incomplete since we should not execute this
-    // unless the Read has finished and the overlapped event is signaled. If
-    // we do get INCOMPLETE, we have a bug in our code.
-    assert(error_code != ERROR_IO_INCOMPLETE);
-
-    EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
+    return;
   }
+
+  assert(!CheckForIOIncomplete(success));
+  EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
 }
 
 // When the server thread serving the client is in the READ_DONE state,
@@ -468,18 +468,12 @@
                                      &overlapped_,
                                      &bytes_count,
                                      FALSE) != FALSE;
-  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
-
   if (success) {
     EnterStateImmediately(IPC_SERVER_STATE_WRITE_DONE);
     return;
   }
 
-  // We should never get an I/O incomplete since we should not execute this
-  // unless the Write has finished and the overlapped event is signaled. If
-  // we do get INCOMPLETE, we have a bug in our code.
-  assert(error_code != ERROR_IO_INCOMPLETE);
-
+  assert(!CheckForIOIncomplete(success));
   EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
 }
 
@@ -517,8 +511,6 @@
                                      &overlapped_,
                                      &bytes_count,
                                      FALSE) != FALSE;
-  DWORD error_code = success ? ERROR_SUCCESS : GetLastError();
-
   if (success) {
     // The connection handshake with the client is now complete; perform
     // the callback.
@@ -551,10 +543,7 @@
       }
     }
   } else {
-    // We should never get an I/O incomplete since we should not execute this
-    // unless the Read has finished and the overlapped event is signaled. If
-    // we do get INCOMPLETE, we have a bug in our code.
-    assert(error_code != ERROR_IO_INCOMPLETE);
+    assert(!CheckForIOIncomplete(success));
   }
 
   EnterStateImmediately(IPC_SERVER_STATE_DISCONNECTING);
@@ -924,15 +913,19 @@
     return false;
   }
 
-  return dump_generator_->WriteMinidump(client.process_handle(),
-                                        client.pid(),
-                                        client_thread_id,
-                                        GetCurrentThreadId(),
-                                        client_ex_info,
-                                        client.assert_info(),
-                                        client.dump_type(),
-                                        true,
-                                        dump_path);
+  MinidumpGenerator dump_generator(dump_path_,
+                                   client.process_handle(),
+                                   client.pid(),
+                                   client_thread_id,
+                                   GetCurrentThreadId(),
+                                   client_ex_info,
+                                   client.assert_info(),
+                                   client.dump_type(),
+                                   true);
+  if (!dump_generator.GenerateDumpFile(dump_path)) {
+    return false;
+  }
+  return dump_generator.WriteMinidump();
 }
 
 }  // namespace google_breakpad
diff --git a/src/client/windows/crash_generation/crash_generation_server.h b/src/client/windows/crash_generation/crash_generation_server.h
index 0701985..0ea90e5 100644
--- a/src/client/windows/crash_generation/crash_generation_server.h
+++ b/src/client/windows/crash_generation/crash_generation_server.h
@@ -268,8 +268,8 @@
   // Wether to populate custom information up-front.
   bool pre_fetch_custom_info_;
 
-  // Instance of a mini dump generator.
-  scoped_ptr<MinidumpGenerator> dump_generator_;
+  // The dump path for the server.
+  const std::wstring dump_path_;
 
   // State of the server in performing the IPC with the client.
   // Note that since we restrict the pipe to one instance, we
diff --git a/src/client/windows/crash_generation/minidump_generator.cc b/src/client/windows/crash_generation/minidump_generator.cc
index 00a5001..22e8d36 100644
--- a/src/client/windows/crash_generation/minidump_generator.cc
+++ b/src/client/windows/crash_generation/minidump_generator.cc
@@ -38,6 +38,7 @@
 #include <vector>
 
 #include "client/windows/common/auto_critical_section.h"
+#include "common/scoped_ptr.h"
 #include "common/windows/guid_string.h"
 
 using std::wstring;
@@ -242,10 +243,33 @@
 
 namespace google_breakpad {
 
-MinidumpGenerator::MinidumpGenerator(const wstring& dump_path)
+MinidumpGenerator::MinidumpGenerator(
+    const std::wstring& dump_path,
+    const HANDLE process_handle,
+    const DWORD process_id,
+    const DWORD thread_id,
+    const DWORD requesting_thread_id,
+    EXCEPTION_POINTERS* exception_pointers,
+    MDRawAssertionInfo* assert_info,
+    const MINIDUMP_TYPE dump_type,
+    const bool is_client_pointers)
     : dbghelp_module_(NULL),
       rpcrt4_module_(NULL),
       dump_path_(dump_path),
+      process_handle_(process_handle),
+      process_id_(process_id),
+      thread_id_(thread_id),
+      requesting_thread_id_(requesting_thread_id),
+      exception_pointers_(exception_pointers),
+      assert_info_(assert_info),
+      dump_type_(dump_type),
+      is_client_pointers_(is_client_pointers),
+      dump_file_(INVALID_HANDLE_VALUE),
+      full_dump_file_(INVALID_HANDLE_VALUE),
+      dump_file_is_internal_(false),
+      full_dump_file_is_internal_(false),
+      additional_streams_(NULL),
+      callback_info_(NULL),
       write_dump_(NULL),
       create_uuid_(NULL) {
   InitializeCriticalSection(&module_load_sync_);
@@ -253,6 +277,14 @@
 }
 
 MinidumpGenerator::~MinidumpGenerator() {
+  if (dump_file_is_internal_ && dump_file_ != INVALID_HANDLE_VALUE) {
+    CloseHandle(dump_file_);
+  }
+
+  if (full_dump_file_is_internal_ && full_dump_file_ != INVALID_HANDLE_VALUE) {
+    CloseHandle(full_dump_file_);
+  }
+
   if (dbghelp_module_) {
     FreeLibrary(dbghelp_module_);
   }
@@ -265,116 +297,10 @@
   DeleteCriticalSection(&module_load_sync_);
 }
 
-bool MinidumpGenerator::WriteMinidump(HANDLE process_handle,
-                                      DWORD process_id,
-                                      DWORD thread_id,
-                                      DWORD requesting_thread_id,
-                                      EXCEPTION_POINTERS* exception_pointers,
-                                      MDRawAssertionInfo* assert_info,
-                                      MINIDUMP_TYPE dump_type,
-                                      bool is_client_pointers,
-                                      wstring* dump_path) {
-  // Just call the full WriteMinidump with NULL as the full_dump_path.
-  return this->WriteMinidump(process_handle, process_id, thread_id,
-                             requesting_thread_id, exception_pointers,
-                             assert_info, dump_type, is_client_pointers,
-                             dump_path, NULL);
-}
-
-bool MinidumpGenerator::WriteMinidump(HANDLE process_handle,
-                                      DWORD process_id,
-                                      DWORD thread_id,
-                                      DWORD requesting_thread_id,
-                                      EXCEPTION_POINTERS* exception_pointers,
-                                      MDRawAssertionInfo* assert_info,
-                                      MINIDUMP_TYPE dump_type,
-                                      bool is_client_pointers,
-                                      wstring* dump_path,
-                                      wstring* full_dump_path) {
-  wstring dump_file_path;
-  if (!GenerateDumpFilePath(&dump_file_path)) {
-    return false;
-  }
-
-  // If the client requests a full memory dump, we will write a normal mini
-  // dump and a full memory dump. Both dump files use the same uuid as file
-  // name prefix.
-  bool full_memory_dump = (dump_type & MiniDumpWithFullMemory) != 0;
-  wstring full_dump_file_path;
-  if (full_memory_dump) {
-    full_dump_file_path.assign(dump_file_path);
-    full_dump_file_path.resize(full_dump_file_path.size() - 4);  // strip .dmp
-    full_dump_file_path.append(TEXT("-full.dmp"));
-  }
-
-  HANDLE dump_file = CreateFile(dump_file_path.c_str(),
-                                GENERIC_WRITE,
-                                0,
-                                NULL,
-                                CREATE_NEW,
-                                FILE_ATTRIBUTE_NORMAL,
-                                NULL);
-
-  if (dump_file == INVALID_HANDLE_VALUE) {
-    return false;
-  }
-
-  HANDLE full_dump_file = INVALID_HANDLE_VALUE;
-  if (full_memory_dump) {
-    full_dump_file = CreateFile(full_dump_file_path.c_str(),
-                                GENERIC_WRITE,
-                                0,
-                                NULL,
-                                CREATE_NEW,
-                                FILE_ATTRIBUTE_NORMAL,
-                                NULL);
-
-    if (full_dump_file == INVALID_HANDLE_VALUE) {
-      CloseHandle(dump_file);
-      return false;
-    }
-  }
-
-  bool result = WriteMinidump(process_handle,
-                              process_id,
-                              thread_id,
-                              requesting_thread_id,
-                              exception_pointers,
-                              assert_info,
-                              dump_type,
-                              is_client_pointers,
-                              dump_file,
-                              full_dump_file);
-
-  // Store the path of the dump file in the out parameter if dump generation
-  // succeeded.
-  if (result && dump_path) {
-    *dump_path = dump_file_path;
-  }
-  if (result && full_memory_dump && full_dump_path) {
-    *full_dump_path = full_dump_file_path;
-  }
-
-  CloseHandle(dump_file);
-  if (full_dump_file != INVALID_HANDLE_VALUE)
-    CloseHandle(full_dump_file);
-
-  return result;
-}
-
-bool MinidumpGenerator::WriteMinidump(HANDLE process_handle,
-                                      DWORD process_id,
-                                      DWORD thread_id,
-                                      DWORD requesting_thread_id,
-                                      EXCEPTION_POINTERS* exception_pointers,
-                                      MDRawAssertionInfo* assert_info,
-                                      MINIDUMP_TYPE dump_type,
-                                      bool is_client_pointers,
-                                      HANDLE dump_file,
-                                      HANDLE full_dump_file) {
-  bool full_memory_dump = (dump_type & MiniDumpWithFullMemory) != 0;
-  if (dump_file == INVALID_HANDLE_VALUE ||
-      (full_memory_dump && full_dump_file == INVALID_HANDLE_VALUE)) {
+bool MinidumpGenerator::WriteMinidump() {
+  bool full_memory_dump = (dump_type_ & MiniDumpWithFullMemory) != 0;
+  if (dump_file_ == INVALID_HANDLE_VALUE ||
+      (full_memory_dump && full_dump_file_ == INVALID_HANDLE_VALUE)) {
     return false;
   }
 
@@ -388,11 +314,11 @@
 
   // Setup the exception information object only if it's a dump
   // due to an exception.
-  if (exception_pointers) {
+  if (exception_pointers_) {
     dump_exception_pointers = &dump_exception_info;
-    dump_exception_info.ThreadId = thread_id;
-    dump_exception_info.ExceptionPointers = exception_pointers;
-    dump_exception_info.ClientPointers = is_client_pointers;
+    dump_exception_info.ThreadId = thread_id_;
+    dump_exception_info.ExceptionPointers = exception_pointers_;
+    dump_exception_info.ClientPointers = is_client_pointers_;
   }
 
   // Add an MDRawBreakpadInfo stream to the minidump, to provide additional
@@ -402,49 +328,54 @@
   // can function better with Breakpad-generated dumps when it is present.
   // The native debugger is not harmed by the presence of this information.
   MDRawBreakpadInfo breakpad_info = {0};
-  if (!is_client_pointers) {
+  if (!is_client_pointers_) {
     // Set the dump thread id and requesting thread id only in case of
     // in-process dump generation.
     breakpad_info.validity = MD_BREAKPAD_INFO_VALID_DUMP_THREAD_ID |
                              MD_BREAKPAD_INFO_VALID_REQUESTING_THREAD_ID;
-    breakpad_info.dump_thread_id = thread_id;
-    breakpad_info.requesting_thread_id = requesting_thread_id;
+    breakpad_info.dump_thread_id = thread_id_;
+    breakpad_info.requesting_thread_id = requesting_thread_id_;
   }
 
-  // Leave room in user_stream_array for possible assertion info and handle
-  // operations streams.
-  MINIDUMP_USER_STREAM user_stream_array[3];
+  int additional_streams_count = additional_streams_ ?
+      additional_streams_->UserStreamCount : 0;
+  scoped_array<MINIDUMP_USER_STREAM> user_stream_array(
+      new MINIDUMP_USER_STREAM[3 + additional_streams_count]);
   user_stream_array[0].Type = MD_BREAKPAD_INFO_STREAM;
   user_stream_array[0].BufferSize = sizeof(breakpad_info);
   user_stream_array[0].Buffer = &breakpad_info;
 
   MINIDUMP_USER_STREAM_INFORMATION user_streams;
   user_streams.UserStreamCount = 1;
-  user_streams.UserStreamArray = user_stream_array;
+  user_streams.UserStreamArray = user_stream_array.get();
 
-  MDRawAssertionInfo* actual_assert_info = assert_info;
+  MDRawAssertionInfo* actual_assert_info = assert_info_;
   MDRawAssertionInfo client_assert_info = {0};
 
-  if (assert_info) {
+  if (assert_info_) {
     // If the assertion info object lives in the client process,
     // read the memory of the client process.
-    if (is_client_pointers) {
+    if (is_client_pointers_) {
       SIZE_T bytes_read = 0;
-      if (!ReadProcessMemory(process_handle,
-                             assert_info,
+      if (!ReadProcessMemory(process_handle_,
+                             assert_info_,
                              &client_assert_info,
                              sizeof(client_assert_info),
                              &bytes_read)) {
-        CloseHandle(dump_file);
-        if (full_dump_file != INVALID_HANDLE_VALUE)
-          CloseHandle(full_dump_file);
+        if (dump_file_is_internal_)
+          CloseHandle(dump_file_);
+        if (full_dump_file_is_internal_ &&
+            full_dump_file_ != INVALID_HANDLE_VALUE)
+          CloseHandle(full_dump_file_);
         return false;
       }
 
       if (bytes_read != sizeof(client_assert_info)) {
-        CloseHandle(dump_file);
-        if (full_dump_file != INVALID_HANDLE_VALUE)
-          CloseHandle(full_dump_file);
+        if (dump_file_is_internal_)
+          CloseHandle(dump_file_);
+        if (full_dump_file_is_internal_ &&
+            full_dump_file_ != INVALID_HANDLE_VALUE)
+          CloseHandle(full_dump_file_);
         return false;
       }
 
@@ -457,16 +388,31 @@
     ++user_streams.UserStreamCount;
   }
 
+  if (additional_streams_) {
+    for (size_t i = 0;
+         i < additional_streams_->UserStreamCount;
+         i++, user_streams.UserStreamCount++) {
+      user_stream_array[user_streams.UserStreamCount].Type =
+          additional_streams_->UserStreamArray[i].Type;
+      user_stream_array[user_streams.UserStreamCount].BufferSize =
+          additional_streams_->UserStreamArray[i].BufferSize;
+      user_stream_array[user_streams.UserStreamCount].Buffer =
+          additional_streams_->UserStreamArray[i].Buffer;
+    }
+  }
+
   // If the process is terminated by STATUS_INVALID_HANDLE exception store
-  // the trace of operatios for the offending handle value. Do nothing special
+  // the trace of operations for the offending handle value. Do nothing special
   // if the client already requested the handle trace to be stored in the dump.
   HandleTraceData handle_trace_data;
-  if (exception_pointers && (dump_type & MiniDumpWithHandleData) == 0) {
-    if (!handle_trace_data.CollectHandleData(process_handle,
-                                             exception_pointers)) {
-      CloseHandle(dump_file);
-      if (full_dump_file != INVALID_HANDLE_VALUE)
-        CloseHandle(full_dump_file);
+  if (exception_pointers_ && (dump_type_ & MiniDumpWithHandleData) == 0) {
+    if (!handle_trace_data.CollectHandleData(process_handle_,
+                                             exception_pointers_)) {
+      if (dump_file_is_internal_)
+        CloseHandle(dump_file_);
+      if (full_dump_file_is_internal_ &&
+          full_dump_file_ != INVALID_HANDLE_VALUE)
+        CloseHandle(full_dump_file_);
       return false;
     }
   }
@@ -474,12 +420,12 @@
   bool result_full_memory = true;
   if (full_memory_dump) {
     result_full_memory = write_dump(
-        process_handle,
-        process_id,
-        full_dump_file,
-        static_cast<MINIDUMP_TYPE>((dump_type & (~MiniDumpNormal))
+        process_handle_,
+        process_id_,
+        full_dump_file_,
+        static_cast<MINIDUMP_TYPE>((dump_type_ & (~MiniDumpNormal))
                                     | MiniDumpWithHandleData),
-        exception_pointers ? &dump_exception_info : NULL,
+        exception_pointers_ ? &dump_exception_info : NULL,
         &user_streams,
         NULL) != FALSE;
   }
@@ -491,18 +437,81 @@
   }
 
   bool result_minidump = write_dump(
-      process_handle,
-      process_id,
-      dump_file,
-      static_cast<MINIDUMP_TYPE>((dump_type & (~MiniDumpWithFullMemory))
+      process_handle_,
+      process_id_,
+      dump_file_,
+      static_cast<MINIDUMP_TYPE>((dump_type_ & (~MiniDumpWithFullMemory))
                                   | MiniDumpNormal),
-      exception_pointers ? &dump_exception_info : NULL,
+      exception_pointers_ ? &dump_exception_info : NULL,
       &user_streams,
-      NULL) != FALSE;
+      callback_info_) != FALSE;
 
   return result_minidump && result_full_memory;
 }
 
+bool MinidumpGenerator::GenerateDumpFile(wstring* dump_path) {
+  // The dump file was already set by handle or this function was previously
+  // called.
+  if (dump_file_ != INVALID_HANDLE_VALUE) {
+    return false;
+  }
+
+  wstring dump_file_path;
+  if (!GenerateDumpFilePath(&dump_file_path)) {
+    return false;
+  }
+
+  dump_file_ = CreateFile(dump_file_path.c_str(),
+                          GENERIC_WRITE,
+                          0,
+                          NULL,
+                          CREATE_NEW,
+                          FILE_ATTRIBUTE_NORMAL,
+                          NULL);
+  if (dump_file_ == INVALID_HANDLE_VALUE) {
+    return false;
+  }
+
+  dump_file_is_internal_ = true;
+  *dump_path = dump_file_path;
+  return true;
+}
+
+bool MinidumpGenerator::GenerateFullDumpFile(wstring* full_dump_path) {
+  // A full minidump was not requested.
+  if ((dump_type_ & MiniDumpWithFullMemory) == 0) {
+    return false;
+  }
+
+  // The dump file was already set by handle or this function was previously
+  // called.
+  if (full_dump_file_ != INVALID_HANDLE_VALUE) {
+    return false;
+  }
+
+  wstring full_dump_file_path;
+  if (!GenerateDumpFilePath(&full_dump_file_path)) {
+    return false;
+  }
+  full_dump_file_path.resize(full_dump_file_path.size() - 4);  // strip .dmp
+  full_dump_file_path.append(TEXT("-full.dmp"));
+
+  full_dump_file_ = CreateFile(full_dump_file_path.c_str(),
+                               GENERIC_WRITE,
+                               0,
+                               NULL,
+                               CREATE_NEW,
+                               FILE_ATTRIBUTE_NORMAL,
+                               NULL);
+  if (full_dump_file_ == INVALID_HANDLE_VALUE) {
+    return false;
+  }
+
+  full_dump_file_is_internal_ = true;
+  *full_dump_path = full_dump_file_path;
+  return true;
+}
+
 HMODULE MinidumpGenerator::GetDbghelpModule() {
   AutoCriticalSection lock(&module_load_sync_);
   if (!dbghelp_module_) {
diff --git a/src/client/windows/crash_generation/minidump_generator.h b/src/client/windows/crash_generation/minidump_generator.h
old mode 100755
new mode 100644
index a72db28..b95e04e
--- a/src/client/windows/crash_generation/minidump_generator.h
+++ b/src/client/windows/crash_generation/minidump_generator.h
@@ -44,52 +44,55 @@
 // the clients to generate minidumps.
 class MinidumpGenerator {
  public:
-  // Creates an instance with the given dump path.
-  explicit MinidumpGenerator(const std::wstring& dump_path);
+  // Creates an instance with the given parameters.
+  // is_client_pointers specifies whether the exception_pointers and
+  // assert_info point into the process that is being dumped.
+  // Before calling WriteMinidump on the returned instance a dump file muct be
+  // specified by a call to either SetDumpFile() or GenerateDumpFile().
+  // If a full dump file will be requested via a subsequent call to either
+  // SetFullDumpFile or GenerateFullDumpFile() dump_type must include
+  // MiniDumpWithFullMemory.
+  MinidumpGenerator(const std::wstring& dump_path,
+                    const HANDLE process_handle,
+                    const DWORD process_id,
+                    const DWORD thread_id,
+                    const DWORD requesting_thread_id,
+                    EXCEPTION_POINTERS* exception_pointers,
+                    MDRawAssertionInfo* assert_info,
+                    const MINIDUMP_TYPE dump_type,
+                    const bool is_client_pointers);
 
   ~MinidumpGenerator();
 
+  void SetDumpFile(const HANDLE dump_file) { dump_file_ = dump_file; }
+  void SetFullDumpFile(const HANDLE full_dump_file) {
+    full_dump_file_ = full_dump_file;
+  }
+
+  // Generate the name for the dump file that will be written to once
+  // WriteMinidump() is called. Can only be called once and cannot be called
+  // if the dump file is set via SetDumpFile().
+  bool GenerateDumpFile(std::wstring* dump_path);
+
+  // Generate the name for the full dump file that will be written to once
+  // WriteMinidump() is called. Cannot be called unless the minidump type
+  // includes MiniDumpWithFullMemory. Can only be called once and cannot be
+  // called if the dump file is set via SetFullDumpFile().
+  bool GenerateFullDumpFile(std::wstring* full_dump_path);
+
+  void SetAdditionalStreams(
+      MINIDUMP_USER_STREAM_INFORMATION* additional_streams) {
+    additional_streams_ = additional_streams;
+  }
+
+  void SetCallback(MINIDUMP_CALLBACK_INFORMATION* callback_info) {
+    callback_info_ = callback_info;
+  }
+
   // Writes the minidump with the given parameters. Stores the
   // dump file path in the dump_path parameter if dump generation
   // succeeds.
-  bool WriteMinidump(HANDLE process_handle,
-                     DWORD process_id,
-                     DWORD thread_id,
-                     DWORD requesting_thread_id,
-                     EXCEPTION_POINTERS* exception_pointers,
-                     MDRawAssertionInfo* assert_info,
-                     MINIDUMP_TYPE dump_type,
-                     bool is_client_pointers,
-                     std::wstring* dump_path);
-
-  // Writes the minidump with the given parameters. Stores the dump file
-  // path in the dump_path (and full_dump_path) parameter if dump
-  // generation succeeds. full_dump_path and dump_path can be NULL.
-  bool WriteMinidump(HANDLE process_handle,
-                     DWORD process_id,
-                     DWORD thread_id,
-                     DWORD requesting_thread_id,
-                     EXCEPTION_POINTERS* exception_pointers,
-                     MDRawAssertionInfo* assert_info,
-                     MINIDUMP_TYPE dump_type,
-                     bool is_client_pointers,
-                     std::wstring* dump_path,
-                     std::wstring* full_dump_path);
-
-  // Writes the minidump with the given parameters. Writes the minidump and
-  // full dump to the file handles supplied. This allows the caller to handle
-  // the creation of the files for the dump. The file handles are not closed
-  // by this function.
-  bool WriteMinidump(HANDLE process_handle,
-                     DWORD process_id,
-                     DWORD thread_id,
-                     DWORD requesting_thread_id,
-                     EXCEPTION_POINTERS* exception_pointers,
-                     MDRawAssertionInfo* assert_info,
-                     MINIDUMP_TYPE dump_type,
-                     bool is_client_pointers,
-                     HANDLE dump_file,
-                     HANDLE full_dump_file);
+  bool WriteMinidump();
 
  private:
   // Function pointer type for MiniDumpWriteDump, which is looked up
@@ -135,9 +138,53 @@
   // Pointer to the UuidCreate function.
   UuidCreateType create_uuid_;
 
+  // Handle for the process to dump.
+  HANDLE process_handle_;
+
+  // Process ID for the process to dump.
+  DWORD process_id_;
+
+  // The crashing thread ID.
+  DWORD thread_id_;
+
+  // The thread ID which is requesting the dump.
+  DWORD requesting_thread_id_;
+
+  // Pointer to the exception information for the crash. This may point to an
+  // address in the crashing process so it should not be dereferenced.
+  EXCEPTION_POINTERS* exception_pointers_;
+
+  // Assertion info for the report.
+  MDRawAssertionInfo* assert_info_;
+
+  // Type of minidump to generate.
+  MINIDUMP_TYPE dump_type_;
+
+  // Specifies whether the exception_pointers_ reference memory in the crashing
+  // process.
+  bool is_client_pointers_;
+
   // Folder path to store dump files.
   std::wstring dump_path_;
 
+  // The file where the dump will be written.
+  HANDLE dump_file_;
+
+  // The file where the full dump will be written.
+  HANDLE full_dump_file_;
+
+  // Tracks whether the dump file handle is managed externally.
+  bool dump_file_is_internal_;
+
+  // Tracks whether the full dump file handle is managed externally.
+  bool full_dump_file_is_internal_;
+
+  // Additional streams to be written to the dump.
+  MINIDUMP_USER_STREAM_INFORMATION* additional_streams_;
+
+  // The user defined callback for the various stages of the dump process.
+  MINIDUMP_CALLBACK_INFORMATION* callback_info_;
+
   // Critical section to sychronize action of loading modules dynamically.
   CRITICAL_SECTION module_load_sync_;
 
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.cc b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
index 12449ce..7a6c1a9 100644
--- a/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.cc
@@ -357,13 +357,7 @@
   PAINTSTRUCT ps;
   HDC hdc;
 
-#pragma warning(push)
-#pragma warning(disable:4312)
-  // Disable warning C4312: 'type cast' : conversion from 'LONG' to
-  // 'HINSTANCE' of greater size.
-  // The value returned by GetwindowLong in the case below returns unsigned.
-  HINSTANCE instance = (HINSTANCE)GetWindowLong(wnd, GWL_HINSTANCE);
-#pragma warning(pop)
+  HINSTANCE instance = (HINSTANCE)GetWindowLongPtr(wnd, GWLP_HINSTANCE);
 
   switch (message) {
     case WM_COMMAND:
diff --git a/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp b/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp
index b5dabc5..963d9cd 100644
--- a/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp
+++ b/src/client/windows/tests/crash_generation_app/crash_generation_app.gyp
@@ -45,6 +45,9 @@
         'resource.h',
         'small.ico',
       ],
+      'libraries': [
+        'user32.lib',
+      ],
       'dependencies': [
         '../../breakpad_client.gyp:common',
         '../../crash_generation/crash_generation.gyp:crash_generation_server',
diff --git a/src/client/windows/unittests/exception_handler_nesting_test.cc b/src/client/windows/unittests/exception_handler_nesting_test.cc
old mode 100755
new mode 100644
diff --git a/src/client/windows/unittests/exception_handler_test.h b/src/client/windows/unittests/exception_handler_test.h
old mode 100755
new mode 100644
diff --git a/src/client/windows/unittests/minidump_test.cc b/src/client/windows/unittests/minidump_test.cc
index e3097f2..8d2d726 100644
--- a/src/client/windows/unittests/minidump_test.cc
+++ b/src/client/windows/unittests/minidump_test.cc
@@ -104,19 +104,19 @@
       &ctx_record,
     };
 
-    MinidumpGenerator generator(dump_path_);
-
+    MinidumpGenerator generator(dump_path_,
+                                ::GetCurrentProcess(),
+                                ::GetCurrentProcessId(),
+                                ::GetCurrentThreadId(),
+                                ::GetCurrentThreadId(),
+                                &ex_ptrs,
+                                NULL,
+                                static_cast<MINIDUMP_TYPE>(flags),
+                                TRUE);
+    generator.GenerateDumpFile(&dump_file_);
+    generator.GenerateFullDumpFile(&full_dump_file_);
     // And write a dump
-    bool result = generator.WriteMinidump(::GetCurrentProcess(),
-                                          ::GetCurrentProcessId(),
-                                          ::GetCurrentThreadId(),
-                                          ::GetCurrentThreadId(),
-                                          &ex_ptrs,
-                                          NULL,
-                                          static_cast<MINIDUMP_TYPE>(flags),
-                                          TRUE,
-                                          &dump_file_,
-                                          &full_dump_file_);
+    bool result = generator.WriteMinidump();
     return result == TRUE;
   }
 
diff --git a/src/common/android/testing/mkdtemp.h b/src/common/android/testing/mkdtemp.h
index 85644c9..b86e2cd 100644
--- a/src/common/android/testing/mkdtemp.h
+++ b/src/common/android/testing/mkdtemp.h
@@ -27,9 +27,11 @@
 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-// Android doesn't provide mkdtemp(). Keep this implementation in an
-// C++ anonymous namespace to avoid conflicts on Chromium (which
-// already provides an extern "C" mkdtemp function).
+// mkdtemp() wasn't declared in <stdlib.h> until NDK r9b due to a simple
+// packaging bug (the function has always been implemented in all versions
+// of the C library). This header is provided to build Breakpad with earlier
+// NDK revisions (e.g. the one used by Chromium). It may be removed in the
+// future once all major projects upgrade to use a more recent NDK.
 //
 // The reason this is inlined here is to avoid linking a new object file
 // into each unit test program (i.e. keep build files simple).
@@ -44,9 +46,14 @@
 #include <string.h>
 #include <sys/stat.h>
 
+// Using a macro renaming trick here is necessary when building against
+// NDK r9b. Otherwise the compiler will complain that calls to mkdtemp()
+// are ambiguous.
+#define mkdtemp breakpad_mkdtemp
+
 namespace {
 
-char* mkdtemp(char* path) {
+char* breakpad_mkdtemp(char* path) {
   if (path == NULL) {
     errno = EINVAL;
     return NULL;
diff --git a/src/common/basictypes.h b/src/common/basictypes.h
index 84668b7..9426c1f 100644
--- a/src/common/basictypes.h
+++ b/src/common/basictypes.h
@@ -38,4 +38,21 @@
   void operator=(const TypeName&)
 #endif  // DISALLOW_COPY_AND_ASSIGN
 
+namespace google_breakpad {
+
+// Used to explicitly mark the return value of a function as unused. If you are
+// really sure you don't want to do anything with the return value of a function
+// that has been marked with __attribute__((warn_unused_result)), wrap it with
+// this. Example:
+//
+//   scoped_ptr<MyType> my_var = ...;
+//   if (TakeOwnership(my_var.get()) == SUCCESS)
+//     ignore_result(my_var.release());
+//
+template<typename T>
+inline void ignore_result(const T&) {
+}
+
+}  // namespace google_breakpad
+
 #endif  // COMMON_BASICTYPES_H_
diff --git a/src/common/linux/file_id_unittest.cc b/src/common/linux/file_id_unittest.cc
index 4bf4f8d..760eae8 100644
--- a/src/common/linux/file_id_unittest.cc
+++ b/src/common/linux/file_id_unittest.cc
@@ -66,6 +66,9 @@
 
 }  // namespace
 
+#ifndef __ANDROID__
+// This test is disabled on Android: It will always fail, since there is no
+// 'strip' binary installed on test devices.
 TEST(FileIDStripTest, StripSelf) {
   // Calculate the File ID of this binary using
   // FileID::ElfFileIdentifier, then make a copy of this binary,
@@ -98,6 +101,7 @@
                                     37);
   EXPECT_STREQ(identifier_string1, identifier_string2);
 }
+#endif  // !__ANDROID__
 
 template<typename ElfClass>
 class FileIDTest : public testing::Test {
diff --git a/src/common/linux/http_upload.cc b/src/common/linux/http_upload.cc
index fead76e..d49f227 100644
--- a/src/common/linux/http_upload.cc
+++ b/src/common/linux/http_upload.cc
@@ -70,7 +70,17 @@
   if (!CheckParameters(parameters))
     return false;
 
-  void *curl_lib = dlopen("libcurl.so", RTLD_NOW);
+  // We may have been linked statically; if curl_easy_init is in the
+  // current binary, no need to search for a dynamic version.
+  void* curl_lib = dlopen(NULL, RTLD_NOW);
+  if (!curl_lib || dlsym(curl_lib, "curl_easy_init") == NULL) {
+    dlerror();  // Clear dlerror before attempting to open libraries.
+    dlclose(curl_lib);
+    curl_lib = NULL;
+  }
+  if (!curl_lib) {
+    curl_lib = dlopen("libcurl.so", RTLD_NOW);
+  }
   if (!curl_lib) {
     if (error_description != NULL)
       *error_description = dlerror();
diff --git a/src/common/mac/GTMDefines.h b/src/common/mac/GTMDefines.h
index b970d69..14ffa7e 100644
--- a/src/common/mac/GTMDefines.h
+++ b/src/common/mac/GTMDefines.h
@@ -193,9 +193,11 @@
   // For iPhone specific stuff
   #define GTM_IPHONE_SDK 1
   #if TARGET_IPHONE_SIMULATOR
+    #define GTM_IPHONE_DEVICE 0
     #define GTM_IPHONE_SIMULATOR 1
   #else
     #define GTM_IPHONE_DEVICE 1
+    #define GTM_IPHONE_SIMULATOR 0
   #endif  // TARGET_IPHONE_SIMULATOR
   // By default, GTM has provided it's own unittesting support, define this
   // to use the support provided by Xcode, especially for the Xcode4 support
@@ -203,9 +205,14 @@
   #ifndef GTM_IPHONE_USE_SENTEST
     #define GTM_IPHONE_USE_SENTEST 0
   #endif
+  #define GTM_MACOS_SDK 0
 #else
   // For MacOS specific stuff
   #define GTM_MACOS_SDK 1
+  #define GTM_IPHONE_SDK 0
+  #define GTM_IPHONE_SIMULATOR 0
+  #define GTM_IPHONE_DEVICE 0
+  #define GTM_IPHONE_USE_SENTEST 0
 #endif
 
 // Some of our own availability macros
@@ -217,21 +224,10 @@
 #define GTM_AVAILABLE_ONLY_ON_MACOS UNAVAILABLE_ATTRIBUTE
 #endif
 
-// Provide a symbol to include/exclude extra code for GC support.  (This mainly
-// just controls the inclusion of finalize methods).
+// GC was dropped by Apple, define the old constant incase anyone still keys
+// off of it.
 #ifndef GTM_SUPPORT_GC
-  #if GTM_IPHONE_SDK
-    // iPhone never needs GC
-    #define GTM_SUPPORT_GC 0
-  #else
-    // We can't find a symbol to tell if GC is supported/required, so best we
-    // do on Mac targets is include it if we're on 10.5 or later.
-    #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
-      #define GTM_SUPPORT_GC 0
-    #else
-      #define GTM_SUPPORT_GC 1
-    #endif
-  #endif
+  #define GTM_SUPPORT_GC 0
 #endif
 
 // To simplify support for 64bit (and Leopard in general), we provide the type
@@ -239,7 +235,7 @@
 #if !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
  // NSInteger/NSUInteger and Max/Mins
   #ifndef NSINTEGER_DEFINED
-    #if __LP64__ || NS_BUILD_32_LIKE_64
+    #if (defined(__LP64__) && __LP64__) || NS_BUILD_32_LIKE_64
       typedef long NSInteger;
       typedef unsigned long NSUInteger;
     #else
@@ -352,7 +348,15 @@
 #endif
 
 #ifndef GTM_NONNULL
-  #define GTM_NONNULL(x) __attribute__((nonnull(x)))
+  #if defined(__has_attribute)
+    #if __has_attribute(nonnull)
+      #define GTM_NONNULL(x) __attribute__((nonnull x))
+    #else
+      #define GTM_NONNULL(x)
+    #endif
+  #else
+    #define GTM_NONNULL(x)
+  #endif
 #endif
 
 // Invalidates the initializer from which it's called.
@@ -374,6 +378,14 @@
   #endif
 #endif
 
+#ifndef GTMCFAutorelease
+  #if __has_feature(objc_arc)
+    #define GTMCFAutorelease(x) CFBridgingRelease(x)
+  #else
+    #define GTMCFAutorelease(x) ([(id)x autorelease])
+  #endif
+#endif
+
 #ifdef __OBJC__
 
 // Declared here so that it can easily be used for logging tracking if
diff --git a/src/common/mac/GTMGarbageCollection.h b/src/common/mac/GTMGarbageCollection.h
deleted file mode 100644
index 93d4efa..0000000
--- a/src/common/mac/GTMGarbageCollection.h
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-//  GTMGarbageCollection.h
-//
-//  Copyright 2007-2008 Google Inc.
-//
-//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
-//  use this file except in compliance with the License.  You may obtain a copy
-//  of the License at
-// 
-//  http://www.apache.org/licenses/LICENSE-2.0
-// 
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
-//  License for the specific language governing permissions and limitations under
-//  the License.
-//
-
-#import <Foundation/Foundation.h>
-
-#import "GTMDefines.h"
-
-// This allows us to easily move our code from GC to non GC.
-// They are no-ops unless we are require Leopard or above.
-// See 
-// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/index.html
-// and
-// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcCoreFoundation.html#//apple_ref/doc/uid/TP40006687-SW1
-// for details.
-
-#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) && !GTM_IPHONE_SDK
-// General use would be to call this through GTMCFAutorelease
-// but there may be a reason the you want to make something collectable
-// but not autoreleased, especially in pure GC code where you don't
-// want to bother with the nop autorelease. Done as a define instead of an 
-// inline so that tools like Clang's scan-build don't report code as leaking.
-#define GTMNSMakeCollectable(cf) ((id)NSMakeCollectable(cf))
-
-// GTMNSMakeUncollectable is for global maps, etc. that we don't
-// want released ever. You should still retain these in non-gc code.
-GTM_INLINE void GTMNSMakeUncollectable(id object) {
-  [[NSGarbageCollector defaultCollector] disableCollectorForPointer:object];
-}
-
-// Hopefully no code really needs this, but GTMIsGarbageCollectionEnabled is
-// a common way to check at runtime if GC is on.
-// There are some places where GC doesn't work w/ things w/in Apple's
-// frameworks, so this is here so GTM unittests and detect it, and not run
-// individual tests to work around bugs in Apple's frameworks.
-GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) {
-  return ([NSGarbageCollector defaultCollector] != nil);
-}
-
-#else
-
-#define GTMNSMakeCollectable(cf) ((id)(cf))
-
-GTM_INLINE void GTMNSMakeUncollectable(id object) {
-}
-
-GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) {
-  return NO;
-}
-
-#endif
-
-// GTMCFAutorelease makes a CF object collectable in GC mode, or adds it 
-// to the autorelease pool in non-GC mode. Either way it is taken care
-// of. Done as a define instead of an inline so that tools like Clang's
-// scan-build don't report code as leaking.
-#define GTMCFAutorelease(cf) ([GTMNSMakeCollectable(cf) autorelease])
-
diff --git a/src/common/mac/GTMLogger.m b/src/common/mac/GTMLogger.m
index 4b40747..ebc5836 100644
--- a/src/common/mac/GTMLogger.m
+++ b/src/common/mac/GTMLogger.m
@@ -17,7 +17,6 @@
 //
 
 #import "GTMLogger.h"
-#import "GTMGarbageCollection.h"
 #import <fcntl.h>
 #import <unistd.h>
 #import <stdlib.h>
@@ -506,7 +505,7 @@
 // In DEBUG builds, log everything. If we're not in a debug build we'll assume
 // that we're in a Release build.
 - (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level {
-#if DEBUG
+#if defined(DEBUG) && DEBUG
   return YES;
 #endif
 
diff --git a/src/common/mac/file_id.cc b/src/common/mac/file_id.cc
index a2ee320..c5d7ed5 100644
--- a/src/common/mac/file_id.cc
+++ b/src/common/mac/file_id.cc
@@ -61,7 +61,7 @@
   unsigned char buffer[4096 * 2];
   size_t buffer_size = sizeof(buffer);
   while ((buffer_size = read(fd, buffer, buffer_size) > 0)) {
-    MD5Update(&md5, buffer, buffer_size);
+    MD5Update(&md5, buffer, static_cast<unsigned>(buffer_size));
   }
 
   close(fd);
diff --git a/src/common/mac/macho_id.cc b/src/common/mac/macho_id.cc
index aa2cfc8..09a2a82 100644
--- a/src/common/mac/macho_id.cc
+++ b/src/common/mac/macho_id.cc
@@ -125,7 +125,7 @@
 }
 
 void MachoID::UpdateMD5(unsigned char *bytes, size_t size) {
-  MD5Update(&md5_context_, bytes, size);
+  MD5Update(&md5_context_, bytes, static_cast<unsigned>(size));
 }
 
 void MachoID::Update(MachoWalker *walker, off_t offset, size_t size) {
diff --git a/src/common/mac/macho_walker.cc b/src/common/mac/macho_walker.cc
index b2948b7..eee27d6 100644
--- a/src/common/mac/macho_walker.cc
+++ b/src/common/mac/macho_walker.cc
@@ -51,7 +51,7 @@
 
 MachoWalker::MachoWalker(const char *path, LoadCommandCallback callback,
                          void *context)
-    : file_(0),
+    : file_(-1),
       memory_(NULL),
       memory_size_(0),
       callback_(callback),
@@ -64,7 +64,7 @@
 
 MachoWalker::MachoWalker(void *memory, size_t size,
                          LoadCommandCallback callback, void *context)
-    : file_(0),
+    : file_(-1),
       memory_(memory),
       memory_size_(size),
       callback_(callback),
diff --git a/src/common/md5.cc b/src/common/md5.cc
index bccf61c..a0d9a1b 100644
--- a/src/common/md5.cc
+++ b/src/common/md5.cc
@@ -58,7 +58,7 @@
  * Update context to reflect the concatenation of another buffer full
  * of bytes.
  */
-void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
+void MD5Update(struct MD5Context *ctx, unsigned char const *buf, size_t len)
 {
   u32 t;
 
@@ -166,7 +166,7 @@
  */
 static void MD5Transform(u32 buf[4], u32 const in[16])
 {
-  register u32 a, b, c, d;
+  u32 a, b, c, d;
 
   a = buf[0];
   b = buf[1];
diff --git a/src/common/md5.h b/src/common/md5.h
index e96521e..2ab0ab9 100644
--- a/src/common/md5.h
+++ b/src/common/md5.h
@@ -18,7 +18,7 @@
 
 void MD5Init(struct MD5Context *ctx);
 
-void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len);
+void MD5Update(struct MD5Context *ctx, unsigned char const *buf, size_t len);
 
 void MD5Final(unsigned char digest[16], struct MD5Context *ctx);
 
diff --git a/src/common/memory.h b/src/common/memory.h
index 5f94445..a463605 100644
--- a/src/common/memory.h
+++ b/src/common/memory.h
@@ -67,7 +67,7 @@
     FreeAll();
   }
 
-  void *Alloc(unsigned bytes) {
+  void *Alloc(size_t bytes) {
     if (!bytes)
       return NULL;
 
@@ -82,7 +82,7 @@
       return ret;
     }
 
-    const unsigned pages =
+    const size_t pages =
         (bytes + sizeof(PageHeader) + page_size_ - 1) / page_size_;
     uint8_t *const ret = GetNPages(pages);
     if (!ret)
@@ -109,7 +109,7 @@
   }
 
  private:
-  uint8_t *GetNPages(unsigned num_pages) {
+  uint8_t *GetNPages(size_t num_pages) {
 #ifdef __x86_64
     void *a = sys_mmap(NULL, page_size_ * num_pages, PROT_READ | PROT_WRITE,
                        MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
@@ -139,13 +139,13 @@
 
   struct PageHeader {
     PageHeader *next;  // pointer to the start of the next set of pages.
-    unsigned num_pages;  // the number of pages in this set.
+    size_t num_pages;  // the number of pages in this set.
   };
 
-  const unsigned page_size_;
+  const size_t page_size_;
   PageHeader *last_;
   uint8_t *current_page_;
-  unsigned page_offset_;
+  size_t page_offset_;
 };
 
 // Wrapper to use with STL containers
diff --git a/src/common/scoped_ptr.h b/src/common/scoped_ptr.h
index 2dbc40d..d137c18 100644
--- a/src/common/scoped_ptr.h
+++ b/src/common/scoped_ptr.h
@@ -1,231 +1,285 @@
-//  (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
-//  Copyright (c) 2001, 2002 Peter Dimov
+// Copyright 2013 Google Inc. All Rights Reserved.
 //
-//  Permission to copy, use, modify, sell and distribute this software
-//  is granted provided this copyright notice appears in all copies.
-//  This software is provided "as is" without express or implied
-//  warranty, and with no claim as to its suitability for any purpose.
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
 //
-//  See http://www.boost.org/libs/smart_ptr/scoped_ptr.htm for documentation.
+//     * 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.
 
-//  scoped_ptr mimics a built-in pointer except that it guarantees deletion
-//  of the object pointed to, either on destruction of the scoped_ptr or via
-//  an explicit reset(). scoped_ptr is a simple solution for simple needs;
-//  use shared_ptr or std::auto_ptr if your needs are more complex.
-
-//  *** NOTE ***
-//  If your scoped_ptr is a class member of class FOO pointing to a 
-//  forward declared type BAR (as shown below), then you MUST use a non-inlined 
-//  version of the destructor.  The destructor of a scoped_ptr (called from
-//  FOO's destructor) must have a complete definition of BAR in order to 
-//  destroy it.  Example:
+// Scopers help you manage ownership of a pointer, helping you easily manage the
+// a pointer within a scope, and automatically destroying the pointer at the
+// end of a scope.  There are two main classes you will use, which correspond
+// to the operators new/delete and new[]/delete[].
 //
-//  -- foo.h --
-//  class BAR;
+// Example usage (scoped_ptr):
+//   {
+//     scoped_ptr<Foo> foo(new Foo("wee"));
+//   }  // foo goes out of scope, releasing the pointer with it.
 //
-//  class FOO {
-//   public:
-//    FOO();
-//    ~FOO();  // Required for sources that instantiate class FOO to compile!
-//    
-//   private:
-//    scoped_ptr<BAR> bar_;
-//  };
+//   {
+//     scoped_ptr<Foo> foo;          // No pointer managed.
+//     foo.reset(new Foo("wee"));    // Now a pointer is managed.
+//     foo.reset(new Foo("wee2"));   // Foo("wee") was destroyed.
+//     foo.reset(new Foo("wee3"));   // Foo("wee2") was destroyed.
+//     foo->Method();                // Foo::Method() called.
+//     foo.get()->Method();          // Foo::Method() called.
+//     SomeFunc(foo.release());      // SomeFunc takes ownership, foo no longer
+//                                   // manages a pointer.
+//     foo.reset(new Foo("wee4"));   // foo manages a pointer again.
+//     foo.reset();                  // Foo("wee4") destroyed, foo no longer
+//                                   // manages a pointer.
+//   }  // foo wasn't managing a pointer, so nothing was destroyed.
 //
-//  -- foo.cc --
-//  #include "foo.h"
-//  FOO::~FOO() {} // Empty, but must be non-inlined to FOO's class definition.
-
-//  scoped_ptr_malloc added by Google
-//  When one of these goes out of scope, instead of doing a delete or
-//  delete[], it calls free().  scoped_ptr_malloc<char> is likely to see
-//  much more use than any other specializations.
-
-//  release() added by Google
-//  Use this to conditionally transfer ownership of a heap-allocated object
-//  to the caller, usually on method success.
+// Example usage (scoped_array):
+//   {
+//     scoped_array<Foo> foo(new Foo[100]);
+//     foo.get()->Method();  // Foo::Method on the 0th element.
+//     foo[10].Method();     // Foo::Method on the 10th element.
+//   }
 
 #ifndef COMMON_SCOPED_PTR_H_
 #define COMMON_SCOPED_PTR_H_
 
-#include <cstddef>            // for std::ptrdiff_t
-#include <assert.h>           // for assert
-#include <stdlib.h>           // for free() decl
+// This is an implementation designed to match the anticipated future TR2
+// implementation of the scoped_ptr class, and its closely-related brethren,
+// scoped_array, scoped_ptr_malloc.
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdlib.h>
 
 namespace google_breakpad {
 
-template <typename T>
+// A scoped_ptr<T> is like a T*, except that the destructor of scoped_ptr<T>
+// automatically deletes the pointer it holds (if any).
+// That is, scoped_ptr<T> owns the T object that it points to.
+// Like a T*, a scoped_ptr<T> may hold either NULL or a pointer to a T object.
+// Also like T*, scoped_ptr<T> is thread-compatible, and once you
+// dereference it, you get the threadsafety guarantees of T.
+//
+// The size of a scoped_ptr is small:
+// sizeof(scoped_ptr<C>) == sizeof(C*)
+template <class C>
 class scoped_ptr {
- private:
-
-  T* ptr;
-
-  scoped_ptr(scoped_ptr const &);
-  scoped_ptr & operator=(scoped_ptr const &);
-
  public:
 
-  typedef T element_type;
+  // The element type
+  typedef C element_type;
 
-  explicit scoped_ptr(T* p = 0): ptr(p) {}
+  // Constructor.  Defaults to initializing with NULL.
+  // There is no way to create an uninitialized scoped_ptr.
+  // The input parameter must be allocated with new.
+  explicit scoped_ptr(C* p = NULL) : ptr_(p) { }
 
+  // Destructor.  If there is a C object, delete it.
+  // We don't need to test ptr_ == NULL because C++ does that for us.
   ~scoped_ptr() {
-    typedef char type_must_be_complete[sizeof(T)];
-    delete ptr;
+    enum { type_must_be_complete = sizeof(C) };
+    delete ptr_;
   }
 
-  void reset(T* p = 0) {
-    typedef char type_must_be_complete[sizeof(T)];
-
-    if (ptr != p) {
-      delete ptr;
-      ptr = p;
+  // Reset.  Deletes the current owned object, if any.
+  // Then takes ownership of a new object, if given.
+  // this->reset(this->get()) works.
+  void reset(C* p = NULL) {
+    if (p != ptr_) {
+      enum { type_must_be_complete = sizeof(C) };
+      delete ptr_;
+      ptr_ = p;
     }
   }
 
-  T& operator*() const {
-    assert(ptr != 0);
-    return *ptr;
+  // Accessors to get the owned object.
+  // operator* and operator-> will assert() if there is no current object.
+  C& operator*() const {
+    assert(ptr_ != NULL);
+    return *ptr_;
+  }
+  C* operator->() const  {
+    assert(ptr_ != NULL);
+    return ptr_;
+  }
+  C* get() const { return ptr_; }
+
+  // Comparison operators.
+  // These return whether two scoped_ptr refer to the same object, not just to
+  // two different but equal objects.
+  bool operator==(C* p) const { return ptr_ == p; }
+  bool operator!=(C* p) const { return ptr_ != p; }
+
+  // Swap two scoped pointers.
+  void swap(scoped_ptr& p2) {
+    C* tmp = ptr_;
+    ptr_ = p2.ptr_;
+    p2.ptr_ = tmp;
   }
 
-  T* operator->() const  {
-    assert(ptr != 0);
-    return ptr;
-  }
-
-  bool operator==(T* p) const {
-    return ptr == p;
-  }
-
-  bool operator!=(T* p) const {
-    return ptr != p;
-  }
-
-  T* get() const  {
-    return ptr;
-  }
-
-  void swap(scoped_ptr & b) {
-    T* tmp = b.ptr;
-    b.ptr = ptr;
-    ptr = tmp;
-  }
-
-  T* release() {
-    T* tmp = ptr;
-    ptr = 0;
-    return tmp;
+  // Release a pointer.
+  // The return value is the current pointer held by this object.
+  // If this object holds a NULL pointer, the return value is NULL.
+  // After this operation, this object will hold a NULL pointer,
+  // and will not own the object any more.
+  C* release() {
+    C* retVal = ptr_;
+    ptr_ = NULL;
+    return retVal;
   }
 
  private:
+  C* ptr_;
 
-  // no reason to use these: each scoped_ptr should have its own object
-  template <typename U> bool operator==(scoped_ptr<U> const& p) const;
-  template <typename U> bool operator!=(scoped_ptr<U> const& p) const;
+  // Forbid comparison of scoped_ptr types.  If C2 != C, it totally doesn't
+  // make sense, and if C2 == C, it still doesn't make sense because you should
+  // never have the same object owned by two different scoped_ptrs.
+  template <class C2> bool operator==(scoped_ptr<C2> const& p2) const;
+  template <class C2> bool operator!=(scoped_ptr<C2> const& p2) const;
+
+  // Disallow evil constructors
+  scoped_ptr(const scoped_ptr&);
+  void operator=(const scoped_ptr&);
 };
 
-template<typename T> inline
-void swap(scoped_ptr<T>& a, scoped_ptr<T>& b) {
-  a.swap(b);
+// Free functions
+template <class C>
+void swap(scoped_ptr<C>& p1, scoped_ptr<C>& p2) {
+  p1.swap(p2);
 }
 
-template<typename T> inline
-bool operator==(T* p, const scoped_ptr<T>& b) {
-  return p == b.get();
+template <class C>
+bool operator==(C* p1, const scoped_ptr<C>& p2) {
+  return p1 == p2.get();
 }
 
-template<typename T> inline
-bool operator!=(T* p, const scoped_ptr<T>& b) {
-  return p != b.get();
+template <class C>
+bool operator!=(C* p1, const scoped_ptr<C>& p2) {
+  return p1 != p2.get();
 }
 
-//  scoped_array extends scoped_ptr to arrays. Deletion of the array pointed to
-//  is guaranteed, either on destruction of the scoped_array or via an explicit
-//  reset(). Use shared_array or std::vector if your needs are more complex.
-
-template<typename T>
+// scoped_array<C> is like scoped_ptr<C>, except that the caller must allocate
+// with new [] and the destructor deletes objects with delete [].
+//
+// As with scoped_ptr<C>, a scoped_array<C> either points to an object
+// or is NULL.  A scoped_array<C> owns the object that it points to.
+// scoped_array<T> is thread-compatible, and once you index into it,
+// the returned objects have only the threadsafety guarantees of T.
+//
+// Size: sizeof(scoped_array<C>) == sizeof(C*)
+template <class C>
 class scoped_array {
- private:
-
-  T* ptr;
-
-  scoped_array(scoped_array const &);
-  scoped_array & operator=(scoped_array const &);
-
  public:
 
-  typedef T element_type;
+  // The element type
+  typedef C element_type;
 
-  explicit scoped_array(T* p = 0) : ptr(p) {}
+  // Constructor.  Defaults to intializing with NULL.
+  // There is no way to create an uninitialized scoped_array.
+  // The input parameter must be allocated with new [].
+  explicit scoped_array(C* p = NULL) : array_(p) { }
 
+  // Destructor.  If there is a C object, delete it.
+  // We don't need to test ptr_ == NULL because C++ does that for us.
   ~scoped_array() {
-    typedef char type_must_be_complete[sizeof(T)];
-    delete[] ptr;
+    enum { type_must_be_complete = sizeof(C) };
+    delete[] array_;
   }
 
-  void reset(T* p = 0) {
-    typedef char type_must_be_complete[sizeof(T)];
-
-    if (ptr != p) {
-      delete [] ptr;
-      ptr = p;
+  // Reset.  Deletes the current owned object, if any.
+  // Then takes ownership of a new object, if given.
+  // this->reset(this->get()) works.
+  void reset(C* p = NULL) {
+    if (p != array_) {
+      enum { type_must_be_complete = sizeof(C) };
+      delete[] array_;
+      array_ = p;
     }
   }
 
-  T& operator[](std::ptrdiff_t i) const {
-    assert(ptr != 0);
+  // Get one element of the current object.
+  // Will assert() if there is no current object, or index i is negative.
+  C& operator[](ptrdiff_t i) const {
     assert(i >= 0);
-    return ptr[i];
+    assert(array_ != NULL);
+    return array_[i];
   }
 
-  bool operator==(T* p) const {
-    return ptr == p;
+  // Get a pointer to the zeroth element of the current object.
+  // If there is no current object, return NULL.
+  C* get() const {
+    return array_;
   }
 
-  bool operator!=(T* p) const {
-    return ptr != p;
+  // Comparison operators.
+  // These return whether two scoped_array refer to the same object, not just to
+  // two different but equal objects.
+  bool operator==(C* p) const { return array_ == p; }
+  bool operator!=(C* p) const { return array_ != p; }
+
+  // Swap two scoped arrays.
+  void swap(scoped_array& p2) {
+    C* tmp = array_;
+    array_ = p2.array_;
+    p2.array_ = tmp;
   }
 
-  T* get() const {
-    return ptr;
-  }
-
-  void swap(scoped_array & b) {
-    T* tmp = b.ptr;
-    b.ptr = ptr;
-    ptr = tmp;
-  }
-
-  T* release() {
-    T* tmp = ptr;
-    ptr = 0;
-    return tmp;
+  // Release an array.
+  // The return value is the current pointer held by this object.
+  // If this object holds a NULL pointer, the return value is NULL.
+  // After this operation, this object will hold a NULL pointer,
+  // and will not own the object any more.
+  C* release() {
+    C* retVal = array_;
+    array_ = NULL;
+    return retVal;
   }
 
  private:
+  C* array_;
 
-  // no reason to use these: each scoped_array should have its own object
-  template <typename U> bool operator==(scoped_array<U> const& p) const;
-  template <typename U> bool operator!=(scoped_array<U> const& p) const;
+  // Forbid comparison of different scoped_array types.
+  template <class C2> bool operator==(scoped_array<C2> const& p2) const;
+  template <class C2> bool operator!=(scoped_array<C2> const& p2) const;
+
+  // Disallow evil constructors
+  scoped_array(const scoped_array&);
+  void operator=(const scoped_array&);
 };
 
-template<class T> inline
-void swap(scoped_array<T>& a, scoped_array<T>& b) {
-  a.swap(b);
+// Free functions
+template <class C>
+void swap(scoped_array<C>& p1, scoped_array<C>& p2) {
+  p1.swap(p2);
 }
 
-template<typename T> inline
-bool operator==(T* p, const scoped_array<T>& b) {
-  return p == b.get();
+template <class C>
+bool operator==(C* p1, const scoped_array<C>& p2) {
+  return p1 == p2.get();
 }
 
-template<typename T> inline
-bool operator!=(T* p, const scoped_array<T>& b) {
-  return p != b.get();
+template <class C>
+bool operator!=(C* p1, const scoped_array<C>& p2) {
+  return p1 != p2.get();
 }
 
-
 // This class wraps the c library function free() in a class that can be
 // passed as a template argument to scoped_ptr_malloc below.
 class ScopedPtrMallocFree {
@@ -238,95 +292,110 @@
 // scoped_ptr_malloc<> is similar to scoped_ptr<>, but it accepts a
 // second template argument, the functor used to free the object.
 
-template<typename T, typename FreeProc = ScopedPtrMallocFree>
+template<class C, class FreeProc = ScopedPtrMallocFree>
 class scoped_ptr_malloc {
- private:
-
-  T* ptr;
-
-  scoped_ptr_malloc(scoped_ptr_malloc const &);
-  scoped_ptr_malloc & operator=(scoped_ptr_malloc const &);
-
  public:
 
-  typedef T element_type;
+  // The element type
+  typedef C element_type;
 
-  explicit scoped_ptr_malloc(T* p = 0): ptr(p) {}
+  // Constructor.  Defaults to initializing with NULL.
+  // There is no way to create an uninitialized scoped_ptr.
+  // The input parameter must be allocated with an allocator that matches the
+  // Free functor.  For the default Free functor, this is malloc, calloc, or
+  // realloc.
+  explicit scoped_ptr_malloc(C* p = NULL): ptr_(p) {}
 
+  // Destructor.  If there is a C object, call the Free functor.
   ~scoped_ptr_malloc() {
-    typedef char type_must_be_complete[sizeof(T)];
-    free_((void*) ptr);
+    reset();
   }
 
-  void reset(T* p = 0) {
-    typedef char type_must_be_complete[sizeof(T)];
-
-    if (ptr != p) {
-      free_((void*) ptr);
-      ptr = p;
+  // Reset.  Calls the Free functor on the current owned object, if any.
+  // Then takes ownership of a new object, if given.
+  // this->reset(this->get()) works.
+  void reset(C* p = NULL) {
+    if (ptr_ != p) {
+      FreeProc free_proc;
+      free_proc(ptr_);
+      ptr_ = p;
     }
   }
 
-  T& operator*() const {
-    assert(ptr != 0);
-    return *ptr;
+  // Get the current object.
+  // operator* and operator-> will cause an assert() failure if there is
+  // no current object.
+  C& operator*() const {
+    assert(ptr_ != NULL);
+    return *ptr_;
   }
 
-  T* operator->() const {
-    assert(ptr != 0);
-    return ptr;
+  C* operator->() const {
+    assert(ptr_ != NULL);
+    return ptr_;
   }
 
-  bool operator==(T* p) const {
-    return ptr == p;
+  C* get() const {
+    return ptr_;
   }
 
-  bool operator!=(T* p) const {
-    return ptr != p;
+  // Comparison operators.
+  // These return whether a scoped_ptr_malloc and a plain pointer refer
+  // to the same object, not just to two different but equal objects.
+  // For compatibility with the boost-derived implementation, these
+  // take non-const arguments.
+  bool operator==(C* p) const {
+    return ptr_ == p;
   }
 
-  T* get() const {
-    return ptr;
+  bool operator!=(C* p) const {
+    return ptr_ != p;
   }
 
+  // Swap two scoped pointers.
   void swap(scoped_ptr_malloc & b) {
-    T* tmp = b.ptr;
-    b.ptr = ptr;
-    ptr = tmp;
+    C* tmp = b.ptr_;
+    b.ptr_ = ptr_;
+    ptr_ = tmp;
   }
 
-  T* release() {
-    T* tmp = ptr;
-    ptr = 0;
+  // Release a pointer.
+  // The return value is the current pointer held by this object.
+  // If this object holds a NULL pointer, the return value is NULL.
+  // After this operation, this object will hold a NULL pointer,
+  // and will not own the object any more.
+  C* release() {
+    C* tmp = ptr_;
+    ptr_ = NULL;
     return tmp;
   }
 
  private:
+  C* ptr_;
 
   // no reason to use these: each scoped_ptr_malloc should have its own object
-  template <typename U, typename GP>
-  bool operator==(scoped_ptr_malloc<U, GP> const& p) const;
-  template <typename U, typename GP>
-  bool operator!=(scoped_ptr_malloc<U, GP> const& p) const;
+  template <class C2, class GP>
+  bool operator==(scoped_ptr_malloc<C2, GP> const& p) const;
+  template <class C2, class GP>
+  bool operator!=(scoped_ptr_malloc<C2, GP> const& p) const;
 
-  static FreeProc const free_;
+  // Disallow evil constructors
+  scoped_ptr_malloc(const scoped_ptr_malloc&);
+  void operator=(const scoped_ptr_malloc&);
 };
 
-template<typename T, typename FP>
-FP const scoped_ptr_malloc<T,FP>::free_ = FP();
-
-template<typename T, typename FP> inline
-void swap(scoped_ptr_malloc<T,FP>& a, scoped_ptr_malloc<T,FP>& b) {
+template<class C, class FP> inline
+void swap(scoped_ptr_malloc<C, FP>& a, scoped_ptr_malloc<C, FP>& b) {
   a.swap(b);
 }
 
-template<typename T, typename FP> inline
-bool operator==(T* p, const scoped_ptr_malloc<T,FP>& b) {
+template<class C, class FP> inline
+bool operator==(C* p, const scoped_ptr_malloc<C, FP>& b) {
   return p == b.get();
 }
 
-template<typename T, typename FP> inline
-bool operator!=(T* p, const scoped_ptr_malloc<T,FP>& b) {
+template<class C, class FP> inline
+bool operator!=(C* p, const scoped_ptr_malloc<C, FP>& b) {
   return p != b.get();
 }
 
diff --git a/src/common/windows/pdb_source_line_writer.cc b/src/common/windows/pdb_source_line_writer.cc
index dba2ea7..5de7ade 100644
--- a/src/common/windows/pdb_source_line_writer.cc
+++ b/src/common/windows/pdb_source_line_writer.cc
@@ -36,6 +36,8 @@
 #include <ImageHlp.h>
 #include <stdio.h>
 
+#include <limits>
+
 #include "common/windows/dia_util.h"
 #include "common/windows/guid_string.h"
 #include "common/windows/string_utils-inl.h"
@@ -46,6 +48,53 @@
 #define UNDNAME_NO_ECSU 0x8000  // Suppresses enum/class/struct/union.
 #endif  // UNDNAME_NO_ECSU
 
+/*
+ * Not defined in WinNT.h for some reason. Definitions taken from:
+ * http://uninformed.org/index.cgi?v=4&a=1&p=13
+ *
+ */
+typedef unsigned char UBYTE;
+#define UNW_FLAG_EHANDLER  0x01
+#define UNW_FLAG_UHANDLER  0x02
+#define UNW_FLAG_CHAININFO 0x04
+
+union UnwindCode {
+  struct {
+    UBYTE offset_in_prolog;
+    UBYTE unwind_operation_code : 4;
+    UBYTE operation_info        : 4;
+  };
+  USHORT frame_offset;
+};
+
+enum UnwindOperationCodes {
+  UWOP_PUSH_NONVOL = 0, /* info == register number */
+  UWOP_ALLOC_LARGE,     /* no info, alloc size in next 2 slots */
+  UWOP_ALLOC_SMALL,     /* info == size of allocation / 8 - 1 */
+  UWOP_SET_FPREG,       /* no info, FP = RSP + UNWIND_INFO.FPRegOffset*16 */
+  UWOP_SAVE_NONVOL,     /* info == register number, offset in next slot */
+  UWOP_SAVE_NONVOL_FAR, /* info == register number, offset in next 2 slots */
+  //XXX: these are missing from MSDN!
+  // See: http://www.osronline.com/ddkx/kmarch/64bitamd_4rs7.htm
+  UWOP_SAVE_XMM,
+  UWOP_SAVE_XMM_FAR,
+  UWOP_SAVE_XMM128,     /* info == XMM reg number, offset in next slot */
+  UWOP_SAVE_XMM128_FAR, /* info == XMM reg number, offset in next 2 slots */
+  UWOP_PUSH_MACHFRAME   /* info == 0: no error-code, 1: error-code */
+};
+
+// See: http://msdn.microsoft.com/en-us/library/ddssxxy8.aspx
+// Note: some fields removed as we don't use them.
+struct UnwindInfo {
+  UBYTE version       : 3;
+  UBYTE flags         : 5;
+  UBYTE size_of_prolog;
+  UBYTE count_of_codes;
+  UBYTE frame_register : 4;
+  UBYTE frame_offset   : 4;
+  UnwindCode unwind_code[1];
+};
+
 namespace google_breakpad {
 
 namespace {
@@ -381,7 +430,7 @@
   return true;
 }
 
-bool PDBSourceLineWriter::PrintFrameData() {
+bool PDBSourceLineWriter::PrintFrameDataUsingPDB() {
   // It would be nice if it were possible to output frame data alongside the
   // associated function, as is done with line numbers, but the DIA API
   // doesn't make it possible to get the frame data in that way.
@@ -390,10 +439,10 @@
   if (!FindTable(session_, &frame_data_enum))
     return false;
 
-  DWORD last_type = -1;
-  DWORD last_rva = -1;
+  DWORD last_type = std::numeric_limits<DWORD>::max();
+  DWORD last_rva = std::numeric_limits<DWORD>::max();
   DWORD last_code_size = 0;
-  DWORD last_prolog_size = -1;
+  DWORD last_prolog_size = std::numeric_limits<DWORD>::max();
 
   CComPtr<IDiaFrameData> frame_data;
   ULONG count = 0;
@@ -536,6 +585,149 @@
   return true;
 }
 
+bool PDBSourceLineWriter::PrintFrameDataUsingEXE() {
+  if (code_file_.empty() && !FindPEFile()) {
+    fprintf(stderr, "Couldn't locate EXE or DLL file.\n");
+    return false;
+  }
+
+  // Convert wchar to native charset because ImageLoad only takes
+  // a PSTR as input.
+  string code_file;
+  if (!WindowsStringUtils::safe_wcstombs(code_file_, &code_file)) {
+    return false;
+  }
+
+  AutoImage img(ImageLoad((PSTR)code_file.c_str(), NULL));
+  if (!img) {
+    fprintf(stderr, "Failed to load %s\n", code_file.c_str());
+    return false;
+  }
+  PIMAGE_OPTIONAL_HEADER64 optional_header =
+    &(reinterpret_cast<PIMAGE_NT_HEADERS64>(img->FileHeader))->OptionalHeader;
+  if (optional_header->Magic != IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
+    fprintf(stderr, "Not a PE32+ image\n");
+    return false;
+  }
+
+  // Read Exception Directory
+  DWORD exception_rva = optional_header->
+    DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress;
+  DWORD exception_size = optional_header->
+    DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size;
+  PIMAGE_RUNTIME_FUNCTION_ENTRY funcs =
+    static_cast<PIMAGE_RUNTIME_FUNCTION_ENTRY>(
+        ImageRvaToVa(img->FileHeader,
+                     img->MappedAddress,
+                     exception_rva,
+                     &img->LastRvaSection));
+  for (DWORD i = 0; i < exception_size / sizeof(*funcs); i++) {
+    DWORD unwind_rva = funcs[i].UnwindInfoAddress;
+    // handle chaining
+    while (unwind_rva & 0x1) {
+      unwind_rva ^= 0x1;
+      PIMAGE_RUNTIME_FUNCTION_ENTRY chained_func =
+        static_cast<PIMAGE_RUNTIME_FUNCTION_ENTRY>(
+            ImageRvaToVa(img->FileHeader,
+                         img->MappedAddress,
+                         unwind_rva,
+                         &img->LastRvaSection));
+      unwind_rva = chained_func->UnwindInfoAddress;
+    }
+
+    UnwindInfo *unwind_info = static_cast<UnwindInfo *>(
+        ImageRvaToVa(img->FileHeader,
+                     img->MappedAddress,
+                     unwind_rva,
+                     &img->LastRvaSection));
+
+    DWORD stack_size = 8; // minimal stack size is 8 for RIP
+    DWORD rip_offset = 8;
+    do {
+      for (UBYTE c = 0; c < unwind_info->count_of_codes; c++) {
+        UnwindCode *unwind_code = &unwind_info->unwind_code[c];
+        switch (unwind_code->unwind_operation_code) {
+          case UWOP_PUSH_NONVOL: {
+            stack_size += 8;
+            break;
+          }
+          case UWOP_ALLOC_LARGE: {
+            if (unwind_code->operation_info == 0) {
+              c++;
+              if (c < unwind_info->count_of_codes)
+                stack_size += (unwind_code + 1)->frame_offset * 8;
+            } else {
+              c += 2;
+              if (c < unwind_info->count_of_codes)
+                stack_size += (unwind_code + 1)->frame_offset |
+                              ((unwind_code + 2)->frame_offset << 16);
+            }
+            break;
+          }
+          case UWOP_ALLOC_SMALL: {
+            stack_size += unwind_code->operation_info * 8 + 8;
+            break;
+          }
+          case UWOP_SET_FPREG:
+          case UWOP_SAVE_XMM:
+          case UWOP_SAVE_XMM_FAR:
+            break;
+          case UWOP_SAVE_NONVOL:
+          case UWOP_SAVE_XMM128: {
+            c++; //skip slot with offset
+            break;
+          }
+          case UWOP_SAVE_NONVOL_FAR:
+          case UWOP_SAVE_XMM128_FAR: {
+            c += 2; //skip 2 slots with offset
+            break;
+          }
+          case UWOP_PUSH_MACHFRAME: {
+            if (unwind_code->operation_info) {
+              stack_size += 88;
+            } else {
+              stack_size += 80;
+            }
+            rip_offset += 80;
+            break;
+          }
+        }
+      }
+      if (unwind_info->flags & UNW_FLAG_CHAININFO) {
+        PIMAGE_RUNTIME_FUNCTION_ENTRY chained_func =
+          reinterpret_cast<PIMAGE_RUNTIME_FUNCTION_ENTRY>(
+              (unwind_info->unwind_code +
+              ((unwind_info->count_of_codes + 1) & ~1)));
+
+        unwind_info = static_cast<UnwindInfo *>(
+            ImageRvaToVa(img->FileHeader,
+                         img->MappedAddress,
+                         chained_func->UnwindInfoAddress,
+                         &img->LastRvaSection));
+      } else {
+        unwind_info = NULL;
+      }
+    } while (unwind_info);
+    fprintf(output_, "STACK CFI INIT %x %x .cfa: $rsp .ra: .cfa %d - ^\n",
+            funcs[i].BeginAddress,
+            funcs[i].EndAddress - funcs[i].BeginAddress, rip_offset);
+    fprintf(output_, "STACK CFI %x .cfa: $rsp %d +\n",
+            funcs[i].BeginAddress, stack_size);
+  }
+
+  return true;
+}
+
+bool PDBSourceLineWriter::PrintFrameData() {
+  PDBModuleInfo info;
+  if (GetModuleInfo(&info) && info.cpu == L"x86_64") {
+    return PrintFrameDataUsingEXE();
+  } else {
+    return PrintFrameDataUsingPDB();
+  }
+  return false;
+}
+
 bool PDBSourceLineWriter::PrintCodePublicSymbol(IDiaSymbol *symbol) {
   BOOL is_code;
   if (FAILED(symbol->get_code(&is_code))) {
diff --git a/src/common/windows/pdb_source_line_writer.h b/src/common/windows/pdb_source_line_writer.h
index be6121c..d928a60 100644
--- a/src/common/windows/pdb_source_line_writer.h
+++ b/src/common/windows/pdb_source_line_writer.h
@@ -148,6 +148,16 @@
   bool PrintSourceFiles();
 
   // Outputs all of the frame information necessary to construct stack
+  // backtraces in the absence of frame pointers. For x86 data stored in
+  // .pdb files. Returns true on success.
+  bool PrintFrameDataUsingPDB();
+
+  // Outputs all of the frame information necessary to construct stack
+  // backtraces in the absence of frame pointers. For x64 data stored in
+  // .exe, .dll files. Returns true on success.
+  bool PrintFrameDataUsingEXE();
+
+  // Outputs all of the frame information necessary to construct stack
   // backtraces in the absence of frame pointers.  Returns true on success.
   bool PrintFrameData();
 
diff --git a/src/config.h.in b/src/config.h.in
index f5e5e28..1db0159 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -63,3 +63,14 @@
 
 /* Version number of package */
 #undef VERSION
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* Define for large files, on AIX-style hosts. */
+#undef _LARGE_FILES
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc
old mode 100755
new mode 100644
index ab3aba1..5e81e67
--- a/src/processor/minidump.cc
+++ b/src/processor/minidump.cc
@@ -603,7 +603,6 @@
     }
 
     context_.ppc64 = context_ppc64.release();
-    context_flags_ = context_flags;
   } else if (expected_size == sizeof(MDRawContextARM64)) {
     // |context_flags| of MDRawContextARM64 is 64 bits, but other MDRawContext
     // in the else case have 32 bits |context_flags|, so special case it here.
@@ -678,8 +677,17 @@
         Swap(&context_arm64->float_save.regs[fpr_index]);
       }
     }
+    context_flags_ = static_cast<uint32_t>(context_arm64->context_flags);
+
+    // Check for data loss when converting context flags from uint64_t into
+    // uint32_t
+    if (static_cast<uint64_t>(context_flags_) !=
+        context_arm64->context_flags) {
+      BPLOG(ERROR) << "Data loss detected when converting ARM64 context_flags";
+      return false;
+    }
+
     context_.arm64 = context_arm64.release();
-    context_flags_ = context_flags;
   } else {
     uint32_t context_flags;
     if (!minidump_->ReadBytes(&context_flags, sizeof(context_flags))) {
diff --git a/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj b/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
index 9c20ea1..cca8dbf 100644
--- a/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
+++ b/src/tools/mac/crash_report/crash_report.xcodeproj/project.pbxproj
@@ -56,6 +56,11 @@
 		9BE650B60B52FE3000611104 /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650B00B52FE3000611104 /* macho_walker.cc */; };
 		D2A5DD4D1188651100081F03 /* cfi_frame_info.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */; };
 		D2A5DD631188658B00081F03 /* tokenize.cc in Sources */ = {isa = PBXBuildFile; fileRef = D2A5DD621188658B00081F03 /* tokenize.cc */; };
+		F407DC48185773C10064622B /* exploitability_linux.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC40185773C10064622B /* exploitability_linux.cc */; };
+		F407DC49185773C10064622B /* stack_frame_symbolizer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC41185773C10064622B /* stack_frame_symbolizer.cc */; };
+		F407DC4A185773C10064622B /* stackwalker_arm64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC42185773C10064622B /* stackwalker_arm64.cc */; };
+		F407DC4B185773C10064622B /* stackwalker_mips.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC44185773C10064622B /* stackwalker_mips.cc */; };
+		F407DC4C185773C10064622B /* stackwalker_ppc64.cc in Sources */ = {isa = PBXBuildFile; fileRef = F407DC46185773C10064622B /* stackwalker_ppc64.cc */; };
 		F9C7ECE50E8ABCA600E953AD /* bytereader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE20E8ABCA600E953AD /* bytereader.cc */; };
 		F9C7ECE60E8ABCA600E953AD /* dwarf2reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */; };
 		F9C7ECE70E8ABCA600E953AD /* functioninfo.cc in Sources */ = {isa = PBXBuildFile; fileRef = F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */; };
@@ -156,6 +161,14 @@
 		9BE650B10B52FE3000611104 /* macho_walker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = macho_walker.h; path = ../../../common/mac/macho_walker.h; sourceTree = SOURCE_ROOT; };
 		D2A5DD4C1188651100081F03 /* cfi_frame_info.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cfi_frame_info.cc; path = ../../../processor/cfi_frame_info.cc; sourceTree = SOURCE_ROOT; };
 		D2A5DD621188658B00081F03 /* tokenize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tokenize.cc; path = ../../../processor/tokenize.cc; sourceTree = SOURCE_ROOT; };
+		F407DC40185773C10064622B /* exploitability_linux.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = exploitability_linux.cc; path = ../../../processor/exploitability_linux.cc; sourceTree = "<group>"; };
+		F407DC41185773C10064622B /* stack_frame_symbolizer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stack_frame_symbolizer.cc; path = ../../../processor/stack_frame_symbolizer.cc; sourceTree = "<group>"; };
+		F407DC42185773C10064622B /* stackwalker_arm64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_arm64.cc; path = ../../../processor/stackwalker_arm64.cc; sourceTree = "<group>"; };
+		F407DC43185773C10064622B /* stackwalker_arm64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_arm64.h; path = ../../../processor/stackwalker_arm64.h; sourceTree = "<group>"; };
+		F407DC44185773C10064622B /* stackwalker_mips.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_mips.cc; path = ../../../processor/stackwalker_mips.cc; sourceTree = "<group>"; };
+		F407DC45185773C10064622B /* stackwalker_mips.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_mips.h; path = ../../../processor/stackwalker_mips.h; sourceTree = "<group>"; };
+		F407DC46185773C10064622B /* stackwalker_ppc64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stackwalker_ppc64.cc; path = ../../../processor/stackwalker_ppc64.cc; sourceTree = "<group>"; };
+		F407DC47185773C10064622B /* stackwalker_ppc64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stackwalker_ppc64.h; path = ../../../processor/stackwalker_ppc64.h; sourceTree = "<group>"; };
 		F9C7ECE20E8ABCA600E953AD /* bytereader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bytereader.cc; path = ../../../common/dwarf/bytereader.cc; sourceTree = SOURCE_ROOT; };
 		F9C7ECE30E8ABCA600E953AD /* dwarf2reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dwarf2reader.cc; path = ../../../common/dwarf/dwarf2reader.cc; sourceTree = SOURCE_ROOT; };
 		F9C7ECE40E8ABCA600E953AD /* functioninfo.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = functioninfo.cc; path = ../../../common/dwarf/functioninfo.cc; sourceTree = SOURCE_ROOT; };
@@ -311,6 +324,14 @@
 			isa = PBXGroup;
 			children = (
 				4D2C7222126F9AF900B43EAF /* exploitability_win.cc */,
+				F407DC40185773C10064622B /* exploitability_linux.cc */,
+				F407DC41185773C10064622B /* stack_frame_symbolizer.cc */,
+				F407DC42185773C10064622B /* stackwalker_arm64.cc */,
+				F407DC43185773C10064622B /* stackwalker_arm64.h */,
+				F407DC44185773C10064622B /* stackwalker_mips.cc */,
+				F407DC45185773C10064622B /* stackwalker_mips.h */,
+				F407DC46185773C10064622B /* stackwalker_ppc64.cc */,
+				F407DC47185773C10064622B /* stackwalker_ppc64.h */,
 				4D2C721E126F9ADE00B43EAF /* exploitability.cc */,
 				4D2C721A126F9ACC00B43EAF /* source_line_resolver_base.cc */,
 				D2A5DD621188658B00081F03 /* tokenize.cc */,
@@ -451,13 +472,16 @@
 				8B31FF8811F0C6FB00FCF3E4 /* language.cc in Sources */,
 				8B31FF8911F0C6FB00FCF3E4 /* module.cc in Sources */,
 				8B31FFC511F0C8AB00FCF3E4 /* dwarf2diehandler.cc in Sources */,
+				F407DC49185773C10064622B /* stack_frame_symbolizer.cc in Sources */,
 				4D2C721B126F9ACC00B43EAF /* source_line_resolver_base.cc in Sources */,
 				4D2C721F126F9ADE00B43EAF /* exploitability.cc in Sources */,
 				4D2C7223126F9AF900B43EAF /* exploitability_win.cc in Sources */,
 				4D2C7227126F9B0F00B43EAF /* disassembler_x86.cc in Sources */,
+				F407DC48185773C10064622B /* exploitability_linux.cc in Sources */,
 				4D2C722B126F9B5A00B43EAF /* x86_disasm.c in Sources */,
 				4D2C722D126F9B6E00B43EAF /* x86_misc.c in Sources */,
 				4D2C722F126F9B8300B43EAF /* x86_operand_list.c in Sources */,
+				F407DC4A185773C10064622B /* stackwalker_arm64.cc in Sources */,
 				4D2C7233126F9BB000B43EAF /* ia32_invariant.c in Sources */,
 				4D2C7235126F9BC200B43EAF /* ia32_settings.c in Sources */,
 				4D2C7246126F9C0B00B43EAF /* ia32_insn.c in Sources */,
@@ -465,8 +489,10 @@
 				4D2C724C126F9C3800B43EAF /* ia32_implicit.c in Sources */,
 				4D2C724E126F9C4D00B43EAF /* ia32_reg.c in Sources */,
 				4D2C725B126F9C8000B43EAF /* ia32_operand.c in Sources */,
+				F407DC4C185773C10064622B /* stackwalker_ppc64.cc in Sources */,
 				4D2C725D126F9C9200B43EAF /* x86_insn.c in Sources */,
 				4D2C7264126F9CBB00B43EAF /* ia32_modrm.c in Sources */,
+				F407DC4B185773C10064622B /* stackwalker_mips.cc in Sources */,
 				4D2C726D126F9CDC00B43EAF /* x86_imm.c in Sources */,
 				4D72CA5713DFBA84006CABE3 /* md5.cc in Sources */,
 			);
diff --git a/src/tools/mac/crash_report/on_demand_symbol_supplier.mm b/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
index 93b4c36..d6bb269 100644
--- a/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
+++ b/src/tools/mac/crash_report/on_demand_symbol_supplier.mm
@@ -165,7 +165,7 @@
                                              const SystemInfo *system_info,
                                              string *symbol_file,
                                              char **symbol_data,
-                                             uint64_t *symbol_data_size) {
+                                             size_t *symbol_data_size) {
   std::string symbol_data_string;
   SymbolSupplier::SymbolResult result = GetSymbolFile(module,
                                                       system_info,
diff --git a/COPYING b/src/tools/mac/upload_system_symbols/arch_constants.h
similarity index 60%
copy from COPYING
copy to src/tools/mac/upload_system_symbols/arch_constants.h
index d15b0c2..ed318b2 100644
--- a/COPYING
+++ b/src/tools/mac/upload_system_symbols/arch_constants.h
@@ -1,17 +1,17 @@
-Copyright (c) 2006, Google Inc.
+/* Copyright 2014, 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
+ * 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
+ * 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
+ * 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.
 
@@ -26,3 +26,22 @@
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <mach-o/fat.h>
+#include <mach-o/loader.h>
+
+// Go/Cgo does not support #define constants, so turn them into symbols
+// that are reachable from Go.
+
+const cpu_type_t kCPUType_i386 = CPU_TYPE_I386;
+const cpu_type_t kCPUType_x86_64 = CPU_TYPE_X86_64;
+
+const uint32_t kMachHeaderMagic32 = MH_MAGIC;
+const uint32_t kMachHeaderMagic64 = MH_MAGIC_64;
+const uint32_t kMachHeaderMagicFat = FAT_MAGIC;
+const uint32_t kMachHeaderCigamFat = FAT_CIGAM;
+
+const uint32_t kMachHeaderFtypeDylib = MH_DYLIB;
+const uint32_t kMachHeaderFtypeBundle = MH_BUNDLE;
+const uint32_t kMachHeaderFtypeExe = MH_EXECUTE;
diff --git a/src/tools/mac/upload_system_symbols/arch_reader.go b/src/tools/mac/upload_system_symbols/arch_reader.go
new file mode 100644
index 0000000..0468836
--- /dev/null
+++ b/src/tools/mac/upload_system_symbols/arch_reader.go
@@ -0,0 +1,268 @@
+/* Copyright 2014, 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.
+*/
+
+package main
+
+import (
+	"encoding/binary"
+	"errors"
+	"fmt"
+	"os"
+	"reflect"
+	"unsafe"
+)
+
+/*
+#include <mach-o/fat.h>
+#include <mach-o/loader.h>
+#include <string.h>
+
+#include "arch_constants.h"
+*/
+import "C"
+
+var (
+	ErrNotMachO        = errors.New("GetMachOImageInfo: file is not a supported Mach-O image")
+	ErrUnsupportedArch = errors.New("GetMachOImageInfo: unknown architecture detected")
+)
+
+const (
+	ArchI386   = "i386"
+	ArchX86_64 = "x86_64"
+)
+
+type MachOType int
+
+const (
+	MachODylib  MachOType = C.kMachHeaderFtypeDylib
+	MachOBundle           = C.kMachHeaderFtypeBundle
+	MachOExe              = C.kMachHeaderFtypeExe
+)
+
+type ImageInfo struct {
+	Type MachOType
+	Arch string
+}
+
+// GetMachOImageInfo will read the file at filepath and determine if it is
+// Mach-O. If it is, it will return a slice of ImageInfo that describe the
+// images in the file (may be more than one if it is a fat image).
+func GetMachOImageInfo(filepath string) ([]ImageInfo, error) {
+	f, err := os.Open(filepath)
+	if err != nil {
+		return nil, err
+	}
+	defer f.Close()
+
+	// Read the magic number to determine the type of file this is.
+	var magic uint32
+	err = binary.Read(f, binary.LittleEndian, &magic)
+	if err != nil {
+		return nil, err
+	}
+
+	// Rewind the file since the magic number is a field in the header
+	// structs.
+	f.Seek(0, os.SEEK_SET)
+
+	switch magic {
+	case C.kMachHeaderMagic32:
+		return readThinHeader(f, C.kMachHeaderMagic32)
+	case C.kMachHeaderMagic64:
+		return readThinHeader(f, C.kMachHeaderMagic64)
+	case C.kMachHeaderCigamFat: // Fat header is big-endian but was read in little.
+		return readFatHeader(f)
+	}
+
+	return nil, ErrNotMachO
+}
+
+func readThinHeader(f *os.File, expectedMagic uint32) ([]ImageInfo, error) {
+	var (
+		magic, filetype uint32
+		cpu             C.cpu_type_t
+		err             error
+	)
+
+	if expectedMagic == C.kMachHeaderMagic32 {
+		magic, cpu, filetype, err = readThin32Header(f)
+	} else if expectedMagic == C.kMachHeaderMagic64 {
+		magic, cpu, filetype, err = readThin64Header(f)
+	} else {
+		panic(fmt.Sprintf("Unexpected magic %#x", magic))
+	}
+	if err != nil {
+		return nil, err
+	}
+
+	if magic != expectedMagic {
+		return nil, fmt.Errorf("readThinHeader: unexpected magic number %#x", magic)
+	}
+
+	arch := cpuTypeToArch(cpu)
+	if arch == "" {
+		return nil, ErrUnsupportedArch
+	}
+	return []ImageInfo{{MachOType(filetype), arch}}, nil
+}
+
+func readThin32Header(f *os.File) (uint32, C.cpu_type_t, uint32, error) {
+	var machHeader C.struct_mach_header
+	err := readStruct(f, binary.LittleEndian, unsafe.Pointer(&machHeader), C.struct_mach_header{})
+	if err != nil {
+		return 0, 0, 0, err
+	}
+	return uint32(machHeader.magic), machHeader.cputype, uint32(machHeader.filetype), nil
+}
+
+func readThin64Header(f *os.File) (uint32, C.cpu_type_t, uint32, error) {
+	var machHeader C.struct_mach_header_64
+	err := readStruct(f, binary.LittleEndian, unsafe.Pointer(&machHeader), C.struct_mach_header_64{})
+	if err != nil {
+		return 0, 0, 0, err
+	}
+	return uint32(machHeader.magic), machHeader.cputype, uint32(machHeader.filetype), nil
+}
+
+func readFatHeader(f *os.File) ([]ImageInfo, error) {
+	var fatHeader C.struct_fat_header
+	err := readStruct(f, binary.BigEndian, unsafe.Pointer(&fatHeader), C.struct_fat_header{})
+	if err != nil {
+		return nil, err
+	}
+
+	if fatHeader.magic != C.kMachHeaderMagicFat {
+		return nil, fmt.Errorf("readFatHeader: unexpected magic number %#x", fatHeader.magic)
+	}
+
+	// Read the fat_arch headers.
+	headers := make([]C.struct_fat_arch, fatHeader.nfat_arch)
+	for i := 0; i < int(fatHeader.nfat_arch); i++ {
+		var fatArch C.struct_fat_arch
+		err = readStruct(f, binary.BigEndian, unsafe.Pointer(&fatArch), C.struct_fat_arch{})
+		if err != nil {
+			return nil, fmt.Errorf("readFatHeader: %v", err)
+		}
+		headers[i] = fatArch
+	}
+
+	seenArches := make(map[string]int)
+
+	// Now go to each arch in the fat image and read its mach header.
+	infos := make([]ImageInfo, 0, len(headers))
+	for _, header := range headers {
+		f.Seek(int64(header.offset), os.SEEK_SET)
+
+		var thinarch []ImageInfo
+		var expectedArch string
+		switch header.cputype {
+		case C.kCPUType_i386:
+			thinarch, err = readThinHeader(f, C.kMachHeaderMagic32)
+			expectedArch = ArchI386
+		case C.kCPUType_x86_64:
+			thinarch, err = readThinHeader(f, C.kMachHeaderMagic64)
+			expectedArch = ArchX86_64
+		default:
+			err = ErrUnsupportedArch
+		}
+
+		if err != nil {
+			return nil, err
+		}
+		if thinarch[0].Arch != expectedArch {
+			return nil, fmt.Errorf("readFatHeader: expected arch %d, got %d", thinarch[0].Arch, expectedArch)
+		}
+
+		infos = append(infos, thinarch[0])
+		seenArches[thinarch[0].Arch]++
+	}
+
+	for arch, count := range seenArches {
+		if count != 1 {
+			return nil, fmt.Errorf("readFatHeader: duplicate arch %s detected", arch)
+		}
+	}
+
+	return infos, nil
+}
+
+// TODO(rsesek): Support more arches.
+func cpuTypeToArch(cpu C.cpu_type_t) string {
+	switch cpu {
+	case C.kCPUType_i386:
+		return ArchI386
+	case C.kCPUType_x86_64:
+		return ArchX86_64
+	default:
+		return ""
+	}
+}
+
+// readStruct is a incomplete version of binary.Read that uses unsafe pointers
+// to set values in unexported fields. From |f|, this will read the fields of
+// the |destType| template instance, in the specified byte |order|, and place
+// the resulting memory into |dest|.
+func readStruct(f *os.File, order binary.ByteOrder, dest unsafe.Pointer, destType interface{}) error {
+	rv := reflect.ValueOf(destType)
+	rt := rv.Type()
+	destPtr := uintptr(dest)
+
+	for i := 0; i < rv.NumField(); i++ {
+		field := rv.Field(i)
+		fieldType := rt.Field(i)
+
+		var vp unsafe.Pointer
+		var err error
+
+		switch field.Kind() {
+		case reflect.Int32:
+			var v int32
+			vp = unsafe.Pointer(&v)
+			err = binary.Read(f, order, &v)
+		case reflect.Uint32:
+			var v uint32
+			vp = unsafe.Pointer(&v)
+			err = binary.Read(f, order, &v)
+		default:
+			err = fmt.Errorf("readStruct: unsupported type %v", fieldType)
+		}
+
+		if err != nil {
+			return err
+		}
+
+		memcpy(destPtr+fieldType.Offset, vp, fieldType.Type.Size())
+	}
+	return nil
+}
+
+func memcpy(dest uintptr, value unsafe.Pointer, size uintptr) {
+	C.memcpy(unsafe.Pointer(dest), value, C.size_t(size))
+}
diff --git a/src/tools/mac/upload_system_symbols/arch_reader_test.go b/src/tools/mac/upload_system_symbols/arch_reader_test.go
new file mode 100644
index 0000000..5fa1d21
--- /dev/null
+++ b/src/tools/mac/upload_system_symbols/arch_reader_test.go
@@ -0,0 +1,82 @@
+/* Copyright 2014, 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.
+*/
+
+package main
+
+import (
+	"testing"
+)
+
+func TestFat(t *testing.T) {
+	tests := []struct {
+		file   string
+		mht    MachOType
+		arches []string
+	}{
+		{"testdata/libarchtest32.dylib", MachODylib, []string{ArchI386}},
+		{"testdata/libarchtest64.dylib", MachODylib, []string{ArchX86_64}},
+		{"testdata/libarchtest.dylib", MachODylib, []string{ArchI386, ArchX86_64}},
+		{"testdata/archtest32.exe", MachOExe, []string{ArchI386}},
+		{"testdata/archtest64.exe", MachOExe, []string{ArchX86_64}},
+		{"testdata/archtest.exe", MachOExe, []string{ArchI386, ArchX86_64}},
+	}
+
+	for _, e := range tests {
+		imageinfo, err := GetMachOImageInfo(e.file)
+		if err != nil {
+			t.Errorf("Unexpected error: %v", err)
+		}
+
+		expected := make(map[string]bool)
+		for _, arch := range e.arches {
+			expected[arch] = false
+		}
+
+		if len(imageinfo) != len(e.arches) {
+			t.Errorf("Wrong number of arches, got %d, expected %d", len(imageinfo), len(e.arches))
+		}
+
+		for _, ii := range imageinfo {
+			if ii.Type != e.mht {
+				t.Errorf("Wrong MachOType got %d, expected %d", ii.Type, e.mht)
+			}
+			if o, k := expected[ii.Arch]; o || !k {
+				t.Errorf("Unexpected architecture %q", ii.Arch)
+			}
+			expected[ii.Arch] = true
+		}
+
+		for k, v := range expected {
+			if !v {
+				t.Errorf("Did not get expected architecture %s", k)
+			}
+		}
+	}
+}
diff --git a/src/tools/mac/upload_system_symbols/testdata/Makefile b/src/tools/mac/upload_system_symbols/testdata/Makefile
new file mode 100644
index 0000000..cb481a3
--- /dev/null
+++ b/src/tools/mac/upload_system_symbols/testdata/Makefile
@@ -0,0 +1,22 @@
+all: libarchtest.dylib archtest.exe
+
+archtest32.exe: archtest.c
+	clang -m32 $< -o $@
+
+archtest64.exe: archtest.c
+	clang -m64 $< -o $@
+
+archtest.exe: archtest32.exe archtest64.exe
+	lipo $^ -create -output $@
+
+libarchtest32.dylib: archtest.c
+	clang -m32 -dynamiclib $< -o $@
+
+libarchtest64.dylib: archtest.c
+	clang -m64 -dynamiclib $< -o $@
+
+libarchtest.dylib: libarchtest32.dylib libarchtest64.dylib
+	lipo $^ -create -output $@
+
+clean:
+	rm -f *.dylib *.exe
diff --git a/src/tools/mac/upload_system_symbols/testdata/archtest.c b/src/tools/mac/upload_system_symbols/testdata/archtest.c
new file mode 100644
index 0000000..0931fca
--- /dev/null
+++ b/src/tools/mac/upload_system_symbols/testdata/archtest.c
@@ -0,0 +1,7 @@
+int TestLibUsefulFunction() {
+  return 42;
+}
+
+int main() {
+  return 0;
+}
diff --git a/src/tools/mac/upload_system_symbols/upload_system_symbols.go b/src/tools/mac/upload_system_symbols/upload_system_symbols.go
new file mode 100644
index 0000000..869a277
--- /dev/null
+++ b/src/tools/mac/upload_system_symbols/upload_system_symbols.go
@@ -0,0 +1,389 @@
+/* Copyright 2014, 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.
+*/
+
+/*
+Tool upload_system_symbols generates and uploads Breakpad symbol files for OS X system libraries.
+
+This tool shells out to the dump_syms and symupload Breakpad tools. In its default mode, this
+will find all dynamic libraries on the system, run dump_syms to create the Breakpad symbol files,
+and then upload them to Google's crash infrastructure.
+
+The tool can also be used to only dump libraries or upload from a directory. See -help for more
+information.
+
+Both i386 and x86_64 architectures will be dumped and uploaded.
+*/
+package main
+
+import (
+	"flag"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"log"
+	"os"
+	"os/exec"
+	"path"
+	"regexp"
+	"strings"
+	"sync"
+	"time"
+)
+
+var (
+	breakpadTools  = flag.String("breakpad-tools", "out/Release/", "Path to the Breakpad tools directory, containing dump_syms and symupload.")
+	uploadOnlyPath = flag.String("upload-from", "", "Upload a directory of symbol files that has been dumped independently.")
+	dumpOnlyPath   = flag.String("dump-to", "", "Dump the symbols to the specified directory, but do not upload them.")
+	systemRoot     = flag.String("system-root", "", "Path to the root of the Mac OS X system whose symbols will be dumped.")
+)
+
+var (
+	// pathsToScan are the subpaths in the systemRoot that should be scanned for shared libraries.
+	pathsToScan = []string{
+		"/Library/QuickTime",
+		"/System/Library/Components",
+		"/System/Library/Frameworks",
+		"/System/Library/PrivateFrameworks",
+		"/usr/lib",
+	}
+
+	// uploadServers are the list of servers to which symbols should be uploaded.
+	uploadServers = []string{
+		"https://clients2.google.com/cr/symbol",
+		"https://clients2.google.com/cr/staging_symbol",
+	}
+
+	// blacklistRegexps match paths that should be excluded from dumping.
+	blacklistRegexps = []*regexp.Regexp{
+		regexp.MustCompile(`/System/Library/Frameworks/Python\.framework/`),
+		regexp.MustCompile(`/System/Library/Frameworks/Ruby\.framework/`),
+		regexp.MustCompile(`_profile\.dylib$`),
+		regexp.MustCompile(`_debug\.dylib$`),
+		regexp.MustCompile(`\.a$`),
+		regexp.MustCompile(`\.dat$`),
+	}
+)
+
+func main() {
+	flag.Parse()
+	log.SetFlags(0)
+
+	var uq *UploadQueue
+
+	if *uploadOnlyPath != "" {
+		// -upload-from specified, so handle that case early.
+		uq = StartUploadQueue()
+		uploadFromDirectory(*uploadOnlyPath, uq)
+		uq.Wait()
+		return
+	}
+
+	if *systemRoot == "" {
+		log.Fatal("Need a -system-root to dump symbols for")
+	}
+
+	if *dumpOnlyPath != "" {
+		// -dump-to specified, so make sure that the path is a directory.
+		if fi, err := os.Stat(*dumpOnlyPath); err != nil {
+			log.Fatal("-dump-to location: %v", err)
+		} else if !fi.IsDir() {
+			log.Fatal("-dump-to location is not a directory")
+		}
+	}
+
+	dumpPath := *dumpOnlyPath
+	if *dumpOnlyPath == "" {
+		// If -dump-to was not specified, then run the upload pipeline and create
+		// a temporary dump output directory.
+		uq = StartUploadQueue()
+
+		if p, err := ioutil.TempDir("", "upload_system_symbols"); err != nil {
+			log.Fatal("Failed to create temporary directory: %v", err)
+		} else {
+			dumpPath = p
+			defer os.RemoveAll(p)
+		}
+	}
+
+	dq := StartDumpQueue(*systemRoot, dumpPath, uq)
+	dq.Wait()
+	if uq != nil {
+		uq.Wait()
+	}
+}
+
+type WorkerPool struct {
+	wg sync.WaitGroup
+}
+
+// StartWorkerPool will launch numWorkers goroutines all running workerFunc.
+// When workerFunc exits, the goroutine will terminate.
+func StartWorkerPool(numWorkers int, workerFunc func()) *WorkerPool {
+	p := new(WorkerPool)
+	for i := 0; i < numWorkers; i++ {
+		p.wg.Add(1)
+		go func() {
+			workerFunc()
+			p.wg.Done()
+		}()
+	}
+	return p
+}
+
+// Wait for all the workers in the pool to complete the workerFunc.
+func (p *WorkerPool) Wait() {
+	p.wg.Wait()
+}
+
+type UploadQueue struct {
+	*WorkerPool
+	queue chan string
+}
+
+// StartUploadQueue creates a new worker pool and queue, to which paths to
+// Breakpad symbol files may be sent for uploading.
+func StartUploadQueue() *UploadQueue {
+	uq := &UploadQueue{
+		queue: make(chan string, 10),
+	}
+	uq.WorkerPool = StartWorkerPool(5, uq.worker)
+	return uq
+}
+
+// Upload enqueues the contents of filepath to be uploaded.
+func (uq *UploadQueue) Upload(filepath string) {
+	uq.queue <- filepath
+}
+
+// Done tells the queue that no more files need to be uploaded. This must be
+// called before WorkerPool.Wait.
+func (uq *UploadQueue) Done() {
+	close(uq.queue)
+}
+
+func (uq *UploadQueue) worker() {
+	symUpload := path.Join(*breakpadTools, "symupload")
+
+	for symfile := range uq.queue {
+		for _, server := range uploadServers {
+			for i := 0; i < 3; i++ { // Give each upload 3 attempts to succeed.
+				cmd := exec.Command(symUpload, symfile, server)
+				if output, err := cmd.Output(); err == nil {
+					// Success. No retry needed.
+					fmt.Printf("Uploaded %s to %s\n", symfile, server)
+					break
+				} else {
+					log.Printf("Error running symupload(%s, %s), attempt %d: %v: %s\n", symfile, server, i, err, output)
+					time.Sleep(1 * time.Second)
+				}
+			}
+		}
+	}
+}
+
+type DumpQueue struct {
+	*WorkerPool
+	dumpPath string
+	queue    chan dumpRequest
+	uq       *UploadQueue
+}
+
+type dumpRequest struct {
+	path string
+	arch string
+}
+
+// StartDumpQueue creates a new worker pool to find all the Mach-O libraries in
+// root and dump their symbols to dumpPath. If an UploadQueue is passed, the
+// path to the symbol file will be enqueued there, too.
+func StartDumpQueue(root, dumpPath string, uq *UploadQueue) *DumpQueue {
+	dq := &DumpQueue{
+		dumpPath: dumpPath,
+		queue:    make(chan dumpRequest),
+		uq:       uq,
+	}
+	dq.WorkerPool = StartWorkerPool(12, dq.worker)
+
+	findLibsInRoot(root, dq)
+
+	return dq
+}
+
+// DumpSymbols enqueues the filepath to have its symbols dumped in the specified
+// architecture.
+func (dq *DumpQueue) DumpSymbols(filepath string, arch string) {
+	dq.queue <- dumpRequest{
+		path: filepath,
+		arch: arch,
+	}
+}
+
+func (dq *DumpQueue) Wait() {
+	dq.WorkerPool.Wait()
+	if dq.uq != nil {
+		dq.uq.Done()
+	}
+}
+
+func (dq *DumpQueue) done() {
+	close(dq.queue)
+}
+
+func (dq *DumpQueue) worker() {
+	dumpSyms := path.Join(*breakpadTools, "dump_syms")
+
+	for req := range dq.queue {
+		filebase := path.Join(dq.dumpPath, strings.Replace(req.path, "/", "_", -1))
+		symfile := fmt.Sprintf("%s_%s.sym", filebase, req.arch)
+		f, err := os.Create(symfile)
+		if err != nil {
+			log.Fatal("Error creating symbol file:", err)
+		}
+
+		cmd := exec.Command(dumpSyms, "-a", req.arch, req.path)
+		cmd.Stdout = f
+		err = cmd.Run()
+		f.Close()
+
+		if err != nil {
+			os.Remove(symfile)
+			log.Printf("Error running dump_syms(%s, %s): %v\n", req.arch, req.path, err)
+		} else if dq.uq != nil {
+			dq.uq.Upload(symfile)
+		}
+	}
+}
+
+// uploadFromDirectory handles the upload-only case and merely uploads all files in
+// a directory.
+func uploadFromDirectory(directory string, uq *UploadQueue) {
+	d, err := os.Open(directory)
+	if err != nil {
+		log.Fatal("Could not open directory to upload: %v", err)
+	}
+	defer d.Close()
+
+	entries, err := d.Readdirnames(0)
+	if err != nil {
+		log.Fatal("Could not read directory: %v", err)
+	}
+
+	for _, entry := range entries {
+		uq.Upload(path.Join(directory, entry))
+	}
+
+	uq.Done()
+}
+
+// findQueue is an implementation detail of the DumpQueue that finds all the
+// Mach-O files and their architectures.
+type findQueue struct {
+	*WorkerPool
+	queue chan string
+	dq    *DumpQueue
+}
+
+// findLibsInRoot looks in all the pathsToScan in the root and manages the
+// interaction between findQueue and DumpQueue.
+func findLibsInRoot(root string, dq *DumpQueue) {
+	fq := &findQueue{
+		queue: make(chan string, 10),
+		dq:    dq,
+	}
+	fq.WorkerPool = StartWorkerPool(12, fq.worker)
+
+	for _, p := range pathsToScan {
+		fq.findLibsInPath(path.Join(root, p))
+	}
+
+	close(fq.queue)
+	fq.Wait()
+	dq.done()
+}
+
+// findLibsInPath recursively walks the directory tree, sending file paths to
+// test for being Mach-O to the findQueue.
+func (fq *findQueue) findLibsInPath(loc string) {
+	d, err := os.Open(loc)
+	if err != nil {
+		log.Fatal("Could not open %s: %v", loc, err)
+	}
+	defer d.Close()
+
+	for {
+		fis, err := d.Readdir(100)
+		if err != nil && err != io.EOF {
+			log.Fatal("Error reading directory %s: %v", loc, err)
+		}
+
+		for _, fi := range fis {
+			fp := path.Join(loc, fi.Name())
+			if fi.IsDir() {
+				fq.findLibsInPath(fp)
+				continue
+			} else if fi.Mode()&os.ModeSymlink != 0 {
+				continue
+			}
+
+			// Test the blacklist in the worker to not slow down this main loop.
+
+			fq.queue <- fp
+		}
+
+		if err == io.EOF {
+			break
+		}
+	}
+}
+
+func (fq *findQueue) worker() {
+	for fp := range fq.queue {
+		blacklisted := false
+		for _, re := range blacklistRegexps {
+			blacklisted = blacklisted || re.MatchString(fp)
+		}
+		if blacklisted {
+			continue
+		}
+
+		imageinfos, err := GetMachOImageInfo(fp)
+		if err != nil && err != ErrNotMachO {
+			log.Printf("%s: %v", fp, err)
+			continue
+		}
+
+		for _, imageinfo := range imageinfos {
+			if imageinfo.Type == MachODylib || imageinfo.Type == MachOBundle {
+
+				fq.dq.DumpSymbols(fp, imageinfo.Arch)
+			}
+		}
+	}
+}
diff --git a/src/tools/windows/binaries/dump_syms.exe b/src/tools/windows/binaries/dump_syms.exe
index 4175ae5..ca4676f 100644
--- a/src/tools/windows/binaries/dump_syms.exe
+++ b/src/tools/windows/binaries/dump_syms.exe
Binary files differ
diff --git a/src/tools/windows/binaries/symupload.exe b/src/tools/windows/binaries/symupload.exe
index 1ed10a7..097e429 100644
--- a/src/tools/windows/binaries/symupload.exe
+++ b/src/tools/windows/binaries/symupload.exe
Binary files differ
diff --git a/src/tools/windows/dump_syms/dump_syms.gyp b/src/tools/windows/dump_syms/dump_syms.gyp
index 5153fe4..d4964b4 100644
--- a/src/tools/windows/dump_syms/dump_syms.gyp
+++ b/src/tools/windows/dump_syms/dump_syms.gyp
@@ -52,6 +52,13 @@
         '<(DEPTH)/client/windows/unittests/testing.gyp:gtest',
         'dump_syms',
       ],
+      'msvs_settings': {
+        'VCLinkerTool': {
+          'AdditionalDependencies': [
+            'shell32.lib',
+          ],
+        },
+      },
     },
   ],
 }
diff --git a/src/tools/windows/dump_syms/dump_syms_unittest.cc b/src/tools/windows/dump_syms/dump_syms_unittest.cc
index 8f9fd2a..61f8443 100644
--- a/src/tools/windows/dump_syms/dump_syms_unittest.cc
+++ b/src/tools/windows/dump_syms/dump_syms_unittest.cc
@@ -57,6 +57,8 @@
   L"omap_stretched",

   // A PDB file with OMAP data for an image that has been basic block reordered.

   L"omap_reorder_bbs",  

+  // A 64bit PDB file with no OMAP data.

+  L"dump_syms_regtest64",

 };

 

 void TrimLastComponent(const std::wstring& path,

diff --git a/src/tools/windows/dump_syms/testdata/dump_syms_regtest64.pdb b/src/tools/windows/dump_syms/testdata/dump_syms_regtest64.pdb
new file mode 100644
index 0000000..86d362e
--- /dev/null
+++ b/src/tools/windows/dump_syms/testdata/dump_syms_regtest64.pdb
Binary files differ
diff --git a/src/tools/windows/dump_syms/testdata/dump_syms_regtest64.sym b/src/tools/windows/dump_syms/testdata/dump_syms_regtest64.sym
new file mode 100644
index 0000000..b690275
--- /dev/null
+++ b/src/tools/windows/dump_syms/testdata/dump_syms_regtest64.sym
@@ -0,0 +1,4559 @@
+MODULE windows x86_64 72E103A85CB249078B76B2E7C06257B11 dump_syms_regtest64.pdb

+INFO CODE_ID 532B4F161A000 dump_syms_regtest64.exe

+FILE 1 d:\src\breakpad\src\tools\windows\dump_syms\testdata\dump_syms_regtest64.cc

+FILE 2 f:\dd\vctools\crt\crtw32\misc\amd64\amdsecgs.asm

+FILE 3 f:\dd\ExternalAPIs\Windows\WinBlue\sdk\inc\ksamd64.inc

+FILE 4 f:\dd\ExternalAPIs\Windows\WinBlue\sdk\inc\kxamd64.inc

+FILE 5 f:\dd\ExternalAPIs\Windows\WinBlue\sdk\inc\macamd64.inc

+FILE 6 f:\dd\vctools\crt\crtw32\misc\amd64\chandler.c

+FILE 7 f:\dd\externalapis\windows\winblue\sdk\inc\pshpack8.h

+FILE 8 f:\dd\vctools\crt\crtw32\h\excpt.h

+FILE 9 f:\dd\externalapis\windows\winblue\sdk\inc\ktmtypes.h

+FILE 10 f:\dd\externalapis\windows\winblue\sdk\inc\winternl.h

+FILE 11 f:\dd\externalapis\windows\winblue\sdk\inc\winapifamily.h

+FILE 12 f:\dd\externalapis\windows\winblue\sdk\inc\windef.h

+FILE 13 f:\dd\externalapis\windows\winblue\sdk\inc\minwindef.h

+FILE 14 f:\dd\externalapis\windows\winblue\sdk\inc\specstrings.h

+FILE 15 f:\dd\externalapis\windows\winblue\sdk\inc\specstrings_strict.h

+FILE 16 f:\dd\externalapis\windows\winblue\sdk\inc\specstrings_undef.h

+FILE 17 f:\dd\externalapis\windows\winblue\sdk\inc\driverspecs.h

+FILE 18 f:\dd\externalapis\windows\winblue\sdk\inc\sdv_driverspecs.h

+FILE 19 f:\dd\externalapis\windows\winblue\sdk\inc\apiset.h

+FILE 20 f:\dd\vctools\inc\vcwininternls.h

+FILE 21 f:\dd\tools\devdiv\inc\ddbanned.h

+FILE 22 f:\dd\vctools\crt\crtw32\h\vadefs.h

+FILE 23 f:\dd\vctools\crt\crtw32\h\cruntime.h

+FILE 24 f:\dd\vctools\crt\crtw32\h\sal.h

+FILE 25 f:\dd\vctools\crt\crtw32\h\concurrencysal.h

+FILE 26 f:\dd\externalapis\windows\winblue\sdk\inc\guiddef.h

+FILE 27 f:\dd\externalapis\windows\winblue\sdk\inc\winnt.h

+FILE 28 f:\dd\externalapis\windows\winblue\sdk\inc\kernelspecs.h

+FILE 29 f:\dd\externalapis\windows\winblue\sdk\inc\basetsd.h

+FILE 30 f:\dd\vctools\crt\crtw32\h\ctype.h

+FILE 31 f:\dd\vctools\crt\crtw32\h\crtdefs.h

+FILE 32 f:\dd\vctools\crt\crtw32\h\string.h

+FILE 33 f:\dd\externalapis\windows\winblue\sdk\inc\pshpack2.h

+FILE 34 f:\dd\externalapis\windows\winblue\sdk\inc\pshpack4.h

+FILE 35 f:\dd\externalapis\windows\winblue\sdk\inc\sdkddkver.h

+FILE 36 f:\dd\externalapis\windows\winblue\sdk\inc\poppack.h

+FILE 37 f:\dd\vctools\crt\crtw32\misc\amd64\gshandler.c

+FILE 58 f:\dd\vctools\crt\crtw32\h\process.h

+FILE 69 f:\dd\vctools\crt\crtw32\misc\amd64\jmpuwind.asm

+FILE 73 f:\dd\externalapis\windows\winblue\sdk\inc\processtopologyapi.h

+FILE 74 f:\dd\externalapis\windows\winblue\sdk\inc\securityappcontainer.h

+FILE 75 f:\dd\externalapis\windows\winblue\sdk\inc\pshpack1.h

+FILE 76 f:\dd\externalapis\windows\winblue\sdk\inc\realtimeapiset.h

+FILE 77 f:\dd\externalapis\windows\winblue\sdk\inc\profileapi.h

+FILE 78 f:\dd\externalapis\windows\winblue\sdk\inc\timezoneapi.h

+FILE 79 f:\dd\externalapis\windows\winblue\sdk\inc\jobapi.h

+FILE 80 f:\dd\externalapis\windows\winblue\sdk\inc\heapapi.h

+FILE 82 f:\dd\externalapis\windows\winblue\sdk\inc\wincon.h

+FILE 83 f:\dd\externalapis\windows\winblue\sdk\inc\wow64apiset.h

+FILE 85 f:\dd\externalapis\windows\winblue\sdk\inc\threadpoolapiset.h

+FILE 87 f:\dd\externalapis\windows\winblue\sdk\inc\winver.h

+FILE 88 f:\dd\externalapis\windows\winblue\sdk\inc\debugapi.h

+FILE 89 f:\dd\externalapis\windows\winblue\sdk\inc\winnetwk.h

+FILE 90 f:\dd\externalapis\windows\winblue\sdk\inc\verrsrc.h

+FILE 91 f:\dd\externalapis\windows\winblue\sdk\inc\wnnc.h

+FILE 92 f:\dd\externalapis\windows\winblue\sdk\inc\libloaderapi.h

+FILE 93 f:\dd\externalapis\windows\winblue\sdk\inc\fibersapi.h

+FILE 94 f:\dd\vctools\langapi\include\isa_availability.h

+FILE 95 f:\dd\vctools\crt\crtw32\convert\_fptostr.c

+FILE 96 f:\dd\externalapis\windows\winblue\sdk\inc\winnls.h

+FILE 97 f:\dd\externalapis\windows\winblue\sdk\inc\datetimeapi.h

+FILE 98 f:\dd\externalapis\windows\winblue\sdk\inc\securitybaseapi.h

+FILE 99 f:\dd\externalapis\windows\winblue\sdk\inc\namedpipeapi.h

+FILE 103 f:\dd\vctools\crt\crtw32\h\stddef.h

+FILE 104 f:\dd\externalapis\windows\winblue\sdk\inc\fileapi.h

+FILE 105 f:\dd\vctools\crt\crtw32\h\internal.h

+FILE 106 f:\dd\externalapis\windows\winblue\sdk\inc\interlockedapi.h

+FILE 107 f:\dd\externalapis\windows\winblue\sdk\inc\utilapiset.h

+FILE 108 f:\dd\vctools\crt\crtw32\h\limits.h

+FILE 110 f:\dd\externalapis\windows\winblue\sdk\inc\windows.h

+FILE 111 f:\dd\externalapis\windows\winblue\sdk\inc\processenv.h

+FILE 115 f:\dd\vctools\crt\crtw32\h\fltintrn.h

+FILE 116 f:\dd\externalapis\windows\winblue\sdk\inc\stringapiset.h

+FILE 118 f:\dd\externalapis\windows\winblue\sdk\inc\stralign.h

+FILE 121 f:\dd\externalapis\windows\winblue\sdk\inc\memoryapi.h

+FILE 124 f:\dd\externalapis\windows\winblue\sdk\inc\mcx.h

+FILE 125 f:\dd\externalapis\windows\winblue\sdk\inc\processthreadsapi.h

+FILE 126 f:\dd\externalapis\windows\winblue\sdk\inc\handleapi.h

+FILE 128 f:\dd\externalapis\windows\winblue\sdk\inc\tvout.h

+FILE 129 f:\dd\externalapis\windows\winblue\sdk\inc\winreg.h

+FILE 130 f:\dd\externalapis\windows\winblue\sdk\inc\reason.h

+FILE 131 f:\dd\externalapis\windows\winblue\sdk\inc\consoleapi.h

+FILE 132 f:\dd\externalapis\windows\winblue\sdk\inc\wingdi.h

+FILE 133 f:\dd\externalapis\windows\winblue\sdk\inc\synchapi.h

+FILE 134 f:\dd\externalapis\windows\winblue\sdk\inc\winbase.h

+FILE 135 f:\dd\externalapis\windows\winblue\sdk\inc\apisetcconv.h

+FILE 137 f:\dd\externalapis\windows\winblue\sdk\inc\minwinbase.h

+FILE 140 f:\dd\externalapis\windows\winblue\sdk\inc\namespaceapi.h

+FILE 141 f:\dd\vctools\crt\crtw32\h\crtdbg.h

+FILE 142 f:\dd\externalapis\windows\winblue\sdk\inc\bemapiset.h

+FILE 143 f:\dd\externalapis\windows\winblue\sdk\inc\threadpoollegacyapiset.h

+FILE 144 f:\dd\externalapis\windows\winblue\sdk\inc\ime_cmodes.h

+FILE 145 f:\dd\vctools\crt\crtw32\h\mtdll.h

+FILE 146 f:\dd\externalapis\windows\winblue\sdk\inc\winuser.h

+FILE 147 f:\dd\externalapis\windows\winblue\sdk\inc\errhandlingapi.h

+FILE 148 f:\dd\vctools\crt\crtw32\h\stdarg.h

+FILE 156 f:\dd\externalapis\windows\winblue\sdk\inc\imm.h

+FILE 158 f:\dd\externalapis\windows\winblue\sdk\inc\ioapiset.h

+FILE 160 f:\dd\vctools\crt\crtw32\h\errno.h

+FILE 161 f:\dd\externalapis\windows\winblue\sdk\inc\winerror.h

+FILE 162 f:\dd\externalapis\windows\winblue\sdk\inc\systemtopologyapi.h

+FILE 163 f:\dd\externalapis\windows\winblue\sdk\inc\sysinfoapi.h

+FILE 181 f:\dd\vctools\crt\crtw32\convert\atox.c

+FILE 208 f:\dd\vctools\crt\crtw32\h\setlocal.h

+FILE 211 f:\dd\vctools\crt\crtw32\h\oscalls.h

+FILE 212 f:\dd\vctools\crt\crtw32\h\mbctype.h

+FILE 218 f:\dd\vctools\crt\crtw32\h\tchar.h

+FILE 220 f:\dd\vctools\crt\crtw32\h\mbstring.h

+FILE 231 f:\dd\vctools\crt\crtw32\h\stdlib.h

+FILE 255 f:\dd\vctools\crt\crtw32\convert\wchtodig.c

+FILE 256 f:\dd\vctools\crt\crtw32\h\wchar.h

+FILE 263 f:\dd\vctools\crt\crtw32\h\swprintf.inl

+FILE 264 f:\dd\vctools\crt\crtw32\h\wtime.inl

+FILE 283 f:\dd\vctools\crt\crtw32\convert\wtox.c

+FILE 377 f:\dd\vctools\crt\crtw32\convert\xtows.c

+FILE 384 f:\dd\vctools\crt\crtw32\h\internal_securecrt.h

+FILE 385 f:\dd\vctools\crt\crtw32\convert\xtoa.c

+FILE 480 f:\dd\vctools\crt\crtw32\dos\dosmap.c

+FILE 556 f:\dd\vctools\crt\crtw32\h\dbgint.h

+FILE 566 f:\dd\vctools\crt\crtw32\heap\calloc_impl.c

+FILE 576 f:\dd\vctools\crt\crtw32\h\rtcsup.h

+FILE 581 f:\dd\vctools\crt\crtw32\h\rtcapi.h

+FILE 583 f:\dd\vctools\crt\crtw32\h\malloc.h

+FILE 597 f:\dd\vctools\crt\crtw32\h\winheap.h

+FILE 658 f:\dd\vctools\crt\crtw32\heap\crtheap.c

+FILE 716 f:\dd\vctools\crt\crtw32\h\awint.h

+FILE 744 f:\dd\vctools\crt\crtw32\heap\free.c

+FILE 828 f:\dd\vctools\crt\crtw32\heap\heapinit.c

+FILE 930 f:\dd\vctools\crt\crtw32\heap\malloc.c

+FILE 997 f:\dd\vctools\crt\crtw32\h\rterr.h

+FILE 1027 f:\dd\vctools\crt\crtw32\heap\msize.c

+FILE 1111 f:\dd\vctools\crt\crtw32\heap\realloc.c

+FILE 1206 f:\dd\vctools\crt\crtw32\heap\recalloc.c

+FILE 1307 f:\dd\vctools\crt\crtw32\heap\_newmode.c

+FILE 1396 f:\dd\vctools\crt\crtw32\lowio\close.c

+FILE 1444 f:\dd\vctools\crt\crtw32\h\msdos.h

+FILE 1451 f:\dd\vctools\crt\crtw32\h\io.h

+FILE 1490 f:\dd\vctools\crt\crtw32\lowio\commit.c

+FILE 1584 f:\dd\vctools\crt\crtw32\lowio\ioinit.c

+FILE 1677 f:\dd\vctools\crt\crtw32\lowio\isatty.c

+FILE 1769 f:\dd\vctools\crt\crtw32\lowio\lseeki64.c

+FILE 1804 f:\dd\vctools\crt\crtw32\h\stdio.h

+FILE 1865 f:\dd\vctools\crt\crtw32\lowio\osfinfo.c

+FILE 1909 f:\dd\vctools\crt\crtw32\h\fcntl.h

+FILE 1964 f:\dd\vctools\crt\crtw32\lowio\write.c

+FILE 1974 f:\dd\vctools\crt\crtw32\h\locale.h

+FILE 2057 f:\dd\vctools\crt\crtw32\lowio\initcon.c

+FILE 2072 f:\dd\vctools\crt\crtw32\h\sect_attribs.h

+FILE 2139 f:\dd\vctools\crt\crtw32\h\file2.h

+FILE 2149 f:\dd\vctools\crt\crtw32\lowio\putwch.c

+FILE 2199 f:\dd\vctools\crt\crtw32\h\conio.h

+FILE 2246 f:\dd\vctools\crt\crtw32\misc\amd64\loadcfg.c

+FILE 2325 f:\dd\vctools\crt\crtw32\misc\abort.c

+FILE 2334 f:\dd\vctools\crt\crtw32\h\signal.h

+FILE 2424 f:\dd\vctools\crt\crtw32\misc\ctype.c

+FILE 2495 f:\dd\vctools\crt\crtw32\misc\dbghook.c

+FILE 2522 f:\dd\vctools\crt\crtw32\misc\errmode.c

+FILE 2602 f:\dd\vctools\crt\crtw32\misc\getqloc.c

+FILE 2706 f:\dd\vctools\crt\crtw32\misc\glstatus.c

+FILE 2794 f:\dd\vctools\crt\crtw32\misc\gs_cookie.c

+FILE 2878 f:\dd\vctools\crt\crtw32\misc\gs_report.c

+FILE 2962 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\immintrin.h

+FILE 2963 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\wmmintrin.h

+FILE 2964 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\nmmintrin.h

+FILE 2965 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\smmintrin.h

+FILE 2966 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\tmmintrin.h

+FILE 2967 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\pmmintrin.h

+FILE 2969 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\emmintrin.h

+FILE 2970 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\xmmintrin.h

+FILE 2971 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\mmintrin.h

+FILE 2974 f:\dd\vctools\crt\crtw32\misc\gs_support.c

+FILE 3018 f:\binaries.amd64ret\interapiscandidates\vctools\inc\vc\ammintrin.h

+FILE 3023 f:\dd\vctools\crt\crtw32\h\intrin.h

+FILE 3024 f:\dd\vctools\crt\crtw32\h\setjmp.h

+FILE 3061 f:\dd\vctools\crt\crtw32\misc\initcoll.c

+FILE 3147 f:\dd\vctools\crt\crtw32\misc\initctyp.c

+FILE 3233 f:\dd\vctools\crt\crtw32\misc\inithelp.c

+FILE 3335 f:\dd\vctools\crt\crtw32\misc\initmon.c

+FILE 3420 f:\dd\vctools\crt\crtw32\misc\initnum.c

+FILE 3462 f:\dd\vctools\crt\crtw32\h\nlsint.h

+FILE 3520 f:\dd\vctools\crt\crtw32\misc\inittime.c

+FILE 3613 f:\dd\vctools\crt\crtw32\misc\lconv.c

+FILE 3702 f:\dd\vctools\crt\crtw32\misc\localref.c

+FILE 3795 f:\dd\vctools\crt\crtw32\misc\onexit.c

+FILE 3889 f:\dd\vctools\crt\crtw32\misc\nlsdata.c

+FILE 3978 f:\dd\vctools\crt\crtw32\misc\pesect.c

+FILE 4060 f:\dd\vctools\crt\crtw32\misc\purevirt.c

+FILE 4150 f:\dd\vctools\crt\crtw32\misc\winsig.c

+FILE 4218 f:\dd\vctools\crt\crtw32\h\float.h

+FILE 4220 f:\dd\vctools\crt\crtw32\h\crtwrn.h

+FILE 4248 f:\dd\vctools\crt\crtw32\misc\winapinls.c

+FILE 4282 f:\dd\vctools\crt\crtw32\h\nlsdownlevel.h

+FILE 4340 f:\dd\vctools\crt\crtw32\misc\winapisupp.c

+FILE 4354 f:\dd\externalapis\windows\winblue\sdk\inc\appmodel.h

+FILE 4355 f:\dd\externalapis\windows\winblue\sdk\inc\minappmodel.h

+FILE 4434 f:\dd\vctools\crt\crtw32\misc\winxfltr.c

+FILE 4530 f:\dd\vctools\crt\crtw32\misc\wsetloca.c

+FILE 4628 f:\dd\vctools\crt\crtw32\misc\rand_s.c

+FILE 4640 f:\dd\externalapis\windows\winblue\sdk\inc\ntsecapi.h

+FILE 4690 f:\dd\externalapis\windows\winblue\sdk\inc\lsalookup.h

+FILE 4721 f:\dd\vctools\crt\crtw32\misc\a_env.c

+FILE 4803 f:\dd\vctools\crt\crtw32\misc\getqloc_downlevel.c

+FILE 4901 f:\dd\vctools\crt\crtw32\misc\crtmboxw.c

+FILE 4913 f:\dd\vctools\crt\crtw32\misc\crtmbox.c

+FILE 5002 f:\dd\vctools\crt\crtw32\misc\cmiscdat.c

+FILE 5093 f:\dd\vctools\crt\crtw32\stdio\fileno.c

+FILE 5182 f:\dd\vctools\crt\crtw32\stdio\_file.c

+FILE 5276 f:\dd\vctools\crt\crtw32\stdio\_freebuf.c

+FILE 5374 f:\dd\vctools\crt\crtw32\stdio\_sftbuf.c

+FILE 5472 f:\dd\vctools\crt\crtw32\stdio\closeall.c

+FILE 5556 f:\dd\vctools\crt\crtw32\stdio\fclose.c

+FILE 5660 f:\dd\vctools\crt\crtw32\stdio\fflush.c

+FILE 5753 f:\dd\vctools\crt\crtw32\stdio\outputformat.c

+FILE 5837 f:\dd\vctools\crt\crtw32\string\amd64\cpu_disp.c

+FILE 5933 f:\dd\vctools\crt\crtw32\string\amd64\strrchr.c

+FILE 6036 f:\dd\vctools\crt\crtw32\string\amd64\wcschr.c

+FILE 6136 f:\dd\vctools\crt\crtw32\string\strcpy_s.c

+FILE 6169 f:\dd\vctools\crt\crtw32\h\tcscpy_s.inl

+FILE 6227 f:\dd\vctools\crt\crtw32\string\strncpy_s.c

+FILE 6260 f:\dd\vctools\crt\crtw32\h\tcsncpy_s.inl

+FILE 6318 f:\dd\vctools\crt\crtw32\string\wcscat_s.c

+FILE 6351 f:\dd\vctools\crt\crtw32\h\tcscat_s.inl

+FILE 6394 f:\dd\vctools\crt\crtw32\string\wcscmp.c

+FILE 6417 f:\dd\vctools\crt\crtw32\string\wcscpy_s.c

+FILE 6493 f:\dd\vctools\crt\crtw32\string\wcscspn.c

+FILE 6501 f:\dd\vctools\crt\crtw32\string\wcslen.c

+FILE 6509 f:\dd\vctools\crt\crtw32\string\wcslen_s.c

+FILE 6517 f:\dd\vctools\crt\crtw32\string\wcsncmp.c

+FILE 6540 f:\dd\vctools\crt\crtw32\string\wcsncpy_s.c

+FILE 6616 f:\dd\vctools\crt\crtw32\string\wcspbrk.c

+FILE 6647 f:\dd\vctools\crt\crtw32\heap\handler.cpp

+FILE 6670 f:\dd\vctools\crt\crtw32\h\new.h

+FILE 6742 f:\dd\vctools\crt\crtw32\heap\delete.cpp

+FILE 6804 f:\dd\vctools\crt\crtw32\string\amd64\memcmp.asm

+FILE 6808 f:\dd\vctools\crt\crtw32\string\amd64\memcpy.asm

+FILE 6812 f:\dd\vctools\crt\crtw32\string\amd64\memset.asm

+FILE 6816 f:\dd\vctools\crt\crtw32\string\amd64\strcmp.asm

+FILE 6820 f:\dd\vctools\crt\crtw32\string\amd64\strlen.asm

+FILE 6847 f:\dd\vctools\crt\crtw32\convert\_ctype.c

+FILE 6940 f:\dd\vctools\crt\crtw32\convert\_wctype.c

+FILE 7006 f:\dd\vctools\crt\crtw32\h\math.h

+FILE 7027 f:\dd\vctools\crt\crtw32\convert\atodbl.c

+FILE 7081 f:\dd\vctools\crt\crtw32\h\atodbl.inl

+FILE 7128 f:\dd\vctools\crt\crtw32\convert\iswctype.c

+FILE 7216 f:\dd\vctools\crt\crtw32\convert\isctype.c

+FILE 7310 f:\dd\vctools\crt\crtw32\convert\mbtowc.c

+FILE 7401 f:\dd\vctools\crt\crtw32\convert\strtod.c

+FILE 7499 f:\dd\vctools\crt\crtw32\convert\strtol.c

+FILE 7592 f:\dd\vctools\crt\crtw32\convert\strtoq.c

+FILE 7593 f:\dd\vctools\crt\crtw32\stdhpp\stdint.h

+FILE 7683 f:\dd\vctools\crt\crtw32\convert\tolower.c

+FILE 7784 f:\dd\vctools\crt\crtw32\convert\towlower.c

+FILE 7874 f:\dd\vctools\crt\crtw32\convert\wcstod.c

+FILE 7970 f:\dd\vctools\crt\crtw32\convert\wcstol.c

+FILE 8064 f:\dd\vctools\crt\crtw32\convert\wcstoq.c

+FILE 8156 f:\dd\vctools\crt\crtw32\h\mbdata.h

+FILE 8159 f:\dd\vctools\crt\crtw32\mbstring\ismbbyte.c

+FILE 8253 f:\dd\vctools\crt\crtw32\mbstring\mbctype.c

+FILE 8352 f:\dd\vctools\crt\crtw32\misc\a_loc.c

+FILE 8449 f:\dd\vctools\crt\crtw32\misc\a_map.c

+FILE 8545 f:\dd\vctools\crt\crtw32\misc\a_str.c

+FILE 8649 f:\dd\vctools\crt\crtw32\misc\invarg.c

+FILE 8749 f:\dd\vctools\crt\crtw32\misc\w_map.c

+FILE 8849 f:\dd\vctools\crt\crtw32\string\wcsicmp.c

+FILE 8936 f:\dd\vctools\crt\crtw32\string\wcsnicmp.c

+FILE 9010 f:\dd\vctools\crt\crtw32\startup\stdenvp.c

+FILE 9116 f:\dd\vctools\crt\crtw32\startup\crt0.c

+FILE 9140 f:\dd\vctools\crt\crtw32\h\dos.h

+FILE 9214 f:\dd\vctools\crt\crtw32\startup\crt0msg.c

+FILE 9217 f:\dd\vctools\crt\crtw32\h\cmsgs.h

+FILE 9313 f:\dd\vctools\crt\crtw32\startup\tidtable.c

+FILE 9391 f:\dd\vctools\crt\crtw32\h\memory.h

+FILE 9411 f:\dd\vctools\crt\crtw32\startup\stdargv.c

+FILE 9509 f:\dd\vctools\crt\crtw32\startup\mlock.c

+FILE 9605 f:\dd\vctools\crt\crtw32\startup\crt0init.c

+FILE 9698 f:\dd\vctools\crt\crtw32\startup\crt0fp.c

+FILE 9790 f:\dd\vctools\crt\crtw32\startup\crt0dat.c

+FILE 9872 f:\dd\vctools\crt\crtw32\startup\amd64\chkstk.asm

+FILE 9904 f:\dd\vctools\crt\fpw32\conv\cvt.c

+FILE 9916 f:\dd\vctools\crt\fpw32\include\cv.inl

+FILE 9930 f:\dd\vctools\crt\fpw32\include\cv.h

+FILE 9988 f:\dd\vctools\crt\fpw32\conv\x10fout.c

+FILE 10087 f:\dd\vctools\crt\fpw32\conv\wstrgtold.c

+FILE 10104 f:\dd\vctools\crt\fpw32\conv\strgtold.c

+FILE 10127 f:\dd\vctools\crt\fpw32\include\strgtold12.inl

+FILE 10173 f:\dd\vctools\crt\fpw32\conv\wcfin.c

+FILE 10176 f:\dd\vctools\crt\fpw32\conv\cfin.c

+FILE 10284 f:\dd\vctools\crt\fpw32\conv\mantold.c

+FILE 10294 f:\dd\vctools\crt\fpw32\include\mantold.inl

+FILE 10297 f:\dd\vctools\crt\fpw32\conv\intrncvt.c

+FILE 10306 f:\dd\vctools\crt\fpw32\include\intrncvt.inl

+FILE 10323 f:\dd\vctools\crt\fpw32\conv\fpinit.c

+FILE 10399 f:\dd\vctools\crt\fpw32\conv\constpow.c

+FILE 10409 f:\dd\vctools\crt\fpw32\include\constpow.inl

+FILE 10420 f:\dd\vctools\crt\fpw32\conv\cfout.c

+FILE 10514 f:\dd\vctools\crt\fpw32\tran\amd64\huge.asm

+FILE 10545 f:\dd\vctools\langapi\undname\undname.inl

+FILE 10546 f:\dd\vctools\langapi\undname\undname.cxx

+FILE 10566 f:\dd\vctools\langapi\undname\utf8.h

+FILE 10584 f:\dd\vctools\langapi\undname\undname.hxx

+FILE 10586 f:\dd\vctools\langapi\undname\undname.h

+FILE 10610 f:\dd\vctools\crt\crtw32\h\eh.h

+FILE 10621 f:\dd\vctools\langapi\include\ehdata.h

+FILE 10632 f:\dd\vctools\crt\crtw32\h\ehhooks.h

+FILE 10634 f:\dd\vctools\crt\crtw32\eh\unhandld.cpp

+FILE 10641 f:\dd\vctools\crt\crtw32\h\ehassert.h

+FILE 10708 f:\dd\vctools\crt\crtw32\stdhpp\exception

+FILE 10741 f:\dd\vctools\crt\crtw32\eh\typname.cpp

+FILE 10756 f:\dd\vctools\crt\crtw32\stdhpp\initializer_list

+FILE 10773 f:\dd\vctools\crt\crtw32\stdhpp\xtr1common

+FILE 10797 f:\dd\vctools\crt\crtw32\h\typeinfo.h

+FILE 10798 f:\dd\vctools\crt\crtw32\stdhpp\typeinfo

+FILE 10799 f:\dd\vctools\crt\crtw32\stdhpp\xstddef

+FILE 10802 f:\dd\vctools\crt\crtw32\stdhpp\cstddef

+FILE 10803 f:\dd\vctools\crt\crtw32\stdhpp\yvals.h

+FILE 10804 f:\dd\vctools\crt\crtw32\stdhpp\xkeycheck.h

+FILE 10807 f:\dd\vctools\crt\crtw32\stdhpp\use_ansi.h

+FILE 10809 f:\binaries.amd64ret\interapiscandidates\vctools\inc\undname.h

+FILE 10842 f:\dd\vctools\crt\crtw32\eh\typinfo.cpp

+FILE 10933 f:\dd\vctools\crt\crtw32\eh\hooks.cpp

+FILE 11032 f:\dd\vctools\crt\crtw32\rtc\initsect.cpp

+FILE 11055 f:\dd\vctools\crt\crtw32\h\rtcpriv.h

+FUNC 1000 6 0 google_breakpad::i

+1000 0 51 1

+1000 5 52 1

+1005 1 53 1

+FUNC 1010 6a 0 main

+1010 d 57 1

+101d a 58 1

+1027 11 59 1

+1038 a 60 1

+1042 e 61 1

+1050 f 62 1

+105f 16 64 1

+1075 5 65 1

+FUNC 1080 26 0 google_breakpad::C::C()

+1080 26 37 1

+FUNC 10b0 15 0 google_breakpad::C::~C()

+10b0 15 38 1

+FUNC 10d0 36 0 google_breakpad::C::`scalar deleting destructor'(unsigned int)

+FUNC 1110 26 0 google_breakpad::C::f()

+1110 26 43 1

+FUNC 1140 b 0 google_breakpad::C::g()

+1140 b 44 1

+FUNC 1150 8 0 google_breakpad::C::h(google_breakpad::C const &)

+1150 8 45 1

+FUNC 1160 16 0 google_breakpad::C::set_member(int)

+1160 16 40 1

+FUNC 1178 5 0 operator delete(void *)

+1178 0 20 6742

+1178 5 23 6742

+FUNC 1180 39 0 type_info::`scalar deleting destructor'(unsigned int)

+FUNC 11bc 180 0 __tmainCRTStartup

+11bc a 172 9116

+11c6 c 188 9116

+11d2 4e 196 9116

+1220 9 198 9116

+1229 22 199 9116

+124b 9 201 9116

+1254 22 202 9116

+1276 6 211 9116

+127c 9 221 9116

+1285 a 222 9116

+128f d 226 9116

+129c c 229 9116

+12a8 9 231 9116

+12b1 a 232 9116

+12bb 9 233 9116

+12c4 a 234 9116

+12ce 7 237 9116

+12d5 4 238 9116

+12d9 7 239 9116

+12e0 e 254 9116

+12ee 18 255 9116

+1306 4 261 9116

+130a 7 262 9116

+1311 5 264 9116

+1316 2 266 9116

+1318 2 267 9116

+131a 7 275 9116

+1321 8 276 9116

+1329 6 278 9116

+132f 2 282 9116

+1331 b 283 9116

+FUNC 133c 2c 0 fast_error_exit

+133c 6 305 9116

+1342 b 315 9116

+134d 5 317 9116

+1352 7 319 9116

+1359 5 322 9116

+135e 5 323 9116

+1363 5 322 9116

+FUNC 1368 12 0 mainCRTStartup

+1368 4 155 9116

+136c 5 162 9116

+1371 4 165 9116

+1375 5 164 9116

+FUNC 137c 3d 0 free

+137c 0 40 744

+137c a 45 744

+1386 12 50 744

+1398 4 51 744

+139c 17 53 744

+13b3 6 55 744

+FUNC 13d0 67 0 strcmp

+13d0 0 70 6816

+13d0 3 77 6816

+13d3 3 78 6816

+13d6 2 79 6816

+13d8 3 82 6816

+13db 3 83 6816

+13de 2 84 6816

+13e0 3 86 6816

+13e3 2 88 6816

+13e5 2 89 6816

+13e7 3 91 6816

+13ea 2 92 6816

+13ec a 96 6816

+13f6 a 97 6816

+1400 4 100 6816

+1404 5 101 6816

+1409 5 102 6816

+140e 2 103 6816

+1410 3 105 6816

+1413 4 106 6816

+1417 2 109 6816

+1419 4 112 6816

+141d 3 113 6816

+1420 4 114 6816

+1424 3 115 6816

+1427 3 117 6816

+142a 2 118 6816

+142c 2 121 6816

+142e 1 122 6816

+142f 3 125 6816

+1432 4 126 6816

+1436 1 127 6816

+FUNC 1438 6c 0 type_info::_Type_info_dtor(type_info *)

+1438 9 31 10741

+1441 b 32 10741

+144c 9 34 10741

+1455 13 39 10741

+1468 5 41 10741

+146d 5 43 10741

+1472 8 48 10741

+147a 5 49 10741

+147f 2 50 10741

+1481 3 52 10741

+1484 2 41 10741

+1486 9 63 10741

+148f 5 70 10741

+1494 a 73 10741

+149e 6 76 10741

+FUNC 14a4 38 0 __CxxUnhandledExceptionFilter(_EXCEPTION_POINTERS *)

+14a4 4 37 10634

+14a8 27 38 10634

+14cf 2 42 10634

+14d1 5 43 10634

+14d6 6 39 10634

+FUNC 14dc 17 0 _CxxSetUnhandledExceptionFilter

+14dc 4 56 10634

+14e0 c 60 10634

+14ec 2 62 10634

+14ee 5 63 10634

+FUNC 14f4 1cc 0 XcptFilter

+14f4 19 195 4434

+150d 5 202 4434

+1512 f 203 4434

+1521 31 208 4434

+1552 9 210 4434

+155b 4 216 4434

+155f 9 223 4434

+1568 6 232 4434

+156e 4 237 4434

+1572 9 238 4434

+157b 6 244 4434

+1581 8 248 4434

+1589 7 262 4434

+1590 7 263 4434

+1597 a 272 4434

+15a1 5 280 4434

+15a6 19 283 4434

+15bf e 310 4434

+15cd f 312 4434

+15dc 8 314 4434

+15e4 f 316 4434

+15f3 8 318 4434

+15fb c 320 4434

+1607 8 322 4434

+160f c 324 4434

+161b 8 326 4434

+1623 c 328 4434

+162f 8 330 4434

+1637 c 332 4434

+1643 8 334 4434

+164b c 336 4434

+1657 8 338 4434

+165f c 340 4434

+166b 8 342 4434

+1673 a 344 4434

+167d e 353 4434

+168b 6 358 4434

+1691 2 360 4434

+1693 4 365 4434

+1697 6 366 4434

+169d 7 372 4434

+16a4 5 374 4434

+16a9 2 224 4434

+16ab 15 376 4434

+FUNC 16c0 133 0 freefls

+16c0 0 370 9313

+16c0 13 381 9313

+16d3 3 370 9313

+16d6 9 382 9313

+16df 5 383 9313

+16e4 9 385 9313

+16ed 5 386 9313

+16f2 9 388 9313

+16fb 5 389 9313

+1700 9 391 9313

+1709 5 392 9313

+170e 9 394 9313

+1717 5 395 9313

+171c 9 397 9313

+1725 5 398 9313

+172a c 400 9313

+1736 5 401 9313

+173b 13 403 9313

+174e 5 404 9313

+1753 d 406 9313

+1760 27 410 9313

+1787 6 411 9313

+178d 7 414 9313

+1794 b 417 9313

+179f c 420 9313

+17ab 8 422 9313

+17b3 1a 425 9313

+17cd 9 426 9313

+17d6 a 430 9313

+17e0 8 433 9313

+17e8 b 436 9313

+FUNC 17f4 24 0 getptd

+17f4 6 336 9313

+17fa 8 337 9313

+1802 5 338 9313

+1807 8 339 9313

+180f 3 341 9313

+1812 6 342 9313

+FUNC 1818 82 0 getptd_noexit

+1818 a 270 9313

+1822 6 274 9313

+1828 15 277 9313

+183d 15 286 9313

+1852 e 289 9313

+1860 e 295 9313

+186e 6 297 9313

+1874 7 298 9313

+187b 2 300 9313

+187d 5 306 9313

+1882 2 307 9313

+1884 8 312 9313

+188c 3 314 9313

+188f b 315 9313

+FUNC 189c c2 0 initptd

+189c 10 203 9313

+18ac e 204 9313

+18ba 4 205 9313

+18be 7 206 9313

+18c5 a 211 9313

+18cf c 215 9313

+18db 7 216 9313

+18e2 e 217 9313

+18f0 8 219 9313

+18f8 b 221 9313

+1903 a 224 9313

+190d a 228 9313

+1917 b 233 9313

+1922 7 235 9313

+1929 5 243 9313

+192e e 244 9313

+193c d 245 9313

+1949 a 248 9313

+1953 b 250 9313

+FUNC 1960 7f 0 mtinit

+1960 6 88 9313

+1966 5 91 9313

+196b 9 97 9313

+1974 17 105 9313

+198b 29 115 9313

+19b4 a 125 9313

+19be 6 127 9313

+19c4 7 128 9313

+19cb 7 130 9313

+19d2 5 117 9313

+19d7 2 118 9313

+19d9 6 131 9313

+FUNC 19e0 24 0 mtterm

+19e0 4 160 9313

+19e4 b 167 9313

+19ef 5 168 9313

+19f4 7 169 9313

+19fb 4 177 9313

+19ff 5 176 9313

+FUNC 1a04 41 0 _crtCorExitProcess

+1a04 8 734 9790

+1a0c 18 738 9790

+1a24 12 739 9790

+1a36 5 740 9790

+1a3b 4 741 9790

+1a3f 6 751 9790

+FUNC 1a48 16 0 _crtExitProcess

+1a48 8 757 9790

+1a50 5 764 9790

+1a55 9 774 9790

+FUNC 1a60 26 0 amsg_exit

+1a60 8 485 9790

+1a68 5 487 9790

+1a6d 7 488 9790

+1a74 12 490 9790

+FUNC 1a88 f 0 c_exit

+1a88 0 454 9790

+1a88 f 455 9790

+FUNC 1a98 d 0 cexit

+1a98 0 447 9790

+1a98 d 448 9790

+FUNC 1aa8 96 0 cinit

+1aa8 6 278 9790

+1aae 1c 288 9790

+1aca 8 290 9790

+1ad2 5 292 9790

+1ad7 13 298 9790

+1aea 4 299 9790

+1aee c 303 9790

+1afa 13 308 9790

+1b0d 1a 321 9790

+1b27 f 323 9790

+1b36 2 327 9790

+1b38 6 328 9790

+FUNC 1b40 c 0 exit

+1b40 0 432 9790

+1b40 c 433 9790

+FUNC 1b4c 4b 0 init_pointers

+1b4c 6 879 9790

+1b52 8 880 9790

+1b5a b 882 9790

+1b65 8 883 9790

+1b6d 8 884 9790

+1b75 8 885 9790

+1b7d 8 886 9790

+1b85 8 889 9790

+1b8d 5 900 9790

+1b92 5 893 9790

+FUNC 1b98 60 0 _initterm

+1b98 30 941 9790

+1bc8 5 948 9790

+1bcd 8 953 9790

+1bd5 2 954 9790

+1bd7 c 955 9790

+1be3 15 957 9790

+FUNC 1bf8 39 0 initterm_e

+1bf8 a 990 9790

+1c02 8 991 9790

+1c0a 9 999 9790

+1c13 8 1004 9790

+1c1b 2 1005 9790

+1c1d 9 1006 9790

+1c26 b 1010 9790

+FUNC 1c34 a 0 lockexit

+1c34 0 825 9790

+1c34 a 826 9790

+FUNC 1c40 a 0 unlockexit

+1c40 0 851 9790

+1c40 a 852 9790

+FUNC 1c4c 195 0 doexit

+1c4c 24 552 9790

+1c70 b 568 9790

+1c7b d 571 9790

+1c88 a 572 9790

+1c92 7 575 9790

+1c99 8 577 9790

+1ca1 15 593 9790

+1cb6 9 594 9790

+1cbf 15 595 9790

+1cd4 8 599 9790

+1cdc 8 600 9790

+1ce4 1b 608 9790

+1cff 2 611 9790

+1d01 5 613 9790

+1d06 c 620 9790

+1d12 b 623 9790

+1d1d 2 626 9790

+1d1f 10 628 9790

+1d2f d 629 9790

+1d3c a 631 9790

+1d46 10 634 9790

+1d56 10 635 9790

+1d66 2 637 9790

+1d68 13 643 9790

+1d7b 14 651 9790

+1d8f 5 666 9790

+1d94 a 667 9790

+1d9e 5 670 9790

+1da3 a 674 9790

+1dad a 676 9790

+1db7 12 678 9790

+1dc9 18 679 9790

+FUNC 1de4 a 0 exit

+1de4 0 416 9790

+1de4 a 417 9790

+FUNC 1df0 20 0 heap_init

+1df0 4 40 828

+1df4 17 42 828

+1e0b 5 46 828

+FUNC 1e10 32d 0 ioinit

+1e10 25 110 1584

+1e35 b 125 1584

+1e40 23 134 1584

+1e63 19 136 1584

+1e7c 7 139 1584

+1e83 7 140 1584

+1e8a b 142 1584

+1e95 6 143 1584

+1e9b 4 144 1584

+1e9f 4 146 1584

+1ea3 7 147 1584

+1eaa 5 148 1584

+1eaf 6 149 1584

+1eb5 4 151 1584

+1eb9 4 152 1584

+1ebd 11 142 1584

+1ece b 160 1584

+1ed9 20 162 1584

+1ef9 9 173 1584

+1f02 b 174 1584

+1f0d d 180 1584

+1f1a 12 186 1584

+1f2c 18 192 1584

+1f44 7 198 1584

+1f4b 2 199 1584

+1f4d e 205 1584

+1f5b 7 206 1584

+1f62 f 208 1584

+1f71 6 209 1584

+1f77 4 210 1584

+1f7b 4 212 1584

+1f7f 4 213 1584

+1f83 6 214 1584

+1f89 4 216 1584

+1f8d 4 217 1584

+1f91 a 208 1584

+1f9b 4 186 1584

+1f9f 14 224 1584

+1fb3 23 237 1584

+1fd6 1b 239 1584

+1ff1 6 240 1584

+1ff7 6 241 1584

+1ffd 11 243 1584

+200e 3 244 1584

+2011 19 224 1584

+202a 18 255 1584

+2042 20 257 1584

+2062 10 320 1584

+2072 4 271 1584

+2076 34 275 1584

+20aa 3 280 1584

+20ad 8 286 1584

+20b5 9 287 1584

+20be 5 288 1584

+20c3 a 289 1584

+20cd 11 292 1584

+20de 3 293 1584

+20e1 2 295 1584

+20e3 a 304 1584

+20ed 3 305 1584

+20f0 c 311 1584

+20fc 8 312 1584

+2104 b 255 1584

+210f a 326 1584

+2119 2 329 1584

+211b 22 330 1584

+FUNC 2140 f3 0 setargv

+2140 f 88 9411

+214f 9 97 9411

+2158 5 98 9411

+215d 1f 105 9411

+217c 7 122 9411

+2183 7 110 9411

+218a d 122 9411

+2197 1c 129 9411

+21b3 1f 136 9411

+21d2 9 140 9411

+21db b 144 9411

+21e6 5 145 9411

+21eb 1e 153 9411

+2209 4 158 9411

+220d f 162 9411

+221c 4 177 9411

+2220 3 138 9411

+2223 10 178 9411

+FUNC 2234 1c7 0 parse_cmdline

+2234 1d 223 9411

+2251 15 230 9411

+2266 7 231 9411

+226d 5 235 9411

+2272 7 236 9411

+2279 2 255 9411

+227b 5 257 9411

+2280 4 259 9411

+2284 b 260 9411

+228f 2 261 9411

+2291 3 263 9411

+2294 5 264 9411

+2299 7 265 9411

+22a0 6 267 9411

+22a6 b 269 9411

+22b1 3 270 9411

+22b4 5 271 9411

+22b9 7 272 9411

+22c0 3 273 9411

+22c3 15 277 9411

+22d8 5 282 9411

+22dd 6 283 9411

+22e3 3 280 9411

+22e6 2 286 9411

+22e8 9 291 9411

+22f1 a 292 9411

+22fb 5 293 9411

+2300 9 296 9411

+2309 5 300 9411

+230e 7 301 9411

+2315 4 302 9411

+2319 5 316 9411

+231e 4 320 9411

+2322 3 323 9411

+2325 2 324 9411

+2327 5 321 9411

+232c 5 326 9411

+2331 4 329 9411

+2335 d 330 9411

+2342 3 331 9411

+2345 2 332 9411

+2347 b 334 9411

+2352 4 337 9411

+2356 2 341 9411

+2358 5 342 9411

+235d 6 343 9411

+2363 3 344 9411

+2366 4 341 9411

+236a 12 348 9411

+237c 4 353 9411

+2380 11 355 9411

+2391 a 356 9411

+239b 3 357 9411

+239e 7 359 9411

+23a5 2 360 9411

+23a7 4 361 9411

+23ab 3 362 9411

+23ae 3 363 9411

+23b1 3 366 9411

+23b4 3 368 9411

+23b7 5 377 9411

+23bc 5 381 9411

+23c1 6 382 9411

+23c7 3 383 9411

+23ca 5 292 9411

+23cf 5 387 9411

+23d4 4 388 9411

+23d8 4 389 9411

+23dc 1f 390 9411

+FUNC 23fc 131 0 setenvp

+23fc 14 77 9010

+2410 9 85 9010

+2419 5 86 9010

+241e 9 91 9010

+2427 5 98 9010

+242c 8 99 9010

+2434 4 110 9010

+2438 2 111 9010

+243a e 112 9010

+2448 6 108 9010

+244e 1f 117 9010

+246d c 121 9010

+2479 8 123 9010

+2481 8 125 9010

+2489 18 127 9010

+24a1 12 133 9010

+24b3 4 134 9010

+24b7 b 121 9010

+24c2 7 131 9010

+24c9 8 138 9010

+24d1 8 139 9010

+24d9 4 142 9010

+24dd a 149 9010

+24e7 2 152 9010

+24e9 15 153 9010

+24fe c 129 9010

+250a 8 130 9010

+2512 5 131 9010

+2517 16 133 9010

+FUNC 2530 43 0 FF_MSGBANNER

+2530 4 143 9214

+2534 26 147 9214

+255a a 149 9214

+2564 a 150 9214

+256e 5 152 9214

+FUNC 2574 2f 0 GET_RTERRMSG

+2574 0 174 9214

+2574 c 177 9214

+2580 5 178 9214

+2585 f 177 9214

+2594 2 181 9214

+2596 1 182 9214

+2597 b 179 9214

+25a2 1 182 9214

+FUNC 25a4 26f 0 NMSG_WRITE

+25a4 2f 205 9214

+25d3 5 206 9214

+25d8 e 208 9214

+25e6 2a 235 9214

+2610 c 272 9214

+261c 1f 281 9214

+263b 2 284 9214

+263d 8 281 9214

+2645 25 284 9214

+266a 19 285 9214

+2683 11 288 9214

+2694 c 290 9214

+26a0 2d 291 9214

+26cd 1a 294 9214

+26e7 16 295 9214

+26fd 17 299 9214

+2714 18 237 9214

+272c 8 253 9214

+2734 4 255 9214

+2738 5 257 9214

+273d 15 253 9214

+2752 2d 269 9214

+277f 2d 303 9214

+27ac 15 285 9214

+27c1 15 291 9214

+27d6 15 295 9214

+27eb 15 294 9214

+2800 13 281 9214

+FUNC 2814 7 0 _set_app_type

+2814 0 94 2522

+2814 6 95 2522

+281a 1 96 2522

+FUNC 281c 40 0 set_error_mode

+281c 4 49 2522

+2820 e 52 2522

+282e 6 60 2522

+2834 2 61 2522

+2836 6 56 2522

+283c 6 57 2522

+2842 2 66 2522

+2844 13 63 2522

+2857 5 67 2522

+FUNC 285c ac 0 _security_init_cookie

+285c d 82 2974

+2869 1b 99 2974

+2884 a 112 2974

+288e 8 114 2974

+2896 c 120 2974

+28a2 6 121 2974

+28a8 10 130 2974

+28b8 7 132 2974

+28bf 1c 149 2974

+28db 11 157 2974

+28ec 7 168 2974

+28f3 15 171 2974

+FUNC 2908 38 0 RTC_Initialize

+2908 a 43 11032

+2912 10 46 11032

+2922 8 48 11032

+292a 2 50 11032

+292c 9 46 11032

+2935 b 53 11032

+FUNC 2940 38 0 RTC_Terminate

+2940 a 57 11032

+294a 10 60 11032

+295a 8 62 11032

+2962 2 64 11032

+2964 9 60 11032

+296d b 67 11032

+FUNC 2978 f4 0 _crtGetEnvironmentStringsA

+2978 19 40 4721

+2991 15 49 4721

+29a6 3 53 4721

+29a9 6 54 4721

+29af a 55 4721

+29b9 a 56 4721

+29c3 2e 70 4721

+29f1 14 74 4721

+2a05 28 88 4721

+2a2d 8 90 4721

+2a35 3 91 4721

+2a38 9 94 4721

+2a41 5 95 4721

+2a46 9 76 4721

+2a4f 2 77 4721

+2a51 1b 96 4721

+FUNC 2a6c 1e1 0 _C_specific_handler

+2a6c 1c 91 6

+2a88 4 112 6

+2a8c 3 113 6

+2a8f 7 114 6

+2a96 13 124 6

+2aa9 14 133 6

+2abd 2a 136 6

+2ae7 7 145 6

+2aee 4 150 6

+2af2 d 152 6

+2aff 4 162 6

+2b03 2 165 6

+2b05 23 176 6

+2b28 e 178 6

+2b36 15 191 6

+2b4b 29 198 6

+2b74 5 204 6

+2b79 7 133 6

+2b80 7 163 6

+2b87 4 216 6

+2b8b c 218 6

+2b97 17 220 6

+2bae 6 222 6

+2bb4 7 238 6

+2bbb 30 242 6

+2beb 8 238 6

+2bf3 5 248 6

+2bf8 8 263 6

+2c00 5 264 6

+2c05 2 267 6

+2c07 3 218 6

+2c0a 14 272 6

+2c1e c 218 6

+2c2a 5 284 6

+2c2f 1e 285 6

+FUNC 2c50 20 0 _doserrno

+2c50 4 292 480

+2c54 5 293 480

+2c59 5 294 480

+2c5e 9 295 480

+2c67 4 297 480

+2c6b 5 299 480

+FUNC 2c70 4e 0 dosmaperr

+2c70 c 110 480

+2c7c 19 111 480

+2c95 1e 113 480

+2cb3 b 114 480

+FUNC 2cc0 20 0 errno

+2cc0 4 279 480

+2cc4 5 280 480

+2cc9 5 281 480

+2cce 9 282 480

+2cd7 4 284 480

+2cdb 5 287 480

+FUNC 2ce0 4d 0 get_errno_from_oserr

+2ce0 0 119 480

+2ce0 10 123 480

+2cf0 5 124 480

+2cf5 e 123 480

+2d03 8 133 480

+2d0b 5 134 480

+2d10 1 139 480

+2d11 12 135 480

+2d23 1 139 480

+2d24 8 125 480

+2d2c 1 139 480

+FUNC 2d30 f2 0 call_reportfault

+2d30 36 148 8649

+2d66 5 150 8649

+2d6b 5 151 8649

+2d70 17 154 8649

+2d87 5 156 8649

+2d8c 17 188 8649

+2da3 e 189 8649

+2db1 7 190 8649

+2db8 8 194 8649

+2dc0 8 195 8649

+2dc8 c 196 8649

+2dd4 6 198 8649

+2dda c 201 8649

+2de6 d 205 8649

+2df3 7 206 8649

+2dfa 28 208 8649

+FUNC 2e24 8 0 initp_misc_invarg

+2e24 0 39 8649

+2e24 7 40 8649

+2e2b 1 41 8649

+FUNC 2e2c 65 0 invalid_parameter

+2e2c 17 71 8649

+2e43 16 78 8649

+2e59 11 81 8649

+2e6a 14 86 8649

+2e7e 3 81 8649

+2e81 10 85 8649

+FUNC 2e94 1e 0 invalid_parameter_noinfo

+2e94 4 95 8649

+2e98 15 96 8649

+2ead 5 97 8649

+FUNC 2eb4 3b 0 invoke_watson

+2eb4 4 121 8649

+2eb8 e 131 8649

+2ec6 7 132 8649

+2ecd 14 136 8649

+2ee1 5 138 8649

+2ee6 4 140 8649

+2eea 5 138 8649

+FUNC 2ef0 61 0 strcpy_s

+2ef0 6 13 6169

+2ef6 a 18 6169

+2f00 8 19 6169

+2f08 13 18 6169

+2f1b 6 34 6169

+2f21 19 23 6169

+2f3a 5 27 6169

+2f3f 2 29 6169

+2f41 c 30 6169

+2f4d 4 33 6169

+FUNC 2f70 a8 0 strlen

+2f70 0 46 6820

+2f70 3 50 6820

+2f73 3 51 6820

+2f76 6 52 6820

+2f7c 4 53 6820

+2f80 2 58 6820

+2f82 3 59 6820

+2f85 2 60 6820

+2f87 2 61 6820

+2f89 2 62 6820

+2f8b 2 63 6820

+2f8d a 66 6820

+2f97 a 67 6820

+2fa1 3 70 6820

+2fa4 3 72 6820

+2fa7 4 73 6820

+2fab 3 74 6820

+2fae 3 75 6820

+2fb1 3 76 6820

+2fb4 3 77 6820

+2fb7 2 78 6820

+2fb9 4 82 6820

+2fbd 2 84 6820

+2fbf 2 85 6820

+2fc1 2 86 6820

+2fc3 2 87 6820

+2fc5 4 88 6820

+2fc9 2 89 6820

+2fcb 2 90 6820

+2fcd 2 91 6820

+2fcf 2 92 6820

+2fd1 4 93 6820

+2fd5 2 94 6820

+2fd7 2 95 6820

+2fd9 2 96 6820

+2fdb 2 97 6820

+2fdd 3 98 6820

+2fe0 2 99 6820

+2fe2 2 100 6820

+2fe4 2 101 6820

+2fe6 2 102 6820

+2fe8 5 105 6820

+2fed 1 106 6820

+2fee 5 108 6820

+2ff3 1 109 6820

+2ff4 5 111 6820

+2ff9 1 112 6820

+2ffa 5 114 6820

+2fff 1 115 6820

+3000 5 117 6820

+3005 1 118 6820

+3006 5 120 6820

+300b 1 121 6820

+300c 5 123 6820

+3011 1 124 6820

+3012 5 126 6820

+3017 1 127 6820

+FUNC 3018 44 0 lock

+3018 a 325 9509

+3022 14 330 9509

+3036 9 332 9509

+303f 8 333 9509

+3047 4 340 9509

+304b a 341 9509

+3055 7 340 9509

+FUNC 305c 87 0 mtdeletelocks

+305c 14 183 9509

+3070 e 189 9509

+307e e 191 9509

+308c 9 195 9509

+3095 8 201 9509

+309d 4 202 9509

+30a1 9 189 9509

+30aa b 210 9509

+30b5 a 212 9509

+30bf 6 216 9509

+30c5 9 210 9509

+30ce 15 219 9509

+FUNC 30e4 bd 0 mtinitlocknum

+30e4 13 254 9509

+30f7 a 264 9509

+3101 5 266 9509

+3106 a 267 9509

+3110 a 269 9509

+311a 11 273 9509

+312b 7 274 9509

+3132 12 276 9509

+3144 b 277 9509

+314f 4 278 9509

+3153 b 281 9509

+315e 3 285 9509

+3161 7 284 9509

+3168 d 285 9509

+3175 4 286 9509

+3179 2 288 9509

+317b 6 289 9509

+3181 d 293 9509

+318e 2 296 9509

+3190 11 297 9509

+FUNC 31a4 61 0 mtinitlocks

+31a4 f 137 9509

+31b3 c 139 9509

+31bf 6 145 9509

+31c5 a 146 9509

+31cf 1a 147 9509

+31e9 9 144 9509

+31f2 13 153 9509

+FUNC 3208 18 0 unlock

+3208 0 363 9509

+3208 18 367 9509

+FUNC 3220 b6 0 malloc

+3220 12 84 930

+3232 b 88 930

+323d 41 92 930

+327e 5 97 930

+3283 8 101 930

+328b c 108 930

+3297 2 112 930

+3299 b 103 930

+32a4 b 122 930

+32af 5 124 930

+32b4 5 114 930

+32b9 b 115 930

+32c4 2 116 930

+32c6 10 125 930

+FUNC 32f0 24 0 local_unwind

+32f0 0 47 69

+32f0 7 49 69

+32f7 3 58 69

+32fa 3 59 69

+32fd 5 65 69

+3302 5 66 69

+3307 5 67 69

+330c 7 68 69

+3313 d 69 69

+FUNC 3320 18 0 NLG_Notify

+3320 0 103 69

+3320 5 105 69

+3325 5 106 69

+332a 5 107 69

+332f 7 108 69

+3336 a 109 69

+FUNC 3340 1 0 _NLG_Dispatch2

+3340 0 113 69

+3340 10 114 69

+FUNC 3350 1 0 _NLG_Return2

+3350 0 137 69

+3350 1 138 69

+FUNC 3354 1f 0 terminate()

+3354 4 66 10933

+3358 c 71 10933

+3364 5 72 10933

+3369 2 81 10933

+336b 2 82 10933

+336d 6 96 10933

+FUNC 3374 1d 0 initp_eh_hooks

+3374 4 51 10933

+3378 14 52 10933

+338c 5 53 10933

+FUNC 3394 6d 0 _crtCaptureCurrentContext

+3394 d 327 4340

+33a1 6 335 4340

+33a7 7 337 4340

+33ae 11 338 4340

+33bf 5 340 4340

+33c4 32 348 4340

+33f6 b 350 4340

+FUNC 3404 71 0 _crtCapturePreviousContext

+3404 b 279 4340

+340f 6 287 4340

+3415 7 289 4340

+341c 2 292 4340

+341e 11 294 4340

+342f 5 296 4340

+3434 39 304 4340

+346d 8 309 4340

+FUNC 3478 1a 0 _crtFlsAlloc

+3478 0 381 4340

+3478 10 386 4340

+3488 3 388 4340

+348b 7 392 4340

+FUNC 3494 1a 0 _crtFlsFree

+3494 0 398 4340

+3494 10 403 4340

+34a4 3 405 4340

+34a7 7 409 4340

+FUNC 34b0 1a 0 _crtFlsGetValue

+34b0 0 415 4340

+34b0 10 420 4340

+34c0 3 422 4340

+34c3 7 426 4340

+FUNC 34cc 1a 0 _crtFlsSetValue

+34cc 0 433 4340

+34cc 10 438 4340

+34dc 3 440 4340

+34df 7 444 4340

+FUNC 34e8 2b 0 _crtInitializeCriticalSectionEx

+34e8 4 457 4340

+34ec 10 459 4340

+34fc 4 467 4340

+3500 3 461 4340

+3503 6 465 4340

+3509 5 466 4340

+350e 5 467 4340

+FUNC 3514 4c 0 _crtIsPackagedApp

+3514 6 126 4340

+351a c 133 4340

+3526 2d 135 4340

+3553 7 138 4340

+355a 6 140 4340

+FUNC 3560 3fa 0 _crtLoadWinApiPointers

+3560 6 749 4340

+3566 d 750 4340

+3573 13 752 4340

+3586 1e 753 4340

+35a4 1e 754 4340

+35c2 1e 755 4340

+35e0 1e 756 4340

+35fe 1e 757 4340

+361c 1e 758 4340

+363a 1e 759 4340

+3658 1e 760 4340

+3676 1e 761 4340

+3694 1e 762 4340

+36b2 1e 763 4340

+36d0 1e 764 4340

+36ee 1e 765 4340

+370c 1e 766 4340

+372a 25 767 4340

+374f 17 768 4340

+3766 1e 769 4340

+3784 1e 770 4340

+37a2 1e 771 4340

+37c0 1e 772 4340

+37de 1e 773 4340

+37fc 1e 774 4340

+381a 1e 775 4340

+3838 1e 776 4340

+3856 1e 777 4340

+3874 1e 778 4340

+3892 1e 779 4340

+38b0 1e 780 4340

+38ce 1e 781 4340

+38ec 1e 782 4340

+390a 25 783 4340

+392f 25 784 4340

+3954 6 785 4340

+FUNC 395c 7 0 _crtSetUnhandledExceptionFilter

+395c 0 194 4340

+395c 7 198 4340

+FUNC 3964 7 0 _crtSleep

+3964 0 727 4340

+3964 7 739 4340

+FUNC 396c 1f 0 _crtTerminateProcess

+396c 8 221 4340

+3974 b 224 4340

+397f 5 225 4340

+3984 7 224 4340

+FUNC 398c 20 0 _crtUnhandledException

+398c 9 253 4340

+3995 8 255 4340

+399d 3 258 4340

+39a0 5 259 4340

+39a5 7 258 4340

+FUNC 39ac 7f 0 calloc_crt

+39ac 19 55 658

+39c5 c 56 658

+39d1 11 62 658

+39e2 d 63 658

+39ef 19 64 658

+3a08 5 65 658

+3a0d 1e 69 658

+FUNC 3a2c 7a 0 malloc_crt

+3a2c 19 40 658

+3a45 f 41 658

+3a54 b 45 658

+3a5f 9 46 658

+3a68 1b 47 658

+3a83 5 48 658

+3a88 1e 52 658

+FUNC 3aa8 81 0 realloc_crt

+3aa8 19 72 658

+3ac1 c 73 658

+3acd e 77 658

+3adb 12 78 658

+3aed 19 79 658

+3b06 5 80 658

+3b0b 1e 84 658

+FUNC 3b2c 8c 0 _addlocaleref

+3b2c 0 36 3702

+3b2c 3 39 3702

+3b2f c 41 3702

+3b3b 3 42 3702

+3b3e c 44 3702

+3b4a 3 45 3702

+3b4d c 47 3702

+3b59 3 48 3702

+3b5c c 50 3702

+3b68 3 51 3702

+3b6b a 53 3702

+3b75 15 55 3702

+3b8a 3 56 3702

+3b8d 10 59 3702

+3b9d 3 60 3702

+3ba0 9 53 3702

+3ba9 e 63 3702

+3bb7 1 64 3702

+FUNC 3bb8 196 0 _freetlocinfo

+3bb8 14 129 3702

+3bcc 2c 137 3702

+3bf8 11 140 3702

+3c09 5 142 3702

+3c0e c 143 3702

+3c1a 11 147 3702

+3c2b 5 149 3702

+3c30 c 150 3702

+3c3c c 153 3702

+3c48 c 154 3702

+3c54 11 161 3702

+3c65 13 163 3702

+3c78 14 164 3702

+3c8c f 165 3702

+3c9b c 166 3702

+3ca7 1c 173 3702

+3cc3 5 175 3702

+3cc8 c 176 3702

+3cd4 10 179 3702

+3ce4 1a 182 3702

+3cfe 5 184 3702

+3d03 8 185 3702

+3d0b 15 193 3702

+3d20 5 195 3702

+3d25 d 179 3702

+3d32 3 202 3702

+3d35 14 203 3702

+3d49 5 202 3702

+FUNC 3d50 a4 0 _removelocaleref

+3d50 0 74 3702

+3d50 9 77 3702

+3d59 8 79 3702

+3d61 c 81 3702

+3d6d 4 82 3702

+3d71 c 84 3702

+3d7d 4 85 3702

+3d81 c 87 3702

+3d8d 4 88 3702

+3d91 c 90 3702

+3d9d 4 91 3702

+3da1 a 93 3702

+3dab 15 95 3702

+3dc0 4 96 3702

+3dc4 10 99 3702

+3dd4 4 100 3702

+3dd8 9 93 3702

+3de1 f 103 3702

+3df0 3 106 3702

+3df3 1 107 3702

+FUNC 3df4 75 0 _updatetlocinfo

+3df4 6 282 3702

+3dfa 8 284 3702

+3e02 18 286 3702

+3e1a e 298 3702

+3e28 b 287 3702

+3e33 16 291 3702

+3e49 a 295 3702

+3e53 5 301 3702

+3e58 8 303 3702

+3e60 3 306 3702

+3e63 6 307 3702

+FUNC 3e6c 62 0 updatetlocinfoEx_nolock

+3e6c d 217 3702

+3e79 a 220 3702

+3e83 3 223 3702

+3e86 5 224 3702

+3e8b 3 230 3702

+3e8e 8 231 3702

+3e96 5 237 3702

+3e9b 8 239 3702

+3ea3 11 249 3702

+3eb4 8 250 3702

+3ebc 5 254 3702

+3ec1 2 221 3702

+3ec3 b 255 3702

+FUNC 3ed0 28 0 _initmbctable

+3ed0 4 854 8253

+3ed4 9 864 8253

+3edd a 865 8253

+3ee7 a 866 8253

+3ef1 2 871 8253

+3ef3 5 872 8253

+FUNC 3ef8 a8 0 _LocaleUpdate::_LocaleUpdate(localeinfo_struct *)

+3ef8 d 245 208

+3f05 9 246 208

+3f0e 9 248 208

+3f17 a 249 208

+3f21 b 250 208

+3f2c 1f 252 208

+3f4b 28 253 208

+3f73 e 254 208

+3f81 9 256 208

+3f8a 4 257 208

+3f8e 2 260 208

+3f90 7 262 208

+3f97 9 264 208

+FUNC 3fa0 7d 0 getSystemCP

+3fa0 8 295 8253

+3fa8 c 297 8253

+3fb4 7 298 8253

+3fbb 5 303 8253

+3fc0 a 305 8253

+3fca 8 306 8253

+3fd2 5 309 8253

+3fd7 a 311 8253

+3fe1 a 312 8253

+3feb 5 317 8253

+3ff0 12 320 8253

+4002 15 323 8253

+4017 6 324 8253

+FUNC 4020 8e 0 setSBCS

+4020 14 374 8253

+4034 7 378 8253

+403b 12 379 8253

+404d a 382 8253

+4057 7 387 8253

+405e b 390 8253

+4069 a 392 8253

+4073 d 393 8253

+4080 c 395 8253

+408c d 396 8253

+4099 15 397 8253

+FUNC 40b0 1e1 0 setSBUpLow

+40b0 2e 413 8253

+40de e 423 8253

+40ec 14 426 8253

+4100 b 427 8253

+410b 10 431 8253

+411b e 433 8253

+4129 9 434 8253

+4132 5 433 8253

+4137 a 431 8253

+4141 2c 439 8253

+416d 33 444 8253

+41a0 39 449 8253

+41d9 1c 458 8253

+41f5 5 455 8253

+41fa 3 457 8253

+41fd 7 458 8253

+4204 5 460 8253

+4209 3 462 8253

+420c b 463 8253

+4217 2 465 8253

+4219 7 466 8253

+4220 c 454 8253

+422c 2 468 8253

+422e 6 472 8253

+4234 d 473 8253

+4241 3 475 8253

+4244 5 476 8253

+4249 6 478 8253

+424f 3 480 8253

+4252 9 481 8253

+425b 2 483 8253

+425d 7 484 8253

+4264 9 472 8253

+426d 24 486 8253

+FUNC 4294 ba 0 _updatetmbcinfo

+4294 a 507 8253

+429e 8 510 8253

+42a6 18 511 8253

+42be 9 545 8253

+42c7 b 513 8253

+42d2 15 516 8253

+42e7 1b 522 8253

+4302 5 527 8253

+4307 1a 534 8253

+4321 8 535 8253

+4329 a 540 8253

+4333 5 548 8253

+4338 8 550 8253

+4340 3 553 8253

+4343 b 554 8253

+FUNC 4350 244 0 setmbcp

+4350 1b 585 8253

+436b 4 586 8253

+436f 8 590 8253

+4377 5 592 8253

+437c 7 593 8253

+4383 a 595 8253

+438d 9 597 8253

+4396 d 603 8253

+43a3 b 605 8253

+43ae 70 607 8253

+441e 2 618 8253

+4420 16 623 8253

+4436 1f 625 8253

+4455 c 626 8253

+4461 3 631 8253

+4464 1a 633 8253

+447e d 635 8253

+448b 9 641 8253

+4494 9 642 8253

+449d e 643 8253

+44ab 12 644 8253

+44bd 11 645 8253

+44ce 4 644 8253

+44d2 e 646 8253

+44e0 f 647 8253

+44ef 4 646 8253

+44f3 c 648 8253

+44ff 12 649 8253

+4511 4 648 8253

+4515 1e 651 8253

+4533 5 652 8253

+4538 7 656 8253

+453f 3 657 8253

+4542 9 661 8253

+454b 5 665 8253

+4550 c 671 8253

+455c 8 672 8253

+4564 b 673 8253

+456f 2 679 8253

+4571 5 684 8253

+4576 3 693 8253

+4579 1b 694 8253

+FUNC 4594 2ae 0 setmbcp_nolock

+4594 28 697 8253

+45bc 5 704 8253

+45c1 8 707 8253

+45c9 8 709 8253

+45d1 5 710 8253

+45d6 12 714 8253

+45e8 8 719 8253

+45f0 1b 716 8253

+460b 11 754 8253

+461c 15 762 8253

+4631 4 766 8253

+4635 d 767 8253

+4642 3 769 8253

+4645 7 770 8253

+464c b 772 8253

+4657 12 775 8253

+4669 1f 777 8253

+4688 b 778 8253

+4693 9 775 8253

+469c 9 782 8253

+46a5 b 783 8253

+46b0 47 786 8253

+46f7 4 789 8253

+46fb 2 791 8253

+46fd 3 793 8253

+4700 4 795 8253

+4704 b 796 8253

+470f 5 800 8253

+4714 c 805 8253

+4720 8 812 8253

+4728 4 722 8253

+472c d 723 8253

+4739 1e 726 8253

+4757 3 729 8253

+475a b 731 8253

+4765 1a 734 8253

+477f 17 735 8253

+4796 9 731 8253

+479f c 726 8253

+47ab 3 739 8253

+47ae 4 741 8253

+47b2 38 742 8253

+47ea 17 743 8253

+4801 11 744 8253

+4812 8 747 8253

+481a 2 748 8253

+481c 26 813 8253

+FUNC 4850 44 0 FindPESection

+4850 0 86 3978

+4850 4 93 3978

+4854 1f 102 3978

+4873 12 105 3978

+4885 c 102 3978

+4891 2 117 3978

+4893 1 118 3978

+FUNC 48a0 4d 0 IsNonwritableInCurrentImage

+48a0 d 143 3978

+48ad 13 158 3978

+48c0 3 168 3978

+48c3 b 169 3978

+48ce 5 170 3978

+48d3 d 179 3978

+48e0 2 187 3978

+48e2 b 189 3978

+FUNC 48f0 2e 0 ValidateImageBase

+48f0 3 38 3978

+48f3 a 44 3978

+48fd 2 46 3978

+48ff 1 62 3978

+4900 7 49 3978

+4907 a 52 3978

+4911 c 56 3978

+491d 1 62 3978

+FUNC 4920 43 0 _onexitinit

+4920 6 201 3795

+4926 d 204 3795

+4933 1a 205 3795

+494d 5 207 3795

+4952 5 212 3795

+4957 4 214 3795

+495b 2 216 3795

+495d 6 217 3795

+FUNC 4964 10a 0 onexit

+4964 1c 81 3795

+4980 6 84 3795

+4986 c6 87 3795

+4a4c 5 90 3795

+4a51 3 93 3795

+4a54 1a 94 3795

+FUNC 4a70 17 0 atexit

+4a70 4 161 3795

+4a74 e 162 3795

+4a82 5 163 3795

+FUNC 4a88 39 0 initp_misc_cfltcvt_tab

+4a88 a 54 5002

+4a92 9 56 5002

+4a9b 1b 58 5002

+4ab6 b 60 5002

+FUNC 4ac4 33 0 callnewh

+4ac4 9 131 6647

+4acd d 133 6647

+4ada e 135 6647

+4ae8 7 138 6647

+4aef 2 136 6647

+4af1 6 139 6647

+FUNC 4af8 8 0 initp_heap_handler

+4af8 0 31 6647

+4af8 7 32 6647

+4aff 1 33 6647

+FUNC 4b00 8 0 initp_misc_purevirt

+4b00 0 179 3233

+4b00 7 180 3233

+4b07 1 181 3233

+FUNC 4b08 e 0 _get_sigabrt

+4b08 0 670 4150

+4b08 e 671 4150

+FUNC 4b18 1d 0 initp_misc_winsig

+4b18 0 57 4150

+4b18 7 58 4150

+4b1f 7 59 4150

+4b26 7 60 4150

+4b2d 7 61 4150

+4b34 1 62 4150

+FUNC 4b38 233 0 raise

+4b38 19 451 4150

+4b51 3 454 4150

+4b54 5 455 4150

+4b59 6 458 4150

+4b5f 2 459 4150

+4b61 2d 461 4150

+4b8e 12 499 4150

+4ba0 e 469 4150

+4bae 5 471 4150

+4bb3 e 480 4150

+4bc1 2 482 4150

+4bc3 e 475 4150

+4bd1 2 477 4150

+4bd3 8 487 4150

+4bdb 5 488 4150

+4be0 8 489 4150

+4be8 46 491 4150

+4c2e 2 492 4150

+4c30 e 464 4150

+4c3e 9 465 4150

+4c47 9 501 4150

+4c50 6 508 4150

+4c56 7 509 4150

+4c5d 5 514 4150

+4c62 a 519 4150

+4c6c 4 526 4150

+4c70 19 527 4150

+4c89 c 541 4150

+4c95 8 542 4150

+4c9d 5 548 4150

+4ca2 a 549 4150

+4cac a 550 4150

+4cb6 5 558 4150

+4cbb 18 565 4150

+4cd3 13 568 4150

+4ce6 e 565 4150

+4cf4 b 571 4150

+4cff 4 575 4150

+4d03 7 576 4150

+4d0a 5 579 4150

+4d0f b 585 4150

+4d1a 2 586 4150

+4d1c 18 587 4150

+4d34 7 595 4150

+4d3b 9 600 4150

+4d44 a 601 4150

+4d4e 5 604 4150

+4d53 18 605 4150

+FUNC 4d6c 8 0 initp_misc_rand_s

+4d6c 0 52 4628

+4d6c 7 53 4628

+4d73 1 54 4628

+FUNC 4d74 98 0 _initstdio

+4d74 a 109 5182

+4d7e 11 118 5182

+4d8f 7 119 5182

+4d96 5 120 5182

+4d9b 1f 130 5182

+4dba 1d 133 5182

+4dd7 7 134 5182

+4dde 7 141 5182

+4de5 11 142 5182

+4df6 9 141 5182

+4dff 2 144 5182

+4e01 b 145 5182

+FUNC 4e0c 30 0 _endstdio

+4e0c 4 173 5182

+4e10 5 175 5182

+4e15 9 178 5182

+4e1e 5 179 5182

+4e23 c 180 5182

+4e2f 8 181 5182

+4e37 5 182 5182

+FUNC 4e3c 65 0 lock_file

+4e3c 9 203 5182

+4e45 18 208 5182

+4e5d 29 213 5182

+4e86 5 215 5182

+4e8b 6 224 5182

+4e91 4 223 5182

+4e95 5 224 5182

+4e9a 7 223 5182

+FUNC 4ea4 31 0 lock_file2

+4ea4 9 246 5182

+4ead 5 251 5182

+4eb2 8 256 5182

+4eba 5 258 5182

+4ebf 6 267 5182

+4ec5 4 266 5182

+4ec9 5 267 5182

+4ece 7 266 5182

+FUNC 4ed8 4e 0 unlock_file

+4ed8 0 288 5182

+4ed8 18 293 5182

+4ef0 5 299 5182

+4ef5 26 300 5182

+4f1b b 308 5182

+FUNC 4f28 1d 0 unlock_file2

+4f28 0 331 5182

+4f28 5 336 5182

+4f2d 5 342 5182

+4f32 8 343 5182

+4f3a b 351 5182

+FUNC 4f48 79 0 x_ismbbtype_l

+4f48 11 223 8159

+4f59 13 224 8159

+4f6c 45 232 8159

+4fb1 10 233 8159

+FUNC 4fc4 12 0 ismbblead

+4fc4 0 181 8159

+4fc4 12 182 8159

+FUNC 4fd8 85 0 wcscat_s

+4fd8 6 13 6351

+4fde 10 18 6351

+4fee 9 19 6351

+4ff7 13 18 6351

+500a 6 46 6351

+5010 6 23 6351

+5016 4 25 6351

+501a 5 26 6351

+501f 5 29 6351

+5024 6 31 6351

+502a 1a 35 6351

+5044 5 39 6351

+5049 4 41 6351

+504d c 42 6351

+5059 4 45 6351

+FUNC 5060 6b 0 wcscpy_s

+5060 6 13 6169

+5066 d 18 6169

+5073 9 19 6169

+507c 13 18 6169

+508f 6 34 6169

+5095 1d 23 6169

+50b2 5 27 6169

+50b7 4 29 6169

+50bb c 30 6169

+50c7 4 33 6169

+FUNC 50cc 19 0 wcslen

+50cc 0 41 6501

+50cc 3 42 6501

+50cf c 44 6501

+50db 9 46 6501

+50e4 1 47 6501

+FUNC 50e8 cc 0 wcsncpy_s

+50e8 6 13 6260

+50ee 11 17 6260

+50ff 4 20 6260

+5103 a 24 6260

+510d 5 25 6260

+5112 3 28 6260

+5115 2 29 6260

+5117 8 31 6260

+511f 13 24 6260

+5132 6 66 6260

+5138 3 33 6260

+513b 3 34 6260

+513e 6 35 6260

+5144 1a 37 6260

+515e 2 41 6260

+5160 1f 45 6260

+517f 5 48 6260

+5184 4 50 6260

+5188 9 54 6260

+5191 6 56 6260

+5197 5 58 6260

+519c 6 59 6260

+51a2 3 61 6260

+51a5 f 62 6260

+FUNC 51b4 273 0 _crtMessageBoxW

+51b4 21 91 4913

+51d5 e 99 4913

+51e3 5 106 4913

+51e8 5 108 4913

+51ed 10 115 4913

+51fd 18 117 4913

+5215 14 118 4913

+5229 15 122 4913

+523e 9 124 4913

+5247 19 127 4913

+5260 9 130 4913

+5269 20 133 4913

+5289 20 136 4913

+52a9 17 138 4913

+52c0 10 139 4913

+52d0 5 141 4913

+52d5 20 143 4913

+52f5 a 147 4913

+52ff 5 152 4913

+5304 9 153 4913

+530d 5 159 4913

+5312 a 161 4913

+531c 5 166 4913

+5321 d 168 4913

+532e a 181 4913

+5338 15 202 4913

+534d 6 205 4913

+5353 13 206 4913

+5366 a 208 4913

+5370 31 213 4913

+53a1 4 222 4913

+53a5 2 224 4913

+53a7 c 226 4913

+53b3 6 228 4913

+53b9 5 229 4913

+53be 5 231 4913

+53c3 11 235 4913

+53d4 6 237 4913

+53da 5 238 4913

+53df 8 240 4913

+53e7 d 247 4913

+53f4 5 248 4913

+53f9 10 250 4913

+5409 2 255 4913

+540b 1c 258 4913

+FUNC 5428 1d 0 _GSHandlerCheck

+5428 4 75 37

+542c f 84 37

+543b 5 91 37

+5440 5 92 37

+FUNC 5448 63 0 _GSHandlerCheckCommon

+5448 6 126 37

+544e d 140 37

+545b 9 149 37

+5464 13 154 37

+5477 7 162 37

+547e b 171 37

+5489 6 173 37

+548f c 175 37

+549b 3 184 37

+549e 3 185 37

+54a1 5 186 37

+54a6 5 185 37

+FUNC 54c0 1f 0 _security_check_cookie

+54c0 0 45 2

+54c0 7 47 2

+54c7 2 48 2

+54c9 4 49 2

+54cd 5 50 2

+54d2 3 51 2

+54d5 1 53 2

+54d6 4 61 2

+54da 5 65 2

+FUNC 54e0 8 0 _crt_debugger_hook

+54e0 0 57 2495

+54e0 7 60 2495

+54e7 1 61 2495

+FUNC 5500 22a 0 memset

+5500 0 55 6812

+5500 3 59 6812

+5503 3 60 6812

+5506 4 61 6812

+550a 6 62 6812

+5510 8 67 6812

+5518 2 68 6812

+551a 1 71 6812

+551b 3 72 6812

+551e 2 73 6812

+5520 3 74 6812

+5523 2 75 6812

+5525 1 76 6812

+5526 2 77 6812

+5528 a 79 6812

+5532 4 80 6812

+5536 8 82 6812

+553e 6 83 6812

+5544 4 87 6812

+5548 2 88 6812

+554a 3 93 6812

+554d 3 94 6812

+5550 2 95 6812

+5552 3 96 6812

+5555 3 97 6812

+5558 3 98 6812

+555b 3 104 6812

+555e 4 105 6812

+5562 4 106 6812

+5566 2 107 6812

+5568 3 113 6812

+556b 4 114 6812

+556f 4 115 6812

+5573 7 116 6812

+557a 3 120 6812

+557d 4 121 6812

+5581 3 122 6812

+5584 2 123 6812

+5586 3 129 6812

+5589 2 130 6812

+558b 2 131 6812

+558d 3 132 6812

+5590 3 133 6812

+5593 2 134 6812

+5595 3 135 6812

+5598 f 136 6812

+55a7 3 147 6812

+55aa 4 148 6812

+55ae 4 149 6812

+55b2 4 150 6812

+55b6 4 151 6812

+55ba 4 152 6812

+55be 3 153 6812

+55c1 4 154 6812

+55c5 4 155 6812

+55c9 4 156 6812

+55cd 2 157 6812

+55cf 11 158 6812

+55e0 5 170 6812

+55e5 4 171 6812

+55e9 3 172 6812

+55ec 2 173 6812

+55ee 3 183 6812

+55f1 3 184 6812

+55f4 4 185 6812

+55f8 4 186 6812

+55fc 3 187 6812

+55ff 5 188 6812

+5604 3 194 6812

+5607 4 195 6812

+560b 2 196 6812

+560d 3 197 6812

+5610 3 204 6812

+5613 4 205 6812

+5617 7 206 6812

+561e 4 207 6812

+5622 4 208 6812

+5626 3 209 6812

+5629 4 210 6812

+562d 4 211 6812

+5631 4 212 6812

+5635 4 213 6812

+5639 2 214 6812

+563b 4 216 6812

+563f 3 221 6812

+5642 4 222 6812

+5646 a 223 6812

+5650 3 236 6812

+5653 4 237 6812

+5657 3 238 6812

+565a 2 239 6812

+565c 4 242 6812

+5660 2 243 6812

+5662 6 248 6812

+5668 3 251 6812

+566b 1 252 6812

+566c a 263 6812

+5676 4 264 6812

+567a 7 265 6812

+5681 8 266 6812

+5689 3 267 6812

+568c 3 268 6812

+568f 3 269 6812

+5692 4e 270 6812

+56e0 4 296 6812

+56e4 3 299 6812

+56e7 4 302 6812

+56eb 3 305 6812

+56ee 1 307 6812

+56ef 4 309 6812

+56f3 2 310 6812

+56f5 4 312 6812

+56f9 3 315 6812

+56fc 4 318 6812

+5700 1 319 6812

+5701 4 321 6812

+5705 3 324 6812

+5708 3 325 6812

+570b 1 326 6812

+570c 4 328 6812

+5710 3 331 6812

+5713 1 332 6812

+5714 4 334 6812

+5718 4 335 6812

+571c 1 336 6812

+571d 4 338 6812

+5721 3 339 6812

+5724 1 340 6812

+5725 4 342 6812

+5729 1 343 6812

+FUNC 572c 55 0 abort

+572c 4 55 2325

+5730 5 72 2325

+5735 5 73 2325

+573a a 75 2325

+5744 9 82 2325

+574d e 87 2325

+575b 7 88 2325

+5762 14 90 2325

+5776 b 100 2325

+FUNC 5784 d3 0 realloc

+5784 15 62 1111

+5799 5 67 1111

+579e a 68 1111

+57a8 5 71 1111

+57ad 5 73 1111

+57b2 2 74 1111

+57b4 6 81 1111

+57ba 24 85 1111

+57de d 94 1111

+57eb c 109 1111

+57f7 6 81 1111

+57fd 8 89 1111

+5805 b 90 1111

+5810 2 91 1111

+5812 10 117 1111

+5822 17 111 1111

+5839 2 112 1111

+583b 17 103 1111

+5852 5 105 1111

+FUNC 5858 9a 0 calloc_impl

+5858 10 21 566

+5868 5 26 566

+586d 1d 28 566

+588a 4 30 566

+588e c 34 566

+589a 2 39 566

+589c 6 41 566

+58a2 13 44 566

+58b5 e 47 566

+58c3 c 59 566

+58cf 5 61 566

+58d4 6 62 566

+58da 2 63 566

+58dc 5 52 566

+58e1 6 53 566

+58e7 b 69 566

+FUNC 58f4 10a 0 _free_lconv_mon

+58f4 0 270 3335

+58f4 e 271 3335

+5902 3 270 3335

+5905 d 274 3335

+5912 5 275 3335

+5917 d 277 3335

+5924 5 278 3335

+5929 d 280 3335

+5936 5 281 3335

+593b d 283 3335

+5948 5 284 3335

+594d d 286 3335

+595a 5 287 3335

+595f d 289 3335

+596c 5 290 3335

+5971 d 292 3335

+597e 5 293 3335

+5983 d 295 3335

+5990 5 296 3335

+5995 d 298 3335

+59a2 5 299 3335

+59a7 d 301 3335

+59b4 5 302 3335

+59b9 10 304 3335

+59c9 5 305 3335

+59ce 10 307 3335

+59de 5 308 3335

+59e3 10 310 3335

+59f3 5 311 3335

+59f8 6 312 3335

+FUNC 5a00 6c 0 _free_lconv_num

+5a00 0 217 3420

+5a00 a 218 3420

+5a0a 3 217 3420

+5a0d c 221 3420

+5a19 5 222 3420

+5a1e d 224 3420

+5a2b 5 225 3420

+5a30 d 227 3420

+5a3d 5 228 3420

+5a42 d 230 3420

+5a4f 5 231 3420

+5a54 d 233 3420

+5a61 5 234 3420

+5a66 6 235 3420

+FUNC 5a6c 3fa 0 _free_lc_time

+5a6c 0 230 3520

+5a6c e 231 3520

+5a7a 3 230 3520

+5a7d 9 234 3520

+5a86 9 235 3520

+5a8f 9 236 3520

+5a98 9 237 3520

+5aa1 9 238 3520

+5aaa 9 239 3520

+5ab3 8 240 3520

+5abb 9 242 3520

+5ac4 9 243 3520

+5acd 9 244 3520

+5ad6 9 245 3520

+5adf 9 246 3520

+5ae8 9 247 3520

+5af1 9 248 3520

+5afa 9 250 3520

+5b03 9 251 3520

+5b0c c 252 3520

+5b18 c 253 3520

+5b24 c 254 3520

+5b30 c 255 3520

+5b3c c 256 3520

+5b48 c 257 3520

+5b54 c 258 3520

+5b60 c 259 3520

+5b6c c 260 3520

+5b78 c 261 3520

+5b84 c 263 3520

+5b90 c 264 3520

+5b9c c 265 3520

+5ba8 c 266 3520

+5bb4 c 267 3520

+5bc0 c 268 3520

+5bcc c 269 3520

+5bd8 c 270 3520

+5be4 c 271 3520

+5bf0 c 272 3520

+5bfc c 273 3520

+5c08 c 274 3520

+5c14 c 276 3520

+5c20 c 277 3520

+5c2c c 279 3520

+5c38 c 280 3520

+5c44 c 281 3520

+5c50 c 284 3520

+5c5c c 285 3520

+5c68 c 286 3520

+5c74 c 287 3520

+5c80 c 288 3520

+5c8c c 289 3520

+5c98 c 290 3520

+5ca4 c 292 3520

+5cb0 c 293 3520

+5cbc c 294 3520

+5cc8 c 295 3520

+5cd4 c 296 3520

+5ce0 c 297 3520

+5cec c 298 3520

+5cf8 c 300 3520

+5d04 c 301 3520

+5d10 c 302 3520

+5d1c c 303 3520

+5d28 c 304 3520

+5d34 c 305 3520

+5d40 c 306 3520

+5d4c c 307 3520

+5d58 c 308 3520

+5d64 c 309 3520

+5d70 c 310 3520

+5d7c c 311 3520

+5d88 c 313 3520

+5d94 c 314 3520

+5da0 c 315 3520

+5dac c 316 3520

+5db8 c 317 3520

+5dc4 c 318 3520

+5dd0 c 319 3520

+5ddc c 320 3520

+5de8 c 321 3520

+5df4 c 322 3520

+5e00 c 323 3520

+5e0c c 324 3520

+5e18 c 326 3520

+5e24 c 327 3520

+5e30 c 329 3520

+5e3c c 330 3520

+5e48 c 331 3520

+5e54 c 333 3520

+5e60 6 336 3520

+FUNC 5e68 2ec 0 __crtLCMapStringA_stat

+5e68 2d 96 8449

+5e95 13 101 8449

+5ea8 21 102 8449

+5ec9 2 106 8449

+5ecb 5 107 8449

+5ed0 2 109 8449

+5ed2 b 133 8449

+5edd 7 134 8449

+5ee4 2c 145 8449

+5f10 7 146 8449

+5f17 7c 149 8449

+5f93 9 150 8449

+5f9c 26 160 8449

+5fc2 29 169 8449

+5feb b 172 8449

+5ff6 b 175 8449

+6001 8 177 8449

+6009 1e 186 8449

+6027 5 190 8449

+602c 7d 196 8449

+60a9 5 197 8449

+60ae 20 207 8449

+60ce 3 210 8449

+60d1 1f 220 8449

+60f0 2 223 8449

+60f2 18 233 8449

+610a 11 240 8449

+611b 11 242 8449

+612c 2 244 8449

+612e 26 245 8449

+FUNC 6154 96 0 _crtLCMapStringA

+6154 12 258 8449

+6166 13 259 8449

+6179 5f 271 8449

+61d8 12 272 8449

+FUNC 61ec 176 0 __crtGetStringTypeA_stat

+61ec 2d 60 8545

+6219 14 80 8545

+622d 7 81 8545

+6234 23 92 8545

+6257 7 93 8545

+625e 7c 96 8545

+62da 9 97 8545

+62e3 10 100 8545

+62f3 21 108 8545

+6314 15 113 8545

+6329 11 115 8545

+633a 2 117 8545

+633c 26 118 8545

+FUNC 6364 7c 0 _crtGetStringTypeA

+6364 11 129 8545

+6375 13 130 8545

+6388 48 140 8545

+63d0 10 141 8545

+FUNC 63e0 39 0 msize

+63e0 4 39 1027

+63e4 19 43 1027

+63fd 5 50 1027

+6402 c 46 1027

+640e 4 50 1027

+6412 7 46 1027

+FUNC 641c a 0 fptrap

+641c 0 46 9698

+641c a 47 9698

+FUNC 6428 8a 0 GetTableIndexFromLocaleName

+6428 1c 52 4248

+6444 2 54 4248

+6446 c 55 4248

+6452 3 59 4248

+6455 20 60 4248

+6475 4 62 4248

+6479 2 65 4248

+647b 3 66 4248

+647e 2 67 4248

+6480 3 68 4248

+6483 4 57 4248

+6487 5 71 4248

+648c b 63 4248

+6497 1b 72 4248

+FUNC 64b4 32 0 _crtDownlevelLocaleNameToLCID

+64b4 4 107 4248

+64b8 5 110 4248

+64bd 5 113 4248

+64c2 e 115 4248

+64d0 f 118 4248

+64df 2 116 4248

+64e1 5 119 4248

+FUNC 64e8 8f 0 _crtLCMapStringEx

+64e8 10 325 4248

+64f8 18 327 4248

+6510 2a 329 4248

+653a 2d 333 4248

+6567 10 334 4248

+FUNC 6578 55 0 _wcsnicmp_ascii

+6578 0 28 4248

+6578 9 30 4248

+6581 5 32 4248

+6586 3 40 4248

+6589 12 36 4248

+659b 11 37 4248

+65ac 4 39 4248

+65b0 f 40 4248

+65bf a 42 4248

+65c9 3 45 4248

+65cc 1 46 4248

+FUNC 65e0 565 0 memcpy

+65e0 0 101 6808

+65e0 3 107 6808

+65e3 3 108 6808

+65e6 4 109 6808

+65ea 6 110 6808

+65f0 3 111 6808

+65f3 2 112 6808

+65f5 3 113 6808

+65f8 3 114 6808

+65fb 3 115 6808

+65fe 6 116 6808

+6604 8 119 6808

+660c 2 120 6808

+660e 1 123 6808

+660f 1 124 6808

+6610 3 125 6808

+6613 3 126 6808

+6616 3 127 6808

+6619 2 128 6808

+661b 1 129 6808

+661c 1 130 6808

+661d 3 131 6808

+6620 1 132 6808

+6621 8 135 6808

+6629 6 136 6808

+662f 3 142 6808

+6632 2 143 6808

+6634 3 144 6808

+6637 2 145 6808

+6639 3 146 6808

+663c 3 147 6808

+663f 2 148 6808

+6641 3 149 6808

+6644 3 150 6808

+6647 2 151 6808

+6649 4 152 6808

+664d 4 153 6808

+6651 3 154 6808

+6654 4 155 6808

+6658 3 156 6808

+665b 2 157 6808

+665d 3 158 6808

+6660 4 159 6808

+6664 2 160 6808

+6666 4 161 6808

+666a 3 167 6808

+666d 4 168 6808

+6671 6 169 6808

+6677 3 175 6808

+667a 4 176 6808

+667e 2 177 6808

+6680 4 178 6808

+6684 3 179 6808

+6687 4 180 6808

+668b 3 181 6808

+668e 2 182 6808

+6690 4 183 6808

+6694 3 189 6808

+6697 2 190 6808

+6699 3 191 6808

+669c 4 192 6808

+66a0 4 200 6808

+66a4 3 201 6808

+66a7 2 202 6808

+66a9 3 205 6808

+66ac 7 207 6808

+66b3 8 208 6808

+66bb 3 209 6808

+66be 46 210 6808

+6704 3 232 6808

+6707 1 233 6808

+6708 4 236 6808

+670c 3 237 6808

+670f 3 238 6808

+6712 1 239 6808

+6713 4 241 6808

+6717 4 242 6808

+671b 3 243 6808

+671e 1 244 6808

+671f 4 246 6808

+6723 5 247 6808

+6728 3 248 6808

+672b 5 249 6808

+6730 3 250 6808

+6733 1 251 6808

+6734 2 253 6808

+6736 3 254 6808

+6739 3 255 6808

+673c 1 256 6808

+673d 4 258 6808

+6741 3 259 6808

+6744 3 260 6808

+6747 4 261 6808

+674b 3 262 6808

+674e 1 263 6808

+674f 4 265 6808

+6753 3 266 6808

+6756 4 267 6808

+675a 4 268 6808

+675e 3 269 6808

+6761 1 270 6808

+6762 4 272 6808

+6766 5 273 6808

+676b 3 274 6808

+676e 3 275 6808

+6771 5 276 6808

+6776 4 277 6808

+677a 3 278 6808

+677d 1 279 6808

+677e 3 281 6808

+6781 3 282 6808

+6784 3 283 6808

+6787 1 284 6808

+6788 4 286 6808

+678c 4 287 6808

+6790 3 288 6808

+6793 4 289 6808

+6797 3 290 6808

+679a 1 291 6808

+679b 4 293 6808

+679f 4 294 6808

+67a3 4 295 6808

+67a7 4 296 6808

+67ab 3 297 6808

+67ae 1 298 6808

+67af 4 300 6808

+67b3 5 301 6808

+67b8 4 302 6808

+67bc 3 303 6808

+67bf 5 304 6808

+67c4 4 305 6808

+67c8 3 306 6808

+67cb 1 307 6808

+67cc 2 309 6808

+67ce 4 310 6808

+67d2 3 311 6808

+67d5 4 312 6808

+67d9 3 313 6808

+67dc 1 314 6808

+67dd 4 316 6808

+67e1 3 317 6808

+67e4 4 318 6808

+67e8 3 319 6808

+67eb 4 320 6808

+67ef 4 321 6808

+67f3 3 322 6808

+67f6 1 323 6808

+67f7 4 325 6808

+67fb 3 326 6808

+67fe 4 327 6808

+6802 4 328 6808

+6806 4 329 6808

+680a 4 330 6808

+680e 3 331 6808

+6811 1 332 6808

+6812 4 334 6808

+6816 5 335 6808

+681b 3 336 6808

+681e 4 337 6808

+6822 3 338 6808

+6825 5 339 6808

+682a 4 340 6808

+682e 4 341 6808

+6832 3 342 6808

+6835 1 343 6808

+6836 4 345 6808

+683a 5 346 6808

+683f 3 347 6808

+6842 e 348 6808

+6850 4 356 6808

+6854 5 357 6808

+6859 4 358 6808

+685d 4 359 6808

+6861 4 360 6808

+6865 5 361 6808

+686a 5 362 6808

+686f 3 363 6808

+6872 4 364 6808

+6876 4 365 6808

+687a 2 366 6808

+687c 4 367 6808

+6880 5 368 6808

+6885 4 381 6808

+6889 6 382 6808

+688f 3 406 6808

+6892 2 407 6808

+6894 4 411 6808

+6898 4 412 6808

+689c 4 413 6808

+68a0 2 414 6808

+68a2 4 419 6808

+68a6 4 420 6808

+68aa 3 421 6808

+68ad 5 422 6808

+68b2 4 423 6808

+68b6 3 424 6808

+68b9 3 425 6808

+68bc 3 426 6808

+68bf 3 431 6808

+68c2 4 432 6808

+68c6 2 433 6808

+68c8 4 434 6808

+68cc 4 435 6808

+68d0 4 452 6808

+68d4 4 453 6808

+68d8 4 455 6808

+68dc 5 456 6808

+68e1 7 457 6808

+68e8 4 458 6808

+68ec 4 459 6808

+68f0 5 460 6808

+68f5 5 461 6808

+68fa 3 462 6808

+68fd 4 463 6808

+6901 4 464 6808

+6905 5 465 6808

+690a 5 466 6808

+690f 4 467 6808

+6913 4 468 6808

+6917 5 469 6808

+691c 5 470 6808

+6921 2 471 6808

+6923 4 473 6808

+6927 4 474 6808

+692b 3 475 6808

+692e 3 480 6808

+6931 4 481 6808

+6935 b 482 6808

+6940 4 487 6808

+6944 4 489 6808

+6948 4 490 6808

+694c 3 491 6808

+694f 2 492 6808

+6951 4 495 6808

+6955 2 496 6808

+6957 4 505 6808

+695b 5 506 6808

+6960 4 507 6808

+6964 4 511 6808

+6968 3 512 6808

+696b 5 513 6808

+6970 4 538 6808

+6974 5 539 6808

+6979 4 540 6808

+697d 4 541 6808

+6981 3 542 6808

+6984 3 543 6808

+6987 13 544 6808

+699a 8 557 6808

+69a2 6 558 6808

+69a8 3 559 6808

+69ab 3 565 6808

+69ae 2 566 6808

+69b0 3 567 6808

+69b3 2 568 6808

+69b5 3 569 6808

+69b8 3 570 6808

+69bb 3 571 6808

+69be 2 572 6808

+69c0 3 573 6808

+69c3 2 574 6808

+69c5 4 575 6808

+69c9 4 576 6808

+69cd 4 577 6808

+69d1 3 578 6808

+69d4 3 579 6808

+69d7 2 580 6808

+69d9 4 581 6808

+69dd 3 582 6808

+69e0 4 583 6808

+69e4 2 584 6808

+69e6 3 590 6808

+69e9 4 591 6808

+69ed 2 592 6808

+69ef 3 598 6808

+69f2 4 599 6808

+69f6 2 600 6808

+69f8 4 601 6808

+69fc 4 602 6808

+6a00 3 603 6808

+6a03 3 604 6808

+6a06 2 605 6808

+6a08 4 606 6808

+6a0c 3 612 6808

+6a0f 2 613 6808

+6a11 3 614 6808

+6a14 c 615 6808

+6a20 3 623 6808

+6a23 3 624 6808

+6a26 4 625 6808

+6a2a 6 626 6808

+6a30 5 634 6808

+6a35 5 635 6808

+6a3a 4 636 6808

+6a3e 4 637 6808

+6a42 4 638 6808

+6a46 5 639 6808

+6a4b 4 640 6808

+6a4f 3 641 6808

+6a52 4 642 6808

+6a56 3 643 6808

+6a59 2 644 6808

+6a5b 4 645 6808

+6a5f 2 646 6808

+6a61 4 661 6808

+6a65 6 662 6808

+6a6b 3 663 6808

+6a6e 3 684 6808

+6a71 2 685 6808

+6a73 4 689 6808

+6a77 4 690 6808

+6a7b 4 691 6808

+6a7f 2 692 6808

+6a81 4 697 6808

+6a85 4 698 6808

+6a89 3 699 6808

+6a8c 3 700 6808

+6a8f 4 701 6808

+6a93 3 702 6808

+6a96 3 703 6808

+6a99 3 704 6808

+6a9c 3 710 6808

+6a9f 4 711 6808

+6aa3 2 712 6808

+6aa5 3 713 6808

+6aa8 8 714 6808

+6ab0 4 721 6808

+6ab4 3 722 6808

+6ab7 5 724 6808

+6abc 5 725 6808

+6ac1 7 726 6808

+6ac8 4 727 6808

+6acc 4 728 6808

+6ad0 5 729 6808

+6ad5 5 730 6808

+6ada 3 731 6808

+6add 4 732 6808

+6ae1 4 733 6808

+6ae5 5 734 6808

+6aea 5 735 6808

+6aef 4 736 6808

+6af3 4 737 6808

+6af7 5 738 6808

+6afc 4 739 6808

+6b00 2 740 6808

+6b02 4 742 6808

+6b06 4 743 6808

+6b0a 3 744 6808

+6b0d 3 749 6808

+6b10 4 750 6808

+6b14 c 751 6808

+6b20 3 756 6808

+6b23 4 758 6808

+6b27 4 759 6808

+6b2b 3 760 6808

+6b2e 2 761 6808

+6b30 4 764 6808

+6b34 2 765 6808

+6b36 4 775 6808

+6b3a 4 776 6808

+6b3e 3 779 6808

+6b41 3 780 6808

+6b44 1 781 6808

+FUNC 6b48 26 0 fileno

+6b48 4 40 5093

+6b4c 1a 41 5093

+6b66 3 42 5093

+6b69 5 43 5093

+FUNC 6b70 5f 0 isatty

+6b70 4 37 1677

+6b74 12 39 1677

+6b86 c 40 1677

+6b92 26 43 1677

+6bb8 12 40 1677

+6bca 5 44 1677

+FUNC 6bd0 4c 0 fflush_nolock

+6bd0 9 97 5660

+6bd9 5 101 5660

+6bde 5 116 5660

+6be3 5 102 5660

+6be8 9 104 5660

+6bf1 5 106 5660

+6bf6 9 111 5660

+6bff 15 112 5660

+6c14 2 115 5660

+6c16 6 116 5660

+FUNC 6c1c 79 0 flush

+6c1c f 142 5660

+6c2b 20 152 5660

+6c4b 17 154 5660

+6c62 7 158 5660

+6c69 6 159 5660

+6c6f 2 161 5660

+6c71 4 162 5660

+6c75 3 163 5660

+6c78 4 167 5660

+6c7c 4 168 5660

+6c80 2 170 5660

+6c82 13 171 5660

+FUNC 6c98 a 0 flushall

+6c98 0 193 5660

+6c98 a 194 5660

+FUNC 6ca4 e6 0 flsall

+6ca4 1c 228 5660

+6cc0 2 230 5660

+6cc2 2 231 5660

+6cc4 9 233 5660

+6ccd 12 235 5660

+6cdf 19 236 5660

+6cf8 8 243 5660

+6d00 11 251 5660

+6d11 6 252 5660

+6d17 a 258 5660

+6d21 6 262 5660

+6d27 2 264 5660

+6d29 b 265 5660

+6d34 10 271 5660

+6d44 12 277 5660

+6d56 7 235 5660

+6d5d a 283 5660

+6d67 9 286 5660

+6d70 1a 290 5660

+FUNC 6d8c a8 0 fcloseall

+6d8c f 43 5472

+6d9b 2 44 5472

+6d9d 9 47 5472

+6da6 f 49 5472

+6db5 13 50 5472

+6dc8 10 55 5472

+6dd8 6 56 5472

+6dde 5 61 5472

+6de3 15 62 5472

+6df8 10 63 5472

+6e08 c 64 5472

+6e14 4 49 5472

+6e18 a 70 5472

+6e22 2 73 5472

+6e24 10 74 5472

+FUNC 6e34 49 0 _raise_securityfailure

+6e34 9 64 2878

+6e3d 6 66 2878

+6e43 10 67 2878

+6e53 8 70 2878

+6e5b 9 79 2878

+6e64 a 81 2878

+6e6e 5 85 2878

+6e73 5 86 2878

+6e78 5 85 2878

+FUNC 6e80 d1 0 _report_gsfailure

+6e80 9 129 2878

+6e89 e 149 2878

+6e97 7 151 2878

+6e9e c 210 2878

+6eaa c 212 2878

+6eb6 10 213 2878

+6ec6 e 214 2878

+6ed4 c 215 2878

+6ee0 a 218 2878

+6eea a 219 2878

+6ef4 a 220 2878

+6efe 18 221 2878

+6f16 15 228 2878

+6f2b 15 229 2878

+6f40 c 236 2878

+6f4c 5 241 2878

+FUNC 6f54 1a4 0 _isa_available_init

+6f54 14 63 5837

+6f68 1f 75 5837

+6f87 23 81 5837

+6faa 3a 88 5837

+6fe4 40 100 5837

+7024 1b 102 5837

+703f 15 106 5837

+7054 b 109 5837

+705f 9 113 5837

+7068 11 114 5837

+7079 6 118 5837

+707f b 120 5837

+708a 7 127 5837

+7091 a 129 5837

+709b a 130 5837

+70a5 e 134 5837

+70b3 a 135 5837

+70bd a 136 5837

+70c7 6 139 5837

+70cd a 140 5837

+70d7 a 141 5837

+70e1 17 147 5837

+FUNC 70f8 47 0 locterm

+70f8 6 186 4530

+70fe 10 187 4530

+710e b 188 4530

+7119 16 191 4530

+712f a 195 4530

+7139 6 198 4530

+FUNC 7150 4e 0 _chkstk

+7150 0 67 9872

+7150 4 71 9872

+7154 4 83 9872

+7158 5 84 9872

+715d 3 86 9872

+7160 5 87 9872

+7165 3 88 9872

+7168 4 89 9872

+716c 9 97 9872

+7175 3 98 9872

+7178 2 99 9872

+717a 6 107 9872

+7180 7 108 9872

+7187 4 109 9872

+718b 3 110 9872

+718e 2 111 9872

+7190 4 112 9872

+7194 5 113 9872

+7199 4 114 9872

+719d 1 115 9872

+FUNC 71a0 d7 0 commit

+71a0 14 39 1490

+71b4 15 43 1490

+71c9 10 44 1490

+71d9 26 45 1490

+71ff 8 47 1490

+7207 b 49 1490

+7212 14 51 1490

+7226 8 52 1490

+722e 2 54 1490

+7230 2 55 1490

+7232 4 59 1490

+7236 7 62 1490

+723d b 66 1490

+7248 3 67 1490

+724b 7 73 1490

+7252 4 75 1490

+7256 13 44 1490

+7269 e 76 1490

+FUNC 7278 e1 0 write

+7278 1e 61 1964

+7296 1d 65 1964

+72b3 c 66 1964

+72bf 27 67 1964

+72e6 8 69 1964

+72ee c 72 1964

+72fa f 73 1964

+7309 2 74 1964

+730b b 75 1964

+7316 8 76 1964

+731e 3 77 1964

+7321 7 82 1964

+7328 4 85 1964

+732c 1b 66 1964

+7347 12 86 1964

+FUNC 735c 7f1 0 write_nolock

+735c 36 94 1964

+7392 11 95 1964

+73a3 3 96 1964

+73a6 3 98 1964

+73a9 5 105 1964

+73ae 7 106 1964

+73b5 25 108 1964

+73da 3a 110 1964

+7414 14 116 1964

+7428 8 119 1964

+7430 d 122 1964

+743d 2b 137 1964

+7468 5 140 1964

+746d 36 142 1964

+74a3 19 146 1964

+74bc 6 147 1964

+74c2 1e 154 1964

+74e0 3 155 1964

+74e3 9 157 1964

+74ec 2 158 1964

+74ee 29 170 1964

+7517 5 176 1964

+751c 8 177 1964

+7524 5 179 1964

+7529 b 181 1964

+7534 2 184 1964

+7536 c 185 1964

+7542 13 186 1964

+7555 1c 188 1964

+7571 3 194 1964

+7574 2 206 1964

+7576 1c 208 1964

+7592 43 233 1964

+75d5 3b 240 1964

+7610 b 248 1964

+761b b 249 1964

+7626 a 257 1964

+7630 40 264 1964

+7670 b 265 1964

+767b 4 267 1964

+767f 9 273 1964

+7688 10 293 1964

+7698 3 219 1964

+769b 12 220 1964

+76ad d 221 1964

+76ba f 277 1964

+76c9 3 279 1964

+76cc 5 286 1964

+76d1 5 289 1964

+76d6 16 290 1964

+76ec 2 292 1964

+76ee 9 293 1964

+76f7 11 154 1964

+7708 12 197 1964

+771a 2 203 1964

+771c 17 204 1964

+7733 8 270 1964

+773b 2 271 1964

+773d 16 252 1964

+7753 8 480 1964

+775b a 484 1964

+7765 9 486 1964

+776e b 489 1964

+7779 7 490 1964

+7780 13 492 1964

+7793 17 305 1964

+77aa 2 308 1964

+77ac 9 310 1964

+77b5 3 314 1964

+77b8 17 315 1964

+77cf a 316 1964

+77d9 b 320 1964

+77e4 7 321 1964

+77eb 4 322 1964

+77ef b 324 1964

+77fa 11 326 1964

+780b 46 334 1964

+7851 4 336 1964

+7855 18 337 1964

+786d 1b 315 1964

+7888 5 456 1964

+788d 4 345 1964

+7891 9 348 1964

+789a 17 351 1964

+78b1 a 352 1964

+78bb b 356 1964

+78c6 9 357 1964

+78cf 6 358 1964

+78d5 f 360 1964

+78e4 14 362 1964

+78f8 46 370 1964

+793e 4 372 1964

+7942 18 373 1964

+795a 1b 351 1964

+7975 5 456 1964

+797a 13 396 1964

+798d 7 398 1964

+7994 b 402 1964

+799f 9 403 1964

+79a8 6 404 1964

+79ae c 406 1964

+79ba 14 408 1964

+79ce 44 419 1964

+7a12 8 421 1964

+7a1a 42 443 1964

+7a5c 4 444 1964

+7a60 7 449 1964

+7a67 8 446 1964

+7a6f 9 456 1964

+7a78 15 460 1964

+7a8d 5 456 1964

+7a92 1f 471 1964

+7ab1 4 474 1964

+7ab5 7 476 1964

+7abc 1e 477 1964

+7ada 7 493 1964

+7ae1 a 494 1964

+7aeb 1d 496 1964

+7b08 b 499 1964

+7b13 7 500 1964

+7b1a 5 501 1964

+7b1f 4 506 1964

+7b23 2a 507 1964

+FUNC 7b50 7a 0 fclose_nolock

+7b50 a 85 5556

+7b5a 6 87 5556

+7b60 19 89 5556

+7b79 6 94 5556

+7b7f 5 103 5556

+7b84 a 104 5556

+7b8e 13 106 5556

+7ba1 5 107 5556

+7ba6 9 109 5556

+7baf 5 118 5556

+7bb4 5 119 5556

+7bb9 4 124 5556

+7bbd 2 125 5556

+7bbf b 126 5556

+FUNC 7bcc 66 0 fclose

+7bcc 12 43 5556

+7bde 3 44 5556

+7be1 20 46 5556

+7c01 6 49 5556

+7c07 4 50 5556

+7c0b 2 53 5556

+7c0d 6 54 5556

+7c13 a 56 5556

+7c1d 8 59 5556

+7c25 2 63 5556

+7c27 b 64 5556

+FUNC 7c34 db 0 isctype_l

+7c34 16 114 7216

+7c4a c 118 7216

+7c56 a 121 7216

+7c60 11 122 7216

+7c71 1b 124 7216

+7c8c 4 126 7216

+7c90 4 127 7216

+7c94 4 128 7216

+7c98 4 129 7216

+7c9c 2 130 7216

+7c9e 4 131 7216

+7ca2 4 132 7216

+7ca6 3 133 7216

+7ca9 29 143 7216

+7cd2 14 145 7216

+7ce6 18 148 7216

+7cfe 11 149 7216

+FUNC 7d10 cf 0 _crt_atoflt_l

+7d10 20 125 7081

+7d30 10 132 7081

+7d40 30 139 7081

+7d70 5 140 7081

+7d75 8 141 7081

+7d7d f 143 7081

+7d8c 9 144 7081

+7d95 5 145 7081

+7d9a 7 147 7081

+7da1 5 150 7081

+7da6 7 151 7081

+7dad 5 152 7081

+7db2 15 155 7081

+7dc7 18 156 7081

+FUNC 7de0 c7 0 atodbl_l

+7de0 22 40 7081

+7e02 d 47 7081

+7e0f 2e 55 7081

+7e3d 11 56 7081

+7e4e 9 57 7081

+7e57 5 58 7081

+7e5c 7 60 7081

+7e63 5 63 7081

+7e68 7 64 7081

+7e6f 5 65 7081

+7e74 15 68 7081

+7e89 1e 69 7081

+FUNC 7ea8 8 0 atoflt_l

+7ea8 0 163 7081

+7ea8 8 167 7081

+FUNC 7eb0 5 0 fpmath

+7eb0 0 56 10323

+7eb0 5 64 10323

+FUNC 7eb8 86 0 cfltcvt_init

+7eb8 0 82 10323

+7eb8 15 84 10323

+7ecd 15 85 10323

+7ee2 7 86 10323

+7ee9 1c 89 10323

+7f05 e 91 10323

+7f13 e 92 10323

+7f21 e 93 10323

+7f2f e 94 10323

+7f3d 1 95 10323

+FUNC 7f50 c7 0 memcmp

+7f50 0 56 6804

+7f50 3 60 6804

+7f53 4 61 6804

+7f57 2 62 6804

+7f59 3 63 6804

+7f5c 4 64 6804

+7f60 2 72 6804

+7f62 3 73 6804

+7f65 2 74 6804

+7f67 3 75 6804

+7f6a 3 76 6804

+7f6d 3 77 6804

+7f70 2 78 6804

+7f72 3 84 6804

+7f75 4 85 6804

+7f79 2 86 6804

+7f7b 3 92 6804

+7f7e 2 93 6804

+7f80 2 94 6804

+7f82 3 95 6804

+7f85 2 96 6804

+7f87 3 97 6804

+7f8a 3 98 6804

+7f8d 2 99 6804

+7f8f 3 106 6804

+7f92 1 107 6804

+7f93 2 114 6804

+7f95 3 115 6804

+7f98 2 116 6804

+7f9a 4 124 6804

+7f9e 2 125 6804

+7fa0 3 126 6804

+7fa3 4 127 6804

+7fa7 2 128 6804

+7fa9 4 129 6804

+7fad 5 130 6804

+7fb2 2 131 6804

+7fb4 4 132 6804

+7fb8 5 133 6804

+7fbd 2 134 6804

+7fbf 4 135 6804

+7fc3 5 136 6804

+7fc8 2 137 6804

+7fca 4 138 6804

+7fce 3 139 6804

+7fd1 2 140 6804

+7fd3 4 141 6804

+7fd7 3 147 6804

+7fda 4 148 6804

+7fde 2 149 6804

+7fe0 3 150 6804

+7fe3 4 151 6804

+7fe7 2 152 6804

+7fe9 4 153 6804

+7fed 3 154 6804

+7ff0 2 155 6804

+7ff2 4 156 6804

+7ff6 2 157 6804

+7ff8 4 164 6804

+7ffc 4 167 6804

+8000 4 170 6804

+8004 4 173 6804

+8008 3 174 6804

+800b 3 175 6804

+800e 3 176 6804

+8011 2 177 6804

+8013 3 178 6804

+8016 1 179 6804

+FUNC 8018 98 0 _lock_fhandle

+8018 15 436 1865

+802d 1c 437 1865

+8049 7 443 1865

+8050 b 445 1865

+805b 7 447 1865

+8062 14 448 1865

+8076 4 449 1865

+807a a 452 1865

+8084 11 458 1865

+8095 5 461 1865

+809a 16 462 1865

+FUNC 80b0 aa 0 free_osfhnd

+80b0 10 257 1865

+80c0 36 260 1865

+80f6 9 263 1865

+80ff c 264 1865

+810b 5 272 1865

+8110 2 273 1865

+8112 5 269 1865

+8117 2 270 1865

+8119 d 266 1865

+8126 9 277 1865

+812f 4 278 1865

+8133 b 280 1865

+813e 8 281 1865

+8146 3 282 1865

+8149 11 284 1865

+FUNC 815c 74 0 get_osfhandle

+815c 4 307 1865

+8160 1a 308 1865

+817a c 309 1865

+8186 23 310 1865

+81a9 6 312 1865

+81af 1c 309 1865

+81cb 5 313 1865

+FUNC 81d0 2a 0 unlock_fhandle

+81d0 0 483 1865

+81d0 2a 484 1865

+FUNC 81fc 43 0 isleadbyte_l

+81fc 8 55 6940

+8204 a 56 6940

+820e 2b 57 6940

+8239 6 58 6940

+FUNC 8240 45 0 isleadbyte

+8240 8 63 6940

+8248 37 64 6940

+827f 6 65 6940

+FUNC 8288 93 0 lseeki64_nolock

+8288 18 106 1769

+82a0 d 116 1769

+82ad b 118 1769

+82b8 6 120 1769

+82be 18 126 1769

+82d6 d 128 1769

+82e3 2 129 1769

+82e5 21 132 1769

+8306 5 133 1769

+830b 10 134 1769

+FUNC 831c 151 0 mbtowc_l

+831c 19 55 7310

+8335 16 56 7310

+834b 5 61 7310

+8350 5 64 7310

+8355 4 65 7310

+8359 2 59 7310

+835b 1b 116 7310

+8376 d 70 7310

+8383 e 73 7310

+8391 5 75 7310

+8396 10 76 7310

+83a6 d 80 7310

+83b3 49 90 7310

+83fc 12 93 7310

+840e 8 99 7310

+8416 2f 108 7310

+8445 5 110 7310

+844a 9 111 7310

+8453 1a 113 7310

+FUNC 8470 8 0 mbtowc

+8470 0 123 7310

+8470 8 124 7310

+FUNC 8478 59 0 putwch_nolock

+8478 9 84 2149

+8481 d 87 2149

+848e c 88 2149

+849a 6 90 2149

+84a0 7 91 2149

+84a7 20 99 2149

+84c7 5 104 2149

+84cc 5 105 2149

+FUNC 84d4 c3 0 close

+84d4 14 41 1396

+84e8 1d 45 1396

+8505 c 46 1396

+8511 26 47 1396

+8537 8 49 1396

+853f b 52 1396

+854a 9 53 1396

+8553 2 54 1396

+8555 b 55 1396

+8560 3 56 1396

+8563 7 61 1396

+856a 4 64 1396

+856e 1b 46 1396

+8589 e 65 1396

+FUNC 8598 ba 0 close_nolock

+8598 d 71 1396

+85a5 5c 92 1396

+8601 a 98 1396

+860b 2 95 1396

+860d 7 100 1396

+8614 21 102 1396

+8635 4 104 1396

+8639 7 106 1396

+8640 5 107 1396

+8645 2 110 1396

+8647 b 111 1396

+FUNC 8654 37 0 freebuf

+8654 6 45 5276

+865a f 48 5276

+8669 9 50 5276

+8672 7 52 5276

+8679 9 53 5276

+8682 3 54 5276

+8685 6 56 5276

+FUNC 8690 5b6 0 ld12tod

+8690 2d 598 10306

+86bd 33 599 10306

+86f0 4 598 10306

+86f4 528 599 10306

+8c1c 2a 600 10306

+FUNC 8c48 5b6 0 ld12tof

+8c48 2d 618 10306

+8c75 33 619 10306

+8ca8 4 618 10306

+8cac 528 619 10306

+91d4 2a 620 10306

+FUNC 9200 861 0 _strgtold12_l

+9200 2a 80 10127

+922a 51 126 10127

+927b 22 129 10127

+929d 6 132 10127

+92a3 3e 133 10127

+92e1 6 238 10127

+92e7 e 241 10127

+92f5 2 240 10127

+92f7 3 241 10127

+92fa 6 242 10127

+9300 6 241 10127

+9306 5 244 10127

+930b 6 245 10127

+9311 b 247 10127

+931c 3 248 10127

+931f 11 244 10127

+9330 1a 251 10127

+934a 5 256 10127

+934f 5 257 10127

+9354 3 260 10127

+9357 5 261 10127

+935c 5 267 10127

+9361 6 207 10127

+9367 c 208 10127

+9373 6 209 10127

+9379 b 211 10127

+9384 2 212 10127

+9386 3 213 10127

+9389 a 208 10127

+9393 11 216 10127

+93a4 5 217 10127

+93a9 5 218 10127

+93ae 7 190 10127

+93b5 5 191 10127

+93ba e 192 10127

+93c8 11 193 10127

+93d9 5 194 10127

+93de b 195 10127

+93e9 9 196 10127

+93f2 9 198 10127

+93fb 5 205 10127

+9400 10 162 10127

+9410 4 163 10127

+9414 2 164 10127

+9416 20 165 10127

+9436 5 168 10127

+943b 5 177 10127

+9440 b 135 10127

+944b 15 138 10127

+9460 f 141 10127

+946f 6 155 10127

+9475 8 265 10127

+947d 5 150 10127

+9482 7 151 10127

+9489 5 152 10127

+948e 5 146 10127

+9493 4 147 10127

+9497 5 159 10127

+949c 10 270 10127

+94ac 5 271 10127

+94b1 5 273 10127

+94b6 2a 133 10127

+94e0 5 345 10127

+94e5 4 346 10127

+94e9 e 347 10127

+94f7 9 350 10127

+9500 5 351 10127

+9505 5 353 10127

+950a 5 359 10127

+950f b 302 10127

+951a b 303 10127

+9525 c 304 10127

+9531 5 305 10127

+9536 5 307 10127

+953b 7 313 10127

+9542 5 314 10127

+9547 5 316 10127

+954c 9 317 10127

+9555 5 319 10127

+955a 5 326 10127

+955f b 280 10127

+956a a 284 10127

+9574 2 287 10127

+9576 5 293 10127

+957b a 131 10127

+9585 3 275 10127

+9588 2 277 10127

+958a 6 328 10127

+9590 d 331 10127

+959d 10 332 10127

+95ad 9 333 10127

+95b6 b 331 10127

+95c1 2 333 10127

+95c3 8 334 10127

+95cb 14 340 10127

+95df 5 343 10127

+95e4 9 297 10127

+95ed 7 367 10127

+95f4 9 373 10127

+95fd 6 374 10127

+9603 7 375 10127

+960a 6 380 10127

+9610 9 383 10127

+9619 3 384 10127

+961c 5 386 10127

+9621 3 424 10127

+9624 7 425 10127

+962b 5 429 10127

+9630 3 392 10127

+9633 3 393 10127

+9636 8 390 10127

+963e 10 395 10127

+964e 5 397 10127

+9653 3 398 10127

+9656 3 399 10127

+9659 5 402 10127

+965e 4 403 10127

+9662 5 405 10127

+9667 4 406 10127

+966b d 410 10127

+9678 d 412 10127

+9685 353 415 10127

+99d8 10 420 10127

+99e8 2 422 10127

+99ea 2 443 10127

+99ec 7 444 10127

+99f3 7 445 10127

+99fa 2 438 10127

+99fc 8 439 10127

+9a04 c 440 10127

+9a10 3 431 10127

+9a13 7 432 10127

+9a1a 5 433 10127

+9a1f 4 452 10127

+9a23 9 455 10127

+9a2c e 457 10127

+9a3a 27 458 10127

+FUNC 9a64 24 0 cfltcvt

+9a64 4 913 9904

+9a68 1b 914 9904

+9a83 5 915 9904

+FUNC 9a88 7e 0 cfltcvt_l

+9a88 13 897 9904

+9a9b 6 902 9904

+9aa1 1a 903 9904

+9abb 23 907 9904

+9ade 5 905 9904

+9ae3 2 906 9904

+9ae5 1c 901 9904

+9b01 5 910 9904

+FUNC 9b08 3b0 0 cftoa_l

+9b08 1f 415 9904

+9b27 2a 426 9904

+9b51 9 428 9904

+9b5a 11 432 9904

+9b6b 5 433 9904

+9b70 27 441 9904

+9b97 18 444 9904

+9baf 25 447 9904

+9bd4 3 448 9904

+9bd7 2 447 9904

+9bd9 4 448 9904

+9bdd 8 451 9904

+9be5 b 456 9904

+9bf0 6 458 9904

+9bf6 a 461 9904

+9c00 5 463 9904

+9c05 16 461 9904

+9c1b 5 463 9904

+9c20 c 464 9904

+9c2c c 466 9904

+9c38 9 472 9904

+9c41 14 478 9904

+9c55 6 480 9904

+9c5b b 485 9904

+9c66 3e 489 9904

+9ca4 3 491 9904

+9ca7 16 492 9904

+9cbd 2 503 9904

+9cbf 6 505 9904

+9cc5 6 509 9904

+9ccb 4 510 9904

+9ccf 3 515 9904

+9cd2 2 517 9904

+9cd4 14 519 9904

+9ce8 9 523 9904

+9cf1 a 528 9904

+9cfb 4 530 9904

+9cff f 532 9904

+9d0e 4 533 9904

+9d12 6 534 9904

+9d18 3 536 9904

+9d1b 2 538 9904

+9d1d 4 539 9904

+9d21 b 541 9904

+9d2c 5 545 9904

+9d31 f 547 9904

+9d40 6 548 9904

+9d46 c 551 9904

+9d52 6 557 9904

+9d58 2 558 9904

+9d5a 5 562 9904

+9d5f 6 564 9904

+9d65 5 566 9904

+9d6a 2 568 9904

+9d6c 5 570 9904

+9d71 2 573 9904

+9d73 3 576 9904

+9d76 3 578 9904

+9d79 1c 585 9904

+9d95 7 591 9904

+9d9c b 597 9904

+9da7 13 598 9904

+9dba 2 599 9904

+9dbc 6 601 9904

+9dc2 2 603 9904

+9dc4 6 605 9904

+9dca 3 606 9904

+9dcd 3 609 9904

+9dd0 3 610 9904

+9dd3 9 611 9904

+9ddc 24 612 9904

+9e00 a 613 9904

+9e0a b 615 9904

+9e15 27 616 9904

+9e3c 7 617 9904

+9e43 b 619 9904

+9e4e 24 620 9904

+9e72 7 621 9904

+9e79 5 623 9904

+9e7e 4 626 9904

+9e82 16 628 9904

+9e98 20 629 9904

+FUNC 9eb8 1f9 0 _cftoe2_l

+9eb8 20 242 9904

+9ed8 1a 246 9904

+9ef2 5 249 9904

+9ef7 11 250 9904

+9f08 27 258 9904

+9f2f 12 266 9904

+9f41 9 268 9904

+9f4a 2b 269 9904

+9f75 9 278 9904

+9f7e 7 279 9904

+9f85 4 285 9904

+9f89 5 286 9904

+9f8e 16 287 9904

+9fa4 6 292 9904

+9faa 33 293 9904

+9fdd 9 300 9904

+9fe6 3 301 9904

+9fe9 9 309 9904

+9ff2 9 315 9904

+9ffb 3 316 9904

+9ffe 4 317 9904

+a002 6 321 9904

+a008 15 322 9904

+a01d 6 323 9904

+a023 6 327 9904

+a029 15 328 9904

+a03e 6 329 9904

+a044 4 332 9904

+a048 9 335 9904

+a051 5 338 9904

+a056 f 340 9904

+a065 15 344 9904

+a07a 21 345 9904

+a09b 16 293 9904

+FUNC a0b4 f7 0 cftoe_l

+a0b4 1b 354 9904

+a0cf 23 362 9904

+a0f2 18 366 9904

+a10a 5 367 9904

+a10f 48 373 9904

+a157 4 374 9904

+a15b 3 376 9904

+a15e 2 377 9904

+a160 32 380 9904

+a192 19 383 9904

+FUNC a1ac 161 0 _cftof2_l

+a1ac 19 638 9904

+a1c5 7 640 9904

+a1cc 19 641 9904

+a1e5 5 644 9904

+a1ea 1b 645 9904

+a205 7 654 9904

+a20c 5 656 9904

+a211 6 655 9904

+a217 9 657 9904

+a220 6 658 9904

+a226 6 672 9904

+a22c 6 673 9904

+a232 6 679 9904

+a238 18 680 9904

+a250 6 681 9904

+a256 2 683 9904

+a258 7 684 9904

+a25f 5 688 9904

+a264 1b 689 9904

+a27f 13 690 9904

+a292 7 696 9904

+a299 9 698 9904

+a2a2 b 700 9904

+a2ad 1e 701 9904

+a2cb 10 702 9904

+a2db 15 706 9904

+a2f0 1d 707 9904

+FUNC a310 d1 0 cftof_l

+a310 18 736 9904

+a328 23 744 9904

+a34b 15 748 9904

+a360 5 749 9904

+a365 38 755 9904

+a39d 4 756 9904

+a3a1 3 758 9904

+a3a4 2 759 9904

+a3a6 25 762 9904

+a3cb 16 765 9904

+FUNC a3e4 134 0 cftog_l

+a3e4 1d 795 9904

+a401 23 810 9904

+a424 18 813 9904

+a43c 5 814 9904

+a441 5 817 9904

+a446 d 818 9904

+a453 23 820 9904

+a476 4 821 9904

+a47a 3 823 9904

+a47d 2 824 9904

+a47f c 826 9904

+a48b 9 835 9904

+a494 4 843 9904

+a498 9 845 9904

+a4a1 3 846 9904

+a4a4 27 849 9904

+a4cb 32 840 9904

+a4fd 1b 851 9904

+FUNC a518 7 0 cropzeros

+a518 0 139 9904

+a518 7 140 9904

+FUNC a520 96 0 cropzeros_l

+a520 9 144 9904

+a529 a 145 9904

+a533 1b 148 9904

+a54e 9 149 9904

+a557 9 151 9904

+a560 8 152 9904

+a568 3 153 9904

+a56b 6 152 9904

+a571 3 155 9904

+a574 8 158 9904

+a57c 10 160 9904

+a58c 3 161 9904

+a58f e 163 9904

+a59d 19 165 9904

+FUNC a5b8 8 0 fassign

+a5b8 0 214 9904

+a5b8 8 215 9904

+FUNC a5c0 40 0 fassign_l

+a5c0 c 175 9904

+a5cc 14 203 9904

+a5e0 8 204 9904

+a5e8 2 205 9904

+a5ea a 206 9904

+a5f4 6 207 9904

+a5fa 6 211 9904

+FUNC a600 7 0 forcdecpt

+a600 0 73 9904

+a600 7 74 9904

+FUNC a608 7f 0 forcdecpt_l

+a608 9 78 9904

+a611 a 79 9904

+a61b d 83 9904

+a628 3 87 9904

+a62b c 88 9904

+a637 d 92 9904

+a644 4 97 9904

+a648 18 102 9904

+a660 2 105 9904

+a662 2 106 9904

+a664 2 107 9904

+a666 9 108 9904

+a66f 18 109 9904

+FUNC a688 12 0 positive

+a688 0 169 9904

+a688 11 170 9904

+a699 1 171 9904

+FUNC a69c 20 0 _termconout

+a69c 15 83 2057

+a6b1 6 85 2057

+a6b7 5 87 2057

+FUNC a6bc 3b 0 _initconout

+a6bc 4 53 2057

+a6c0 32 60 2057

+a6f2 5 61 2057

+FUNC a6f8 222 0 _mtold12

+a6f8 18 34 10294

+a710 4 38 10294

+a714 5 39 10294

+a719 12 40 10294

+a72b 15 41 10294

+a740 9 42 10294

+a749 c 43 10294

+a755 5 42 10294

+a75a d 43 10294

+a767 3 44 10294

+a76a 3 43 10294

+a76d 13 44 10294

+a780 2 45 10294

+a782 3 44 10294

+a785 3 45 10294

+a788 3 41 10294

+a78b 3 45 10294

+a78e 8 41 10294

+a796 b 45 10294

+a7a1 3 41 10294

+a7a4 19 45 10294

+a7bd 4 41 10294

+a7c1 7 45 10294

+a7c8 4 41 10294

+a7cc 1b 45 10294

+a7e7 4 41 10294

+a7eb 7 45 10294

+a7f2 4 41 10294

+a7f6 3 45 10294

+a7f9 15 46 10294

+a80e 3 41 10294

+a811 3 46 10294

+a814 4 41 10294

+a818 3 46 10294

+a81b 2 50 10294

+a81d 4 41 10294

+a821 4 47 10294

+a825 11 50 10294

+a836 3 41 10294

+a839 19 50 10294

+a852 4 41 10294

+a856 7 50 10294

+a85d 17 41 10294

+a874 b 54 10294

+a87f e 56 10294

+a88d 13 57 10294

+a8a0 15 58 10294

+a8b5 16 60 10294

+a8cb 14 61 10294

+a8df 5 62 10294

+a8e4 2 61 10294

+a8e6 3 62 10294

+a8e9 3 61 10294

+a8ec 10 60 10294

+a8fc 1e 65 10294

+FUNC a91c 7a 0 isdigit

+a91c 6 139 6847

+a922 c 140 6847

+a92e 10 142 6847

+a93e 52 146 6847

+a990 6 148 6847

+FUNC a998 152 0 tolower_l

+a998 15 70 7683

+a9ad 9 74 7683

+a9b6 8 77 7683

+a9be 35 79 7683

+a9f3 10 80 7683

+aa03 18 82 7683

+aa1b 25 86 7683

+aa40 4 88 7683

+aa44 4 89 7683

+aa48 4 90 7683

+aa4c 5 91 7683

+aa51 2 92 7683

+aa53 5 94 7683

+aa58 13 97 7683

+aa6b 4a 110 7683

+aab5 3 116 7683

+aab8 6 117 7683

+aabe 1a 119 7683

+aad8 12 120 7683

+FUNC aaec 1e 0 tolower

+aaec 0 143 7683

+aaec 9 145 7683

+aaf5 d 147 7683

+ab02 1 153 7683

+ab03 7 151 7683

+FUNC ab0c 144 0 strrchr

+ab0c 4 80 5933

+ab10 6 84 5933

+ab16 4 89 5933

+ab1a e 96 5933

+ab28 19 105 5933

+ab41 2 106 5933

+ab43 8 108 5933

+ab4b 4 109 5933

+ab4f 8 110 5933

+ab57 3 115 5933

+ab5a 8 116 5933

+ab62 d 121 5933

+ab6f 3 125 5933

+ab72 15 138 5933

+ab87 4 139 5933

+ab8b 2a 147 5933

+abb5 a 148 5933

+abbf 2 149 5933

+abc1 3 153 5933

+abc4 1f 164 5933

+abe3 c 166 5933

+abef a 175 5933

+abf9 3 179 5933

+abfc 3 180 5933

+abff 6 181 5933

+ac05 3 211 5933

+ac08 5 216 5933

+ac0d 5 194 5933

+ac12 a 196 5933

+ac1c 6 197 5933

+ac22 9 194 5933

+ac2b 7 201 5933

+ac32 9 205 5933

+ac3b 6 207 5933

+ac41 9 209 5933

+ac4a 4 213 5933

+ac4e 2 214 5933

+FUNC ac50 cb 0 fptostr

+ac50 d 50 95

+ac5d 4 52 95

+ac61 20 55 95

+ac81 5 56 95

+ac86 22 61 95

+aca8 c 70 95

+acb4 17 77 95

+accb 3 78 95

+acce 5 76 95

+acd3 3 80 95

+acd6 7 87 95

+acdd 2 88 95

+acdf b 90 95

+acea 2 91 95

+acec 5 94 95

+acf1 4 99 95

+acf5 2 101 95

+acf7 17 105 95

+ad0e 2 108 95

+ad10 b 109 95

+FUNC ad1c cd 0 _dtold

+ad1c 5 51 10420

+ad21 8 58 10420

+ad29 1b 60 10420

+ad44 11 61 10420

+ad55 d 63 10420

+ad62 9 81 10420

+ad6b 2 82 10420

+ad6d 6 65 10420

+ad73 2 66 10420

+ad75 8 69 10420

+ad7d 4 70 10420

+ad81 3 71 10420

+ad84 2 73 10420

+ad86 9 76 10420

+ad8f 2 77 10420

+ad91 6 85 10420

+ad97 14 86 10420

+adab 5 89 10420

+adb0 12 92 10420

+adc2 6 93 10420

+adc8 12 94 10420

+adda 4 97 10420

+adde b 99 10420

+FUNC adec b7 0 fltout2

+adec 26 21 10420

+ae12 13 25 10420

+ae25 26 26 10420

+ae4b 6 27 10420

+ae51 4 28 10420

+ae55 19 29 10420

+ae6e 4 30 10420

+ae72 3 32 10420

+ae75 18 33 10420

+ae8d 16 29 10420

+FUNC aea4 ad8 0 $I10_OUTPUT

+aea4 2a 60 9988

+aece 8 96 9988

+aed6 6 98 9988

+aedc 1a 99 9988

+aef6 4 100 9988

+aefa 30 102 9988

+af2a 4 103 9988

+af2e 2 104 9988

+af30 3 105 9988

+af33 18 107 9988

+af4b 17 108 9988

+af62 5 109 9988

+af67 a 112 9988

+af71 1a 116 9988

+af8b 22 118 9988

+afad 13 122 9988

+afc0 1d 124 9988

+afdd a 128 9988

+afe7 1c 130 9988

+b003 8 131 9988

+b00b 2 134 9988

+b00d 1d 136 9988

+b02a 4 137 9988

+b02e 3 138 9988

+b031 5 141 9988

+b036 4 228 9988

+b03a e 256 9988

+b048 7 260 9988

+b04f 6 226 9988

+b055 6 260 9988

+b05b 3 228 9988

+b05e a 260 9988

+b068 4 255 9988

+b06c 5 257 9988

+b071 5 260 9988

+b076 e 228 9988

+b084 8 260 9988

+b08c 5 228 9988

+b091 386 260 9988

+b417 16 263 9988

+b42d 4 264 9988

+b431 e 265 9988

+b43f 3 264 9988

+b442 2a6 265 9988

+b6e8 3 268 9988

+b6eb 11 271 9988

+b6fc 5 272 9988

+b701 f 274 9988

+b710 5 275 9988

+b715 9 281 9988

+b71e 1e 282 9988

+b73c 17 293 9988

+b753 5 292 9988

+b758 7 293 9988

+b75f 5 295 9988

+b764 7 296 9988

+b76b 5 297 9988

+b770 10 298 9988

+b780 3 297 9988

+b783 7 298 9988

+b78a 5 297 9988

+b78f 7 298 9988

+b796 14 302 9988

+b7aa 5 303 9988

+b7af 14 304 9988

+b7c3 5 303 9988

+b7c8 6 304 9988

+b7ce e 305 9988

+b7dc 3 306 9988

+b7df 8 305 9988

+b7e7 4 306 9988

+b7eb 3 305 9988

+b7ee 44 306 9988

+b832 3 307 9988

+b835 3 306 9988

+b838 7 307 9988

+b83f 3 311 9988

+b842 11 307 9988

+b853 3 302 9988

+b856 c 307 9988

+b862 3 310 9988

+b865 11 311 9988

+b876 8 302 9988

+b87e 6 314 9988

+b884 3 315 9988

+b887 6 317 9988

+b88d 6 319 9988

+b893 7 320 9988

+b89a 5 319 9988

+b89f 5 322 9988

+b8a4 3 323 9988

+b8a7 4 324 9988

+b8ab 3 326 9988

+b8ae 7 337 9988

+b8b5 d 338 9988

+b8c2 3 340 9988

+b8c5 27 341 9988

+b8ec e 330 9988

+b8fa 5 331 9988

+b8ff 24 333 9988

+b923 5 334 9988

+b928 15 118 9988

+b93d 15 124 9988

+b952 15 130 9988

+b967 15 136 9988

+FUNC b990 1e 0 __tmainCRTStartup$filt$0

+b990 1e 267 9116

+FUNC b9ae 19 0 `type_info::_Type_info_dtor'::`1'::fin$0

+b9ae 9 72 10741

+b9b7 10 73 10741

+FUNC b9c7 19 0 _freefls$fin$1

+b9c7 9 413 9313

+b9d0 10 414 9313

+FUNC b9e0 19 0 _freefls$fin$0

+b9e0 9 429 9313

+b9e9 10 430 9313

+FUNC b9f9 19 0 _initptd$fin$1

+b9f9 9 226 9313

+ba02 10 228 9313

+FUNC ba12 19 0 _initptd$fin$0

+ba12 9 247 9313

+ba1b 10 248 9313

+FUNC ba2b 24 0 doexit$fin$0

+ba2b 9 665 9790

+ba34 9 666 9790

+ba3d 12 667 9790

+FUNC ba4f 1b 0 _ioinit$fin$0

+ba4f 9 325 1584

+ba58 12 326 1584

+FUNC ba6a 1d 0 _mtinitlocknum$fin$0

+ba6a 9 292 9509

+ba73 14 293 9509

+FUNC ba87 19 0 __updatetlocinfo$fin$0

+ba87 9 293 3702

+ba90 10 295 3702

+FUNC baa0 19 0 __updatetmbcinfo$fin$0

+baa0 9 538 8253

+baa9 10 540 8253

+FUNC bab9 19 0 _setmbcp$fin$0

+bab9 9 659 8253

+bac2 10 661 8253

+FUNC bae0 20 0 _IsNonwritableInCurrentImage$filt$0

+bae0 20 181 3978

+FUNC bb00 14 0 _onexit$fin$0

+bb00 e 89 3795

+bb0e 6 90 3795

+FUNC bb14 1e 0 raise$fin$0

+bb14 9 574 4150

+bb1d 6 575 4150

+bb23 f 576 4150

+FUNC bb32 28 0 flsall$fin$0

+bb32 9 276 5660

+bb3b 1f 277 5660

+FUNC bb5a 19 0 flsall$fin$1

+bb5a 9 282 5660

+bb63 10 283 5660

+FUNC bb73 19 0 _fcloseall$fin$0

+bb73 9 69 5472

+bb7c 10 70 5472

+FUNC bb8c 19 0 _locterm$fin$0

+bb8c 9 193 4530

+bb95 10 195 4530

+FUNC bba5 17 0 _commit$fin$0

+bba5 9 72 1490

+bbae e 73 1490

+FUNC bbbc 17 0 _write$fin$0

+bbbc 9 81 1964

+bbc5 e 82 1964

+FUNC bbd3 18 0 fclose$fin$0

+bbd3 9 58 5556

+bbdc f 59 5556

+FUNC bbeb 19 0 __lock_fhandle$fin$0

+bbeb 9 451 1865

+bbf4 10 452 1865

+FUNC bc04 17 0 _close$fin$0

+bc04 9 60 1396

+bc0d e 61 1396

+STACK CFI INIT 1010 6a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1010 .cfa: $rsp 80 +

+STACK CFI INIT 10d0 36 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 10d0 .cfa: $rsp 48 +

+STACK CFI INIT 1110 26 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1110 .cfa: $rsp 48 +

+STACK CFI INIT 1180 39 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1180 .cfa: $rsp 48 +

+STACK CFI INIT 11bc 180 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 11bc .cfa: $rsp 64 +

+STACK CFI INIT 133c 2c .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 133c .cfa: $rsp 48 +

+STACK CFI INIT 1368 12 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1368 .cfa: $rsp 48 +

+STACK CFI INIT 137c 3d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 137c .cfa: $rsp 48 +

+STACK CFI INIT 13d0 67 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 13d0 .cfa: $rsp 8 +

+STACK CFI INIT 1438 6c .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1438 .cfa: $rsp 64 +

+STACK CFI INIT 14a4 38 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 14a4 .cfa: $rsp 48 +

+STACK CFI INIT 14dc 17 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 14dc .cfa: $rsp 48 +

+STACK CFI INIT 14f4 1cc .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 14f4 .cfa: $rsp 48 +

+STACK CFI INIT 16c0 133 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 16c0 .cfa: $rsp 48 +

+STACK CFI INIT 17f4 24 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 17f4 .cfa: $rsp 48 +

+STACK CFI INIT 1818 82 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1818 .cfa: $rsp 48 +

+STACK CFI INIT 189c c2 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 189c .cfa: $rsp 48 +

+STACK CFI INIT 1960 7f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1960 .cfa: $rsp 48 +

+STACK CFI INIT 19e0 24 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 19e0 .cfa: $rsp 48 +

+STACK CFI INIT 1a04 41 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1a04 .cfa: $rsp 48 +

+STACK CFI INIT 1a48 16 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1a48 .cfa: $rsp 48 +

+STACK CFI INIT 1a60 26 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1a60 .cfa: $rsp 48 +

+STACK CFI INIT 1aa8 96 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1aa8 .cfa: $rsp 48 +

+STACK CFI INIT 1b4c 4b .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1b4c .cfa: $rsp 48 +

+STACK CFI INIT 1b98 60 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1b98 .cfa: $rsp 48 +

+STACK CFI INIT 1bf8 39 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1bf8 .cfa: $rsp 48 +

+STACK CFI INIT 1c4c 195 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1c4c .cfa: $rsp 112 +

+STACK CFI INIT 1df0 20 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1df0 .cfa: $rsp 48 +

+STACK CFI INIT 1e10 32d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 1e10 .cfa: $rsp 224 +

+STACK CFI INIT 2140 f3 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2140 .cfa: $rsp 64 +

+STACK CFI INIT 2234 1c7 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2234 .cfa: $rsp 64 +

+STACK CFI INIT 23fc 131 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 23fc .cfa: $rsp 64 +

+STACK CFI INIT 2530 43 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2530 .cfa: $rsp 48 +

+STACK CFI INIT 25a4 26f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 25a4 .cfa: $rsp 624 +

+STACK CFI INIT 281c 40 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 281c .cfa: $rsp 48 +

+STACK CFI INIT 285c ac .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 285c .cfa: $rsp 48 +

+STACK CFI INIT 2908 38 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2908 .cfa: $rsp 48 +

+STACK CFI INIT 2940 38 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2940 .cfa: $rsp 48 +

+STACK CFI INIT 2978 f4 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2978 .cfa: $rsp 80 +

+STACK CFI INIT 2a6c 1e1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2a6c .cfa: $rsp 112 +

+STACK CFI INIT 2c50 20 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2c50 .cfa: $rsp 48 +

+STACK CFI INIT 2c70 4e .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2c70 .cfa: $rsp 48 +

+STACK CFI INIT 2cc0 20 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2cc0 .cfa: $rsp 48 +

+STACK CFI INIT 2d30 f2 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2d30 .cfa: $rsp 1472 +

+STACK CFI INIT 2e2c 65 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2e2c .cfa: $rsp 64 +

+STACK CFI INIT 2e94 1e .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2e94 .cfa: $rsp 64 +

+STACK CFI INIT 2eb4 3b .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2eb4 .cfa: $rsp 48 +

+STACK CFI INIT 2ef0 61 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2ef0 .cfa: $rsp 48 +

+STACK CFI INIT 2f70 a8 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 2f70 .cfa: $rsp 8 +

+STACK CFI INIT 3018 44 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3018 .cfa: $rsp 48 +

+STACK CFI INIT 305c 87 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 305c .cfa: $rsp 48 +

+STACK CFI INIT 30e4 bd .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 30e4 .cfa: $rsp 48 +

+STACK CFI INIT 31a4 61 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 31a4 .cfa: $rsp 48 +

+STACK CFI INIT 3220 b6 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3220 .cfa: $rsp 48 +

+STACK CFI INIT 32f0 24 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 32f0 .cfa: $rsp 1248 +

+STACK CFI INIT 3320 18 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3320 .cfa: $rsp 8 +

+STACK CFI INIT 3340 1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3340 .cfa: $rsp 8 +

+STACK CFI INIT 3350 1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3350 .cfa: $rsp 8 +

+STACK CFI INIT 3354 1f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3354 .cfa: $rsp 48 +

+STACK CFI INIT 3374 1d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3374 .cfa: $rsp 48 +

+STACK CFI INIT 3394 6d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3394 .cfa: $rsp 80 +

+STACK CFI INIT 3404 71 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3404 .cfa: $rsp 96 +

+STACK CFI INIT 34e8 2b .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 34e8 .cfa: $rsp 48 +

+STACK CFI INIT 3514 4c .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3514 .cfa: $rsp 48 +

+STACK CFI INIT 3560 3fa .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3560 .cfa: $rsp 48 +

+STACK CFI INIT 396c 1f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 396c .cfa: $rsp 48 +

+STACK CFI INIT 398c 20 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 398c .cfa: $rsp 48 +

+STACK CFI INIT 39ac 7f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 39ac .cfa: $rsp 48 +

+STACK CFI INIT 3a2c 7a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3a2c .cfa: $rsp 48 +

+STACK CFI INIT 3aa8 81 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3aa8 .cfa: $rsp 48 +

+STACK CFI INIT 3bb8 196 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3bb8 .cfa: $rsp 48 +

+STACK CFI INIT 3df4 75 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3df4 .cfa: $rsp 48 +

+STACK CFI INIT 3e6c 62 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3e6c .cfa: $rsp 48 +

+STACK CFI INIT 3ed0 28 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3ed0 .cfa: $rsp 48 +

+STACK CFI INIT 3ef8 a8 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3ef8 .cfa: $rsp 48 +

+STACK CFI INIT 3fa0 7d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 3fa0 .cfa: $rsp 80 +

+STACK CFI INIT 4020 8e .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4020 .cfa: $rsp 48 +

+STACK CFI INIT 40b0 1e1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 40b0 .cfa: $rsp 1424 +

+STACK CFI INIT 4294 ba .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4294 .cfa: $rsp 48 +

+STACK CFI INIT 4350 244 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4350 .cfa: $rsp 64 +

+STACK CFI INIT 4594 2ae .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4594 .cfa: $rsp 112 +

+STACK CFI INIT 48a0 4d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 48a0 .cfa: $rsp 48 +

+STACK CFI INIT 4920 43 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4920 .cfa: $rsp 48 +

+STACK CFI INIT 4964 10a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4964 .cfa: $rsp 64 +

+STACK CFI INIT 4a70 17 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4a70 .cfa: $rsp 48 +

+STACK CFI INIT 4a88 39 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4a88 .cfa: $rsp 48 +

+STACK CFI INIT 4ac4 33 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4ac4 .cfa: $rsp 48 +

+STACK CFI INIT 4b38 233 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4b38 .cfa: $rsp 96 +

+STACK CFI INIT 4d74 98 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4d74 .cfa: $rsp 48 +

+STACK CFI INIT 4e0c 30 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4e0c .cfa: $rsp 48 +

+STACK CFI INIT 4e3c 65 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4e3c .cfa: $rsp 48 +

+STACK CFI INIT 4ea4 31 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4ea4 .cfa: $rsp 48 +

+STACK CFI INIT 4f48 79 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4f48 .cfa: $rsp 80 +

+STACK CFI INIT 4fd8 85 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 4fd8 .cfa: $rsp 48 +

+STACK CFI INIT 5060 6b .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5060 .cfa: $rsp 48 +

+STACK CFI INIT 50e8 cc .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 50e8 .cfa: $rsp 48 +

+STACK CFI INIT 51b4 273 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 51b4 .cfa: $rsp 144 +

+STACK CFI INIT 5428 1d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5428 .cfa: $rsp 48 +

+STACK CFI INIT 5448 63 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5448 .cfa: $rsp 48 +

+STACK CFI INIT 54c0 1f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 54c0 .cfa: $rsp 8 +

+STACK CFI INIT 5500 22a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5500 .cfa: $rsp 8 +

+STACK CFI INIT 572c 55 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 572c .cfa: $rsp 48 +

+STACK CFI INIT 5784 d3 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5784 .cfa: $rsp 48 +

+STACK CFI INIT 5858 9a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5858 .cfa: $rsp 48 +

+STACK CFI INIT 58f4 10a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 58f4 .cfa: $rsp 48 +

+STACK CFI INIT 5a00 6c .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5a00 .cfa: $rsp 48 +

+STACK CFI INIT 5a6c 3fa .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5a6c .cfa: $rsp 48 +

+STACK CFI INIT 5e68 2ec .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 5e68 .cfa: $rsp 128 +

+STACK CFI INIT 6154 96 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6154 .cfa: $rsp 128 +

+STACK CFI INIT 61ec 176 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 61ec .cfa: $rsp 112 +

+STACK CFI INIT 6364 7c .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6364 .cfa: $rsp 112 +

+STACK CFI INIT 63e0 39 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 63e0 .cfa: $rsp 48 +

+STACK CFI INIT 6428 8a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6428 .cfa: $rsp 48 +

+STACK CFI INIT 64b4 32 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 64b4 .cfa: $rsp 48 +

+STACK CFI INIT 64e8 8f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 64e8 .cfa: $rsp 96 +

+STACK CFI INIT 65e0 565 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 65e0 .cfa: $rsp 8 +

+STACK CFI INIT 6b48 26 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6b48 .cfa: $rsp 48 +

+STACK CFI INIT 6b70 5f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6b70 .cfa: $rsp 48 +

+STACK CFI INIT 6bd0 4c .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6bd0 .cfa: $rsp 48 +

+STACK CFI INIT 6c1c 79 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6c1c .cfa: $rsp 48 +

+STACK CFI INIT 6ca4 e6 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6ca4 .cfa: $rsp 80 +

+STACK CFI INIT 6d8c a8 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6d8c .cfa: $rsp 64 +

+STACK CFI INIT 6e34 49 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6e34 .cfa: $rsp 48 +

+STACK CFI INIT 6e80 d1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6e80 .cfa: $rsp 64 +

+STACK CFI INIT 6f54 1a4 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 6f54 .cfa: $rsp 32 +

+STACK CFI INIT 70f8 47 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 70f8 .cfa: $rsp 48 +

+STACK CFI INIT 7150 4e .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7150 .cfa: $rsp 24 +

+STACK CFI INIT 71a0 d7 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 71a0 .cfa: $rsp 64 +

+STACK CFI INIT 7278 e1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7278 .cfa: $rsp 80 +

+STACK CFI INIT 735c 7f1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 735c .cfa: $rsp 7040 +

+STACK CFI INIT 7b50 7a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7b50 .cfa: $rsp 48 +

+STACK CFI INIT 7bcc 66 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7bcc .cfa: $rsp 48 +

+STACK CFI INIT 7c34 db .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7c34 .cfa: $rsp 128 +

+STACK CFI INIT 7d10 cf .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7d10 .cfa: $rsp 160 +

+STACK CFI INIT 7de0 c7 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7de0 .cfa: $rsp 144 +

+STACK CFI INIT 7f50 c7 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 7f50 .cfa: $rsp 8 +

+STACK CFI INIT 8018 98 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8018 .cfa: $rsp 48 +

+STACK CFI INIT 80b0 aa .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 80b0 .cfa: $rsp 48 +

+STACK CFI INIT 815c 74 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 815c .cfa: $rsp 48 +

+STACK CFI INIT 81fc 43 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 81fc .cfa: $rsp 80 +

+STACK CFI INIT 8240 45 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8240 .cfa: $rsp 80 +

+STACK CFI INIT 8288 93 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8288 .cfa: $rsp 48 +

+STACK CFI INIT 831c 151 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 831c .cfa: $rsp 96 +

+STACK CFI INIT 8478 59 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8478 .cfa: $rsp 64 +

+STACK CFI INIT 84d4 c3 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 84d4 .cfa: $rsp 64 +

+STACK CFI INIT 8598 ba .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8598 .cfa: $rsp 48 +

+STACK CFI INIT 8654 37 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8654 .cfa: $rsp 48 +

+STACK CFI INIT 8690 5b6 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8690 .cfa: $rsp 144 +

+STACK CFI INIT 8c48 5b6 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 8c48 .cfa: $rsp 144 +

+STACK CFI INIT 9200 861 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 9200 .cfa: $rsp 224 +

+STACK CFI INIT 9a64 24 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 9a64 .cfa: $rsp 80 +

+STACK CFI INIT 9a88 7e .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 9a88 .cfa: $rsp 64 +

+STACK CFI INIT 9b08 3b0 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 9b08 .cfa: $rsp 128 +

+STACK CFI INIT 9eb8 1f9 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI 9eb8 .cfa: $rsp 112 +

+STACK CFI INIT a0b4 f7 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a0b4 .cfa: $rsp 176 +

+STACK CFI INIT a1ac 161 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a1ac .cfa: $rsp 80 +

+STACK CFI INIT a310 d1 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a310 .cfa: $rsp 160 +

+STACK CFI INIT a3e4 134 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a3e4 .cfa: $rsp 176 +

+STACK CFI INIT a520 96 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a520 .cfa: $rsp 80 +

+STACK CFI INIT a5c0 40 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a5c0 .cfa: $rsp 64 +

+STACK CFI INIT a608 7f .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a608 .cfa: $rsp 80 +

+STACK CFI INIT a69c 20 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a69c .cfa: $rsp 48 +

+STACK CFI INIT a6bc 3b .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a6bc .cfa: $rsp 80 +

+STACK CFI INIT a6f8 222 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a6f8 .cfa: $rsp 48 +

+STACK CFI INIT a91c 7a .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a91c .cfa: $rsp 80 +

+STACK CFI INIT a998 152 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI a998 .cfa: $rsp 128 +

+STACK CFI INIT ab0c 144 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ab0c .cfa: $rsp 32 +

+STACK CFI INIT ac50 cb .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ac50 .cfa: $rsp 48 +

+STACK CFI INIT ad1c cd .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ad1c .cfa: $rsp 8 +

+STACK CFI INIT adec b7 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI adec .cfa: $rsp 176 +

+STACK CFI INIT aea4 ad8 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI aea4 .cfa: $rsp 256 +

+STACK CFI INIT b990 1e .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI b990 .cfa: $rsp 48 +

+STACK CFI INIT b9ae 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI b9ae .cfa: $rsp 48 +

+STACK CFI INIT b9c7 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI b9c7 .cfa: $rsp 48 +

+STACK CFI INIT b9e0 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI b9e0 .cfa: $rsp 48 +

+STACK CFI INIT b9f9 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI b9f9 .cfa: $rsp 48 +

+STACK CFI INIT ba12 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ba12 .cfa: $rsp 48 +

+STACK CFI INIT ba2b 24 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ba2b .cfa: $rsp 48 +

+STACK CFI INIT ba4f 1b .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ba4f .cfa: $rsp 48 +

+STACK CFI INIT ba6a 1d .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ba6a .cfa: $rsp 48 +

+STACK CFI INIT ba87 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI ba87 .cfa: $rsp 48 +

+STACK CFI INIT baa0 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI baa0 .cfa: $rsp 48 +

+STACK CFI INIT bab9 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bab9 .cfa: $rsp 48 +

+STACK CFI INIT bae0 20 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bae0 .cfa: $rsp 48 +

+STACK CFI INIT bb00 14 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bb00 .cfa: $rsp 48 +

+STACK CFI INIT bb14 1e .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bb14 .cfa: $rsp 48 +

+STACK CFI INIT bb32 28 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bb32 .cfa: $rsp 48 +

+STACK CFI INIT bb5a 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bb5a .cfa: $rsp 48 +

+STACK CFI INIT bb73 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bb73 .cfa: $rsp 48 +

+STACK CFI INIT bb8c 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bb8c .cfa: $rsp 48 +

+STACK CFI INIT bba5 17 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bba5 .cfa: $rsp 48 +

+STACK CFI INIT bbbc 17 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bbbc .cfa: $rsp 48 +

+STACK CFI INIT bbd3 18 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bbd3 .cfa: $rsp 48 +

+STACK CFI INIT bbeb 19 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bbeb .cfa: $rsp 48 +

+STACK CFI INIT bc04 17 .cfa: $rsp .ra: .cfa 8 - ^

+STACK CFI bc04 .cfa: $rsp 48 +

diff --git a/src/tools/windows/symupload/symupload.cc b/src/tools/windows/symupload/symupload.cc
index b858a63..c9d624e 100644
--- a/src/tools/windows/symupload/symupload.cc
+++ b/src/tools/windows/symupload/symupload.cc
@@ -153,7 +153,7 @@
   return writer.GetModuleInfo(pdb_info);
 }
 
-void printUsageAndExit() {
+__declspec(noreturn) void printUsageAndExit() {
   wprintf(L"Usage: symupload [--timeout NN] <file.exe|file.dll> <symbol upload URL>\n\n");
   wprintf(L"Timeout is in milliseconds, or can be 0 to be unlimited\n\n");
   wprintf(L"Example:\n\n\tsymupload.exe --timeout 0 chrome.dll http://no.free.symbol.server.for.you\n");