Update Crashpad to 32981a3ee9d7c2769fb27afa038fe2e194cfa329

0c41b1549667 Convert AsciiDoc documentation to Markdown
3830e4e5c145 Update the link to mini_chromium’s README
6753ba5a5a9a catch_exception_tool.md: fix on_demand_service_tool link
             text
05c89beaae4e doc: Another silly follow-up
1f2a2c82c6b2 doc: Small updates after Markdown migration
f5e869c51f4e doc: Check in the man page index instead of generating it
8e3e65178a1d Update Doxyfile to 1.8.12
952f787f4aab doc: Standardize on “macOS” in comments
acabe35928f5 doc: Fix all Doxygen warnings, cleaning up some generated
             documentation
ac2e7cfbb2da doc: Make Doxygen-generated HTML interface documentation
             prettier
f191fff64dd3 doc: Fix bad merge resulting in twin “Man Pages” links
             in nav bar
dd4859965f90 Update compat version of winnt.h to 10.0.14393.0 SDK
             (Windows 10 1607)
5c44f1d14f1c Indicate rdtscp availability in MINIDUMP_SYSTEM_INFO of
             x86_64 minidumps
3abde199a712 minidump: fix tests to expect new rdtscp bit after
             5c44f1d14f1c
741c9cc51ea3 mac: Deal with bootstrap_look_up() race encountered on
             10.12.1
1382618fbe00 Provide backup #defines for things introduced in SDK
             10.0.10240.0
dd85381a32dd GCC fix: Disable -Wmultichar warning throughout Crashpad
5b14b419925f GCC fix: Don’t name a method exactly the same as its
             return type
57b2210ed75d GCC fix: Make UUID POD
f83530bf9a0b GCC fix: Don’t use arraysize() on packed structs
72fbc56e58d3 MSVC++ fix: Don’t declare local[0] arrays for
             ARRAYSIZE_UNSAFE test
b37aa95da79c MSVC++ fix: ALLOW_UNUSED_LOCAL variables only used in
             static_assert
f09d0cde00a1 Improve time handling and error checking
5a21fc157380 Fix Windows build after f09d0cde00a1
8b3eec83e982 win: Add signal handler for SIGABRT to handle abort() calls
68095b6a4e61 Don't LOG(ERROR) for usage, and fix VS2013 build after
             8b3eec8
777634b1ebad Use ADDRESS_SANITIZER instead of
             __has_feature(address_sanitizer)
5b83e58771e2 win: Remove use of rpcrt4 and advapi32 from some util code
f94dd14c45ea win: fix SECURITY_DESCRIPTOR builder on vs2013
556c4e4f5045 Have crashpad call ASan's crash handler if present
f66d5df30cb8 Roll mini_chromium to de1afb0
6b09b08a2202 Update util/file/string_file.cc for new base/numerics API
32981a3ee9d7 win: Fix clang warning in SECURITY_DESCRIPTOR construction

Updated build/secondary GN files to match .gyp changes.

BUG=656800
R=mark@chromium.org

Review-Url: https://codereview.chromium.org/2555353002
Cr-Commit-Position: refs/heads/master@{#437376}
diff --git a/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn b/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
index 15869f8..ff79071 100644
--- a/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
+++ b/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
@@ -63,6 +63,8 @@
     "mac/service_management.h",
     "mac/xattr.cc",
     "mac/xattr.h",
+    "misc/address_sanitizer.h",
+    "misc/arraysize_unsafe.h",
     "misc/clock.h",
     "misc/clock_mac.cc",
     "misc/clock_posix.cc",
@@ -229,10 +231,7 @@
   ]
 
   if (is_win) {
-    libs = [
-      "rpcrt4.lib",
-      "winhttp.lib",
-    ]
+    libs = [ "winhttp.lib" ]
     cflags = [
       "/wd4201",  # nonstandard extension used : nameless struct/union.
       "/wd4577",  # 'noexcept' used with no exception handling mode specified.
diff --git a/components/browser_watcher/postmortem_minidump_writer_win_unittest.cc b/components/browser_watcher/postmortem_minidump_writer_win_unittest.cc
index 7acbfb1..645caa1 100644
--- a/components/browser_watcher/postmortem_minidump_writer_win_unittest.cc
+++ b/components/browser_watcher/postmortem_minidump_writer_win_unittest.cc
@@ -33,8 +33,8 @@
   void SetUp() override {
     testing::Test::SetUp();
 
-    expected_client_id_ = UUID(UUID::InitializeWithNewTag{});
-    expected_report_id_ = UUID(UUID::InitializeWithNewTag{});
+    expected_client_id_.InitializeWithNew();
+    expected_report_id_.InitializeWithNew();
 
     // Create a stability report.
     // TODO(manzagop): flesh out the report once proto is more detailed.
diff --git a/components/browser_watcher/postmortem_report_collector_unittest.cc b/components/browser_watcher/postmortem_report_collector_unittest.cc
index e9ba3e54..f6b84a5 100644
--- a/components/browser_watcher/postmortem_report_collector_unittest.cc
+++ b/components/browser_watcher/postmortem_report_collector_unittest.cc
@@ -178,8 +178,9 @@
     base::FilePath minidump_path = temp_dir_.GetPath().AppendASCII("foo-1.dmp");
     base::File minidump_file(
         minidump_path, base::File::FLAG_CREATE | base::File::File::FLAG_WRITE);
-    crashpad_report_ = {minidump_file.GetPlatformFile(),
-                        crashpad::UUID(UUID::InitializeWithNewTag{}),
+    crashpad::UUID new_report_uuid;
+    new_report_uuid.InitializeWithNew();
+    crashpad_report_ = {minidump_file.GetPlatformFile(), new_report_uuid,
                         minidump_path};
     EXPECT_CALL(database_, PrepareNewCrashReport(_))
         .Times(1)
diff --git a/third_party/crashpad/README.chromium b/third_party/crashpad/README.chromium
index 6d9c185d..46b6c3b 100644
--- a/third_party/crashpad/README.chromium
+++ b/third_party/crashpad/README.chromium
@@ -2,7 +2,7 @@
 Short Name: crashpad
 URL: https://crashpad.chromium.org/
 Version: unknown
-Revision: b47bf6c250c6b825dee1c5fbad9152c2c962e828
+Revision: 32981a3ee9d7c2769fb27afa038fe2e194cfa329
 License: Apache 2.0
 License File: crashpad/LICENSE
 Security Critical: yes
@@ -35,6 +35,4 @@
 $ git am --3way --message-id -p4 /tmp/patchdir
 
 Local Modifications:
-- Have crashpad call ASan's crash handler if present
-- Modified util/file/string_file.cc for compat with base/numerics here:
-  https://codereview.chromium.org/2528243002/
+None.
diff --git a/third_party/crashpad/crashpad/DEPS b/third_party/crashpad/crashpad/DEPS
index 79677f3..8615c43 100644
--- a/third_party/crashpad/crashpad/DEPS
+++ b/third_party/crashpad/crashpad/DEPS
@@ -25,7 +25,7 @@
       '93cc6e2c23e4d5ebd179f388e67aa907d0dfd43d',
   'crashpad/third_party/mini_chromium/mini_chromium':
       Var('chromium_git') + '/chromium/mini_chromium@' +
-      '8e8d3cc9a245f1bf63296e97fb6ac1c90f6d86f5',
+      'de1afb04f4afc074ec6d23bd9ee7b1e6b365427f',
   'buildtools':
       Var('chromium_git') + '/chromium/buildtools.git@' +
       'f8fc76ea5ce4a60cda2fa5d7df3d4a62935b3113',
diff --git a/third_party/crashpad/crashpad/README.md b/third_party/crashpad/crashpad/README.md
new file mode 100644
index 0000000..57e8169
--- /dev/null
+++ b/third_party/crashpad/crashpad/README.md
@@ -0,0 +1,41 @@
+<!--
+Copyright 2015 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# Crashpad
+
+[Crashpad](https://crashpad.chromium.org/) is a crash-reporting system.
+
+## Documentation
+
+ * [Project status](doc/status.md)
+ * [Developing Crashpad](doc/developing.md): instructions for getting the source
+   code, building, testing, and contributing to the project.
+ * [Crashpad interface documentation](https://crashpad.chromium.org/doxygen/)
+ * [Crashpad tool man pages](doc/man.md)
+
+## Source Code
+
+Crashpad’s source code is hosted in a Git repository at
+https://chromium.googlesource.com/crashpad/crashpad.
+
+## Other Links
+
+ * Bugs can be reported at the [Crashpad issue
+   tracker](https://crashpad.chromium.org/bug/).
+ * The [Crashpad Buildbot](https://build.chromium.org/p/client.crashpad)
+   performs automated builds and tests.
+ * [crashpad-dev](https://groups.google.com/a/chromium.org/group/crashpad-dev)
+   is the Crashpad developers’ mailing list.
diff --git a/third_party/crashpad/crashpad/build/crashpad.gypi b/third_party/crashpad/crashpad/build/crashpad.gypi
index 027c7b6..166e768 100644
--- a/third_party/crashpad/crashpad/build/crashpad.gypi
+++ b/third_party/crashpad/crashpad/build/crashpad.gypi
@@ -25,5 +25,16 @@
       4201,  # nonstandard extension used : nameless struct/union.
       4324,  # structure was padded due to __declspec(align()).
     ],
+    'conditions': [
+      ['OS=="linux" or OS=="android"', {
+        'conditions': [
+          ['clang==0', {
+            'cflags': [
+              '-Wno-multichar',
+            ],
+          }],
+        ],
+      }],
+    ],
   },
 }
diff --git a/third_party/crashpad/crashpad/client/capture_context_mac_test.cc b/third_party/crashpad/crashpad/client/capture_context_mac_test.cc
index 436ac5ad..1904b2b 100644
--- a/third_party/crashpad/crashpad/client/capture_context_mac_test.cc
+++ b/third_party/crashpad/crashpad/client/capture_context_mac_test.cc
@@ -21,6 +21,7 @@
 
 #include "build/build_config.h"
 #include "gtest/gtest.h"
+#include "util/misc/address_sanitizer.h"
 #include "util/misc/implicit_cast.h"
 
 namespace crashpad {
@@ -103,13 +104,14 @@
   // captured program counter should be slightly greater than or equal to the
   // reference program counter.
   uintptr_t pc = ProgramCounterFromContext(context_1);
-#if !__has_feature(address_sanitizer)
+
+#if !defined(ADDRESS_SANITIZER)
   // AddressSanitizer can cause enough code bloat that the “nearby” check would
   // likely fail.
   const uintptr_t kReferencePC =
       reinterpret_cast<uintptr_t>(TestCaptureContext);
   EXPECT_LT(pc - kReferencePC, 64u);
-#endif
+#endif  // !defined(ADDRESS_SANITIZER)
 
   // Declare sp and context_2 here because all local variables need to be
   // declared before computing the stack pointer reference value, so that the
diff --git a/third_party/crashpad/crashpad/client/crashpad_client.h b/third_party/crashpad/crashpad/client/crashpad_client.h
index 693557e..844512f 100644
--- a/third_party/crashpad/crashpad/client/crashpad_client.h
+++ b/third_party/crashpad/crashpad/client/crashpad_client.h
@@ -44,11 +44,11 @@
   //! \brief Starts a Crashpad handler process, performing any necessary
   //!     handshake to configure it.
   //!
-  //! This method directs crashes to the Crashpad handler. On Mac OS X, this
-  //! is applicable to this process and all child processes. On Windows, child
-  //! processes must also register by using SetHandlerIPCPipe().
+  //! This method directs crashes to the Crashpad handler. On macOS, this is
+  //! applicable to this process and all subsequent child processes. On Windows,
+  //! child processes must also register by using SetHandlerIPCPipe().
   //!
-  //! On Mac OS X, this method starts a Crashpad handler and obtains a Mach send
+  //! On macOS, this method starts a Crashpad handler and obtains a Mach send
   //! right corresponding to a receive right held by the handler process. The
   //! handler process runs an exception server on this port. This method sets
   //! the task’s exception port for `EXC_CRASH`, `EXC_RESOURCE`, and `EXC_GUARD`
@@ -56,8 +56,8 @@
   //! with behavior `EXCEPTION_STATE_IDENTITY | MACH_EXCEPTION_CODES` and thread
   //! state flavor `MACHINE_THREAD_STATE`. Exception ports are inherited, so a
   //! Crashpad handler started here will remain the handler for any child
-  //! processes created after StartHandler() is called. Child processes do not
-  //! need to call StartHandler() or be aware of Crashpad in any way. The
+  //! processes created after StartHandler() is called. These child processes do
+  //! not need to call StartHandler() or be aware of Crashpad in any way. The
   //! Crashpad handler will receive crashes from child processes that have
   //! inherited it as their exception handler even after the process that called
   //! StartHandler() exits.
@@ -109,7 +109,7 @@
   //! \brief Sets the process’ crash handler to a Mach service registered with
   //!     the bootstrap server.
   //!
-  //! This method is only defined on OS X.
+  //! This method is only defined on macOS.
   //!
   //! See StartHandler() for more detail on how the port and handler are
   //! configured.
@@ -122,7 +122,7 @@
 
   //! \brief Sets the process’ crash handler to a Mach port.
   //!
-  //! This method is only defined on OS X.
+  //! This method is only defined on macOS.
   //!
   //! See StartHandler() for more detail on how the port and handler are
   //! configured.
@@ -234,7 +234,7 @@
   //! \brief Configures the process to direct its crashes to the default handler
   //!     for the operating system.
   //!
-  //! On OS X, this sets the task’s exception port as in SetHandlerMachPort(),
+  //! On macOS, this sets the task’s exception port as in SetHandlerMachPort(),
   //! but the exception handler used is obtained from
   //! SystemCrashReporterHandler(). If the system’s crash reporter handler
   //! cannot be determined or set, the task’s exception ports for crash-type
diff --git a/third_party/crashpad/crashpad/client/crashpad_client_win.cc b/third_party/crashpad/crashpad/client/crashpad_client_win.cc
index 78c1ed0d..becfc01 100644
--- a/third_party/crashpad/crashpad/client/crashpad_client_win.cc
+++ b/third_party/crashpad/crashpad/client/crashpad_client_win.cc
@@ -15,6 +15,7 @@
 #include "client/crashpad_client.h"
 
 #include <windows.h>
+#include <signal.h>
 #include <stdint.h>
 #include <string.h>
 
@@ -31,6 +32,7 @@
 #include "util/file/file_io.h"
 #include "util/misc/random_string.h"
 #include "util/win/address_types.h"
+#include "util/win/capture_context.h"
 #include "util/win/command_line.h"
 #include "util/win/critical_section_with_debug_info.h"
 #include "util/win/get_function.h"
@@ -108,13 +110,12 @@
 }
 
 #if defined(ADDRESS_SANITIZER)
-extern "C" LONG
-__asan_unhandled_exception_filter(EXCEPTION_POINTERS* info);
+extern "C" LONG __asan_unhandled_exception_filter(EXCEPTION_POINTERS* info);
 #endif
 
 LONG WINAPI UnhandledExceptionHandler(EXCEPTION_POINTERS* exception_pointers) {
-  // In ASan builds, delegate to the ASan exception filter.
 #if defined(ADDRESS_SANITIZER)
+  // In ASan builds, delegate to the ASan exception filter.
   LONG status = __asan_unhandled_exception_filter(exception_pointers);
   if (status != EXCEPTION_CONTINUE_SEARCH)
     return status;
@@ -175,6 +176,28 @@
   return EXCEPTION_CONTINUE_SEARCH;
 }
 
+void HandleAbortSignal(int signum) {
+  DCHECK_EQ(signum, SIGABRT);
+
+  CONTEXT context;
+  CaptureContext(&context);
+
+  EXCEPTION_RECORD record = {};
+  record.ExceptionCode = STATUS_FATAL_APP_EXIT;
+  record.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
+#if defined(ARCH_CPU_64_BITS)
+  record.ExceptionAddress = reinterpret_cast<void*>(context.Rip);
+#else
+  record.ExceptionAddress = reinterpret_cast<void*>(context.Eip);
+#endif  // ARCH_CPU_64_BITS
+
+  EXCEPTION_POINTERS exception_pointers;
+  exception_pointers.ContextRecord = &context;
+  exception_pointers.ExceptionRecord = &record;
+
+  UnhandledExceptionHandler(&exception_pointers);
+}
+
 std::wstring FormatArgumentString(const std::string& name,
                                   const std::wstring& value) {
   return std::wstring(L"--") + base::UTF8ToUTF16(name) + L"=" + value;
@@ -512,6 +535,32 @@
   g_non_crash_dump_lock = new base::Lock();
 }
 
+void RegisterHandlers() {
+  SetUnhandledExceptionFilter(&UnhandledExceptionHandler);
+
+  // The Windows CRT's signal.h lists:
+  // - SIGINT
+  // - SIGILL
+  // - SIGFPE
+  // - SIGSEGV
+  // - SIGTERM
+  // - SIGBREAK
+  // - SIGABRT
+  // SIGILL and SIGTERM are documented as not being generated. SIGBREAK and
+  // SIGINT are for Ctrl-Break and Ctrl-C, and aren't something for which
+  // capturing a dump is warranted. SIGFPE and SIGSEGV are captured as regular
+  // exceptions through the unhandled exception filter. This leaves SIGABRT. In
+  // the standard CRT, abort() is implemented as a synchronous call to the
+  // SIGABRT signal handler if installed, but after doing so, the unhandled
+  // exception filter is not triggered (it instead __fastfail()s). So, register
+  // to handle SIGABRT to catch abort() calls, as client code might use this and
+  // expect it to cause a crash dump. This will only work when the abort()
+  // that's called in client code is the same (or has the same behavior) as the
+  // one in use here.
+  void (*rv)(int) = signal(SIGABRT, HandleAbortSignal);
+  DCHECK_NE(rv, SIG_ERR);
+}
+
 }  // namespace
 
 CrashpadClient::CrashpadClient() : ipc_pipe_(), handler_start_thread_() {}
@@ -548,7 +597,7 @@
 
   CommonInProcessInitialization();
 
-  SetUnhandledExceptionFilter(&UnhandledExceptionHandler);
+  RegisterHandlers();
 
   auto data = new BackgroundHandlerStartThreadData(handler,
                                                    database,
@@ -621,7 +670,8 @@
   }
 
   SetHandlerStartupState(StartupState::kSucceeded);
-  SetUnhandledExceptionFilter(&UnhandledExceptionHandler);
+
+  RegisterHandlers();
 
   // The server returns these already duplicated to be valid in this process.
   g_signal_exception =
diff --git a/third_party/crashpad/crashpad/client/crashpad_info.cc b/third_party/crashpad/crashpad/client/crashpad_info.cc
index e8a6a9e..e517f7b1 100644
--- a/third_party/crashpad/crashpad/client/crashpad_info.cc
+++ b/third_party/crashpad/crashpad/client/crashpad_info.cc
@@ -14,6 +14,7 @@
 
 #include "client/crashpad_info.h"
 
+#include "util/misc/address_sanitizer.h"
 #include "util/stdlib/cxx.h"
 
 #if defined(OS_MACOSX)
@@ -72,14 +73,14 @@
 #error Port
 #endif  // !defined(OS_MACOSX) && !defined(OS_LINUX) && !defined(OS_ANDROID)
 
-#if __has_feature(address_sanitizer)
+#if defined(ADDRESS_SANITIZER)
     // AddressSanitizer would add a trailing red zone of at least 32 bytes,
     // which would be reflected in the size of the custom section. This confuses
     // MachOImageReader::GetCrashpadInfo(), which finds that the section’s size
     // disagrees with the structure’s size_ field. By specifying an alignment
     // greater than the red zone size, the red zone will be suppressed.
     aligned(64),
-#endif  // __has_feature(address_sanitizer)
+#endif  // defined(ADDRESS_SANITIZER)
 
     // The “used” attribute prevents the structure from being dead-stripped.
     used,
diff --git a/third_party/crashpad/crashpad/client/crashpad_info.h b/third_party/crashpad/crashpad/client/crashpad_info.h
index 9e7abfc..0462eaf 100644
--- a/third_party/crashpad/crashpad/client/crashpad_info.h
+++ b/third_party/crashpad/crashpad/client/crashpad_info.h
@@ -164,9 +164,9 @@
   //! \brief Adds a custom stream to the minidump.
   //!
   //! The memory block referenced by \a data and \a size will added to the
-  //! minidump as separate stream with type \stream_type. The memory referred to
-  //! by \a data and \a size is owned by the caller and must remain valid while
-  //! it is in effect for the CrashpadInfo object.
+  //! minidump as separate stream with type \a stream_type. The memory referred
+  //! to by \a data and \a size is owned by the caller and must remain valid
+  //! while it is in effect for the CrashpadInfo object.
   //!
   //! Note that streams will appear in the minidump in the reverse order to
   //! which they are added.
diff --git a/third_party/crashpad/crashpad/client/prune_crash_reports.h b/third_party/crashpad/crashpad/client/prune_crash_reports.h
index b66e9349..6dac5f30 100644
--- a/third_party/crashpad/crashpad/client/prune_crash_reports.h
+++ b/third_party/crashpad/crashpad/client/prune_crash_reports.h
@@ -111,7 +111,7 @@
   DISALLOW_COPY_AND_ASSIGN(DatabaseSizePruneCondition);
 };
 
-//! \breif A PruneCondition that conjoins two other PruneConditions.
+//! \brief A PruneCondition that conjoins two other PruneConditions.
 class BinaryPruneCondition final : public PruneCondition {
  public:
   enum Operator {
diff --git a/third_party/crashpad/crashpad/client/settings.cc b/third_party/crashpad/crashpad/client/settings.cc
index d018e37f..7757ecb 100644
--- a/third_party/crashpad/crashpad/client/settings.cc
+++ b/third_party/crashpad/crashpad/client/settings.cc
@@ -55,7 +55,7 @@
   uint32_t version;
   uint32_t options;
   uint32_t padding_0;
-  uint64_t last_upload_attempt_time;  // time_t
+  int64_t last_upload_attempt_time;  // time_t
   UUID client_id;
 };
 
@@ -136,7 +136,7 @@
   if (!handle.is_valid())
     return false;
 
-  settings.last_upload_attempt_time = InRangeCast<uint64_t>(time, 0);
+  settings.last_upload_attempt_time = InRangeCast<int64_t>(time, 0);
 
   return WriteSettings(handle.get(), settings);
 }
diff --git a/third_party/crashpad/crashpad/compat/mac/mach-o/getsect.cc b/third_party/crashpad/crashpad/compat/mac/mach-o/getsect.cc
index 71d3066..6cda9ff 100644
--- a/third_party/crashpad/crashpad/compat/mac/mach-o/getsect.cc
+++ b/third_party/crashpad/crashpad/compat/mac/mach-o/getsect.cc
@@ -72,11 +72,11 @@
 
 extern "C" {
 
-// These implementations look up their functions in libmacho at run time. If
-// the system libmacho provides these functions as it normally does on Mac OS X
-// 10.7 and later, the system’s versions are used directly. Otherwise, the
-// versions in third_party/apple_cctools are used, which are actually just
-// copies of the system’s functions.
+// These implementations look up their functions in libmacho at run time. If the
+// system libmacho provides these functions as it normally does on OS X 10.7 and
+// later, the system’s versions are used directly. Otherwise, the versions in
+// third_party/apple_cctools are used, which are actually just copies of the
+// system’s functions.
 
 uint8_t* getsectiondata(const MachHeader* mhp,
                         const char* segname,
diff --git a/third_party/crashpad/crashpad/compat/non_win/dbghelp.h b/third_party/crashpad/crashpad/compat/non_win/dbghelp.h
index 71ef1f4..78ec2952 100644
--- a/third_party/crashpad/crashpad/compat/non_win/dbghelp.h
+++ b/third_party/crashpad/crashpad/compat/non_win/dbghelp.h
@@ -279,21 +279,21 @@
   //!     component.
   //!
   //!  - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `6`.
-  //!  - For Mac OS X 10.9.2, this would be `10`.
+  //!  - For macOS 10.12.1, this would be `10`.
   uint32_t MajorVersion;
 
   //! \brief The system’s operating system version number’s second (minor)
   //!     component.
   //!
   //!  - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `1`.
-  //!  - For Mac OS X 10.9.2, this would be `9`.
+  //!  - For macOS 10.12.1, this would be `12`.
   uint32_t MinorVersion;
 
   //! \brief The system’s operating system version number’s third (build or
   //!     patch) component.
   //!
   //!  - For Windows 7 (NT 6.1) SP1, version 6.1.7601, this would be `7601`.
-  //!  - For Mac OS X 10.9.2, this would be `2`.
+  //!  - For macOS 10.12.1, this would be `1`.
   uint32_t BuildNumber;
 
   //! \brief The system’s operating system family. This may be a \ref
@@ -311,9 +311,9 @@
   //!  - On Windows, this is the name of the installed operating system service
   //!    pack, such as “Service Pack 1”. If no service pack is installed, this
   //!    field references an empty string.
-  //!  - On Mac OS X, this is the operating system build number from `sw_vers
-  //!    -buildVersion`. For Mac OS X 10.9.2 on most hardware types, this would
-  //!    be `13C64`.
+  //!  - On macOS, this is the operating system build number from `sw_vers
+  //!    -buildVersion`. For macOS 10.12.1 on most hardware types, this would
+  //!    be `16B2657`.
   //!  - On Linux and other Unix-like systems, this is the kernel version from
   //!    `uname -srvm`, possibly with additional information appended. On
   //!    Android, the `ro.build.fingerprint` system property is appended.
@@ -417,17 +417,17 @@
   //! \brief The top-level exception code identifying the exception, in
   //!     operating system-specific values.
   //!
-  //! For Mac OS X minidumps, this will be an \ref EXC_x "EXC_*" exception type,
+  //! For macOS minidumps, this will be an \ref EXC_x "EXC_*" exception type,
   //! such as `EXC_BAD_ACCESS`. `EXC_CRASH` will not appear here for exceptions
   //! processed as `EXC_CRASH` when generated from another preceding exception:
   //! the original exception code will appear instead. The exception type as it
   //! was received will appear at index 0 of #ExceptionInformation.
   //!
-  //! For Windows minidumps, this will be an \ref EXCEPTION_x "EXCEPTION_*"
-  //! exception type, such as `EXCEPTION_ACCESS_VIOLATION`.
+  //! For Windows minidumps, this will be an `EXCEPTION_*` exception type, such
+  //! as `EXCEPTION_ACCESS_VIOLATION`.
   //!
   //! \note This field is named ExceptionCode, but what is known as the
-  //!     “exception code” on Mac OS X/Mach is actually stored in the
+  //!     “exception code” on macOS/Mach is actually stored in the
   //!     #ExceptionFlags field of a minidump file.
   //!
   //! \todo Document the possible values by OS. There may be OS-specific enums
@@ -437,16 +437,16 @@
   //! \brief Additional exception flags that further identify the exception, in
   //!     operating system-specific values.
   //!
-  //! For Mac OS X minidumps, this will be the value of the exception code at
-  //! index 0 as received by a Mach exception handler, except:
+  //! For macOS minidumps, this will be the value of the exception code at index
+  //! 0 as received by a Mach exception handler, except:
   //!  * For exception type `EXC_CRASH` generated from another preceding
   //!    exception, the original exception code will appear here, not the code
   //!    as received by the Mach exception handler.
   //!  * For exception types `EXC_RESOURCE` and `EXC_GUARD`, the high 32 bits of
   //!    the code received by the Mach exception handler will appear here.
   //!
-  //! In all cases for Mac OS X minidumps, the code as it was received by the
-  //! Mach exception handler will appear at index 1 of #ExceptionInformation.
+  //! In all cases for macOS minidumps, the code as it was received by the Mach
+  //! exception handler will appear at index 1 of #ExceptionInformation.
   //!
   //! For Windows minidumps, this will either be `0` if the exception is
   //! continuable, or `EXCEPTION_NONCONTINUABLE` to indicate a noncontinuable
@@ -475,12 +475,12 @@
   //! \brief Additional information about the exception, specific to the
   //!     operating system and possibly the #ExceptionCode.
   //!
-  //! For Mac OS X minidumps, this will contain the exception type as received
-  //! by a Mach exception handler and the values of the `codes[0]` and
-  //! `codes[1]` (exception code and subcode) parameters supplied to the Mach
-  //! exception handler. Unlike #ExceptionCode and #ExceptionFlags, the values
-  //! received by a Mach exception handler are used directly here even for the
-  //! `EXC_CRASH`, `EXC_RESOURCE`, and `EXC_GUARD` exception types.
+  //! For macOS minidumps, this will contain the exception type as received by a
+  //! Mach exception handler and the values of the `codes[0]` and `codes[1]`
+  //! (exception code and subcode) parameters supplied to the Mach exception
+  //! handler. Unlike #ExceptionCode and #ExceptionFlags, the values received by
+  //! a Mach exception handler are used directly here even for the `EXC_CRASH`,
+  //! `EXC_RESOURCE`, and `EXC_GUARD` exception types.
 
   //! For Windows, these are additional arguments (if any) as provided to
   //! `RaiseException()`.
@@ -982,8 +982,9 @@
 
   //! \brief The memory protection when the region was initially allocated. This
   //!     member can be one of the memory protection options (such as
-  //!     \ref PAGE_x PAGE_EXECUTE, \ref PAGE_x PAGE_NOACCESS, etc.), along with
-  //!     \ref PAGE_x PAGE_GUARD or \ref PAGE_x PAGE_NOCACHE, as needed.
+  //!     \ref PAGE_x "PAGE_EXECUTE", \ref PAGE_x "PAGE_NOACCESS", etc.), along
+  //!     with \ref PAGE_x "PAGE_GUARD" or \ref PAGE_x "PAGE_NOCACHE", as
+  //!     needed.
   uint32_t AllocationProtect;
 
   uint32_t __alignment1;
@@ -993,7 +994,8 @@
   uint64_t RegionSize;
 
   //! \brief The state of the pages in the region. This can be one of
-  //!     \ref MEM_x MEM_COMMIT, \ref MEM_x MEM_FREE, or \ref MEM_x MEM_RESERVE.
+  //!     \ref MEM_x "MEM_COMMIT", \ref MEM_x "MEM_FREE", or \ref MEM_x
+  //!     "MEM_RESERVE".
   uint32_t State;
 
   //! \brief The access protection of the pages in the region. This member is
@@ -1001,7 +1003,7 @@
   uint32_t Protect;
 
   //! \brief The type of pages in the region. This can be one of \ref MEM_x
-  //!     MEM_IMAGE, \ref MEM_x MEM_MAPPED, or \ref MEM_x MEM_PRIVATE.
+  //!     "MEM_IMAGE", \ref MEM_x "MEM_MAPPED", or \ref MEM_x "MEM_PRIVATE".
   uint32_t Type;
 
   uint32_t __alignment2;
diff --git a/third_party/crashpad/crashpad/compat/non_win/winnt.h b/third_party/crashpad/crashpad/compat/non_win/winnt.h
index 82af0e6d..5e46f53 100644
--- a/third_party/crashpad/crashpad/compat/non_win/winnt.h
+++ b/third_party/crashpad/crashpad/compat/non_win/winnt.h
@@ -65,6 +65,8 @@
 #define PROCESSOR_ARCHITECTURE_AMD64 9
 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
+#define PROCESSOR_ARCHITECTURE_ARM64 12
+#define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xffff
 //! \}
 
@@ -104,6 +106,10 @@
 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
+#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
+#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
+#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
+#define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
 //! \}
 
 //! \anchor IMAGE_DEBUG_MISC_x
diff --git a/third_party/crashpad/crashpad/compat/win/winnt.h b/third_party/crashpad/crashpad/compat/win/winnt.h
index 2c5ac66..6a5e016 100644
--- a/third_party/crashpad/crashpad/compat/win/winnt.h
+++ b/third_party/crashpad/crashpad/compat/win/winnt.h
@@ -15,6 +15,9 @@
 #ifndef CRASHPAD_COMPAT_WIN_WINNT_H_
 #define CRASHPAD_COMPAT_WIN_WINNT_H_
 
+// include_next <winnt.h>
+#include <../um/winnt.h>
+
 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa373184.aspx:
 // "Note that this structure definition was accidentally omitted from WinNT.h."
 struct PROCESSOR_POWER_INFORMATION {
@@ -26,7 +29,32 @@
   ULONG CurrentIdleState;
 };
 
-// include_next <winnt.h>
-#include <../um/winnt.h>
+// 10.0.10240.0 SDK
+
+#ifndef PROCESSOR_ARCHITECTURE_ARM64
+#define PROCESSOR_ARCHITECTURE_ARM64 12
+#endif
+
+#ifndef PF_ARM_V8_INSTRUCTIONS_AVAILABLE
+#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
+#endif
+
+#ifndef PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE
+#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
+#endif
+
+#ifndef PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE
+#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
+#endif
+
+#ifndef PF_RDTSCP_INSTRUCTION_AVAILABLE
+#define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
+#endif
+
+// 10.0.14393.0 SDK
+
+#ifndef PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64
+#define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
+#endif
 
 #endif  // CRASHPAD_COMPAT_WIN_WINNT_H_
diff --git a/third_party/crashpad/crashpad/doc/appengine/README b/third_party/crashpad/crashpad/doc/appengine/README
index 00a7f76..9434ba0 100644
--- a/third_party/crashpad/crashpad/doc/appengine/README
+++ b/third_party/crashpad/crashpad/doc/appengine/README
@@ -1,7 +1,7 @@
 This is the App Engine app that serves https://crashpad.chromium.org/.
 
 To work on this app, obtain the App Engine SDK for Go from
-https://cloud.google.com/appengine/downloads. Unpacking it produces a
+https://cloud.google.com/appengine/docs/go/download. Unpacking it produces a
 go_appengine directory. This may be added to your $PATH for convenience,
 although it is not necessary.
 
@@ -19,7 +19,7 @@
 
 To test locally:
 
-$ goapp serve
+$ …/go_appengine/goapp serve
 
 Look for the “Starting module "default" running at: http://localhost:8080” line,
 which tells you the URL of the local running instance of the app.
@@ -28,7 +28,7 @@
 
 $ version=$(git rev-parse --short=12 HEAD)
 $ [[ -n "$(git status --porcelain)" ]] && version+=-dirty
-$ goapp deploy -version "${version}"
+$ …/go_appengine/goapp deploy -version "${version}"
 
 Note that app.yaml does not name a “version” to encourage you to use a git hash
 as the version, as above.
diff --git a/third_party/crashpad/crashpad/doc/appengine/main.go b/third_party/crashpad/crashpad/doc/appengine/main.go
index e05870f5..a33f70f 100644
--- a/third_party/crashpad/crashpad/doc/appengine/main.go
+++ b/third_party/crashpad/crashpad/doc/appengine/main.go
@@ -37,31 +37,53 @@
 
 func handler(w http.ResponseWriter, r *http.Request) {
 	const (
-		baseURL    = "https://chromium.googlesource.com/crashpad/crashpad/+/doc/doc/generated/?format=TEXT"
-		bugBaseURL = "https://bugs.chromium.org/p/crashpad/"
+		baseURL             = "https://chromium.googlesource.com/crashpad/crashpad/+/"
+		masterBaseURL       = baseURL + "master/"
+		generatedDocBaseURL = baseURL + "doc/doc/generated/?format=TEXT"
+		bugBaseURL          = "https://bugs.chromium.org/p/crashpad/"
 	)
 
+	redirectMap := map[string]string{
+		"/":                                masterBaseURL + "README.md",
+		"/bug":                             bugBaseURL,
+		"/bug/":                            bugBaseURL,
+		"/bug/new":                         bugBaseURL + "issues/entry",
+		"/doc/developing.html":             masterBaseURL + "/doc/developing.md",
+		"/doc/status.html":                 masterBaseURL + "/doc/status.md",
+		"/index.html":                      masterBaseURL + "README.md",
+		"/man":                             masterBaseURL + "doc/man.md",
+		"/man/":                            masterBaseURL + "doc/man.md",
+		"/man/catch_exception_tool.html":   masterBaseURL + "tools/mac/catch_exception_tool.md",
+		"/man/crashpad_database_util.html": masterBaseURL + "tools/crashpad_database_util.md",
+		"/man/crashpad_handler.html":       masterBaseURL + "handler/crashpad_handler.md",
+		"/man/exception_port_tool.html":    masterBaseURL + "tools/mac/exception_port_tool.md",
+		"/man/generate_dump.html":          masterBaseURL + "tools/generate_dump.md",
+		"/man/index.html":                  masterBaseURL + "doc/man.md",
+		"/man/on_demand_service_tool.html": masterBaseURL + "tools/mac/on_demand_service_tool.md",
+		"/man/run_with_crashpad.html":      masterBaseURL + "tools/mac/run_with_crashpad.md",
+	}
+
 	ctx := appengine.NewContext(r)
 	client := urlfetch.Client(ctx)
 
+	destinationURL, exists := redirectMap[r.URL.Path]
+	if exists {
+		http.Redirect(w, r, destinationURL, http.StatusFound)
+		return
+	}
+
+	if strings.HasPrefix(r.URL.Path, "/bug/") {
+		http.Redirect(w, r, bugBaseURL+"issues/detail?id="+r.URL.Path[5:], http.StatusFound)
+		return
+	}
+
 	// Don’t show dotfiles.
 	if strings.HasPrefix(path.Base(r.URL.Path), ".") {
 		http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
 		return
 	}
 
-	if r.URL.Path == "/bug" || r.URL.Path == "/bug/" {
-		http.Redirect(w, r, bugBaseURL, http.StatusFound)
-		return
-	} else if r.URL.Path == "/bug/new" {
-		http.Redirect(w, r, bugBaseURL+"issues/entry", http.StatusFound)
-		return
-	} else if strings.HasPrefix(r.URL.Path, "/bug/") {
-		http.Redirect(w, r, bugBaseURL+"issues/detail?id="+r.URL.Path[5:], http.StatusFound)
-		return
-	}
-
-	u, err := url.Parse(baseURL)
+	u, err := url.Parse(generatedDocBaseURL)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
diff --git a/third_party/crashpad/crashpad/doc/developing.ad b/third_party/crashpad/crashpad/doc/developing.ad
deleted file mode 100644
index a8aafcf..0000000
--- a/third_party/crashpad/crashpad/doc/developing.ad
+++ /dev/null
@@ -1,323 +0,0 @@
-// Copyright 2015 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: article
-
-= Developing Crashpad
-
-== Status
-
-link:status.html[Project status] information has moved to its own page.
-
-== Introduction
-
-Crashpad is a https://dev.chromium.org/Home[Chromium project]. Most of
-its development practices follow Chromium’s. In order to function on its
-own in other projects, Crashpad uses
-https://chromium.googlesource.com/chromium/mini_chromium/[mini_chromium],
-a small, self-contained library that provides many of Chromium’s useful
-low-level base routines.
-https://chromium.googlesource.com/chromium/mini_chromium/+/master/README[mini_chromium’s
-README] provides more detail.
-
-== Prerequisites
-
-To develop Crashpad, the following tools are necessary, and must be
-present in the `$PATH` environment variable:
-
- * Chromium’s
-   https://dev.chromium.org/developers/how-tos/depottools[depot_tools].
- * https://git-scm.com/[Git]. This is provided by Xcode on Mac OS X and by
-   depot_tools on Windows.
- * https://www.python.org/[Python]. This is provided by the operating system on
-   Mac OS X, and by depot_tools on Windows.
- * Appropriate development tools. For Mac OS X, this is
-   https://developer.apple.com/xcode/[Xcode], and for Windows, it’s
-   https://www.visualstudio.com/[Visual Studio].
-
-== Getting the Source Code
-
-The main source code repository is a Git repository hosted at
-https://chromium.googlesource.com/crashpad/crashpad. Although it is possible to
-check out this repository directly with `git clone`, Crashpad’s dependencies are
-managed by
-https://dev.chromium.org/developers/how-tos/depottools#TOC-gclient[`gclient`]
-instead of Git submodules, so to work on Crashpad, it is best to use `fetch` to
-get the source code.
-
-`fetch` and `gclient` are part of the
-https://dev.chromium.org/developers/how-tos/depottools[depot_tools]. There’s no
-need to install them separately.
-
-=== Initial Checkout
-
-[subs="verbatim,quotes"]
-----
-$ *mkdir \~/crashpad*
-$ *cd ~/crashpad*
-$ *fetch crashpad*
-----
-
-`fetch crashpad` performs the initial `git clone` and `gclient sync`,
-establishing a fully-functional local checkout.
-
-=== Subsequent Checkouts
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~/crashpad/crashpad*
-$ *git pull -r*
-$ *gclient sync*
-----
-
-== Building
-
-Crashpad uses https://gyp.gsrc.io/[GYP] to generate
-https://ninja-build.org/[Ninja] build files. The build is described by `.gyp`
-files throughout the Crashpad source code tree. The `build/gyp_crashpad.py`
-script runs GYP properly for Crashpad, and is also called when you run `fetch
-crashpad`, `gclient sync`, or `gclient runhooks`.
-
-The Ninja build files and build output are in the `out` directory. Both debug-
-and release-mode configurations are available. The examples below show the debug
-configuration. To build and test the release configuration, substitute `Release`
-for `Debug`.
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~/crashpad/crashpad*
-$ *ninja -C out/Debug*
-----
-
-Ninja is part of the
-https://dev.chromium.org/developers/how-tos/depottools[depot_tools]. There’s no
-need to install it separately.
-
-=== Android
-
-Crashpad’s Android port is in its early stages. This build relies on
-cross-compilation. It’s possible to develop Crashpad for Android on any platform
-that the https://developer.android.com/ndk/[Android NDK (Native Development
-Kit)] runs on.
-
-If it’s not already present on your system,
-https://developer.android.com/ndk/downloads/[download the NDK package for your
-system] and expand it to a suitable location. These instructions assume that
-it’s been expanded to `~/android-ndk-r13`.
-
-To build Crashpad, portions of the NDK must be reassembled into a
-https://developer.android.com/ndk/guides/standalone_toolchain.html[standalone
-toolchain]. This is a repackaged subset of the NDK suitable for cross-compiling
-for a single Android architecture (such as `arm`, `arm64`, `x86`, and `x86_64`)
-targeting a specific
-https://source.android.com/source/build-numbers.html[Android API level]. The
-standalone toolchain only needs to be built from the NDK one time for each set
-of options desired. To build a standalone toolchain targeting 64-bit ARM and API
-level 21 (Android 5.0 “Lollipop”), run:
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~*
-$ *python android-ndk-r13/build/tools/make_standalone_toolchain.py \
-      --arch=arm64 --api=21 --install-dir=android-ndk-r13_arm64_api21*
-----
-
-Note that Chrome uses Android API level 21 for 64-bit platforms and 16 for
-32-bit platforms. See Chrome’s
-https://chromium.googlesource.com/chromium/src/+/master/build/config/android/config.gni[`build/config/android/config.gni`]
-which sets `_android_api_level` and `_android64_api_level`.
-
-To configure a Crashpad build for Android using this standalone toolchain,
-set several environment variables directing the build to the standalone
-toolchain, along with GYP options to identify an Android build. This must be
-done after any `gclient sync`, or instead of any `gclient runhooks` operation.
-The environment variables only need to be set for this `gyp_crashpad.py`
-invocation, and need not be permanent.
-
-[subs="verbatim,quotes"]
-----
-$ *cd \~/crashpad/crashpad*
-$ *CC_target=\~/android-ndk-r13_arm64_api21/bin/clang \
-  CXX_target=\~/android-ndk-r13_arm64_api21/bin/clang++ \
-  AR_target=\~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-ar \
-  NM_target=\~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-nm \
-  READELF_target=~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-readelf \
-  python build/gyp_crashpad.py \
-      -DOS=android -Dtarget_arch=arm64 -Dclang=1 \
-      --generator-output=out_android_arm64_api21 -f ninja-android*
-----
-
-Target “triplets” to use for `ar`, `nm`, and `readelf` are:
-
-[width="40%",cols="1,3",frame="topbot"]
-|===
-|`arm` |`arm-linux-androideabi`
-|`arm64` |`aarch64-linux-android`
-|`x86` |`i686-linux-android`
-|`x86_64` |`x86_64-linux-android`
-|===
-
-The port is incomplete, but targets known to be working include `crashpad_util`,
-`crashpad_test`, and `crashpad_test_test`. This list will grow over time. To
-build, direct `ninja` to the specific `out` directory chosen by
-`--generator-output` above.
-
-[subs="verbatim,quotes"]
-----
-$ *ninja -C out_android_arm64_api21/out/Debug crashpad_test_test*
-----
-
-== Testing
-
-Crashpad uses https://github.com/google/googletest/[Google Test] as its
-unit-testing framework, and some tests use
-https://github.com/google/googletest/tree/master/googlemock/[Google Mock] as
-well. Its tests are currently split up into several test executables, each
-dedicated to testing a different component. This may change in the future. After
-a successful build, the test executables will be found at
-`out/Debug/crashpad_*_test`.
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~/crashpad/crashpad*
-$ *out/Debug/crashpad_minidump_test*
-$ *out/Debug/crashpad_util_test*
-----
-
-A script is provided to run all of Crashpad’s tests. It accepts a single
-argument that tells it which configuration to test.
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~/crashpad/crashpad*
-$ *python build/run_tests.py Debug*
-----
-
-=== Android
-
-To test on Android, use
-https://developer.android.com/studio/command-line/adb.html[ADB (Android Debug
-Bridge)] to `adb push` test executables and test data to a device or emulator,
-then use `adb shell` to get a shell to run the test executables from. ADB is
-part of the https://developer.android.com/sdk/[Android SDK]. Note that it is
-sufficient to install just the command-line tools. The entire Android Studio IDE
-is not necessary to obtain ADB.
-
-This example runs `crashpad_test_test` on a device. This test executable has a
-run-time dependency on a second executable and a test data file, which are also
-transferred to the device prior to running the test.
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~/crashpad/crashpad*
-$ *adb push out_android_arm64_api21/out/Debug/crashpad_test_test /data/local/tmp/*
-[100%] /data/local/tmp/crashpad_test_test
-$ *adb push \
-      out_android_arm64_api21/out/Debug/crashpad_test_test_multiprocess_exec_test_child \
-      /data/local/tmp/*
-[100%] /data/local/tmp/crashpad_test_test_multiprocess_exec_test_child
-$ *adb shell mkdir -p /data/local/tmp/crashpad_test_data_root/test*
-$ *adb push test/paths_test_data_root.txt \
-      /data/local/tmp/crashpad_test_data_root/test/*
-[100%] /data/local/tmp/crashpad_test_data_root/test/paths_test_data_root.txt
-$ *adb shell*
-device:/ $ *cd /data/local/tmp*
-device:/data/local/tmp $ *CRASHPAD_TEST_DATA_ROOT=crashpad_test_data_root \
-                         ./crashpad_test_test*
-----
-
-== Contributing
-
-Crashpad’s contribution process is very similar to
-https://dev.chromium.org/developers/contributing-code[Chromium’s contribution
-process].
-
-=== Code Review
-
-A code review must be conducted for every change to Crashpad’s source code. Code
-review is conducted on https://chromium-review.googlesource.com/[Chromium’s
-Gerrit] system, and all code reviews must be sent to an appropriate reviewer,
-with a Cc sent to
-https://groups.google.com/a/chromium.org/group/crashpad-dev[crashpad-dev]. The
-https://chromium.googlesource.com/crashpad/crashpad/+/master/codereview.settings[`codereview.settings`]
-file specifies this environment to `git-cl`.
-
-`git-cl` is part of the
-https://dev.chromium.org/developers/how-tos/depottools[depot_tools]. There’s no
-need to install it separately.
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~/crashpad/crashpad*
-$ *git checkout -b work_branch origin/master*
-_…do some work…_
-$ *git add …*
-$ *git commit*
-$ *git cl upload*
-----
-
-The https://polygerrit.appspot.com/[PolyGerrit interface] to Gerrit, undergoing
-active development, is recommended. To switch from the classic GWT-based Gerrit
-UI to PolyGerrit, click the PolyGerrit link in a Gerrit review page’s footer.
-
-Uploading a patch to Gerrit does not automatically request a review. You must
-select a reviewer on the Gerrit review page after running `git cl upload`. This
-action notifies your reviewer of the code review request. If you have lost track
-of the review page, `git cl issue` will remind you of its URL. Alternatively,
-you can request review when uploading to Gerrit by using `git cl upload
---send-mail`.
-
-Git branches maintain their association with Gerrit reviews, so if you need to
-make changes based on review feedback, you can do so on the correct Git branch,
-committing your changes locally with `git commit`. You can then upload a new
-patch set with `git cl upload` and let your reviewer know you’ve addressed the
-feedback.
-
-=== Landing Changes
-
-After code review is complete and “Code-Review: +1” has been received from all
-reviewers, project members can commit the patch themselves:
-
-[subs="verbatim,quotes"]
-----
-$ *cd ~/crashpad/crashpad*
-$ *git checkout work_branch*
-$ *git cl land*
-----
-
-Alternatively, patches can be committed by clicking the “Submit” button in the
-Gerrit UI.
-
-Crashpad does not currently have a
-https://dev.chromium.org/developers/testing/commit-queue[commit queue], so
-contributors who are not project members will have to ask a project member to
-commit the patch for them. Project members can commit changes on behalf of
-external contributors by clicking the “Submit” button in the Gerrit UI.
-
-=== External Contributions
-
-Copyright holders must complete the
-https://developers.google.com/open-source/cla/individual[Individual Contributor
-License Agreement] or
-https://developers.google.com/open-source/cla/corporate[Corporate Contributor
-License Agreement] as appropriate before any submission can be accepted, and
-must be listed in the `AUTHORS` file. Contributors may be listed in the
-`CONTRIBUTORS` file.
-
-== Buildbot
-
-The https://build.chromium.org/p/client.crashpad/[Crashpad Buildbot] performs
-automated builds and tests of Crashpad. Before checking out or updating the
-Crashpad source code, and after checking in a new change, it is prudent to check
-the Buildbot to ensure that “the tree is green.”
diff --git a/third_party/crashpad/crashpad/doc/developing.md b/third_party/crashpad/crashpad/doc/developing.md
new file mode 100644
index 0000000..9f88167
--- /dev/null
+++ b/third_party/crashpad/crashpad/doc/developing.md
@@ -0,0 +1,318 @@
+<!--
+Copyright 2015 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# Developing Crashpad
+
+## Status
+
+[Project status](status.md) information has moved to its own page.
+
+## Introduction
+
+Crashpad is a [Chromium project](https://dev.chromium.org/Home). Most of its
+development practices follow Chromium’s. In order to function on its own in
+other projects, Crashpad uses
+[mini_chromium](https://chromium.googlesource.com/chromium/mini_chromium/), a
+small, self-contained library that provides many of Chromium’s useful low-level
+base routines. [mini_chromium’s
+README](https://chromium.googlesource.com/chromium/mini_chromium/+/master/README.md)
+provides more detail.
+
+## Prerequisites
+
+To develop Crashpad, the following tools are necessary, and must be present in
+the `$PATH` environment variable:
+
+ * Appropriate development tools. For macOS, this is
+   [Xcode](https://developer.apple.com/xcode/) and for Windows, it’s [Visual
+   Studio](https://www.visualstudio.com/).
+ * Chromium’s
+   [depot_tools](https://dev.chromium.org/developers/how-tos/depottools).
+ * [Git](https://git-scm.com/). This is provided by Xcode on macOS and by
+   depot_tools on Windows.
+ * [Python](https://www.python.org/). This is provided by the operating system
+   on macOS, and by depot_tools on Windows.
+
+## Getting the Source Code
+
+The main source code repository is a Git repository hosted at
+https://chromium.googlesource.com/crashpad/crashpad. Although it is possible to
+check out this repository directly with `git clone`, Crashpad’s dependencies are
+managed by
+[`gclient`](https://dev.chromium.org/developers/how-tos/depottools#TOC-gclient)
+instead of Git submodules, so to work on Crashpad, it is best to use `fetch` to
+get the source code.
+
+`fetch` and `gclient` are part of the
+[depot_tools](https://dev.chromium.org/developers/how-tos/depottools). There’s
+no need to install them separately.
+
+### Initial Checkout
+
+```
+$ mkdir ~/crashpad
+$ cd ~/crashpad
+$ fetch crashpad
+```
+
+`fetch crashpad` performs the initial `git clone` and `gclient sync`,
+establishing a fully-functional local checkout.
+
+### Subsequent Checkouts
+
+```
+$ cd ~/crashpad/crashpad
+$ git pull -r
+$ gclient sync
+```
+
+## Building
+
+Crashpad uses [GYP](https://gyp.gsrc.io/) to generate
+[Ninja](https://ninja-build.org/) build files. The build is described by `.gyp`
+files throughout the Crashpad source code tree. The
+[`build/gyp_crashpad.py`](https://chromium.googlesource.com/crashpad/crashpad/+/master/build/gyp_crashpad.py)
+script runs GYP properly for Crashpad, and is also called when you run `fetch
+crashpad`, `gclient sync`, or `gclient runhooks`.
+
+The Ninja build files and build output are in the `out` directory. Both debug-
+and release-mode configurations are available. The examples below show the debug
+configuration. To build and test the release configuration, substitute `Release`
+for `Debug`.
+
+```
+$ cd ~/crashpad/crashpad
+$ ninja -C out/Debug
+```
+
+Ninja is part of the
+[depot_tools](https://dev.chromium.org/developers/how-tos/depottools). There’s
+no need to install it separately.
+
+### Android
+
+Crashpad’s Android port is in its early stages. This build relies on
+cross-compilation. It’s possible to develop Crashpad for Android on any platform
+that the [Android NDK (Native Development
+Kit)](https://developer.android.com/ndk/) runs on.
+
+If it’s not already present on your system, [download the NDK package for your
+system](https://developer.android.com/ndk/downloads/) and expand it to a
+suitable location. These instructions assume that it’s been expanded to
+`~/android-ndk-r13`.
+
+To build Crashpad, portions of the NDK must be reassembled into a [standalone
+toolchain](https://developer.android.com/ndk/guides/standalone_toolchain.html).
+This is a repackaged subset of the NDK suitable for cross-compiling for a single
+Android architecture (such as `arm`, `arm64`, `x86`, and `x86_64`) targeting a
+specific [Android API
+level](https://source.android.com/source/build-numbers.html). The standalone
+toolchain only needs to be built from the NDK one time for each set of options
+desired. To build a standalone toolchain targeting 64-bit ARM and API level 21
+(Android 5.0 “Lollipop”), run:
+
+```
+$ cd ~
+$ python android-ndk-r13/build/tools/make_standalone_toolchain.py \
+      --arch=arm64 --api=21 --install-dir=android-ndk-r13_arm64_api21
+```
+
+Note that Chrome uses Android API level 21 for 64-bit platforms and 16 for
+32-bit platforms. See Chrome’s
+[`build/config/android/config.gni`](https://chromium.googlesource.com/chromium/src/+/master/build/config/android/config.gni)
+which sets `_android_api_level` and `_android64_api_level`.
+
+To configure a Crashpad build for Android using this standalone toolchain, set
+several environment variables directing the build to the standalone toolchain,
+along with GYP options to identify an Android build. This must be done after any
+`gclient sync`, or instead of any `gclient runhooks` operation. The environment
+variables only need to be set for this `gyp_crashpad.py` invocation, and need
+not be permanent.
+
+```
+$ cd ~/crashpad/crashpad
+$ CC_target=~/android-ndk-r13_arm64_api21/bin/clang \
+  CXX_target=~/android-ndk-r13_arm64_api21/bin/clang++ \
+  AR_target=~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-ar \
+  NM_target=~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-nm \
+  READELF_target=~/android-ndk-r13_arm64_api21/bin/aarch64-linux-android-readelf \
+  python build/gyp_crashpad.py \
+      -DOS=android -Dtarget_arch=arm64 -Dclang=1 \
+      --generator-output=out_android_arm64_api21 -f ninja-android
+```
+
+It is also possible to use GCC instead of Clang by making the appropriate
+substitutions: `aarch64-linux-android-gcc` for `CC_target`;
+`aarch64-linux-android-g++` for `CXX_target`; and `-Dclang=0` as an argument to
+`gyp_crashpad.py`.
+
+Target “triplets” to use for `ar`, `nm`, `readelf`, `gcc`, and `g++` are:
+
+| Architecture | Target “triplet”        |
+|:-------------|:------------------------|
+| `arm`        | `arm-linux-androideabi` |
+| `arm64`      | `aarch64-linux-android` |
+| `x86`        | `i686-linux-android`    |
+| `x86_64`     | `x86_64-linux-android`  |
+
+The port is incomplete, but targets known to be working include `crashpad_util`,
+`crashpad_test`, and `crashpad_test_test`. This list will grow over time. To
+build, direct `ninja` to the specific `out` directory chosen by
+`--generator-output` above.
+
+```
+$ ninja -C out_android_arm64_api21/out/Debug crashpad_test_test
+```
+
+## Testing
+
+Crashpad uses [Google Test](https://github.com/google/googletest/) as its
+unit-testing framework, and some tests use [Google
+Mock](https://github.com/google/googletest/tree/master/googlemock/) as well. Its
+tests are currently split up into several test executables, each dedicated to
+testing a different component. This may change in the future. After a successful
+build, the test executables will be found at `out/Debug/crashpad_*_test`.
+
+```
+$ cd ~/crashpad/crashpad
+$ out/Debug/crashpad_minidump_test
+$ out/Debug/crashpad_util_test
+```
+
+A script is provided to run all of Crashpad’s tests. It accepts a single
+argument that tells it which configuration to test.
+
+```
+$ cd ~/crashpad/crashpad
+$ python build/run_tests.py Debug
+```
+
+### Android
+
+To test on Android, use [ADB (Android Debug
+Bridge)](https://developer.android.com/studio/command-line/adb.html) to `adb
+push` test executables and test data to a device or emulator, then use `adb
+shell` to get a shell to run the test executables from. ADB is part of the
+[Android SDK](https://developer.android.com/sdk/). Note that it is sufficient to
+install just the command-line tools. The entire Android Studio IDE is not
+necessary to obtain ADB.
+
+This example runs `crashpad_test_test` on a device. This test executable has a
+run-time dependency on a second executable and a test data file, which are also
+transferred to the device prior to running the test.
+
+```
+$ cd ~/crashpad/crashpad
+$ adb push out_android_arm64_api21/out/Debug/crashpad_test_test /data/local/tmp/
+[100%] /data/local/tmp/crashpad_test_test
+$ adb push \
+      out_android_arm64_api21/out/Debug/crashpad_test_test_multiprocess_exec_test_child \
+      /data/local/tmp/
+[100%] /data/local/tmp/crashpad_test_test_multiprocess_exec_test_child
+$ adb shell mkdir -p /data/local/tmp/crashpad_test_data_root/test
+$ adb push test/paths_test_data_root.txt \
+      /data/local/tmp/crashpad_test_data_root/test/
+[100%] /data/local/tmp/crashpad_test_data_root/test/paths_test_data_root.txt
+$ adb shell
+device:/ $ cd /data/local/tmp
+device:/data/local/tmp $ CRASHPAD_TEST_DATA_ROOT=crashpad_test_data_root \
+                         ./crashpad_test_test
+```
+
+## Contributing
+
+Crashpad’s contribution process is very similar to [Chromium’s contribution
+process](https://dev.chromium.org/developers/contributing-code).
+
+### Code Review
+
+A code review must be conducted for every change to Crashpad’s source code. Code
+review is conducted on [Chromium’s
+Gerrit](https://chromium-review.googlesource.com/) system, and all code reviews
+must be sent to an appropriate reviewer, with a Cc sent to
+[crashpad-dev](https://groups.google.com/a/chromium.org/group/crashpad-dev). The
+[`codereview.settings`](https://chromium.googlesource.com/crashpad/crashpad/+/master/codereview.settings)
+file specifies this environment to `git-cl`.
+
+`git-cl` is part of the
+[depot_tools](https://dev.chromium.org/developers/how-tos/depottools). There’s
+no need to install it separately.
+
+```
+$ cd ~/crashpad/crashpad
+$ git checkout -b work_branch origin/master
+…do some work…
+$ git add …
+$ git commit
+$ git cl upload
+```
+
+The [PolyGerrit interface](https://polygerrit.appspot.com/) to Gerrit,
+undergoing active development, is recommended. To switch from the classic
+GWT-based Gerrit UI to PolyGerrit, click the PolyGerrit link in a Gerrit review
+page’s footer.
+
+Uploading a patch to Gerrit does not automatically request a review. You must
+select a reviewer on the Gerrit review page after running `git cl upload`. This
+action notifies your reviewer of the code review request. If you have lost track
+of the review page, `git cl issue` will remind you of its URL. Alternatively,
+you can request review when uploading to Gerrit by using `git cl upload
+--send-mail`.
+
+Git branches maintain their association with Gerrit reviews, so if you need to
+make changes based on review feedback, you can do so on the correct Git branch,
+committing your changes locally with `git commit`. You can then upload a new
+patch set with `git cl upload` and let your reviewer know you’ve addressed the
+feedback.
+
+### Landing Changes
+
+After code review is complete and “Code-Review: +1” has been received from all
+reviewers, project members can commit the patch themselves:
+
+```
+$ cd ~/crashpad/crashpad
+$ git checkout work_branch
+$ git cl land
+```
+
+Alternatively, patches can be committed by clicking the “Submit” button in the
+Gerrit UI.
+
+Crashpad does not currently have a [commit
+queue](https://dev.chromium.org/developers/testing/commit-queue), so
+contributors who are not project members will have to ask a project member to
+commit the patch for them. Project members can commit changes on behalf of
+external contributors by clicking the “Submit” button in the Gerrit UI.
+
+### External Contributions
+
+Copyright holders must complete the [Individual Contributor License
+Agreement](https://developers.google.com/open-source/cla/individual) or
+[Corporate Contributor License
+Agreement](https://developers.google.com/open-source/cla/corporate) as
+appropriate before any submission can be accepted, and must be listed in the
+[`AUTHORS`](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS)
+file. Contributors may be listed in the
+[`CONTRIBUTORS`](https://chromium.googlesource.com/crashpad/crashpad/+/master/CONTRIBUTORS)
+file.
+
+## Buildbot
+
+The [Crashpad Buildbot](https://build.chromium.org/p/client.crashpad/) performs
+automated builds and tests of Crashpad. Before checking out or updating the
+Crashpad source code, and after checking in a new change, it is prudent to check
+the Buildbot to ensure that “the tree is green.”
diff --git a/third_party/crashpad/crashpad/doc/index.ad b/third_party/crashpad/crashpad/doc/index.ad
deleted file mode 100644
index 3b06292..0000000
--- a/third_party/crashpad/crashpad/doc/index.ad
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2015 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: article
-
-= Crashpad
-
-https://crashpad.chromium.org/[Crashpad] is a crash-reporting system.
-
-== Documentation
-
- * link:status.html[Project status]
- * link:developing.html[Developing Crashpad]: instructions for getting the
-   source code, building, testing, and contributing to the project.
- * https://crashpad.chromium.org/doxygen/index.html[Crashpad interface
-   documentation]
- * https://crashpad.chromium.org/man/index.html[Crashpad tool man pages]
-
-== Source Code
-
-Crashpad’s source code is hosted in a Git repository at
-https://chromium.googlesource.com/crashpad/crashpad.
-
-== Other Links
-
- * Bugs can be reported at the https://crashpad.chromium.org/bug/[Crashpad issue
-   tracker].
- * The https://build.chromium.org/p/client.crashpad[Crashpad Buildbot] performs
-   automated builds and tests.
- * https://groups.google.com/a/chromium.org/group/crashpad-dev[crashpad-dev] is
-   the Crashpad developers’ mailing list.
diff --git a/third_party/crashpad/crashpad/doc/man.md b/third_party/crashpad/crashpad/doc/man.md
new file mode 100644
index 0000000..ff5fd41
--- /dev/null
+++ b/third_party/crashpad/crashpad/doc/man.md
@@ -0,0 +1,33 @@
+<!--
+Copyright 2016 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# Man Pages
+
+## Section 1: User Commands
+
+ * [crashpad_database_util](../tools/crashpad_database_util.md)
+ * [generate_dump](../tools/generate_dump.md)
+
+### macOS-Specific
+
+ * [catch_exception_tool](../tools/mac/catch_exception_tool.md)
+ * [exception_port_tool](../tools/mac/exception_port_tool.md)
+ * [on_demand_service_tool](../tools/mac/on_demand_service_tool.md)
+ * [run_with_crashpad](../tools/mac/run_with_crashpad.md)
+
+## Section 8: Dӕmons
+
+ * [crashpad_handler](../handler/crashpad_handler.md)
diff --git a/third_party/crashpad/crashpad/doc/status.ad b/third_party/crashpad/crashpad/doc/status.ad
deleted file mode 100644
index 6d45dd4..0000000
--- a/third_party/crashpad/crashpad/doc/status.ad
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2015 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: article
-
-= Project Status
-
-== Completed
-
-Crashpad currently consists of a crash-reporting client and some related tools
-for Mac OS X and Windows. The core client work for both platforms is
-substantially complete. Crashpad became the crash reporter client for
-https://dev.chromium.org/Home[Chromium] on Mac OS X as of
-https://chromium.googlesource.com/chromium/src/\+/d413b2dcb54d523811d386f1ff4084f677a6d089[March
-2015], and on Windows as of
-https://chromium.googlesource.com/chromium/src/\+/cfa5b01bb1d06bf96967bd37e21a44752801948c[November
-2015].
-
-== In Progress
-
-Initial work on a Crashpad client for
-https://crashpad.chromium.org/bug/30[Android] has begun. This is currently in
-the early implementation phase.
-
-== Future
-
-There are plans to bring Crashpad clients to other operating systems in the
-future, including a more generic non-Android Linux implementation. There are
-also plans to implement a https://crashpad.chromium.org/bug/29[crash report
-processor] as part of Crashpad. No timeline for completing this work has been
-set yet.
diff --git a/third_party/crashpad/crashpad/doc/status.md b/third_party/crashpad/crashpad/doc/status.md
new file mode 100644
index 0000000..be4503a
--- /dev/null
+++ b/third_party/crashpad/crashpad/doc/status.md
@@ -0,0 +1,41 @@
+<!--
+Copyright 2015 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# Project Status
+
+## Completed
+
+Crashpad currently consists of a crash-reporting client and some related tools
+for macOS and Windows. The core client work for both platforms is substantially
+complete. Crashpad became the crash reporter client for
+[Chromium](https://dev.chromium.org/Home) on macOS as of [March
+2015](https://chromium.googlesource.com/chromium/src/\+/d413b2dcb54d523811d386f1ff4084f677a6d089),
+and on Windows as of [November
+2015](https://chromium.googlesource.com/chromium/src/\+/cfa5b01bb1d06bf96967bd37e21a44752801948c).
+
+## In Progress
+
+Initial work on a Crashpad client for
+[Android](https://crashpad.chromium.org/bug/30) has begun. This is currently in
+the early implementation phase.
+
+## Future
+
+There are plans to bring Crashpad clients to other operating systems in the
+future, including a more generic non-Android Linux implementation. There are
+also plans to implement a [crash report
+processor](https://crashpad.chromium.org/bug/29) as part of Crashpad. No
+timeline for completing this work has been set yet.
diff --git a/third_party/crashpad/crashpad/doc/support/asciidoc.conf b/third_party/crashpad/crashpad/doc/support/asciidoc.conf
deleted file mode 100644
index a4ab2c4..0000000
--- a/third_party/crashpad/crashpad/doc/support/asciidoc.conf
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright 2015 The Crashpad Authors. All rights reserved.
-#
-# 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.
-
-[miscellaneous]
-# AsciiDoc uses \r\n by default.
-newline=\n
-
-# The default AsciiDoc lang-en.conf uses docdate and doctime for the
-# last-updated line in footer-text. These attributes are taken from the file’s
-# mtime and cannot be overridden. For a git-based project, the date of the last
-# revision is desirable, so change this to use git_date, an attribute that can
-# be computed and passed in by the script that runs AsciiDoc. For man pages, use
-# the mansource and manversion attributes instead of the hard-coded “Version”
-# string and revnumber attribute, so that the version will appear as “Crashpad
-# 0.7.0” as it does in “man” output.
-ifdef::basebackend-html[]
-[footer-text]
-ifdef::doctype-manpage[]
-{mansource=Version} {manversion={revnumber}}{basebackend-xhtml11?<br />}{basebackend-xhtml11=<br>}
-endif::doctype-manpage[]
-ifndef::doctype-manpage[]
-Version {revnumber}{basebackend-xhtml11?<br />}{basebackend-xhtml11=<br>}
-endif::doctype-manpage[]
-Last updated {git_date}
-endif::basebackend-html[]
-
-# The man_link macro was inspired by git’s linkgit macro. See
-# https://github.com/git/git/blob/master/Documentation/asciidoc.conf.
-ifdef::doctype-manpage[]
-
-[macros]
-(?su)[\\]?(?P<name>man_link):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
-
-ifdef::backend-docbook[]
-[man_link-inlinemacro]
-{0%{target}}
-{0#<citerefentry>}
-{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
-{0#</citerefentry>}
-endif::backend-docbook[]
-
-ifdef::basebackend-html[]
-[man_link-inlinemacro]
-<a href="{target}.html">{target}{0?({0})}</a>
-endif::basebackend-html[]
-
-endif::doctype-manpage[]
diff --git a/third_party/crashpad/crashpad/doc/support/asciidoc.css b/third_party/crashpad/crashpad/doc/support/asciidoc.css
deleted file mode 100644
index 9808c216..0000000
--- a/third_party/crashpad/crashpad/doc/support/asciidoc.css
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright 2015 The Crashpad Authors. All rights reserved.
- *
- * 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. */
-
-/* The default AsciiDoc asciidoc.css specifies fuchsia as the visited link
- * color. This has a dated appearance. Replace it with blue, the same color used
- * for unvisited links. */
-a:visited {
-  color: blue;
-}
diff --git a/third_party/crashpad/crashpad/doc/support/crashpad.doxy b/third_party/crashpad/crashpad/doc/support/crashpad.doxy
index 276a7945..198b717 100644
--- a/third_party/crashpad/crashpad/doc/support/crashpad.doxy
+++ b/third_party/crashpad/crashpad/doc/support/crashpad.doxy
@@ -1,4 +1,4 @@
-# Doxyfile 1.8.9.1
+# Doxyfile 1.8.12
 
 # This file describes the settings to be used by the documentation system
 # doxygen (www.doxygen.org) for a project.
@@ -162,7 +162,7 @@
 # using the -I flag.
 
 STRIP_FROM_INC_PATH    = . \
-                         compat/mac \
+                         compat/non_mac \
                          compat/non_win
 
 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
@@ -295,6 +295,15 @@
 
 MARKDOWN_SUPPORT       = YES
 
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
 # When enabled doxygen tries to link words that correspond to documented
 # classes, or namespaces to their corresponding documentation. Such a link can
 # be prevented in individual cases by putting a % sign in front of the word or
@@ -345,6 +354,13 @@
 
 DISTRIBUTE_GROUP_DOC   = YES
 
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
 # Set the SUBGROUPING tag to YES to allow class member groups of the same type
 # (for instance a group of public functions) to be put as a subgroup of that
 # type (e.g. under the Public Functions section). Set it to NO to prevent
@@ -700,7 +716,7 @@
 # messages are off.
 # The default value is: NO.
 
-QUIET                  = NO
+QUIET                  = YES
 
 # The WARNINGS tag can be used to turn on/off the warning messages that are
 # generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
@@ -716,7 +732,7 @@
 # will automatically be disabled.
 # The default value is: YES.
 
-WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_UNDOCUMENTED   = NO
 
 # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
 # potential errors in the documentation, such as not documenting some parameters
@@ -734,6 +750,12 @@
 
 WARN_NO_PARAMDOC       = NO
 
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
 # The WARN_FORMAT tag determines the format of the warning messages that doxygen
 # can produce. The string should contain the $file, $line, and $text tags, which
 # will be replaced by the file and line number from which the warning originated
@@ -757,7 +779,7 @@
 # The INPUT tag is used to specify the files and/or directories that contain
 # documented source files. You may enter file names like myfile.cpp or
 # directories like /usr/src/myproject. Separate the files or directories with
-# spaces.
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
 # Note: If this tag is empty the current directory is searched.
 
 INPUT                  =
@@ -773,12 +795,17 @@
 
 # If the value of the INPUT tag contains directories, you can use the
 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank the
-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
-# *.qsf, *.as and *.js.
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
 
 FILE_PATTERNS          = *.c \
                          *.cc \
@@ -799,7 +826,10 @@
 # Note that relative paths are relative to the directory from which doxygen is
 # run.
 
-EXCLUDE                = third_party
+EXCLUDE                = compat/mac \
+                         compat/non_cxx11_lib \
+                         compat/win \
+                         third_party
 
 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
 # directories that are symbolic links (a Unix file system feature) are excluded
@@ -868,6 +898,10 @@
 # Note that the filter must not add or remove lines; it is applied before the
 # code is scanned, but not when the output code is generated. If lines are added
 # or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
 
 INPUT_FILTER           =
 
@@ -877,6 +911,10 @@
 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
 # patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
 
 FILTER_PATTERNS        =
 
@@ -1091,7 +1129,7 @@
 # list). For an example see the documentation.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
-HTML_EXTRA_STYLESHEET  =
+HTML_EXTRA_STYLESHEET  = doc/support/crashpad_doxygen.css
 
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the HTML output directory. Note
@@ -1135,8 +1173,9 @@
 
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
 # page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: YES.
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_TIMESTAMP         = NO
@@ -1610,9 +1649,12 @@
 PAPER_TYPE             = a4
 
 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
 # If left blank no extra packages will be included.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
@@ -1715,6 +1757,14 @@
 
 LATEX_BIB_STYLE        = plain
 
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = NO
+
 #---------------------------------------------------------------------------
 # Configuration options related to the RTF output
 #---------------------------------------------------------------------------
@@ -2217,7 +2267,8 @@
 #
 # Note that enabling this option will significantly increase the time of a run.
 # So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
 # The default value is: NO.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
@@ -2228,7 +2279,8 @@
 #
 # Note that enabling this option will significantly increase the time of a run.
 # So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
 # The default value is: NO.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
@@ -2251,11 +2303,15 @@
 DIRECTORY_GRAPH        = YES
 
 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
 # to make the SVG files visible in IE 9+ (other browsers do not have this
 # requirement).
-# Possible values are: png, jpg, gif and svg.
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
 # The default value is: png.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
diff --git a/third_party/crashpad/crashpad/doc/support/crashpad.doxy.h b/third_party/crashpad/crashpad/doc/support/crashpad.doxy.h
index 5bfefed..ae328d3 100644
--- a/third_party/crashpad/crashpad/doc/support/crashpad.doxy.h
+++ b/third_party/crashpad/crashpad/doc/support/crashpad.doxy.h
@@ -22,3 +22,13 @@
 
 //! \namespace crashpad::test
 //! \brief The testing namespace, for use in test code only.
+
+//! \mainpage Crashpad Interface Documentation
+//!
+//! Most generated interface documentation is reachable through <a
+//! href="namespaces.html">Namespaces</a>, <a href="annotated.html">Classes</a>
+//! (includes `struct`s, `union`s, and interfaces), or <a
+//! href="files.html">Files</a> (includes macros).
+//!
+//! Additional documentation is available at the <a
+//! href="https://crashpad.chromium.org/">Crashpad home page</a>.
diff --git a/third_party/crashpad/crashpad/doc/support/crashpad_doxygen.css b/third_party/crashpad/crashpad/doc/support/crashpad_doxygen.css
new file mode 100644
index 0000000..f21cfe90
--- /dev/null
+++ b/third_party/crashpad/crashpad/doc/support/crashpad_doxygen.css
@@ -0,0 +1,60 @@
+/* Copyright 2016 The Crashpad Authors. All rights reserved.
+ *
+ * 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 "https://fonts.googleapis.com/css?family=Open+Sans:300,400,700&subset=latin,cyrillic-ext,greek-ext,cyrillic,greek,vietnamese,latin-ext";
+@import "https://fonts.googleapis.com/css?family=Source+Code+Pro";
+
+body,
+table,
+div,
+p,
+dl,
+.title,
+.icon,
+table.directory,
+.navpath li.navelem a,
+#projectname,
+#projectbrief,
+#projectnumber,
+div.toc li,
+div.toc h3,
+#powerTip div,
+.sm-dox a,
+.sm-dox a:focus,
+.sm-dox a:hover,
+.sm-dox a:active {
+  font-family: 'Open Sans',
+               'Lucida Grande',
+               'Lucida Sans Unicode',
+               Helvetica,
+               Arial,
+               sans-serif;
+}
+
+code,
+tt,
+pre.fragment,
+div.line,
+.overload,
+.params .paramdir,
+.sm-dox a span.sub-arrow {
+  font-family: 'Source Code Pro',
+               Monaco,
+               'Lucida Console',
+               monospace;
+}
+
+.icon {
+  height: auto;
+}
diff --git a/third_party/crashpad/crashpad/doc/support/generate.sh b/third_party/crashpad/crashpad/doc/support/generate.sh
index 0a2be484..1e5bc92 100755
--- a/third_party/crashpad/crashpad/doc/support/generate.sh
+++ b/third_party/crashpad/crashpad/doc/support/generate.sh
@@ -29,51 +29,13 @@
 source doc/support/compat.sh
 
 doc/support/generate_doxygen.sh
-doc/support/generate_asciidoc.sh
 
 output_dir=doc/generated
 maybe_mkdir "${output_dir}"
 
-for subdir in doc doxygen man ; do
-  output_subdir="${output_dir}/${subdir}"
-  maybe_mkdir "${output_subdir}"
-  rsync -Ilr --delete --exclude .git "out/doc/${subdir}/html/" \
-      "${output_subdir}/"
-done
-
-# Move doc/index.html to index.html, adjusting relative paths to other files in
-# doc.
-base_url=https://crashpad.chromium.org/
-${sed_ext} -e 's%<a href="([^/]+)\.html">%<a href="doc/\1.html">%g' \
-    -e 's%<a href="'"${base_url}"'">%<a href="index.html">%g' \
-    -e 's%<a href="'"${base_url}"'%<a href="%g' \
-    < "${output_dir}/doc/index.html" > "${output_dir}/index.html"
-rm "${output_dir}/doc/index.html"
+maybe_mkdir "${output_dir}/doxygen"
+rsync -Ilr --delete --exclude .git "out/doc/doxygen/html/" \
+    "${output_dir}/doxygen"
 
 # Ensure a favicon exists at the root since the browser will always request it.
 cp doc/favicon.ico "${output_dir}/"
-
-# Create man/index.html
-cd "${output_dir}/man"
-cat > index.html << __EOF__
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>Crashpad Man Pages</title>
-<ul>
-__EOF__
-
-for html_file in *.html; do
-  if [[ "${html_file}" = "index.html" ]]; then
-    continue
-  fi
-  basename=$(${sed_ext} -e 's/\.html$//' <<< "${html_file}")
-  cat >> index.html << __EOF__
-  <li>
-    <a href="${html_file}">${basename}</a>
-  </li>
-__EOF__
-done
-
-cat >> index.html << __EOF__
-</ul>
-__EOF__
diff --git a/third_party/crashpad/crashpad/doc/support/generate_asciidoc.sh b/third_party/crashpad/crashpad/doc/support/generate_asciidoc.sh
deleted file mode 100755
index 54a5734..0000000
--- a/third_party/crashpad/crashpad/doc/support/generate_asciidoc.sh
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/bash
-
-# Copyright 2015 The Crashpad Authors. All rights reserved.
-#
-# 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.
-
-set -e
-
-# Generating AsciiDoc documentation requires AsciiDoc,
-# http://www.methods.co.nz/asciidoc/. For “man” and PDF output, a DocBook
-# toolchain including docbook-xml and docbook-xsl is also required.
-
-# Run from the Crashpad project root directory.
-cd "$(dirname "${0}")/../.."
-
-source doc/support/compat.sh
-
-output_dir=out/doc
-
-rm -rf \
-    "${output_dir}/doc" \
-    "${output_dir}/man"
-mkdir -p \
-    "${output_dir}/doc/html" \
-    "${output_dir}/man/html" \
-    "${output_dir}/man/man"
-
-# Get the version from package.h.
-version=$(${sed_ext} -n -e 's/^#define PACKAGE_VERSION "(.*)"$/\1/p' package.h)
-
-generate() {
-  input="$1"
-  type="$2"
-
-  case "${type}" in
-    doc)
-      doctype="article"
-      ;;
-    man)
-      doctype="manpage"
-      ;;
-    *)
-      echo "${0}: unknown type ${type}" >& 2
-      exit 1
-      ;;
-  esac
-
-  echo "${input}"
-
-  base=$(${sed_ext} -e 's%^.*/([^/]+)\.ad$%\1%' <<< "${input}")
-
-  # Get the last-modified date of $input according to Git, in UTC.
-  git_time_t="$(git log -1 --format=%at "${input}")"
-  git_date="$(LC_ALL=C ${date_time_t}"${git_time_t}" -u '+%B %-d, %Y')"
-
-  # Create HTML output.
-  asciidoc \
-      --attribute mansource=Crashpad \
-      --attribute manversion="${version}" \
-      --attribute manmanual="Crashpad Manual" \
-      --attribute git_date="${git_date}" \
-      --conf-file doc/support/asciidoc.conf \
-      --doctype "${doctype}" \
-      --backend html5 \
-      --attribute stylesheet="${PWD}/doc/support/asciidoc.css" \
-      --out-file "${output_dir}/${type}/html/${base}.html" \
-      "${input}"
-
-  if [[ "${type}" = "man" ]]; then
-    # Create “man” output.
-    #
-    # AsciiDoc 8.6.9 produces harmless incorrect warnings each time this is run:
-    # “a2x: WARNING: --destination-dir option is only applicable to HTML based
-    # outputs”. https://github.com/asciidoc/asciidoc/issues/44
-    a2x \
-        --attribute mansource=Crashpad \
-        --attribute manversion="${version}" \
-        --attribute manmanual="Crashpad Manual" \
-        --attribute git_date="${git_date}" \
-        --asciidoc-opts=--conf-file=doc/support/asciidoc.conf \
-        --doctype "${doctype}" \
-        --format manpage \
-        --destination-dir "${output_dir}/${type}/man" \
-        "${input}"
-  fi
-
-  # For PDF output, use an a2x command like the one above, with these options:
-  # --format pdf --fop --destination-dir "${output_dir}/${type}/pdf"
-}
-
-for input in \
-    doc/*.ad; do
-  generate "${input}" "doc"
-done
-
-for input in \
-    handler/crashpad_handler.ad \
-    tools/*.ad \
-    tools/mac/*.ad; do
-  generate "${input}" "man"
-done
diff --git a/third_party/crashpad/crashpad/doc/support/man_footer.ad b/third_party/crashpad/crashpad/doc/support/man_footer.ad
deleted file mode 100644
index 2dd84fc..0000000
--- a/third_party/crashpad/crashpad/doc/support/man_footer.ad
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-== Resources
-
-Crashpad home page: https://crashpad.chromium.org/.
-
-Report bugs at https://crashpad.chromium.org/bug/new.
-
-== Copyright
-
-Copyright 2016
-https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS[The
-Crashpad Authors].
-
-== License
-
-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
-
-[subs="macros"]
-    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.
diff --git a/third_party/crashpad/crashpad/handler/crashpad_handler.ad b/third_party/crashpad/crashpad/handler/crashpad_handler.ad
deleted file mode 100644
index a4918d6f..0000000
--- a/third_party/crashpad/crashpad/handler/crashpad_handler.ad
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: manpage
-
-= crashpad_handler(8)
-
-== Name
-
-crashpad_handler - Crashpad’s exception handler server
-
-== Synopsis
-
-[verse]
-*crashpad_handler* ['OPTION…']
-
-== Description
-
-This program is Crashpad’s main exception-handling server. It is responsible for
-catching exceptions, writing crash reports, and uploading them to a crash report
-collection server. Uploads are disabled by default, and can only be enabled by a
-Crashpad client using the Crashpad client library, typically in response to a
-user requesting this behavior.
-
-On OS X, this server may be started by its initial client, in which case it
-performs a handshake with this client via a pipe established by the client that
-is inherited by the server, referenced by the *--handshake-fd* argument. During
-the handshake, the server furnishes the client with a send right that the client
-may use as an exception port. The server retains the corresponding receive
-right, which it monitors for exception messages. When the receive right loses
-all senders, the server exits after allowing any upload in progress to complete.
-
-Alternatively, on OS X, this server may be started from launchd(8), where it
-receives the Mach service name in a *--mach-service* argument. It checks in with
-the bootstrap server under this service name, and clients may look it up with
-the bootstrap server under this service name. It monitors this service for
-exception messages. Upon receipt of +SIGTERM+, the server exits after allowing
-any upload in progress to complete. +SIGTERM+ is normally sent by launchd(8)
-when it determines that the server should exit.
-
-On Windows, clients register with this server by communicating with it via the
-named pipe identified by the *--pipe-name* argument. Alternatively, the server
-can inherit an already-created pipe from a parent process by using the
-*--initial-client-data* mechanism. That argument also takes all of the arguments
-that would normally be passed in a registration message, and so constitutes
-registration of the first client. Subsequent clients may then register by
-communicating with the server via the pipe. During registration, a client
-provides the server with an OS event object that it will signal should it crash.
-The server obtains the client’s process handle and waits on the crash event
-object for a crash, as well as the client’s process handle for the client to
-exit cleanly without crashing. When a server started via the
-*--initial-client-data* mechanism loses all of its clients, it exits after
-allowing any upload in progress to complete.
-
-On Windows, this executable is built by default as a Windows GUI app, so no
-console will appear in normal usage. This is the version that will typically be
-used. A second copy is also made with a +.com+ extension, rather than +.exe+. In
-this second copy, the PE header is modified to indicate that it's a console app.
-This is useful because the +.com+ is found in the path before the +.exe+, so
-when run normally from a shell using only the basename (without an explicit
-+.com+ or +.exe+ extension), the +.com+ console version will be chosen, and so
-stdio will be hooked up as expected to the parent console so that logging output
-will be visible.
-
-It is not normally appropriate to invoke this program directly. Usually, it will
-be invoked by a Crashpad client using the Crashpad client library, or started by
-another system service. On OS X, arbitrary programs may be run with a Crashpad
-handler by using man_link:run_with_crashpad[1] to establish the Crashpad client
-environment before running a program.
-
-== Options
-*--annotation*='KEY=VALUE'::
-Sets a process-level annotation mapping 'KEY' to 'VALUE' in each crash report
-that is written. This option may appear zero, one, or multiple times.
-+
-Most annotations should be provided by the Crashpad client as module-level
-annotations instead of process-level annotations. Module-level annotations are
-more flexible in that they can be modified and cleared during the client
-program’s lifetime. Module-level annotations can be set via the Crashpad client
-library. Process-level annotations are useful for annotations that the
-collection server requires be present, that have fixed values, and for cases
-where a program that does not use the Crashpad client library is being
-monitored.
-+
-Breakpad-type collection servers only require the +"prod"+ and +"ver"+
-annotations, which should be set to the product name or identifier and product
-version, respectively. It is unusual to specify other annotations as
-process-level annotations via this argument.
-
-*--database*='PATH'::
-Use 'PATH' as the path to the Crashpad crash report database. This option is
-required. Crash reports are written to this database, and if uploads are
-enabled, uploaded from this database to a crash report collection server. If the
-database does not exist, it will be created, provided that the parent directory
-of 'PATH' exists.
-
-*--handshake-fd*='FD'::
-Perform the handshake with the initial client on the file descriptor at 'FD'.
-Either this option or *--mach-service*, but not both, is required. This option
-is only valid on OS X.
-
-*--initial-client-data*='HANDLE_request_crash_dump','HANDLE_request_non_crash_dump','HANDLE_non_crash_dump_completed','HANDLE_first_pipe_instance','HANDLE_client_process','Address_crash_exception_information','Address_non_crash_exception_information','Address_debug_critical_section'::
-Register the initial client using the inherited handles and data provided. For
-more information on the arguments, see the implementations of +CrashpadClient+
-and +ExceptionHandlerServer+. Either this option or *--pipe-name*, but not both,
-is required. This option is only valid on Windows.
-+
-When this option is present, the server creates a new named pipe at a random
-name and informs its client of the name. The server waits for at least one
-client to register, and exits when all clients have exited, after waiting for
-any uploads in progress to complete.
-
-*--mach-service*='SERVICE'::
-Check in with the bootstrap server under the name 'SERVICE'. Either this option
-or *--handshake-fd*, but not both, is required. This option is only valid on OS
-X.
-+
-'SERVICE' may already be reserved with the bootstrap server in cases where this
-tool is started by launchd(8) as a result of a message being sent to a service
-declared in a job’s +MachServices+ dictionary (see launchd.plist(5)). The
-service name may also be completely unknown to the system.
-
-*--no-rate-limit*::
-Do not rate limit the upload of crash reports. By default uploads are throttled
-to one per hour. Using this option disables that behavior, and Crashpad will
-attempt to upload all captured reports.
-
-*--pipe-name*='PIPE'::
-Listen on the given pipe name for connections from clients. 'PIPE' must be of
-the form +\\.\pipe\<somename>+. Either this option or *--initial-client-data*,
-but not both, is required. This option is only valid on Windows.
-+
-When this option is present, the server creates a named pipe at 'PIPE', a name
-known to both the server and its clients. The server continues running even
-after all clients have exited.
-
-*--reset-own-crash-exception-port-to-system-default*::
-Causes the exception handler server to set its own crash handler to the system
-default before beginning operation. This is only expected to be useful in cases
-where the server inherits an inappropriate crash handler from its parent
-process. This option is only valid on OS X. Use of this option is discouraged.
-It should not be used absent extraordinary circumstances.
-
-*--url*='URL'::
-If uploads are enabled, sends crash reports to the Breakpad-type crash report
-collection server at 'URL'. Uploads are disabled by default, and can only be
-enabled for a database by a Crashpad client using the Crashpad client library,
-typically in response to a user requesting this behavior. If this option is not
-specified, this program will behave as if uploads are disabled.
-
-*--help*::
-Display help and exit.
-
-*--version*::
-Output version information and exit.
-
-== Exit Status
-
-*0*::
-Success.
-
-*1*::
-Failure, with a message printed to the standard error stream.
-
-== See Also
-
-man_link:catch_exception_tool[1],
-man_link:crashpad_database_util[1],
-man_link:generate_dump[1],
-man_link:run_with_crashpad[1]
-
-include::../doc/support/man_footer.ad[]
diff --git a/third_party/crashpad/crashpad/handler/crashpad_handler.md b/third_party/crashpad/crashpad/handler/crashpad_handler.md
new file mode 100644
index 0000000..31c0b347
--- /dev/null
+++ b/third_party/crashpad/crashpad/handler/crashpad_handler.md
@@ -0,0 +1,222 @@
+<!--
+Copyright 2014 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# crashpad_handler(8)
+
+## Name
+
+crashpad_handler—Crashpad’s exception handler server
+
+## Synopsis
+
+**crashpad_handler** [_OPTION…_]
+
+## Description
+
+This program is Crashpad’s main exception-handling server. It is responsible for
+catching exceptions, writing crash reports, and uploading them to a crash report
+collection server. Uploads are disabled by default, and can only be enabled by a
+Crashpad client using the Crashpad client library, typically in response to a
+user requesting this behavior.
+
+On macOS, this server may be started by its initial client, in which case it
+performs a handshake with this client via a pipe established by the client that
+is inherited by the server, referenced by the **--handshake-fd** argument.
+During the handshake, the server furnishes the client with a send right that the
+client may use as an exception port. The server retains the corresponding
+receive right, which it monitors for exception messages. When the receive right
+loses all senders, the server exits after allowing any upload in progress to
+complete.
+
+Alternatively, on macOS, this server may be started from launchd(8), where it
+receives the Mach service name in a **--mach-service** argument. It checks in
+with the bootstrap server under this service name, and clients may look it up
+with the bootstrap server under this service name. It monitors this service for
+exception messages. Upon receipt of `SIGTERM`, the server exits after allowing
+any upload in progress to complete. `SIGTERM` is normally sent by launchd(8)
+when it determines that the server should exit.
+
+On Windows, clients register with this server by communicating with it via the
+named pipe identified by the **--pipe-name** argument. Alternatively, the server
+can inherit an already-created pipe from a parent process by using the
+**--initial-client-data** mechanism. That argument also takes all of the
+arguments that would normally be passed in a registration message, and so
+constitutes registration of the first client. Subsequent clients may then
+register by communicating with the server via the pipe. During registration, a
+client provides the server with an OS event object that it will signal should it
+crash. The server obtains the client’s process handle and waits on the crash
+event object for a crash, as well as the client’s process handle for the client
+to exit cleanly without crashing. When a server started via the
+**--initial-client-data** mechanism loses all of its clients, it exits after
+allowing any upload in progress to complete.
+
+On Windows, this executable is built by default as a Windows GUI app, so no
+console will appear in normal usage. This is the version that will typically be
+used. A second copy is also made with a `.com` extension, rather than `.exe`. In
+this second copy, the PE header is modified to indicate that it’s a console app.
+This is useful because the `.com` is found in the path before the `.exe`, so
+when run normally from a shell using only the basename (without an explicit
+`.com` or `.exe` extension), the `.com` console version will be chosen, and so
+stdio will be hooked up as expected to the parent console so that logging output
+will be visible.
+
+It is not normally appropriate to invoke this program directly. Usually, it will
+be invoked by a Crashpad client using the Crashpad client library, or started by
+another system service. On macOS, arbitrary programs may be run with a Crashpad
+handler by using [run_with_crashpad(1)](../tools/mac/run_with_crashpad.md) to
+establish the Crashpad client environment before running a program.
+
+## Options
+
+ * **--annotation**=_KEY_=_VALUE_
+
+   Sets a process-level annotation mapping _KEY_ to _VALUE_ in each crash report
+   that is written. This option may appear zero, one, or multiple times.
+
+   Most annotations should be provided by the Crashpad client as module-level
+   annotations instead of process-level annotations. Module-level annotations
+   are more flexible in that they can be modified and cleared during the client
+   program’s lifetime. Module-level annotations can be set via the Crashpad
+   client library. Process-level annotations are useful for annotations that the
+   collection server requires be present, that have fixed values, and for cases
+   where a program that does not use the Crashpad client library is being
+   monitored.
+
+   Breakpad-type collection servers only require the `"prod"` and `"ver"`
+   annotations, which should be set to the product name or identifier and
+   product version, respectively. It is unusual to specify other annotations as
+   process-level annotations via this argument.
+
+ * **--database**=_PATH_
+
+   Use _PATH_ as the path to the Crashpad crash report database. This option is
+   required. Crash reports are written to this database, and if uploads are
+   enabled, uploaded from this database to a crash report collection server. If
+   the database does not exist, it will be created, provided that the parent
+   directory of _PATH_ exists.
+
+ * **--handshake-fd**=_FD_
+
+   Perform the handshake with the initial client on the file descriptor at _FD_.
+   Either this option or **--mach-service**, but not both, is required. This
+   option is only valid on macOS.
+
+ * **--initial-client-data**=*HANDLE_request_crash_dump*,*HANDLE_request_non_crash_dump*,*HANDLE_non_crash_dump_completed*,*HANDLE_first_pipe_instance*,*HANDLE_client_process*,*Address_crash_exception_information*,*Address_non_crash_exception_information*,*Address_debug_critical_section*
+
+   Register the initial client using the inherited handles and data provided.
+   For more information on the argument’s format, see the implementations of
+   `CrashpadClient` and `ExceptionHandlerServer`. Either this option or
+   **--pipe-name**, but not both, is required. This option is only valid on
+   Windows.
+
+   When this option is present, the server creates a new named pipe at a random
+   name and informs its client of the name. The server waits for at least one
+   client to register, and exits when all clients have exited, after waiting for
+   any uploads in progress to complete.
+
+ * **--mach-service**=_SERVICE_
+
+   Check in with the bootstrap server under the name _SERVICE_. Either this
+   option or **--handshake-fd**, but not both, is required. This option is only
+   valid on macOS.
+
+   _SERVICE_ may already be reserved with the bootstrap server in cases where
+   this tool is started by launchd(8) as a result of a message being sent to a
+   service declared in a job’s `MachServices` dictionary (see launchd.plist(5)).
+   The service name may also be completely unknown to the system.
+
+ * **--no-rate-limit**
+
+   Do not rate limit the upload of crash reports. By default uploads are
+   throttled to one per hour. Using this option disables that behavior, and
+   Crashpad will attempt to upload all captured reports.
+
+ * **--pipe-name**=_PIPE_
+
+   Listen on the given pipe name for connections from clients. _PIPE_ must be of
+   the form `\\.\pipe\<somename>`. Either this option or
+   **--initial-client-data**, but not both, is required. This option is only
+   valid on Windows.
+
+   When this option is present, the server creates a named pipe at _PIPE_, a
+   name known to both the server and its clients. The server continues running
+   even after all clients have exited.
+
+ * **--reset-own-crash-exception-port-to-system-default**
+
+   Causes the exception handler server to set its own crash handler to the
+   system default before beginning operation. This is only expected to be useful
+   in cases where the server inherits an inappropriate crash handler from its
+   parent process. This option is only valid on macOS. Use of this option is
+   discouraged. It should not be used absent extraordinary circumstances.
+
+ * **--url**=_URL_
+
+   If uploads are enabled, sends crash reports to the Breakpad-type crash report
+   collection server at _URL_. Uploads are disabled by default, and can only be
+   enabled for a database by a Crashpad client using the Crashpad client
+   library, typically in response to a user requesting this behavior. If this
+   option is not specified, this program will behave as if uploads are disabled.
+
+ * **--help**
+
+   Display help and exit.
+
+ * **--version**
+
+   Output version information and exit.
+
+## Exit Status
+
+ * **0**
+
+   Success.
+
+ * **1**
+
+   Failure, with a message printed to the standard error stream.
+
+## See Also
+
+[catch_exception_tool(1)](../tools/mac/catch_exception_tool.md),
+[crashpad_database_util(1)](../tools/crashpad_database_util.md),
+[generate_dump(1)](../tools/generate_dump.md),
+[run_with_crashpad(1)](../tools/mac/run_with_crashpad.md)
+
+## Resources
+
+Crashpad home page: https://crashpad.chromium.org/.
+
+Report bugs at https://crashpad.chromium.org/bug/new.
+
+## Copyright
+
+Copyright 2014 [The Crashpad
+Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS).
+
+## License
+
+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.
diff --git a/third_party/crashpad/crashpad/handler/handler.gyp b/third_party/crashpad/crashpad/handler/handler.gyp
index d6900531..e2d993df 100644
--- a/third_party/crashpad/crashpad/handler/handler.gyp
+++ b/third_party/crashpad/crashpad/handler/handler.gyp
@@ -148,6 +148,20 @@
           ],
         },
         {
+          'target_name': 'crashy_signal',
+          'type': 'executable',
+          'dependencies': [
+            '../client/client.gyp:crashpad_client',
+            '../third_party/mini_chromium/mini_chromium.gyp:base',
+          ],
+          'include_dirs': [
+            '..',
+          ],
+          'sources': [
+            'win/crashy_signal.cc',
+          ],
+        },
+        {
           'target_name': 'crash_other_program',
           'type': 'executable',
           'dependencies': [
diff --git a/third_party/crashpad/crashpad/handler/win/crashy_signal.cc b/third_party/crashpad/crashpad/handler/win/crashy_signal.cc
new file mode 100644
index 0000000..8caa625
--- /dev/null
+++ b/third_party/crashpad/crashpad/handler/win/crashy_signal.cc
@@ -0,0 +1,90 @@
+// Copyright 2016 The Crashpad Authors. All rights reserved.
+//
+// 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.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <windows.h>
+
+#include "base/logging.h"
+#include "client/crashpad_client.h"
+
+namespace crashpad {
+namespace {
+
+enum WhereToSignalFrom {
+  kUnknown = -1,
+  kMain = 0,
+  kBackground = 1,
+};
+
+WhereToSignalFrom MainOrBackground(wchar_t* name) {
+  if (wcscmp(name, L"main") == 0)
+    return kMain;
+  if (wcscmp(name, L"background") == 0)
+    return kBackground;
+  return kUnknown;
+}
+
+DWORD WINAPI BackgroundThread(void* arg) {
+  abort();
+  return 0;
+}
+
+int CrashySignalMain(int argc, wchar_t* argv[]) {
+  CrashpadClient client;
+
+  WhereToSignalFrom from;
+  if (argc == 3 && (from = MainOrBackground(argv[2])) != kUnknown) {
+    if (!client.SetHandlerIPCPipe(argv[1])) {
+      LOG(ERROR) << "SetHandler";
+      return EXIT_FAILURE;
+    }
+  } else {
+    fprintf(stderr, "Usage: %ls <server_pipe_name> main|background\n", argv[0]);
+    return EXIT_FAILURE;
+  }
+
+  // In debug builds part of abort() is to open a dialog. We don't want tests to
+  // block at that dialog, so disable it.
+  _set_abort_behavior(0, _WRITE_ABORT_MSG);
+
+  if (from == kBackground) {
+    HANDLE thread = CreateThread(nullptr,
+                                 0,
+                                 &BackgroundThread,
+                                 nullptr,
+                                 0,
+                                 nullptr);
+    if (!thread) {
+      PLOG(ERROR) << "CreateThread";
+      return EXIT_FAILURE;
+    }
+    if (WaitForSingleObject(thread, INFINITE) != WAIT_OBJECT_0) {
+      PLOG(ERROR) << "WaitForSingleObject";
+      return EXIT_FAILURE;
+    }
+  } else {
+    abort();
+  }
+
+  return EXIT_SUCCESS;
+}
+
+}  // namespace
+}  // namespace crashpad
+
+int wmain(int argc, wchar_t* argv[]) {
+  return crashpad::CrashySignalMain(argc, argv);
+}
diff --git a/third_party/crashpad/crashpad/minidump/minidump_exception_writer.cc b/third_party/crashpad/crashpad/minidump/minidump_exception_writer.cc
index 5ec8d374..d2466a6 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_exception_writer.cc
+++ b/third_party/crashpad/crashpad/minidump/minidump_exception_writer.cc
@@ -21,6 +21,7 @@
 #include "minidump/minidump_context_writer.h"
 #include "snapshot/exception_snapshot.h"
 #include "util/file/file_writer.h"
+#include "util/misc/arraysize_unsafe.h"
 
 namespace crashpad {
 
@@ -64,7 +65,7 @@
 
   const size_t parameters = exception_information.size();
   const size_t kMaxParameters =
-      arraysize(exception_.ExceptionRecord.ExceptionInformation);
+      ARRAYSIZE_UNSAFE(exception_.ExceptionRecord.ExceptionInformation);
   CHECK_LE(parameters, kMaxParameters);
 
   exception_.ExceptionRecord.NumberParameters =
diff --git a/third_party/crashpad/crashpad/minidump/minidump_extensions.h b/third_party/crashpad/crashpad/minidump/minidump_extensions.h
index 68fa6e0..245ef8b 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_extensions.h
+++ b/third_party/crashpad/crashpad/minidump/minidump_extensions.h
@@ -162,6 +162,16 @@
   kMinidumpCPUArchitectureX86Win64 = PROCESSOR_ARCHITECTURE_IA32_ON_WIN64,
 
   kMinidumpCPUArchitectureNeutral = PROCESSOR_ARCHITECTURE_NEUTRAL,
+
+  //! \brief 64-bit ARM.
+  //!
+  //! These systems identify their CPUs generically as “arm64” or “aarch64”, or
+  //! with more specific names such as “armv8”.
+  //!
+  //! \sa #kMinidumpCPUArchitectureARM64Breakpad
+  kMinidumpCPUArchitectureARM64 = PROCESSOR_ARCHITECTURE_ARM64,
+
+  kMinidumpCPUArchitectureARM32Win64 = PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64,
   kMinidumpCPUArchitectureSPARC = 0x8001,
 
   //! \brief 64-bit PowerPC.
@@ -170,11 +180,10 @@
   //! specific names such as “ppc970”.
   kMinidumpCPUArchitecturePPC64 = 0x8002,
 
-  //! \brief 64-bit ARM.
+  //! \brief Used by Breakpad for 64-bit ARM.
   //!
-  //! These systems identify their CPUs generically as “arm64” or “aarch64”, or
-  //! with more specific names such as “armv8”.
-  kMinidumpCPUArchitectureARM64 = 0x8003,
+  //! \deprecated Use #kMinidumpCPUArchitectureARM64 instead.
+  kMinidumpCPUArchitectureARM64Breakpad = 0x8003,
 
   //! \brief Unknown CPU architecture.
   kMinidumpCPUArchitectureUnknown = PROCESSOR_ARCHITECTURE_UNKNOWN,
@@ -209,7 +218,7 @@
 
   kMinidumpOSUnix = 0x8000,
 
-  //! \brief Mac OS X, Darwin for traditional systems.
+  //! \brief macOS, Darwin for traditional systems.
   kMinidumpOSMacOSX = 0x8101,
 
   //! \brief iOS, Darwin for mobile devices.
@@ -276,7 +285,7 @@
 //! #version, so that newer parsers will be able to determine whether the added
 //! fields are valid or not.
 //!
-//! \sa #MinidumpModuleCrashpadInfoList
+//! \sa MinidumpModuleCrashpadInfoList
 struct ALIGNAS(4) PACKED MinidumpModuleCrashpadInfo {
   //! \brief The structure’s currently-defined version number.
   //!
@@ -423,7 +432,7 @@
   //! This field is present when #version is at least `1`.
   MINIDUMP_LOCATION_DESCRIPTOR simple_annotations;
 
-  //! \brief A pointer to a #MinidumpModuleCrashpadInfoList structure.
+  //! \brief A pointer to a MinidumpModuleCrashpadInfoList structure.
   //!
   //! This field is present when #version is at least `1`.
   MINIDUMP_LOCATION_DESCRIPTOR module_list;
diff --git a/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc b/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
index e880aa7..ff4fdda 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
+++ b/third_party/crashpad/crashpad/minidump/minidump_misc_info_writer.cc
@@ -26,6 +26,7 @@
 #include "snapshot/process_snapshot.h"
 #include "snapshot/system_snapshot.h"
 #include "util/file/file_writer.h"
+#include "util/misc/arraysize_unsafe.h"
 #include "util/numeric/in_range_cast.h"
 #include "util/numeric/safe_assignment.h"
 
@@ -68,8 +69,8 @@
 #if defined(OS_MACOSX)
 // Converts the value of the MAC_OS_VERSION_MIN_REQUIRED or
 // MAC_OS_X_VERSION_MAX_ALLOWED macro from <AvailabilityMacros.h> to a number
-// identifying the minor Mac OS X version that it represents. For example, with
-// an argument of MAC_OS_X_VERSION_10_6, this function will return 6.
+// identifying the minor macOS version that it represents. For example, with an
+// argument of MAC_OS_X_VERSION_10_6, this function will return 6.
 int AvailabilityVersionToMacOSXMinorVersion(int availability) {
   // Through MAC_OS_X_VERSION_10_9, the minor version is the tens digit.
   if (availability >= 1000 && availability <= 1099) {
@@ -295,7 +296,7 @@
 
   internal::MinidumpWriterUtil::AssignUTF8ToUTF16(
       misc_info_.TimeZone.StandardName,
-      arraysize(misc_info_.TimeZone.StandardName),
+      ARRAYSIZE_UNSAFE(misc_info_.TimeZone.StandardName),
       standard_name);
 
   misc_info_.TimeZone.StandardDate = standard_date;
@@ -303,7 +304,7 @@
 
   internal::MinidumpWriterUtil::AssignUTF8ToUTF16(
       misc_info_.TimeZone.DaylightName,
-      arraysize(misc_info_.TimeZone.DaylightName),
+      ARRAYSIZE_UNSAFE(misc_info_.TimeZone.DaylightName),
       daylight_name);
 
   misc_info_.TimeZone.DaylightDate = daylight_date;
@@ -320,10 +321,12 @@
   misc_info_.Flags1 |= MINIDUMP_MISC4_BUILDSTRING;
 
   internal::MinidumpWriterUtil::AssignUTF8ToUTF16(
-      misc_info_.BuildString, arraysize(misc_info_.BuildString), build_string);
+      misc_info_.BuildString,
+      ARRAYSIZE_UNSAFE(misc_info_.BuildString),
+      build_string);
   internal::MinidumpWriterUtil::AssignUTF8ToUTF16(
       misc_info_.DbgBldStr,
-      arraysize(misc_info_.DbgBldStr),
+      ARRAYSIZE_UNSAFE(misc_info_.DbgBldStr),
       debug_build_string);
 }
 
diff --git a/third_party/crashpad/crashpad/minidump/minidump_module_crashpad_info_writer.h b/third_party/crashpad/crashpad/minidump/minidump_module_crashpad_info_writer.h
index ab77447..d79ac2f 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_module_crashpad_info_writer.h
+++ b/third_party/crashpad/crashpad/minidump/minidump_module_crashpad_info_writer.h
@@ -125,11 +125,12 @@
   //! \brief Adds a MinidumpModuleCrashpadInfo to the
   //!     MinidumpModuleCrashpadInfoList.
   //!
-  //! \param[in] module Extended Crashpad-specific information about the module.
-  //!     This object takes ownership of \a module and becomes its parent in the
-  //!     overall tree of internal::MinidumpWritable objects.
-  //! \param[in] module_list_index The index of the MINIDUMP_MODULE in the
-  //!     minidump file’s MINIDUMP_MODULE_LIST stream that corresponds to \a
+  //! \param[in] module_crashpad_info Extended Crashpad-specific information
+  //!     about the module. This object takes ownership of \a
+  //!     module_crashpad_info and becomes its parent in the overall tree of
+  //!     internal::MinidumpWritable objects.
+  //! \param[in] minidump_module_list_index The index of the MINIDUMP_MODULE in
+  //!     the minidump file’s MINIDUMP_MODULE_LIST stream that corresponds to \a
   //!     module_crashpad_info.
   //!
   //! \note Valid in #kStateMutable.
diff --git a/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.cc b/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.cc
index c372cd1..ae8bfab 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.cc
+++ b/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.cc
@@ -33,8 +33,8 @@
 }
 
 const MinidumpSimpleStringDictionaryEntry*
-MinidumpSimpleStringDictionaryEntryWriter::MinidumpSimpleStringDictionaryEntry()
-    const {
+MinidumpSimpleStringDictionaryEntryWriter::
+    GetMinidumpSimpleStringDictionaryEntry() const {
   DCHECK_EQ(state(), kStateWritable);
 
   return &entry_;
@@ -179,7 +179,7 @@
   std::vector<WritableIoVec> iovecs(1, iov);
 
   for (const auto& key_entry : entries_) {
-    iov.iov_base = key_entry.second->MinidumpSimpleStringDictionaryEntry();
+    iov.iov_base = key_entry.second->GetMinidumpSimpleStringDictionaryEntry();
     iov.iov_len = sizeof(MinidumpSimpleStringDictionaryEntry);
     iovecs.push_back(iov);
   }
diff --git a/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.h b/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.h
index 4e23717..f2662bcc 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.h
+++ b/third_party/crashpad/crashpad/minidump/minidump_simple_string_dictionary_writer.h
@@ -52,7 +52,7 @@
   //!
   //! \note Valid in #kStateWritable.
   const MinidumpSimpleStringDictionaryEntry*
-      MinidumpSimpleStringDictionaryEntry() const;
+  GetMinidumpSimpleStringDictionaryEntry() const;
 
   //! \brief Sets the strings to be written as the entry object’s key and value.
   //!
diff --git a/third_party/crashpad/crashpad/minidump/minidump_system_info_writer.cc b/third_party/crashpad/crashpad/minidump/minidump_system_info_writer.cc
index 066363c..9c665f4f 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_system_info_writer.cc
+++ b/third_party/crashpad/crashpad/minidump/minidump_system_info_writer.cc
@@ -20,6 +20,7 @@
 #include "minidump/minidump_string_writer.h"
 #include "snapshot/system_snapshot.h"
 #include "util/file/file_writer.h"
+#include "util/misc/arraysize_unsafe.h"
 #include "util/misc/implicit_cast.h"
 
 namespace crashpad {
@@ -64,10 +65,12 @@
   MAP_FEATURE(cpuid_features, F_RDRAND, PF_RDRAND_INSTRUCTION_AVAILABLE);
 
 #define FX_XD 20
+#define FX_RDTSCP 27
 #define FX_3DNOW 31
 
   uint64_t extended_features = system_snapshot->CPUX86ExtendedFeatures();
 
+  MAP_FEATURE(extended_features, FX_RDTSCP, PF_RDTSCP_INSTRUCTION_AVAILABLE);
   MAP_FEATURE(extended_features, FX_3DNOW, PF_3DNOW_INSTRUCTIONS_AVAILABLE);
 
 #define F7_FSGSBASE 0
@@ -76,8 +79,8 @@
 
   MAP_FEATURE(leaf7_features, F7_FSGSBASE, PF_RDWRFSGSBASE_AVAILABLE);
 
-  // This feature bit should be set if NX (XD, DEP) is enabled, not just if
-  // it’s available on the CPU as indicated by the XF_XD bit.
+  // This feature bit should be set if NX (XD, DEP) is enabled, not just if it’s
+  // available on the CPU as indicated by the FX_XD bit.
   if (system_snapshot->NXEnabled()) {
     minidump_features |= ADD_FEATURE(PF_NX_ENABLED);
   }
@@ -86,10 +89,10 @@
     minidump_features |= ADD_FEATURE(PF_SSE_DAZ_MODE_AVAILABLE);
   }
 
-  // PF_SECOND_LEVEL_ADDRESS_TRANSLATION can’t be determined without
-  // consulting model-specific registers, a privileged operation. The exact
-  // use of PF_VIRT_FIRMWARE_ENABLED is unknown. PF_FASTFAIL_AVAILABLE is
-  // irrelevant outside of Windows.
+  // PF_SECOND_LEVEL_ADDRESS_TRANSLATION can’t be determined without consulting
+  // model-specific registers, a privileged operation. The exact use of
+  // PF_VIRT_FIRMWARE_ENABLED is unknown. PF_FASTFAIL_AVAILABLE is irrelevant
+  // outside of Windows.
 
 #undef MAP_FEATURE
 #undef ADD_FEATURE
@@ -194,7 +197,7 @@
          system_info_.ProcessorArchitecture ==
              kMinidumpCPUArchitectureX86Win64);
 
-  static_assert(arraysize(system_info_.Cpu.X86CpuInfo.VendorId) == 3,
+  static_assert(ARRAYSIZE_UNSAFE(system_info_.Cpu.X86CpuInfo.VendorId) == 3,
                 "VendorId must have 3 elements");
 
   system_info_.Cpu.X86CpuInfo.VendorId[0] = ebx;
@@ -252,8 +255,9 @@
          system_info_.ProcessorArchitecture !=
              kMinidumpCPUArchitectureX86Win64);
 
-  static_assert(arraysize(system_info_.Cpu.OtherCpuInfo.ProcessorFeatures) == 2,
-                "ProcessorFeatures must have 2 elements");
+  static_assert(
+      ARRAYSIZE_UNSAFE(system_info_.Cpu.OtherCpuInfo.ProcessorFeatures) == 2,
+      "ProcessorFeatures must have 2 elements");
 
   system_info_.Cpu.OtherCpuInfo.ProcessorFeatures[0] = features_0;
   system_info_.Cpu.OtherCpuInfo.ProcessorFeatures[1] = features_1;
diff --git a/third_party/crashpad/crashpad/minidump/minidump_system_info_writer_test.cc b/third_party/crashpad/crashpad/minidump/minidump_system_info_writer_test.cc
index 9976250..2a869c6 100644
--- a/third_party/crashpad/crashpad/minidump/minidump_system_info_writer_test.cc
+++ b/third_party/crashpad/crashpad/minidump/minidump_system_info_writer_test.cc
@@ -405,7 +405,8 @@
       (1 << PF_COMPARE_EXCHANGE128) |
       (1 << PF_XSAVE_ENABLED) |
       (1 << PF_RDWRFSGSBASE_AVAILABLE) |
-      (1 << PF_RDRAND_INSTRUCTION_AVAILABLE);
+      (1 << PF_RDRAND_INSTRUCTION_AVAILABLE) |
+      (UINT64_C(1) << PF_RDTSCP_INSTRUCTION_AVAILABLE);
   expect_system_info.Cpu.OtherCpuInfo.ProcessorFeatures[1] = 0;
   const char kOSVersionBuild[] = "13F34";
 
diff --git a/third_party/crashpad/crashpad/navbar.md b/third_party/crashpad/crashpad/navbar.md
new file mode 100644
index 0000000..d530414f
--- /dev/null
+++ b/third_party/crashpad/crashpad/navbar.md
@@ -0,0 +1,25 @@
+<!--
+Copyright 2016 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# Crashpad
+
+ * [Home][home]
+ * [Developing](/doc/developing.md)
+ * [Interface Docs](https://crashpad.chromium.org/doxygen/)
+ * [Man Pages](/doc/man.md)
+ * [Source Code](https://chromium.googlesource.com/crashpad/crashpad/)
+
+[home]: /README.md
diff --git a/third_party/crashpad/crashpad/snapshot/capture_memory.h b/third_party/crashpad/crashpad/snapshot/capture_memory.h
index ef5f4ed9..d6a3a6d 100644
--- a/third_party/crashpad/crashpad/snapshot/capture_memory.h
+++ b/third_party/crashpad/crashpad/snapshot/capture_memory.h
@@ -71,8 +71,8 @@
   //! unsigned) so that there's a reasonable chance that the value is a pointer.
   //!
   //! \param[in] context The context to inspect.
-  //! \param[in] process_reader A MemoryCaptureProcessReader to read from the
-  //!     target process, and that handles adding new ranges.
+  //! \param[in] delegate A Delegate that handles reading from the target
+  //!     process and adding new ranges.
   static void PointedToByContext(const CPUContext& context, Delegate* delegate);
 
   //! \brief For all pointer-like values in a memory range of the target
@@ -83,8 +83,8 @@
   //!     base address and size must be pointer-aligned and an integral number
   //!     of
   //!     pointers long.
-  //! \param[in] process_reader A MemoryCaptureProcessReader to read from the
-  //!     target process, and that handles adding new ranges.
+  //! \param[in] delegate A Delegate that handles reading from the target
+  //!     process and adding new ranges.
   static void PointedToByMemoryRange(const MemorySnapshot& memory,
                                      Delegate* delegate);
 
diff --git a/third_party/crashpad/crashpad/snapshot/cpu_context.h b/third_party/crashpad/crashpad/snapshot/cpu_context.h
index bfef4d09..67b298e8 100644
--- a/third_party/crashpad/crashpad/snapshot/cpu_context.h
+++ b/third_party/crashpad/crashpad/snapshot/cpu_context.h
@@ -133,7 +133,7 @@
     uint16_t fop;  // FPU opcode
     union {
       // The expression of these union members is determined by the use of
-      // fxsave/fxrstor or fxsave64/fxrstor64 (fxsaveq/fxrstorq). Mac OS X and
+      // fxsave/fxrstor or fxsave64/fxrstor64 (fxsaveq/fxrstorq). macOS and
       // Windows systems use the traditional fxsave/fxrstor structure.
       struct {
         // fxsave/fxrstor
diff --git a/third_party/crashpad/crashpad/snapshot/exception_snapshot.h b/third_party/crashpad/crashpad/snapshot/exception_snapshot.h
index eef9f47a..11a9415 100644
--- a/third_party/crashpad/crashpad/snapshot/exception_snapshot.h
+++ b/third_party/crashpad/crashpad/snapshot/exception_snapshot.h
@@ -50,21 +50,21 @@
   //!
   //! This is an operating system-specific value.
   //!
-  //! For Mac OS X, this will be an \ref EXC_x "EXC_*" exception type, such as
+  //! For macOS, this will be an \ref EXC_x "EXC_*" exception type, such as
   //! `EXC_BAD_ACCESS`. `EXC_CRASH` will not appear here for exceptions
   //! processed as `EXC_CRASH` when generated from another preceding exception:
   //! the original exception code will appear instead. The exception type as it
   //! was received will appear at index 0 of Codes().
   //!
-  //! For Windows, this will be an \ref EXCEPTION_x "EXCEPTION_*" exception type
-  //! such as `EXCEPTION_ACCESS_VIOLATION`.
+  //! For Windows, this will be an `EXCEPTION_*` exception type, such as
+  //! `EXCEPTION_ACCESS_VIOLATION`.
   virtual uint32_t Exception() const = 0;
 
   //! \brief Returns the second-level exception code identifying the exception.
   //!
   //! This is an operating system-specific value.
   //!
-  //! For Mac OS X, this will be the value of the exception code at index 0 as
+  //! For macOS, this will be the value of the exception code at index 0 as
   //! received by a Mach exception handler, except:
   //!  * For `EXC_CRASH` exceptions generated from another preceding exception,
   //!    the original exception code will appear here, not the code as received
@@ -72,7 +72,7 @@
   //!  * For `EXC_RESOURCE` and `EXC_GUARD` exceptions, the high 32 bits of the
   //!    exception code at index 0 will appear here.
   //!
-  //! In all cases on Mac OS X, the full exception code at index 0 as it was
+  //! In all cases on macOS, the full exception code at index 0 as it was
   //! received will appear at index 1 of Codes().
   //!
   //! On Windows, this will either be `0` if the exception is continuable, or
@@ -85,7 +85,7 @@
   //! the instruction pointer that contained an offending instruction. For
   //! exceptions where this value cannot be determined, it will be `0`.
   //!
-  //! For Mac OS X, this will be the value of the exception code at index 1 as
+  //! For macOS, this will be the value of the exception code at index 1 as
   //! received by a Mach exception handler.
   virtual uint64_t ExceptionAddress() const = 0;
 
@@ -97,7 +97,7 @@
   //! they may not be present at all. In this case, an empty vector will be
   //! returned.
   //!
-  //! For Mac OS X, this will be a vector containing the original exception type
+  //! For macOS, this will be a vector containing the original exception type
   //! and the values of `code[0]` and `code[1]` as received by a Mach exception
   //! handler.
   //!
diff --git a/third_party/crashpad/crashpad/snapshot/mac/cpu_context_mac.h b/third_party/crashpad/crashpad/snapshot/mac/cpu_context_mac.h
index 1d016cf..c96ad3c 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/cpu_context_mac.h
+++ b/third_party/crashpad/crashpad/snapshot/mac/cpu_context_mac.h
@@ -27,7 +27,7 @@
 #if defined(ARCH_CPU_X86_FAMILY) || DOXYGEN
 
 //! \brief Initializes a CPUContextX86 structure from native context structures
-//!     on Mac OS X.
+//!     on macOS.
 //!
 //! \a flavor, \a state, and \a state_count may be supplied by exception
 //! handlers in order for the \a context parameter to be initialized by the
@@ -68,7 +68,7 @@
                              const x86_debug_state32_t* x86_debug_state32);
 
 //! \brief Initializes a CPUContextX86_64 structure from native context
-//!     structures on Mac OS X.
+//!     structures on macOS.
 //!
 //! \a flavor, \a state, and \a state_count may be supplied by exception
 //! handlers in order for the \a context parameter to be initialized by the
diff --git a/third_party/crashpad/crashpad/snapshot/mac/exception_snapshot_mac.h b/third_party/crashpad/crashpad/snapshot/mac/exception_snapshot_mac.h
index 1772072..9a6ddcaa 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/exception_snapshot_mac.h
+++ b/third_party/crashpad/crashpad/snapshot/mac/exception_snapshot_mac.h
@@ -34,7 +34,7 @@
 namespace internal {
 
 //! \brief An ExceptionSnapshot of an exception sustained by a running (or
-//!     crashed) process on a Mac OS X system.
+//!     crashed) process on a macOS system.
 class ExceptionSnapshotMac final : public ExceptionSnapshot {
  public:
   ExceptionSnapshotMac();
@@ -47,6 +47,14 @@
   //!
   //! \param[in] process_reader A ProcessReader for the task that sustained the
   //!     exception.
+  //! \param[in] behavior
+  //! \param[in] exception_thread
+  //! \param[in] exception
+  //! \param[in] code
+  //! \param[in] code_count
+  //! \param[in,out] flavor
+  //! \param[in] state
+  //! \param[in] state_count
   //!
   //! \return `true` if the snapshot could be created, `false` otherwise with
   //!     an appropriate message logged.
diff --git a/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc b/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc
index d25ba43..f4f53494 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc
+++ b/third_party/crashpad/crashpad/snapshot/mac/mach_o_image_annotations_reader_test.cc
@@ -199,8 +199,8 @@
         for (const std::string& annotation : all_annotations_vector) {
           // Look for the expectation as a leading susbtring, because the actual
           // string that dyld uses will have the contents of the
-          // DYLD_INSERT_LIBRARIES environment variable appended to it on Mac
-          // OS X 10.10.
+          // DYLD_INSERT_LIBRARIES environment variable appended to it on OS X
+          // 10.10.
           if (annotation.substr(0, expected_annotation.length()) ==
                   expected_annotation) {
             found = true;
@@ -217,8 +217,8 @@
         bool found = false;
         for (const std::string& annotation : all_annotations_vector) {
           // Look for the expectation as a leading substring, because the actual
-          // string will contain the library’s pathname and, on Mac OS X 10.9
-          // and later, a reason.
+          // string will contain the library’s pathname and, on OS X 10.9 and
+          // later, a reason.
           if (annotation.substr(0, expected_annotation_length) ==
                   kExpectedAnnotation) {
             found = true;
diff --git a/third_party/crashpad/crashpad/snapshot/mac/memory_snapshot_mac.h b/third_party/crashpad/crashpad/snapshot/mac/memory_snapshot_mac.h
index dbb02ee..bbc39de 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/memory_snapshot_mac.h
+++ b/third_party/crashpad/crashpad/snapshot/mac/memory_snapshot_mac.h
@@ -27,7 +27,7 @@
 namespace internal {
 
 //! \brief A MemorySnapshot of a memory region in a process on the running
-//!     system, when the system runs Mac OS X.
+//!     system, when the system runs macOS.
 class MemorySnapshotMac final : public MemorySnapshot {
  public:
   MemorySnapshotMac();
diff --git a/third_party/crashpad/crashpad/snapshot/mac/process_reader.h b/third_party/crashpad/crashpad/snapshot/mac/process_reader.h
index 57d0264..c369611 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/process_reader.h
+++ b/third_party/crashpad/crashpad/snapshot/mac/process_reader.h
@@ -191,18 +191,18 @@
   //! tag value. If these conditions cannot be met fully, as much of the red
   //! zone will be captured as is possible while meeting these conditions.
   //!
-  //! \param[inout] start_address The base address of the region to begin
+  //! \param[in,out] start_address The base address of the region to begin
   //!     capturing stack memory from. On entry, \a start_address is the stack
   //!     pointer. On return, \a start_address may be decreased to encompass a
   //!     red zone.
-  //! \param[inout] region_base The base address of the region that contains
+  //! \param[in,out] region_base The base address of the region that contains
   //!     stack memory. This is distinct from \a start_address in that \a
   //!     region_base will be page-aligned. On entry, \a region_base is the
   //!     base address of a region that contains \a start_address. On return,
   //!     if \a start_address is decremented and is outside of the region
   //!     originally described by \a region_base, \a region_base will also be
   //!     decremented appropriately.
-  //! \param[inout] region_size The size of the region that contains stack
+  //! \param[in,out] region_size The size of the region that contains stack
   //!     memory. This region begins at \a region_base. On return, if \a
   //!     region_base is decremented, \a region_size will be incremented
   //!     appropriately.
diff --git a/third_party/crashpad/crashpad/snapshot/mac/process_reader_test.cc b/third_party/crashpad/crashpad/snapshot/mac/process_reader_test.cc
index ed717b6..e679d2ef 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/process_reader_test.cc
+++ b/third_party/crashpad/crashpad/snapshot/mac/process_reader_test.cc
@@ -587,7 +587,7 @@
     ASSERT_EQ(CL_SUCCESS, rv) << "clCreateContext";
 
     // The goal of the program in |sources| is to produce a cl_kernels image
-    // that doesn’t strictly conform to Mach-O expectations. On Mac OS X 10.10,
+    // that doesn’t strictly conform to Mach-O expectations. On OS X 10.10,
     // cl_kernels modules show up with an __LD,__compact_unwind section, showing
     // up in the __TEXT segment. MachOImageSegmentReader would normally reject
     // modules for this problem, but a special exception is made when this
diff --git a/third_party/crashpad/crashpad/snapshot/mac/process_snapshot_mac.h b/third_party/crashpad/crashpad/snapshot/mac/process_snapshot_mac.h
index 6c41a66..d3e6eb45 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/process_snapshot_mac.h
+++ b/third_party/crashpad/crashpad/snapshot/mac/process_snapshot_mac.h
@@ -46,8 +46,8 @@
 
 namespace crashpad {
 
-//! \brief A ProcessSnapshot of a running (or crashed) process running on a Mac
-//!     OS X system.
+//! \brief A ProcessSnapshot of a running (or crashed) process running on a
+//!     macOS system.
 class ProcessSnapshotMac final : public ProcessSnapshot {
  public:
   ProcessSnapshotMac();
@@ -83,21 +83,21 @@
 
   //! \brief Sets the value to be returned by ReportID().
   //!
-  //! On Mac OS X, the crash report ID is under the control of the snapshot
+  //! On macOS, the crash report ID is under the control of the snapshot
   //! producer, which may call this method to set the report ID. If this is not
   //! done, ReportID() will return an identifier consisting entirely of zeroes.
   void SetReportID(const UUID& report_id) { report_id_ = report_id; }
 
   //! \brief Sets the value to be returned by ClientID().
   //!
-  //! On Mac OS X, the client ID is under the control of the snapshot producer,
+  //! On macOS, the client ID is under the control of the snapshot producer,
   //! which may call this method to set the client ID. If this is not done,
   //! ClientID() will return an identifier consisting entirely of zeroes.
   void SetClientID(const UUID& client_id) { client_id_ = client_id; }
 
   //! \brief Sets the value to be returned by AnnotationsSimpleMap().
   //!
-  //! On Mac OS X, all process annotations are under the control of the snapshot
+  //! On macOS, all process annotations are under the control of the snapshot
   //! producer, which may call this method to establish these annotations.
   //! Contrast this with module annotations, which are under the control of the
   //! process being snapshotted.
diff --git a/third_party/crashpad/crashpad/snapshot/mac/process_types/crashreporterclient.proctype b/third_party/crashpad/crashpad/snapshot/mac/process_types/crashreporterclient.proctype
index b40aa35..409782c 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/process_types/crashreporterclient.proctype
+++ b/third_party/crashpad/crashpad/snapshot/mac/process_types/crashreporterclient.proctype
@@ -43,7 +43,7 @@
   PROCESS_TYPE_STRUCT_MEMBER(uint64_t, version)  // unsigned long
   PROCESS_TYPE_STRUCT_VERSIONED(crashreporter_annotations_t, version)
 
-  // Version 4 (Mac OS X 10.7)
+  // Version 4 (OS X 10.7)
   PROCESS_TYPE_STRUCT_MEMBER(uint64_t, message)  // char*
   PROCESS_TYPE_STRUCT_MEMBER(uint64_t, signature_string)  // char*
   PROCESS_TYPE_STRUCT_MEMBER(uint64_t, backtrace)  // char*
diff --git a/third_party/crashpad/crashpad/snapshot/mac/process_types/custom.cc b/third_party/crashpad/crashpad/snapshot/mac/process_types/custom.cc
index 60c6e50..5fe9228 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/process_types/custom.cc
+++ b/third_party/crashpad/crashpad/snapshot/mac/process_types/custom.cc
@@ -21,6 +21,8 @@
 #include "snapshot/mac/process_types/internal.h"
 #include "util/mach/task_memory.h"
 
+#if !DOXYGEN
+
 namespace crashpad {
 namespace process_types {
 namespace internal {
@@ -157,3 +159,5 @@
 }  // namespace internal
 }  // namespace process_types
 }  // namespace crashpad
+
+#endif  // !DOXYGEN
diff --git a/third_party/crashpad/crashpad/snapshot/mac/process_types_test.cc b/third_party/crashpad/crashpad/snapshot/mac/process_types_test.cc
index 1bb8d101..ce092fe 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/process_types_test.cc
+++ b/third_party/crashpad/crashpad/snapshot/mac/process_types_test.cc
@@ -83,8 +83,8 @@
             dyld_info.all_image_info_addr);
   EXPECT_GT(dyld_info.all_image_info_size, 1u);
 
-  // This field is only present in the Mac OS X 10.7 SDK (at build time) and
-  // kernel (at run time).
+  // This field is only present in the OS X 10.7 SDK (at build time) and kernel
+  // (at run time).
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
   if (MacOSXMinorVersion() >= 7) {
 #if !defined(ARCH_CPU_64_BITS)
diff --git a/third_party/crashpad/crashpad/snapshot/mac/system_snapshot_mac.cc b/third_party/crashpad/crashpad/snapshot/mac/system_snapshot_mac.cc
index 185372d..3c39088f 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/system_snapshot_mac.cc
+++ b/third_party/crashpad/crashpad/snapshot/mac/system_snapshot_mac.cc
@@ -228,7 +228,7 @@
   INITIALIZATION_STATE_DCHECK_VALID(initialized_);
 
 #if defined(ARCH_CPU_X86_FAMILY)
-  // The machdep.cpu.leaf7_feature_bits sysctl isn’t supported prior to Mac OS X
+  // The machdep.cpu.leaf7_feature_bits sysctl isn’t supported prior to OS X
   // 10.7, so read this by calling cpuid directly.
   //
   // machdep.cpu.max_basic could be used to check whether to read the leaf, but
diff --git a/third_party/crashpad/crashpad/snapshot/mac/thread_snapshot_mac.h b/third_party/crashpad/crashpad/snapshot/mac/thread_snapshot_mac.h
index bbb7f77..2833443 100644
--- a/third_party/crashpad/crashpad/snapshot/mac/thread_snapshot_mac.h
+++ b/third_party/crashpad/crashpad/snapshot/mac/thread_snapshot_mac.h
@@ -33,7 +33,7 @@
 namespace internal {
 
 //! \brief A ThreadSnapshot of a thread in a running (or crashed) process on a
-//!     Mac OS X system.
+//!     macOS system.
 class ThreadSnapshotMac final : public ThreadSnapshot {
  public:
   ThreadSnapshotMac();
diff --git a/third_party/crashpad/crashpad/snapshot/module_snapshot.h b/third_party/crashpad/crashpad/snapshot/module_snapshot.h
index 5989e4b..cd3dbd3 100644
--- a/third_party/crashpad/crashpad/snapshot/module_snapshot.h
+++ b/third_party/crashpad/crashpad/snapshot/module_snapshot.h
@@ -82,8 +82,8 @@
     //! \brief The module is a dynamic loader.
     //!
     //! This is the module responsible for loading other modules. This is
-    //! normally `dyld` for Mac OS X and `ld.so` for Linux and other systems
-    //! using ELF.
+    //! normally `dyld` for macOS and `ld.so` for Linux and other systems using
+    //! ELF.
     kModuleTypeDynamicLoader,
   };
 
@@ -97,7 +97,7 @@
   //! \brief Returns the size that the module occupies in the snapshot process’
   //!     address space, starting at its base address.
   //!
-  //! For Mac OS X snapshots, this method only reports the size of the `__TEXT`
+  //! For macOS snapshots, this method only reports the size of the `__TEXT`
   //! segment, because segments may not be loaded contiguously.
   virtual uint64_t Size() const = 0;
 
@@ -113,7 +113,7 @@
   //! If no file version can be determined, the \a version_* parameters are set
   //! to `0`.
   //!
-  //! For Mac OS X snapshots, this is taken from the module’s `LC_ID_DYLIB` load
+  //! For macOS snapshots, this is taken from the module’s `LC_ID_DYLIB` load
   //! command for shared libraries, and is `0` for other module types.
   virtual void FileVersion(uint16_t* version_0,
                            uint16_t* version_1,
@@ -125,8 +125,8 @@
   //! If no source version can be determined, the \a version_* parameters are
   //! set to `0`.
   //!
-  //! For Mac OS X snapshots, this is taken from the module’s
-  //! `LC_SOURCE_VERSION` load command.
+  //! For macOS snapshots, this is taken from the module’s `LC_SOURCE_VERSION`
+  //! load command.
   virtual void SourceVersion(uint16_t* version_0,
                              uint16_t* version_1,
                              uint16_t* version_2,
@@ -164,7 +164,7 @@
   //! are intended for diagnostic use, including crash analysis. A module may
   //! contain multiple annotations, so they are returned in a vector.
   //!
-  //! For Mac OS X snapshots, these annotations are found by interpreting the
+  //! For macOS snapshots, these annotations are found by interpreting the
   //! module’s `__DATA,__crash_info` section as `crashreporter_annotations_t`.
   //! System libraries using the crash reporter client interface may reference
   //! annotations in this structure. Additional annotations messages may be
@@ -183,7 +183,7 @@
   //! keys and values are strings. These are referred to in Chrome as “crash
   //! keys.”
   //!
-  //! For Mac OS X snapshots, these annotations are found by interpreting the
+  //! For macOS snapshots, these annotations are found by interpreting the
   //! `__DATA,crashpad_info` section as `CrashpadInfo`. Clients can use the
   //! Crashpad client interface to store annotations in this structure. Most
   //! annotations under the client’s direct control will be retrievable by this
diff --git a/third_party/crashpad/crashpad/snapshot/system_snapshot.h b/third_party/crashpad/crashpad/snapshot/system_snapshot.h
index 82f5d48..549f0b6 100644
--- a/third_party/crashpad/crashpad/snapshot/system_snapshot.h
+++ b/third_party/crashpad/crashpad/snapshot/system_snapshot.h
@@ -36,7 +36,7 @@
     //! \brief The snapshot system’s operating system is unknown.
     kOperatingSystemUnknown = 0,
 
-    //! \brief Mac OS X.
+    //! \brief macOS.
     kOperatingSystemMacOSX,
 
     //! \brief Windows.
@@ -104,7 +104,7 @@
   virtual std::string CPUVendor() const = 0;
 
   //! \brief Returns frequency information about the snapshot system’s CPUs in
-  //!     \current_hz and \a max_hz.
+  //!     \a current_hz and \a max_hz.
   //!
   //! \param[out] current_hz The snapshot system’s CPU clock frequency in Hz at
   //!     the time of the snapshot.
@@ -198,21 +198,21 @@
   //!     in \a major, \a minor, \a bugfix, and \a build.
   //!
   //! \param[out] major The snapshot system’s operating system’s first (major)
-  //!     version number component. This would be `10` for Mac OS X 10.9.5, and
+  //!     version number component. This would be `10` for macOS 10.12.1, and
   //!     `6` for Windows 7 (NT 6.1) SP1 version 6.1.7601.
   //! \param[out] minor The snapshot system’s operating system’s second (minor)
-  //!     version number component. This would be `9` for Mac OS X 10.9.5, and
+  //!     version number component. This would be `12` for macOS 10.12.1, and
   //!     `1` for Windows 7 (NT 6.1) SP1 version 6.1.7601.
   //! \param[out] bugfix The snapshot system’s operating system’s third (bugfix)
-  //!     version number component. This would be `5` for Mac OS X 10.9.5, and
+  //!     version number component. This would be `1` for macOS 10.12.1, and
   //!     `7601` for Windows 7 (NT 6.1) SP1 version 6.1.7601.
   //! \param[out] build A string further identifying an operating system
-  //!     version. For Mac OS X 10.9.5, this would be `"13F34"`. For Windows,
+  //!     version. For macOS 10.12.1, this would be `"16B2657"`. For Windows,
   //!     this would be `"Service Pack 1"` if that service pack was installed.
-  //!     For Linux and other Unix-like systems, this would be the kernel
-  //!     version from `uname -srvm`, possibly with additional information
-  //!     appended. On Android, the `ro.build.fingerprint` system property would
-  //!     be appended.
+  //!     On Android, the `ro.build.fingerprint` system property would be
+  //!     appended. For Linux and other Unix-like systems, this would be the
+  //!     kernel version from `uname -srvm`, possibly with additional
+  //!     information appended.
   virtual void OSVersion(int* major,
                          int* minor,
                          int* bugfix,
@@ -221,17 +221,17 @@
   //! \brief Returns the snapshot system’s full operating system version
   //!     information in string format.
   //!
-  //! For Mac OS X, the string contains values from the operating system and
-  //! kernel. A Mac OS X 10.9.5 snapshot system would be identified as `"Mac OS
-  //! X 10.9.5 (13F34); Darwin 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17
-  //! 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64"`.
+  //! For macOS, the string contains values from the operating system and
+  //! kernel. A macOS 10.12.1 system snapshot would be identified as `"Mac OS
+  //! X 10.12.1 (16B2657); Darwin 16.1.0 Darwin Kernel Version 16.1.0: Wed Oct
+  //! 19 20:31:56 PDT 2016; root:xnu-3789.21.4~4/RELEASE_X86_64 x86_64"`.
   virtual std::string OSVersionFull() const = 0;
 
   //! \brief Returns a description of the snapshot system’s hardware in string
   //!     format.
   //!
-  //! For Mac OS X, the string contains the Mac model and board ID. A mid-2014
-  //! 15" MacBook Pro would be identified as `"MacBookPro11,3
+  //! For macOS, the string contains the Mac model and board ID. A mid-2014 15"
+  //! MacBook Pro would be identified as `"MacBookPro11,3
   //! (Mac-2BD1B31983FE1663)"`.
   virtual std::string MachineDescription() const = 0;
 
@@ -258,7 +258,7 @@
   //!     being observed.
   //! \param[out] daylight_name The name of the time zone while daylight saving
   //!     time is being observed.
-  virtual void TimeZone(DaylightSavingTimeStatus* observes_daylight,
+  virtual void TimeZone(DaylightSavingTimeStatus* dst_status,
                         int* standard_offset_seconds,
                         int* daylight_offset_seconds,
                         std::string* standard_name,
diff --git a/third_party/crashpad/crashpad/snapshot/test/test_process_snapshot.h b/third_party/crashpad/crashpad/snapshot/test/test_process_snapshot.h
index 633d9b9b..7dd31247 100644
--- a/third_party/crashpad/crashpad/snapshot/test/test_process_snapshot.h
+++ b/third_party/crashpad/crashpad/snapshot/test/test_process_snapshot.h
@@ -121,7 +121,7 @@
 
   //! \brief Adds a handle snapshot to be returned by Handles().
   //!
-  //! \param[in] region The handle snapshot that will be included in Handles().
+  //! \param[in] handle The handle snapshot that will be included in Handles().
   void AddHandle(const HandleSnapshot& handle) {
     handles_.push_back(handle);
   }
diff --git a/third_party/crashpad/crashpad/snapshot/win/end_to_end_test.py b/third_party/crashpad/crashpad/snapshot/win/end_to_end_test.py
index f469bcf..42999df 100755
--- a/third_party/crashpad/crashpad/snapshot/win/end_to_end_test.py
+++ b/third_party/crashpad/crashpad/snapshot/win/end_to_end_test.py
@@ -143,6 +143,10 @@
                             *args)
 
 
+def GetDumpFromSignal(out_dir, pipe_name, *args):
+  return GetDumpFromProgram(out_dir, pipe_name, 'crashy_signal.exe', *args)
+
+
 def GetDumpFromSelfDestroyingProgram(out_dir, pipe_name):
   return GetDumpFromProgram(out_dir, pipe_name, 'self_destroying_program.exe')
 
@@ -201,6 +205,8 @@
              z7_dump_path,
              other_program_path,
              other_program_no_exception_path,
+             sigabrt_main_path,
+             sigabrt_background_path,
              pipe_name):
   """Runs various tests in sequence. Runs a new cdb instance on the dump for
   each block of tests to reduce the chances that output from one command is
@@ -361,6 +367,13 @@
             'other program with no exception given')
   out.Check('!RaiseException', 'other program in RaiseException()')
 
+  out = CdbRun(cdb_path, sigabrt_main_path, '.ecxr')
+  out.Check('code 40000015', 'got sigabrt signal')
+  out.Check('::HandleAbortSignal', '  stack in expected location')
+
+  out = CdbRun(cdb_path, sigabrt_background_path, '.ecxr')
+  out.Check('code 40000015', 'got sigabrt signal from background thread')
+
 
 def main(args):
   try:
@@ -411,6 +424,15 @@
     if not other_program_no_exception_path:
       return 1
 
+    sigabrt_main_path = GetDumpFromSignal(args[0], pipe_name, 'main')
+    if not sigabrt_main_path:
+      return 1
+
+    sigabrt_background_path = GetDumpFromSignal(
+        args[0], pipe_name, 'background')
+    if not sigabrt_background_path:
+      return 1
+
     RunTests(cdb_path,
              crashy_dump_path,
              start_handler_dump_path,
@@ -418,6 +440,8 @@
              z7_dump_path,
              other_program_path,
              other_program_no_exception_path,
+             sigabrt_main_path,
+             sigabrt_background_path,
              pipe_name)
 
     return 1 if g_had_failures else 0
diff --git a/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win.h b/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win.h
index 3ccf38a..7aedb3a4 100644
--- a/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win.h
+++ b/third_party/crashpad/crashpad/snapshot/win/exception_snapshot_win.h
@@ -53,9 +53,9 @@
   //! \param[in] process_reader A ProcessReader for the process that sustained
   //!     the exception.
   //! \param[in] thread_id The thread ID in which the exception occurred.
-  //! \param[in] exception_pointers_address The address of an
-  //!     `EXCEPTION_POINTERS` record in the target process, passed through from
-  //!     the exception handler.
+  //! \param[in] exception_pointers The address of an `EXCEPTION_POINTERS`
+  //!     record in the target process, passed through from the exception
+  //!     handler.
   //!
   //! \note If the exception was triggered by
   //!     CrashpadClient::DumpAndCrashTargetProcess(), this has the side-effect
diff --git a/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader.h b/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader.h
index 868b076c..85f3bed 100644
--- a/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader.h
+++ b/third_party/crashpad/crashpad/snapshot/win/pe_image_annotations_reader.h
@@ -41,8 +41,8 @@
   //! \brief Constructs the object.
   //!
   //! \param[in] process_reader The reader for the remote process.
-  //! \param[in] image_reader The PEImageReader for the PE image file contained
-  //!     within the remote process.
+  //! \param[in] pe_image_reader The PEImageReader for the PE image file
+  //!     contained within the remote process.
   //! \param[in] name The module's name, a string to be used in logged messages.
   //!     This string is for diagnostic purposes only, and may be empty.
   PEImageAnnotationsReader(ProcessReaderWin* process_reader,
diff --git a/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc b/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc
index 76b5905..a3e31a4 100644
--- a/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc
+++ b/third_party/crashpad/crashpad/snapshot/win/process_snapshot_win_test.cc
@@ -31,7 +31,8 @@
 namespace {
 
 void TestImageReaderChild(const base::string16& directory_modification) {
-  UUID done_uuid(UUID::InitializeWithNewTag{});
+  UUID done_uuid;
+  done_uuid.InitializeWithNew();
   ScopedKernelHANDLE done(
       CreateEvent(nullptr, true, false, done_uuid.ToString16().c_str()));
   ASSERT_TRUE(done.get());
diff --git a/third_party/crashpad/crashpad/snapshot/win/thread_snapshot_win.h b/third_party/crashpad/crashpad/snapshot/win/thread_snapshot_win.h
index 7b56688..7df23ab 100644
--- a/third_party/crashpad/crashpad/snapshot/win/thread_snapshot_win.h
+++ b/third_party/crashpad/crashpad/snapshot/win/thread_snapshot_win.h
@@ -48,7 +48,7 @@
   //!     the thread.
   //! \param[in] process_reader_thread The thread within the ProcessReaderWin
   //!     for which the snapshot should be created.
-  //! \param[in] gather_indirectly_referenced_memory_bytes_remaining. If
+  //! \param[in,out] gather_indirectly_referenced_memory_bytes_remaining If
   //!     non-null, add extra memory regions to the snapshot pointed to by the
   //!     thread's stack. The size of the regions added is subtracted from the
   //!     count, and when it's `0`, no more regions will be added.
diff --git a/third_party/crashpad/crashpad/test/win/win_multiprocess.h b/third_party/crashpad/crashpad/test/win/win_multiprocess.h
index 418df79..663c759 100644
--- a/third_party/crashpad/crashpad/test/win/win_multiprocess.h
+++ b/third_party/crashpad/crashpad/test/win/win_multiprocess.h
@@ -71,7 +71,7 @@
   //!
   //! The default expected termination code is `EXIT_SUCCESS` (`0`).
   //!
-  //! \param[in] code The expected exit status of the child.
+  //! \param[in] exit_code The expected exit status of the child.
   void SetExpectedChildExitCode(unsigned int exit_code);
 
   //! \brief Returns the read pipe's file handle.
diff --git a/third_party/crashpad/crashpad/third_party/apple_cctools/README.crashpad b/third_party/crashpad/crashpad/third_party/apple_cctools/README.crashpad
index a2aadf7..43b0861 100644
--- a/third_party/crashpad/crashpad/third_party/apple_cctools/README.crashpad
+++ b/third_party/crashpad/crashpad/third_party/apple_cctools/README.crashpad
@@ -13,11 +13,11 @@
 otool. It also contains support libraries such as libmacho, which contains
 interfaces for dealing with Mach-O images.
 
-libmacho is available on Mac OS X as a runtime library that is part of
-libSystem, but versions of libmacho included in operating system versions prior
-to Mac OS X 10.7 did not include the getsectiondata() and getsegmentdata()
-functions. This library is present here to provide implementations of these
-functions for systems that do not have them.
+libmacho is available on macOS as a runtime library that is part of libSystem,
+but versions of libmacho included in operating system versions prior to Mac OS X
+10.7 did not include the getsectiondata() and getsegmentdata() functions. This
+library is present here to provide implementations of these functions for
+systems that do not have them.
 
 Crashpad code is not expected to use this library directly. It should use the
 getsectiondata() and getsegmentdata() wrappers in compat, which will use
diff --git a/third_party/crashpad/crashpad/tools/crashpad_database_util.ad b/third_party/crashpad/crashpad/tools/crashpad_database_util.ad
deleted file mode 100644
index 78107ee3..0000000
--- a/third_party/crashpad/crashpad/tools/crashpad_database_util.ad
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright 2015 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: manpage
-
-= crashpad_database_util(1)
-
-== Name
-
-crashpad_database_util - Operate on Crashpad crash report databases
-
-== Synopsis
-
-[verse]
-*crashpad_database_util* ['OPTION…']
-
-== Description
-
-Operates on Crashpad crash report databases. The database’s settings can be
-queried and modified, and information about crash reports stored in the
-database can be displayed.
-
-When this program is requested to both show and set information in a single
-invocation, all “show” operations will be completed prior to beginning any “set”
-operation.
-
-Programs that use the Crashpad client library directly will not normally use
-this tool, but may use the database through the programmatic interfaces in the
-client library. This tool exists to allow developers to manipulate a Crashpad
-database.
-
-== Options
-*--create*::
-Creates the database identified by *--database* if it does not exist, provided
-that the parent directory of 'PATH' exists.
-
-*-d*, *--database*='PATH'::
-Use 'PATH' as the path to the Crashpad crash report database. This option is
-required. The database must already exist unless *--create* is also specified.
-
-*--show-client-id*::
-Show the client ID stored in the database’s settings. The client ID is formatted
-as a UUID. The client ID is set when the database is created.
-man_link:crashpad_handler[8] retrieves the client ID and stores it in crash
-reports as they are written.
-
-*--show-uploads-enabled*::
-Show the status of the uploads-enabled bit stored in the database’s settings.
-man_link:crashpad_handler[8] does not upload reports when this bit is false.
-This bit is false when a database is created, and is under an application’s
-control via the Crashpad client library interface.
-+
-See also *--set-uploads-enabled*.
-
-*--show-last-upload-attempt-time*::
-Show the last-upload-attempt time stored in the database’s settings. This value
-is +0+, meaning “never,” when the database is created.
-man_link:crashpad_handler[8] consults this value before attempting an upload to
-implement its rate-limiting behavior. The database updates this value whenever
-an upload is attempted.
-+
-See also *--set-last-upload-attempt-time*.
-
-*--show-pending-reports*::
-Show reports eligible for upload.
-
-*--show-completed-reports*::
-Show reports not eligible for upload. A report is moved from the “pending” state
-to the “completed” state by man_link:crashpad_handler[8]. This may happen when a
-report is successfully uploaded, when a report is not uploaded because uploads
-are disabled, or when a report upload attempt fails and will not be retried.
-
-*--show-all-report-info*::
-With *--show-pending-reports* or *--show-completed-reports*, show all metadata
-for each report displayed. Without this option, only report IDs will be shown.
-
-*--show-report*='UUID'::
-Show a report from the database looked up by its identifier, 'UUID', which must
-be formatted in string representation per RFC 4122 §3. All metadata for each
-report found via a *--show-report* option will be shown. If 'UUID' is not found,
-the string +"not found"+ will be printed. If this program is only requested to
-show a single report and it is not found, it will treat this as a failure for
-the purposes of determining its exit status. This option may appear multiple
-times.
-
-*--set-report-uploads-enabled*='BOOL'::
-Enable or disable report upload in the database’s settings. 'BOOL' is a string
-representation of a boolean value, such as +"0"+ or +"true"+.
-+
-See also *--show-uploads-enabled*.
-
-*--set-last-upload-attempt-time*='TIME'::
-Set the last-upload-attempt time in the database’s settings. 'TIME' is a string
-representation of a time, which may be in 'yyyy-mm-dd hh:mm:ss' format, a
-numeric +time_t+ value, or the special string +"never"+.
-+
-See also *--show-last-upload-attempt-time*.
-
-*--new-report*='PATH'::
-Submit a new report located at 'PATH' to the database. If 'PATH' is +"-"+, the
-new report will be read from standard input. The new report will be in the
-“pending” state. The UUID assigned to the new report will be printed. This
-option may appear multiple times.
-
-*--utc*::
-When showing times, do so in UTC as opposed to the local time zone. When setting
-times, interpret ambiguous time strings in UTC as opposed to the local time
-zone.
-
-*--help*::
-Display help and exit.
-
-*--version*::
-Output version information and exit.
-
-== Examples
-
-Shows all crash reports in a crash report database that are in the “completed”
-state.
-[subs="quotes"]
-----
-$ *crashpad_database_util --database /tmp/crashpad_database \
-      --show-completed-reports*
-23f9512b-63e1-4ead-9dcd-e2e21fbccc68
-4bfca440-039f-4bc6-bbd4-6933cef5efd4
-56caeff8-b61a-43b2-832d-9e796e6e4a50
-----
-
-Disables report upload in a crash report database’s settings, and then verifies
-that the change was made.
-[subs="quotes"]
-----
-$ *crashpad_database_util --database /tmp/crashpad_database \
-      --set-uploads-enabled false*
-$ *crashpad_database_util --database /tmp/crashpad_database \
-      --show-uploads-enabled*
-false
-----
-
-== Exit Status
-
-*0*::
-Success.
-
-*1*::
-Failure, with a message printed to the standard error stream.
-
-== See Also
-
-man_link:crashpad_handler[8]
-
-include::../doc/support/man_footer.ad[]
diff --git a/third_party/crashpad/crashpad/tools/crashpad_database_util.cc b/third_party/crashpad/crashpad/tools/crashpad_database_util.cc
index acbadd0..e7d89bc4 100644
--- a/third_party/crashpad/crashpad/tools/crashpad_database_util.cc
+++ b/third_party/crashpad/crashpad/tools/crashpad_database_util.cc
@@ -38,6 +38,7 @@
 #include "util/file/file_io.h"
 #include "util/file/file_reader.h"
 #include "util/misc/uuid.h"
+#include "util/stdlib/string_number_conversion.h"
 
 namespace crashpad {
 namespace {
@@ -130,16 +131,23 @@
   return std::string(boolean ? "true" : "false");
 }
 
-// Converts |string| to |time|, returning true if a conversion could be
+// Converts |string| to |out_time|, returning true if a conversion could be
 // performed, and false without setting |boolean| if no conversion could be
 // performed. Various time formats are recognized, including several string
-// representations and a numeric time_t representation. The special string
-// "never" is recognized as |string| and converts to a |time| value of 0. |utc|,
-// when true, causes |string| to be interpreted as a UTC time rather than a
-// local time when the time zone is ambiguous.
-bool StringToTime(const char* string, time_t* time, bool utc) {
+// representations and a numeric time_t representation. The special |string|
+// "never" is recognized as converted to a |out_time| value of 0; "now" is
+// converted to the current time. |utc|, when true, causes |string| to be
+// interpreted as a UTC time rather than a local time when the time zone is
+// ambiguous.
+bool StringToTime(const char* string, time_t* out_time, bool utc) {
   if (strcasecmp(string, "never") == 0) {
-    *time = 0;
+    *out_time = 0;
+    return true;
+  }
+
+  if (strcasecmp(string, "now") == 0) {
+    errno = 0;
+    PCHECK(time(out_time) != -1 || errno == 0);
     return true;
   }
 
@@ -155,41 +163,53 @@
     tm time_tm;
     const char* strptime_result = strptime(string, kFormats[index], &time_tm);
     if (strptime_result == end) {
+      time_t test_out_time;
       if (utc) {
-        *time = timegm(&time_tm);
+        test_out_time = timegm(&time_tm);
       } else {
-        *time = mktime(&time_tm);
+        test_out_time = mktime(&time_tm);
       }
 
-      return true;
+      // mktime() is supposed to set errno in the event of an error, but support
+      // for this is spotty, so there’s no way to distinguish between a true
+      // time_t of -1 (1969-12-31 23:59:59 UTC) and an error. Assume error.
+      //
+      // See 10.11.5 Libc-1082.50.1/stdtime/FreeBSD/localtime.c and
+      // glibc-2.24/time/mktime.c, which don’t set errno or save and restore
+      // errno. Post-Android 7.1.0 Bionic is even more hopeless, setting errno
+      // whenever the time conversion returns -1, even for valid input. See
+      // libc/tzcode/localtime.c mktime(). Windows seems to get it right: see
+      // 10.0.14393 SDK Source/ucrt/time/mktime.cpp.
+      if (test_out_time != -1) {
+        *out_time = test_out_time;
+        return true;
+      }
     }
   }
 
-  char* end_result;
-  errno = 0;
-  long long strtoll_result = strtoll(string, &end_result, 0);
-  if (end_result == end && errno == 0 &&
-      base::IsValueInRangeForNumericType<time_t>(strtoll_result)) {
-    *time = strtoll_result;
+  int64_t int64_result;
+  if (StringToNumber(string, &int64_result) &&
+      base::IsValueInRangeForNumericType<time_t>(int64_result)) {
+    *out_time = int64_result;
     return true;
   }
 
   return false;
 }
 
-// Converts |time_tt| to a string, and returns it. |utc| determines whether the
-// converted time will reference local time or UTC. If |time_tt| is 0, the
+// Converts |out_time| to a string, and returns it. |utc| determines whether the
+// converted time will reference local time or UTC. If |out_time| is 0, the
 // string "never" will be returned as a special case.
-std::string TimeToString(time_t time_tt, bool utc) {
-  if (time_tt == 0) {
+std::string TimeToString(time_t out_time, bool utc) {
+  if (out_time == 0) {
     return std::string("never");
   }
 
   tm time_tm;
   if (utc) {
-    gmtime_r(&time_tt, &time_tm);
+    PCHECK(gmtime_r(&out_time, &time_tm));
   } else {
-    localtime_r(&time_tt, &time_tm);
+    PCHECK(localtime_r(&out_time, &time_tm));
   }
 
   char string[64];
diff --git a/third_party/crashpad/crashpad/tools/crashpad_database_util.md b/third_party/crashpad/crashpad/tools/crashpad_database_util.md
new file mode 100644
index 0000000..a63d9a68
--- /dev/null
+++ b/third_party/crashpad/crashpad/tools/crashpad_database_util.md
@@ -0,0 +1,208 @@
+<!--
+Copyright 2015 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# crashpad_database_util(1)
+
+## Name
+
+crashpad_database_util—Operate on Crashpad crash report databases
+
+## Synopsis
+
+**crashpad_database_util** [_OPTION…_]
+
+## Description
+
+Operates on Crashpad crash report databases. The database’s settings can be
+queried and modified, and information about crash reports stored in the database
+can be displayed.
+
+When this program is requested to both show and set information in a single
+invocation, all “show” operations will be completed prior to beginning any “set”
+operation.
+
+Programs that use the Crashpad client library directly will not normally use
+this tool, but may use the database through the programmatic interfaces in the
+client library. This tool exists to allow developers to manipulate a Crashpad
+database.
+
+## Options
+
+ * **--create**
+
+   Creates the database identified by **--database** if it does not exist,
+   provided that the parent directory of _PATH_ exists.
+
+ * **-d**, **--database**=_PATH_
+
+   Use _PATH_ as the path to the Crashpad crash report database. This option is
+   required. The database must already exist unless **--create** is also
+   specified.
+
+ * **--show-client-id**
+
+   Show the client ID stored in the database’s settings. The client ID is
+   formatted as a UUID. The client ID is set when the database is created.
+   [crashpad_handler(8)](../handler/crashpad_handler.md) retrieves the client ID
+   and stores it in crash reports as they are written.
+
+ * **--show-uploads-enabled**
+
+   Show the status of the uploads-enabled bit stored in the database’s settings.
+   [crashpad_handler(8)](../handler/crashpad_handler.md) does not upload reports
+   when this bit is false. This bit is false when a database is created, and is
+   under an application’s control via the Crashpad client library interface.
+
+   See also **--set-uploads-enabled**.
+
+ * **--show-last-upload-attempt-time**
+
+   Show the last-upload-attempt time stored in the database’s settings. This
+   value is `0`, meaning “never,” when the database is created.
+   [crashpad_handler(8)](../handler/crashpad_handler.md) consults this value
+   before attempting an upload to implement its rate-limiting behavior. The
+   database updates this value whenever an upload is attempted.
+
+   See also **--set-last-upload-attempt-time**.
+
+ * **--show-pending-reports**
+
+   Show reports eligible for upload.
+
+ * **--show-completed-reports**
+
+   Show reports not eligible for upload. A report is moved from the “pending”
+   state to the “completed” state by
+   [crashpad_handler(8)](../handler/crashpad_handler.md). This may happen when a
+   report is successfully uploaded, when a report is not uploaded because
+   uploads are disabled, or when a report upload attempt fails and will not be
+   retried.
+
+ * **--show-all-report-info**
+
+   With **--show-pending-reports** or **--show-completed-reports**, show all
+   metadata for each report displayed. Without this option, only report IDs will
+   be shown.
+
+ * **--show-report**=_UUID_
+
+   Show a report from the database looked up by its identifier, _UUID_, which
+   must be formatted in string representation per RFC 4122 §3. All metadata for
+   each report found via a **--show-report** option will be shown. If _UUID_ is
+   not found, the string `"not found"` will be printed. If this program is only
+   requested to show a single report and it is not found, it will treat this as
+   a failure for the purposes of determining its exit status. This option may
+   appear multiple times.
+
+ * **--set-report-uploads-enabled**=_BOOL_
+
+   Enable or disable report upload in the database’s settings. _BOOL_ is a
+   string representation of a boolean value, such as `"0"` or `"true"`.
+
+   See also **--show-uploads-enabled**.
+
+ * **--set-last-upload-attempt-time**=_TIME_
+
+   Set the last-upload-attempt time in the database’s settings. _TIME_ is a
+   string representation of a time, which may be in _yyyy-mm-dd hh:mm:ss_
+   format, a numeric `time_t` value, or the special strings `"never"` or
+   `"now"`.
+
+   See also **--show-last-upload-attempt-time**.
+
+ * **--new-report**=_PATH_
+
+   Submit a new report located at _PATH_ to the database. If _PATH_ is `"-"`,
+   the new report will be read from standard input. The new report will be in
+   the “pending” state. The UUID assigned to the new report will be printed.
+   This option may appear multiple times.
+
+ * **--utc**
+
+   When showing times, do so in UTC as opposed to the local time zone. When
+   setting times, interpret ambiguous time strings in UTC as opposed to the
+   local time zone.
+
+ * **--help**
+
+   Display help and exit.
+
+ * **--version**
+
+   Output version information and exit.
+
+## Examples
+
+Shows all crash reports in a crash report database that are in the “completed”
+state.
+
+```
+$ crashpad_database_util --database /tmp/crashpad_database \
+      --show-completed-reports
+23f9512b-63e1-4ead-9dcd-e2e21fbccc68
+4bfca440-039f-4bc6-bbd4-6933cef5efd4
+56caeff8-b61a-43b2-832d-9e796e6e4a50
+```
+
+Disables report upload in a crash report database’s settings, and then verifies
+that the change was made.
+
+```
+$ crashpad_database_util --database /tmp/crashpad_database \
+      --set-uploads-enabled false
+$ crashpad_database_util --database /tmp/crashpad_database \
+      --show-uploads-enabled
+false
+```
+
+## Exit Status
+
+ * **0**
+
+   Success.
+
+ * **1**
+
+   Failure, with a message printed to the standard error stream.
+
+## See Also
+
+[crashpad_handler(8)](../handler/crashpad_handler.md)
+
+## Resources
+
+Crashpad home page: https://crashpad.chromium.org/.
+
+Report bugs at https://crashpad.chromium.org/bug/new.
+
+## Copyright
+
+Copyright 2015 [The Crashpad
+Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS).
+
+## License
+
+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.
diff --git a/third_party/crashpad/crashpad/tools/generate_dump.ad b/third_party/crashpad/crashpad/tools/generate_dump.ad
deleted file mode 100644
index d8a53c8d..0000000
--- a/third_party/crashpad/crashpad/tools/generate_dump.ad
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: manpage
-
-= generate_dump(1)
-
-== Name
-
-generate_dump - Generate a minidump file containing a snapshot of a running
-process
-
-== Synopsis
-
-[verse]
-*generate_dump* ['OPTION…'] 'PID'
-
-== Description
-
-Generates a minidump file containing a snapshot of a running process whose
-process identifier is 'PID'. By default, the target process will be suspended
-while the minidump is generated, and the minidump file will be written to
-+minidump.PID+. After the minidump file is generated, the target process resumes
-running.
-
-The minidump file will contain information about the process, its threads, its
-modules, and the system. It will not contain any exception information because
-it will be generated from a live running process, not as a result of an
-exception occurring.
-
-This program uses +task_for_pid()+ to access the process’ task port. This
-operation may be restricted to use by the superuser, executables signed by an
-authority trusted by the system, and processes otherwise permitted by
-taskgated(8). Consequently, this program must normally either be signed or be
-invoked by root. It is possible to install this program as a setuid root
-executable to overcome this limitation.
-
-This program is similar to the gcore(1) program available on some operating
-systems.
-
-== Options
-
-*-r*, *--no-suspend*::
-The target process will continue running while the minidump file is generated.
-Normally, the target process is suspended during this operation, which
-guarantees that the minidump file will contain an atomic snapshot of the
-process.
-+
-This option may be useful when attempting to generate a minidump from a process
-that dump generation has an interprocess dependency on, such as a system server
-like launchd(8) or opendirectoryd(8). Deadlock could occur if any portion of the
-dump generation operation blocks while waiting for a response from one of these
-servers while they are suspended.
-
-*-o*, *--output*='FILE'::
-The minidump will be written to 'FILE' instead of +minidump.PID+.
-
-*--help*::
-Display help and exit.
-
-*--version*::
-Output version information and exit.
-
-== Examples
-
-Generate a minidump file in +/tmp/minidump+ containing a snapshot of the process
-with PID 1234.
-[subs="quotes"]
-----
-$ *generate_dump --output=/tmp/minidump 1234*
-----
-
-== Exit Status
-
-*0*::
-Success.
-
-*1*::
-Failure, with a message printed to the standard error stream.
-
-== See Also
-
-man_link:catch_exception_tool[1]
-
-include::../doc/support/man_footer.ad[]
diff --git a/third_party/crashpad/crashpad/tools/generate_dump.md b/third_party/crashpad/crashpad/tools/generate_dump.md
new file mode 100644
index 0000000..c58ecbc
--- /dev/null
+++ b/third_party/crashpad/crashpad/tools/generate_dump.md
@@ -0,0 +1,127 @@
+<!--
+Copyright 2014 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# generate_dump(1)
+
+## Name
+
+generate_dump—Generate a minidump file containing a snapshot of a running
+process
+
+## Synopsis
+
+**generate_dump** [_OPTION…_] _PID_
+
+## Description
+
+Generates a minidump file containing a snapshot of a running process whose
+process identifier is _PID_. By default, the target process will be suspended
+while the minidump is generated, and the minidump file will be written to
+`minidump.PID`. After the minidump file is generated, the target process resumes
+running.
+
+The minidump file will contain information about the process, its threads, its
+modules, and the system. It will not contain any exception information because
+it will be generated from a live running process, not as a result of an
+exception occurring.
+
+On macOS, this program uses `task_for_pid()` to access the process’ task port.
+This operation may be restricted to use by the superuser, executables signed by
+an authority trusted by the system, and processes otherwise permitted by
+taskgated(8). Consequently, this program must normally either be signed or be
+invoked by root. It is possible to install this program as a setuid root
+executable to overcome this limitation, although it will remain impossible to
+generate dumps for processes protected by [System Integrity Protection
+(SIP)](https://support.apple.com/HT204899), including those whose “restrict”
+codesign(1) option is respected.
+
+This program is similar to the gcore(1) program available on some operating
+systems.
+
+## Options
+
+ * **-r**, **--no-suspend**
+
+   The target process will continue running while the minidump file is
+   generated. Normally, the target process is suspended during this operation,
+   which guarantees that the minidump file will contain an atomic snapshot of
+   the process.
+
+   This option may be useful when attempting to generate a minidump from a
+   process that dump generation has an interprocess dependency on, such as a
+   system server like launchd(8) or opendirectoryd(8) on macOS. Deadlock could
+   occur if any portion of the dump generation operation blocks while waiting
+   for a response from one of these servers while they are suspended.
+
+ * **-o**, **--output**=_FILE_
+
+   The minidump will be written to _FILE_ instead of `minidump.PID`.
+
+ * **--help**
+
+   Display help and exit.
+
+ * **--version**
+
+   Output version information and exit.
+
+## Examples
+
+Generate a minidump file in `/tmp/minidump` containing a snapshot of the process
+with PID 1234.
+
+```
+$ generate_dump --output=/tmp/minidump 1234
+```
+
+## Exit Status
+
+ * **0**
+
+   Success.
+
+ * **1**
+
+   Failure, with a message printed to the standard error stream.
+
+## See Also
+
+[catch_exception_tool(1)](mac/catch_exception_tool.md)
+
+## Resources
+
+Crashpad home page: https://crashpad.chromium.org/.
+
+Report bugs at https://crashpad.chromium.org/bug/new.
+
+## Copyright
+
+Copyright 2014 [The Crashpad
+Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS).
+
+## License
+
+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.
diff --git a/third_party/crashpad/crashpad/tools/mac/catch_exception_tool.ad b/third_party/crashpad/crashpad/tools/mac/catch_exception_tool.ad
deleted file mode 100644
index a639de4c..0000000
--- a/third_party/crashpad/crashpad/tools/mac/catch_exception_tool.ad
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: manpage
-
-= catch_exception_tool(1)
-
-== Name
-
-catch_exception_tool - Catch Mach exceptions and display information about them
-
-== Synopsis
-
-[verse]
-*catch_exception_tool* *-m* 'SERVICE' ['OPTION…']
-
-== Description
-
-Runs a Mach exception server registered with the bootstrap server under the name
-'SERVICE'. The exception server is capable of receiving exceptions for
-“behavior” values of +EXCEPTION_DEFAULT+, +EXCEPTION_STATE+, and
-+EXCEPTION_STATE_IDENTITY+, with or without +MACH_EXCEPTION_CODES+ set.
-
-== Options
-
-*-f*, *--file*='FILE'::
-Information about the exception will be appended to 'FILE' instead of the
-standard output stream.
-
-*-m*, *--mach-service*='SERVICE'::
-Check in with the bootstrap server under the name 'SERVICE'. This service name
-may already be reserved with the bootstrap server in cases where this tool is
-started by launchd(8) as a result of a message being sent to a service declared
-in a job’s +MachServices+ dictionary (see launchd.plist(5)). The service name
-may also be completely unknown to the system.
-
-*-p*, *--persistent*::
-Continue processing exceptions after the first one. The default mode is
-one-shot, where this tool exits after processing the first exception.
-
-*-t*, *--timeout*='TIMEOUT'::
-Run for a maximum of 'TIMEOUT' seconds. Specify +0+ to request non-blocking
-operation, in which the tool exits immediately if no exception is received. In
-*--persistent* mode, 'TIMEOUT' applies to the overall duration that this tool
-will run, not to the processing of individual exceptions. When *--timeout* is
-not specified, this tool will block indefinitely while waiting for an exception.
-
-*--help*::
-Display help and exit.
-
-*--version*::
-Output version information and exit.
-
-== Examples
-
-Run a one-shot blocking exception server registered with the bootstrap server
-under the name +svc+:
-[subs="quotes"]
-----
-$ *catch_exception_tool --mach-service=svc --file=out &amp;*
-[1] 1233
-$ *exception_port_tool --set-handler=handler=bootstrap:svc crasher*
-Illegal instruction: 4
-[1]+  Done    catch_exception_tool --mach-service=svc --file=out
-$ *cat out*
-catch_exception_tool:
-behavior EXCEPTION_DEFAULT|MACH_EXCEPTION_CODES,
-pid 1234, thread 56789, exception EXC_CRASH, codes[2] 0x4200001, 0,
-original exception EXC_BAD_INSTRUCTION, original code[0] 1,
-signal SIGILL
-----
-
-Run an on-demand exception server started by launchd(5) available via the
-bootstrap server under the name +svc+:
-[subs="quotes"]
-----
-$ *on_demand_service_tool --load --label=catch_exception \
-      --mach-service=svc \
-      $(which catch_exception_tool) --mach-service=svc \
-      --file=/tmp/out --persistent --timeout=0*
-$ *exception_port_tool --set-handler=handler=bootstrap:svc crasher*
-Illegal instruction: 4
-$ *on_demand_service_tool --unload --label=catch_exception*
-$ *cat /tmp/out*
-catch_exception_tool:
-behavior EXCEPTION_DEFAULT|MACH_EXCEPTION_CODES,
-pid 2468, thread 13579, exception EXC_CRASH, codes[2] 0x4200001, 0,
-original exception EXC_BAD_INSTRUCTION, original code[0] 1,
-signal SIGILL
-----
-
-== Exit Status
-
-*0*::
-Success. In *--persistent* mode with a *--timeout* set, it is considered
-successful if at least one exception was caught when the timer expires.
-
-*1*::
-Failure, with a message printed to the standard error stream.
-
-== See Also
-
-man_link:exception_port_tool[1],
-man_link:on_demand_service_tool[1]
-
-include::../../doc/support/man_footer.ad[]
diff --git a/third_party/crashpad/crashpad/tools/mac/catch_exception_tool.md b/third_party/crashpad/crashpad/tools/mac/catch_exception_tool.md
new file mode 100644
index 0000000..3c71dec
--- /dev/null
+++ b/third_party/crashpad/crashpad/tools/mac/catch_exception_tool.md
@@ -0,0 +1,140 @@
+<!--
+Copyright 2014 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# catch_exception_tool(1)
+
+## Name
+
+catch_exception_tool—Catch Mach exceptions and display information about them
+
+## Synopsis
+
+**catch_exception_tool** **-m** _SERVICE_ [_OPTION…_]
+
+## Description
+
+Runs a Mach exception server registered with the bootstrap server under the name
+_SERVICE_. The exception server is capable of receiving exceptions for
+“behavior” values of `EXCEPTION_DEFAULT`, `EXCEPTION_STATE`, and
+`EXCEPTION_STATE_IDENTITY`, with or without `MACH_EXCEPTION_CODES` set.
+
+## Options
+
+ * **-f**, **--file**=_FILE_
+
+   Information about the exception will be appended to _FILE_ instead of the
+   standard output stream.
+
+ * **-m**, **--mach-service**=_SERVICE_
+
+   Check in with the bootstrap server under the name _SERVICE_. This service
+   name may already be reserved with the bootstrap server in cases where this
+   tool is started by launchd(8) as a result of a message being sent to a
+   service declared in a job’s `MachServices` dictionary (see launchd.plist(5)).
+   The service name may also be completely unknown to the system.
+
+ * **-p**, **--persistent**
+
+   Continue processing exceptions after the first one. The default mode is
+   one-shot, where this tool exits after processing the first exception.
+
+ * **-t**, **--timeout**=_TIMEOUT_
+
+   Run for a maximum of _TIMEOUT_ seconds. Specify `0` to request non-blocking
+   operation, in which the tool exits immediately if no exception is received.
+   In **--persistent** mode, _TIMEOUT_ applies to the overall duration that this
+   tool will run, not to the processing of individual exceptions. When
+   **--timeout** is not specified, this tool will block indefinitely while
+   waiting for an exception.
+
+ * **--help**
+
+   Display help and exit.
+
+ * **--version**
+
+   Output version information and exit.
+
+## Examples
+
+Run a one-shot blocking exception server registered with the bootstrap server
+under the name `svc`:
+
+```
+$ catch_exception_tool --mach-service=svc --file=out &
+[1] 1233
+$ exception_port_tool --set-handler=handler=bootstrap:svc crasher
+Illegal instruction: 4
+[1]+  Done    catch_exception_tool --mach-service=svc --file=out
+$ cat out
+catch_exception_tool: behavior EXCEPTION_DEFAULT|MACH_EXCEPTION_CODES, pid 1234, thread 56789, exception EXC_CRASH, codes[2] 0x4200001, 0, original exception EXC_BAD_INSTRUCTION, original code[0] 1, signal SIGILL
+```
+
+Run an on-demand exception server started by launchd(5) available via the
+bootstrap server under the name `svc`:
+
+```
+$ `on_demand_service_tool --load --label=catch_exception \
+      --mach-service=svc \
+      $(which catch_exception_tool) --mach-service=svc \
+      --file=/tmp/out --persistent --timeout=0
+$ exception_port_tool --set-handler=handler=bootstrap:svc crasher
+Illegal instruction: 4
+$ on_demand_service_tool --unload --label=catch_exception
+$ cat /tmp/out
+catch_exception_tool: behavior EXCEPTION_DEFAULT|MACH_EXCEPTION_CODES, pid 2468, thread 13579, exception EXC_CRASH, codes[2] 0x4200001, 0, original exception EXC_BAD_INSTRUCTION, original code[0] 1, signal SIGILL
+```
+
+## Exit Status
+
+ * **0**
+
+   Success. In **--persistent** mode with a **--timeout** set, it is considered
+   successful if at least one exception was caught when the timer expires.
+
+ * **1**
+
+   Failure, with a message printed to the standard error stream.
+
+## See Also
+
+[exception_port_tool(1)](exception_port_tool.md),
+[on_demand_service_tool(1)](on_demand_service_tool.md)
+
+## Resources
+
+Crashpad home page: https://crashpad.chromium.org/.
+
+Report bugs at https://crashpad.chromium.org/bug/new.
+
+## Copyright
+
+Copyright 2014 [The Crashpad
+Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS).
+
+## License
+
+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.
diff --git a/third_party/crashpad/crashpad/tools/mac/exception_port_tool.ad b/third_party/crashpad/crashpad/tools/mac/exception_port_tool.ad
deleted file mode 100644
index e102cc00..0000000
--- a/third_party/crashpad/crashpad/tools/mac/exception_port_tool.ad
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: manpage
-
-= exception_port_tool(1)
-
-== Name
-
-exception_port_tool - Show and change Mach exception ports
-
-== Synopsis
-
-[verse]
-*exception_port_tool* ['OPTION…'] ['COMMAND' ['ARG…']]
-
-== Description
-
-Shows Mach exception ports registered for a thread, task, or host target with a
-*--show-&#42;* option, changes Mach exception ports with *--set-handler*, shows
-changes with a *--show-new-&#42;* option, and executes 'COMMAND' along with any
-arguments specified ('ARG…') with the changed exception ports in effect.
-
-== Options
-*-s*, *--set-handler*='DESCRIPTION'::
-Set an exception port to 'DESCRIPTION'. This option may appear zero, one, or
-more times.
-+
-'DESCRIPTION' is formatted as a comma-separated sequence of tokens, where each
-token consists of a key and value separated by an equals sign. These keys are
-recognized:
-+
-*target*='TARGET':::
-'TARGET' defines which target’s exception ports to set: *host*, *task*, or
-*thread*. The default value of 'TARGET' is *task*. Operations on *host* are
-restricted to the superuser.
-+
-*mask*='MASK':::
-'MASK' defines the mask of exception types to handle, from
-+<mach/exception_types.h>+. This can be *BAD_ACCESS*, *BAD_INSTRUCTION*,
-*ARITHMETIC*, *EMULATION*, *SOFTWARE*, *BREAKPOINT*, *SYSCALL*, *MACH_SYSCALL*,
-*RPC_ALERT*, *CRASH*, *RESOURCE*, *GUARD*, or *CORPSE_NOTIFY*. Different
-exception types may be combined by combining them with pipe characters (*|*).
-The special value *ALL* includes each exception type except for *CRASH*. To
-truly specify all exception types including *CRASH*, use *ALL|CRASH*. The
-default value of 'MASK' is *CRASH*.
-+
-*behavior*='BEHAVIOR':::
-'BEHAVIOR' defines the specific exception handler routine to be called when an
-exception occurs. This can be *DEFAULT*, *STATE*, or *STATE_IDENTITY*. *MACH*
-may also be specified by combining them with pipe characters (*|*). The most
-complete set of exception information is provided with *STATE_IDENTITY|MACH*.
-Not all exception servers implement all possible behaviors. The default value of
-'BEHAVIOR' is *DEFAULT|MACH*.
-+
-*flavor*='FLAVOR':::
-For state-carrying values of 'BEHAVIOR' (those including *STATE* or
-*STATE_IDENTITY*), 'FLAVOR' specifies the architecture-specific thread state
-flavor to be provided to the exception handler. For the x86 family, this can be
-*THREAD*, *THREAD32*, *THREAD64*, *FLOAT*, *FLOAT32*, *FLOAT64*, *DEBUG*,
-*DEBUG32*, or *DEBUG64*. The default value of 'FLAVOR' is *NONE*, which is not
-valid for state-carrying values of 'BEHAVIOR'.
-+
-*handler*='HANDLER':::
-'HANDLER' defines the exception handler. *NULL* indicates that any existing
-exception port should be cleared. 'HANDLER' may also take the form
-*bootstrap*:__SERVICE__, which will look 'SERVICE' up with the bootstrap server
-and set that service as the exception handler. The default value of 'HANDLER' is
-*NULL*.
-
-*--show-bootstrap*='SERVICE'::
-Looks up 'SERVICE' with the bootstrap server and shows it. Normally, the handler
-port values displayed by the other *--show-&#42;* options are meaningless
-handles, but by comparing them to the port values for known bootstrap services,
-it is possible to verify that they are set as intended.
-
-*-p*, *--pid*='PID'::
-For operations on the task target, including *--set-handler* with 'TARGET' set
-to *task*, *--show-task*, and *--show-new-task*, operates on the task associated
-with process id 'PID' instead of the current task associated with the tool. When
-this option is supplied, 'COMMAND' must not be specified.
-+
-This option uses +task_for_pid()+ to access the process’ task port. This
-operation may be restricted to use by the superuser, executables signed by an
-authority trusted by the system, and processes otherwise permitted by
-taskgated(8). Consequently, this program must normally either be signed or be
-invoked by root to use this option. It is possible to install this program as a
-setuid root executable to overcome this limitation.
-
-*-h*, *--show-host*::
-Shows the original host exception ports before making any changes requested by
-*--set-handler*. This option is restricted to the superuser.
-
-*-t*, *--show-task*::
-Shows the original task exception ports before making any changes requested by
-*--set-handler*.
-
-*--show-thread*::
-Shows the original thread exception ports before making any changes requested by
-*--set-handler*.
-
-*-H*, *--show-new-host*::
-Shows the modified host exception ports after making any changes requested by
-*--set-handler*. This option is restricted to the superuser.
-
-*-T*, *--show-new-task*::
-Shows the modified task exception ports after making any changes requested by
-*--set-handler*.
-
-*--show-new-thread*::
-Shows the modified thread exception ports after making any changes requested by
-*--set-handler*.
-
-*-n*, *--numeric*::
-For *--show-&#42;* options, all values will be displayed numerically only. The
-default is to decode numeric values and display them symbolically as well.
-
-*--help*::
-Display help and exit.
-
-*--version*::
-Output version information and exit.
-
-== Examples
-
-Sets a new task-level exception handler for +EXC_CRASH+-type exceptions to the
-handler registered with the bootstrap server as +svc+, showing the task-level
-exception ports before and after the change. The old and new exception handlers
-are verified by their service names as registered with the bootstrap server.
-With the new task-level exception ports in effect, a program is run.
-[subs="quotes"]
-----
-$ *exception_port_tool --show-task --show-new-task \
-      --show-bootstrap=com.apple.ReportCrash --show-bootstrap=svc \
-      --set-handler=behavior=DEFAULT,handler=bootstrap:svc crash*
-service com.apple.ReportCrash 0xe03
-service svc 0x1003
-task exception port 0, mask 0x400 (CRASH), port 0xe03,
-behavior 0x80000003 (STATE_IDENTITY|MACH), flavor 7 (THREAD)
-new task exception port 0, mask 0x400 (CRASH), port 0x1003,
-behavior 0x1 (DEFAULT), flavor 13 (NONE)
-Illegal instruction: 4
-----
-
-Shows the task-level exception ports for the process with PID 1234. This
-requires superuser permissions or the approval of taskgated(8).
-[subs="quotes"]
-----
-# *exception_port_tool --pid=1234 --show-task*
-task exception port 0, mask 0x4e
-(BAD_ACCESS|BAD_INSTRUCTION|ARITHMETIC|BREAKPOINT), port 0x1503,
-behavior 0x1 (DEFAULT), flavor 13 (NONE)
-task exception port 1, mask 0x1c00 (CRASH|RESOURCE|GUARD),
-port 0x1403, behavior 0x80000003 (STATE_IDENTITY|MACH),
-flavor 7 (THREAD)
-----
-
-== Exit Status
-
-*0*::
-Success.
-
-*125*::
-Failure, with a message printed to the standard error stream.
-
-*126*::
-The program specified by 'COMMAND' was found, but could not be invoked.
-
-*127*::
-The program specified by 'COMMAND' could not be found.
-
-== See Also
-
-man_link:catch_exception_tool[1],
-man_link:on_demand_service_tool[1]
-
-include::../../doc/support/man_footer.ad[]
diff --git a/third_party/crashpad/crashpad/tools/mac/exception_port_tool.md b/third_party/crashpad/crashpad/tools/mac/exception_port_tool.md
new file mode 100644
index 0000000..1743e420
--- /dev/null
+++ b/third_party/crashpad/crashpad/tools/mac/exception_port_tool.md
@@ -0,0 +1,234 @@
+<!--
+Copyright 2014 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# exception_port_tool(1)
+
+## Name
+
+exception_port_tool—Show and change Mach exception ports
+
+## Synopsis
+
+**exception_port_tool** [_OPTION…_] [_COMMAND_ [_ARG…_]]
+
+## Description
+
+Shows Mach exception ports registered for a thread, task, or host target with a
+__--show-*__ option, changes Mach exception ports with **--set-handler**, shows
+changes with a __--show-new-*__ option, and executes _COMMAND_ along with any
+arguments specified (_ARG…_) with the changed exception ports in effect.
+
+## Options
+
+ * **-s**, **--set-handler**=_DESCRIPTION_
+
+   Set an exception port to _DESCRIPTION_. This option may appear zero, one, or
+   more times.
+
+   _DESCRIPTION_ is formatted as a comma-separated sequence of tokens, where
+   each token consists of a key and value separated by an equals sign. These
+   keys are recognized:
+
+    * **target**=_TARGET_
+
+      _TARGET_ defines which target’s exception ports to set: **host**,
+      **task**, or **thread**. The default value of _TARGET_ is **task**.
+      Operations on **host** are restricted to the superuser.
+
+    * **mask**=_MASK_
+
+      _MASK_ defines the mask of exception types to handle, from
+      `<mach/exception_types.h>`. This can be **BAD_ACCESS**,
+      **BAD_INSTRUCTION**, **ARITHMETIC**, **EMULATION**, **SOFTWARE**,
+      **BREAKPOINT**, **SYSCALL**, **MACH_SYSCALL**, **RPC_ALERT**, **CRASH**,
+      **RESOURCE**, **GUARD**, or **CORPSE_NOTIFY**. Different exception types
+      may be combined by combining them with pipe characters (**|**). The
+      special value **ALL** includes each exception type except for **CRASH**
+      and **CORPSE_NOTIFY**. To truly specify all exception types including
+      these, use **ALL|CRASH|CORPSE_NOTIFY**. The default value of _MASK_ is
+      **CRASH**.
+
+    * **behavior**=_BEHAVIOR_
+
+      _BEHAVIOR_ defines the specific exception handler routine to be called
+      when an exception occurs. This can be **DEFAULT**, **STATE**, or
+      **STATE_IDENTITY**. **MACH** may also be specified by combining them with
+      pipe characters (**|**). The most complete set of exception information is
+      provided with **STATE_IDENTITY|MACH**. Not all exception servers implement
+      all possible behaviors. The default value of _BEHAVIOR_ is
+      **DEFAULT|MACH**.
+
+    * **flavor**=_FLAVOR_
+
+      For state-carrying values of _BEHAVIOR_ (those including **STATE** or
+      **STATE_IDENTITY**), _FLAVOR_ specifies the architecture-specific thread
+      state flavor to be provided to the exception handler. For the x86 family,
+      this can be **THREAD**, **THREAD32**, **THREAD64**, **FLOAT**,
+      **FLOAT32**, **FLOAT64**, **DEBUG**, **DEBUG32**, or **DEBUG64**. The
+      default value of _FLAVOR_ is **NONE**, which is not valid for
+      state-carrying values of _BEHAVIOR_.
+
+    * **handler**=_HANDLER_
+
+      _HANDLER_ defines the exception handler. **NULL** indicates that any
+      existing exception port should be cleared. _HANDLER_ may also take the
+      form **bootstrap**:_SERVICE_, which will look _SERVICE_ up with the
+      bootstrap server and set that service as the exception handler. The
+      default value of _HANDLER_ is **NULL**.
+
+ * **--show-bootstrap**=_SERVICE_
+
+   Looks up _SERVICE_ with the bootstrap server and shows it. Normally, the
+   handler port values displayed by the other __--show-*__ options are
+   meaningless handles, but by comparing them to the port values for known
+   bootstrap services, it is possible to verify that they are set as intended.
+
+ * **-p**, **--pid**=_PID_
+
+   For operations on the task target, including **--set-handler** with _TARGET_
+   set to **task**, **--show-task**, and **--show-new-task**, operates on the
+   task associated with process id _PID_ instead of the current task associated
+   with the tool. When this option is supplied, _COMMAND_ must not be specified.
+
+   This option uses `task_for_pid()` to access the process’ task port. This
+   operation may be restricted to use by the superuser, executables signed by an
+   authority trusted by the system, and processes otherwise permitted by
+   taskgated(8). Consequently, this program must normally either be signed or be
+   invoked by root to use this option. It is possible to install this program as
+   a setuid root executable to overcome this limitation. However, it is not
+   possible to use this option to operate on processes protected by [System
+   Integrity Protection (SIP)](https://support.apple.com/HT204899), including
+   those whose “restrict” codesign(1) option is respected.
+
+ * **-h**, **--show-host**
+
+   Shows the original host exception ports before making any changes requested
+   by **--set-handler**. This option is restricted to the superuser.
+
+ * **-t**, **--show-task**
+
+   Shows the original task exception ports before making any changes requested
+   by **--set-handler**.
+
+ * **--show-thread**
+
+   Shows the original thread exception ports before making any changes requested
+   by **--set-handler**.
+
+ * **-H**, **--show-new-host**
+
+   Shows the modified host exception ports after making any changes requested by
+   **--set-handler**. This option is restricted to the superuser.
+
+ * **-T**, **--show-new-task**
+
+   Shows the modified task exception ports after making any changes requested by
+   **--set-handler**.
+
+ * **--show-new-thread**
+
+   Shows the modified thread exception ports after making any changes requested
+   by **--set-handler**
+
+ * **-n**, **--numeric**
+
+   For __--show-*__ options, all values will be displayed numerically only. The
+   default is to decode numeric values and display them symbolically as well.
+
+ * **--help**
+
+   Display help and exit.
+
+ * **--version**
+
+   Output version information and exit.
+
+## Examples
+
+Sets a new task-level exception handler for `EXC_CRASH`-type exceptions to the
+handler registered with the bootstrap server as `svc`, showing the task-level
+exception ports before and after the change. The old and new exception handlers
+are verified by their service names as registered with the bootstrap server.
+With the new task-level exception ports in effect, a program is run.
+
+```
+$ exception_port_tool --show-task --show-new-task \
+      --show-bootstrap=com.apple.ReportCrash --show-bootstrap=svc \
+      --set-handler=behavior=DEFAULT,handler=bootstrap:svc crash
+service com.apple.ReportCrash 0xe03
+service svc 0x1003
+task exception port 0, mask 0x400 (CRASH), port 0xe03, behavior 0x80000003 (STATE_IDENTITY|MACH), flavor 7 (THREAD)
+new task exception port 0, mask 0x400 (CRASH), port 0x1003, behavior 0x1 (DEFAULT), flavor 13 (NONE)
+Illegal instruction: 4
+```
+
+Shows the task-level exception ports for the process with PID 1234. This
+requires superuser permissions or the approval of taskgated(8), and the process
+must not be SIP-protected.
+
+```
+# exception_port_tool --pid=1234 --show-task
+task exception port 0, mask 0x4e (BAD_ACCESS|BAD_INSTRUCTION|ARITHMETIC|BREAKPOINT), port 0x1503, behavior 0x1 (DEFAULT), flavor 13 (NONE)
+task exception port 1, mask 0x1c00 (CRASH|RESOURCE|GUARD), port 0x1403, behavior 0x80000003 (STATE_IDENTITY|MACH), flavor 7 (THREAD)
+```
+
+## Exit Status
+
+ * **0**
+
+   Success.
+
+ * **125**
+
+   Failure, with a message printed to the standard error stream.
+
+ * **126**
+
+   The program specified by _COMMAND_ was found, but could not be invoked.
+
+ * **127**
+
+   The program specified by _COMMAND_ could not be found.
+
+## See Also
+
+[catch_exception_tool(1)](catch_exception_tool.md),
+[on_demand_service_tool(1)](on_demand_service_tool.md)
+
+## Resources
+
+Crashpad home page: https://crashpad.chromium.org/.
+
+Report bugs at https://crashpad.chromium.org/bug/new.
+
+## Copyright
+
+Copyright 2014 [The Crashpad
+Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS).
+
+## License
+
+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.
diff --git a/third_party/crashpad/crashpad/tools/mac/on_demand_service_tool.ad b/third_party/crashpad/crashpad/tools/mac/on_demand_service_tool.ad
deleted file mode 100644
index 5db4713f..0000000
--- a/third_party/crashpad/crashpad/tools/mac/on_demand_service_tool.ad
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: manpage
-
-= on_demand_service_tool(1)
-
-== Name
-
-on_demand_service_tool - Load and unload on-demand Mach services registered with
-launchd(8)
-
-== Synopsis
-
-[verse]
-*on_demand_service_tool* *-L* *-l* 'LABEL' ['OPTION…'] 'COMMAND' ['ARG…']
-*on_demand_service_tool* *-U* *-l* 'LABEL'
-
-== Description
-
-On-demand services may be registered with launchd(8) by using the *--load* form.
-One or more service names may be registered with the bootstrap server by
-specifying *--mach-service*. When a Mach message is sent to any of these
-services, launchd(8) will invoke 'COMMAND' along with any arguments specified
-('ARG…'). 'COMMAND' must be an absolute pathname.
-
-The *--unload* form unregisters jobs registered with launchd(8).
-
-== Options
-
-*-L*, *--load*::
-Registers a job with launchd(8). *--label*='LABEL' and 'COMMAND' are required.
-This operation may also be referred to as “load” or “submit”.
-
-*-U*, *--unload*::
-Unregisters a job with launchd(8). *--label*='LABEL' is required. This operation
-may also be referred to as “unload” or “remove”.
-
-*-l*, *--label*='LABEL'::
-'LABEL' is used as the job label to identify the job to launchd(8). 'LABEL' must
-be unique within a launchd(8) context.
-
-*-m*, *--mach-service*='SERVICE'::
-In conjunction with *--load*, registers 'SERVICE' with the bootstrap server.
-Clients will be able to obtain a send right by looking up the 'SERVICE' name
-with the bootstrap server. When a message is sent to such a Mach port,
-launchd(8) will invoke 'COMMAND' along with any arguments specified ('ARG…') if
-it is not running. This forms the “on-demand” nature referenced by this tool’s
-name. This option may appear zero, one, or more times. 'SERVICE' must be unique
-within a bootstrap context.
-
-*--help*::
-Display help and exit.
-
-*--version*::
-Output version information and exit.
-
-== Examples
-
-Registers an on-demand server that will execute man_link:catch_exception_tool[1]
-when a Mach message is sent to a Mach port obtained from the bootstrap server by
-looking up the name +svc+:
-[subs="quotes"]
-----
-$ *on_demand_service_tool --load --label=catch_exception \
-      --mach-service=svc \
-      $(which catch_exception_tool) --mach-service=svc \
-      --file=/tmp/out --persistent --timeout=0*
-----
-
-Unregisters the on-demand server installed above:
-[subs="quotes"]
-----
-$ *on_demand_service_tool --unload --label=catch_exception*
-----
-
-== Exit Status
-
-*0*::
-Success.
-
-*1*::
-Failure, with a message printed to the standard error stream.
-
-== See Also
-
-man_link:catch_exception_tool[1],
-man_link:exception_port_tool[1],
-launchctl(1)
-
-include::../../doc/support/man_footer.ad[]
diff --git a/third_party/crashpad/crashpad/tools/mac/on_demand_service_tool.md b/third_party/crashpad/crashpad/tools/mac/on_demand_service_tool.md
new file mode 100644
index 0000000..5a85035
--- /dev/null
+++ b/third_party/crashpad/crashpad/tools/mac/on_demand_service_tool.md
@@ -0,0 +1,133 @@
+<!--
+Copyright 2014 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# on_demand_service_tool(1)
+
+## Name
+
+on_demand_service_tool—Load and unload on-demand Mach services registered with
+launchd(8)
+
+## Synopsis
+
+**on_demand_service_tool** **-L** **-l** _LABEL_ [_OPTION…_] _COMMAND_
+[_ARG…_]<br/>
+**on_demand_service_tool** **-U** **-l** _LABEL_
+
+## Description
+
+On-demand services may be registered with launchd(8) by using the **--load**
+form. One or more service names may be registered with the bootstrap server by
+specifying **--mach-service**. When a Mach message is sent to any of these
+services, launchd(8) will invoke _COMMAND_ along with any arguments specified
+(_ARG…_). _COMMAND_ must be an absolute pathname.
+
+The **--unload** form unregisters jobs registered with launchd(8).
+
+## Options
+
+ * **-L**, **--load**
+
+   Registers a job with launchd(8). **--label**=_LABEL_ and _COMMAND_ are
+   required. This operation may also be referred to as “load” or “submit”.
+
+ * **-U**, **--unload**
+
+   Unregisters a job with launchd(8). **--label**=_LABEL_ is required. This
+   operation may also be referred to as “unload” or “remove”.
+
+ * **-l**, **--label**=_LABEL_
+
+   _LABEL_ is used as the job label to identify the job to launchd(8). _LABEL_
+   must be unique within a launchd(8) context.
+
+ * **-m**, **--mach-service**=_SERVICE_
+
+   In conjunction with **--load**, registers _SERVICE_ with the bootstrap
+   server. Clients will be able to obtain a send right by looking up the
+   _SERVICE_ name with the bootstrap server. When a message is sent to such a
+   Mach port, launchd(8) will invoke _COMMAND_ along with any arguments
+   specified (_ARG…_) if it is not running. This forms the “on-demand” nature
+   referenced by this tool’s name. This option may appear zero, one, or more
+   times. _SERVICE_ must be unique within a bootstrap context.
+
+ * **--help**
+
+   Display help and exit.
+
+ * **--version**
+
+   Output version information and exit.
+
+## Examples
+
+Registers an on-demand server that will execute
+[catch_exception_tool(1)](catch_exception_tool.md) when a Mach message is sent
+to a Mach port obtained from the bootstrap server by looking up the name `svc`:
+
+```
+$ on_demand_service_tool --load --label=catch_exception \
+      --mach-service=svc \
+      $(which catch_exception_tool) --mach-service=svc \
+      --file=/tmp/out --persistent --timeout=0
+```
+
+Unregisters the on-demand server installed above:
+
+```
+$ on_demand_service_tool --unload --label=catch_exception
+```
+
+## Exit Status
+
+ * **0**
+
+   Success.
+
+ * **1**
+
+   Failure, with a message printed to the standard error stream.
+
+## See Also
+
+[catch_exception_tool(1)](catch_exception_tool.md),
+[exception_port_tool(1)](exception_port_tool.md),
+launchctl(1)
+
+## Resources
+
+Crashpad home page: https://crashpad.chromium.org/.
+
+Report bugs at https://crashpad.chromium.org/bug/new.
+
+## Copyright
+
+Copyright 2014 [The Crashpad
+Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS).
+
+## License
+
+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.
diff --git a/third_party/crashpad/crashpad/tools/mac/run_with_crashpad.ad b/third_party/crashpad/crashpad/tools/mac/run_with_crashpad.ad
deleted file mode 100644
index 129488a..0000000
--- a/third_party/crashpad/crashpad/tools/mac/run_with_crashpad.ad
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2014 The Crashpad Authors. All rights reserved.
-//
-// 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.
-
-:doctype: manpage
-
-= run_with_crashpad(1)
-
-== Name
-
-run_with_crashpad - Run a program with a Crashpad exception handler
-
-== Synopsis
-
-[verse]
-*run_with_crashpad* ['OPTION…'] 'COMMAND' ['ARG…']
-
-== Description
-
-Starts a Crashpad exception handler server such as crashpad_handler(8) and
-becomes its client, setting an exception port referencing the handler. Then,
-executes 'COMMAND' along with any arguments specified ('ARG…') with the new
-exception port in effect.
-
-The exception port is configured to receive exceptions of type +EXC_CRASH+,
-+EXC_RESOURCE+, and +EXC_GUARD+. The exception behavior is configured as
-+EXCEPTION_STATE_IDENTITY | MACH_EXCEPTION_CODES+. The thread state flavor is
-set to +MACHINE_THREAD_STATE+.
-
-Programs that use the Crashpad client library directly will not normally use
-this tool. This tool exists to allow programs that are unaware of Crashpad to be
-run with a Crashpad exception handler.
-
-== Options
-*-h*, *--handler*='HANDLER'::
-Invoke 'HANDLER' as the Crashpad handler program instead of the default,
-*crashpad_handler*.
-
-*--annotation*='KEY=VALUE'::
-Passed to the Crashpad handler program as an *--annotation* argument.
-
-*--database*='PATH'::
-Passed to the Crashpad handler program as its *--database* argument.
-
-*--url*='URL'::
-Passed to the Crashpad handler program as its *--url* argument.
-
-*-a*, *--argument*='ARGUMENT'::
-Invokes the Crashpad handler program with 'ARGUMENT' as one of its arguments.
-This option may appear zero, one, or more times. If this program has a specific
-option such as *--database* matching the desired Crashpad handler program
-option, the specific option should be used in preference to *--argument*.
-Regardless of this option’s presence, the handler will always be invoked with
-the necessary arguments to perform a handshake.
-
-*--help*::
-Display help and exit.
-
-*--version*::
-Output version information and exit.
-
-== Examples
-
-Starts a Crashpad exception handler server by its default name,
-*crashpad_handler*, and runs a program with this handler in effect.
-[subs="quotes"]
-----
-$ *run_with_crashpad --database=/tmp/crashpad_database crash*
-Illegal instruction: 4
-----
-
-Starts a Crashpad exception handler server at a nonstandard path, and runs
-man_link:exception_port_tool[1] to show the task-level exception ports.
-[subs="quotes"]
-----
-$ *run_with_crashpad --handler=/tmp/crashpad_handler \
-      --database=/tmp/crashpad_database exception_port_tool \
-      --show-task*
-task exception port 0, mask 0x1c00 (CRASH|RESOURCE|GUARD), port
-0x30b, behavior 0x80000003 (STATE_IDENTITY|MACH), flavor 7 (THREAD)
-----
-
-== Exit Status
-
-*0*::
-Success.
-
-*125*::
-Failure, with a message printed to the standard error stream.
-
-*126*::
-The program specified by 'COMMAND' was found, but could not be invoked.
-
-*127*::
-The program specified by 'COMMAND' could not be found.
-
-== See Also
-
-man_link:crashpad_handler[8],
-man_link:exception_port_tool[1]
-
-include::../../doc/support/man_footer.ad[]
diff --git a/third_party/crashpad/crashpad/tools/mac/run_with_crashpad.md b/third_party/crashpad/crashpad/tools/mac/run_with_crashpad.md
new file mode 100644
index 0000000..c87cb15
--- /dev/null
+++ b/third_party/crashpad/crashpad/tools/mac/run_with_crashpad.md
@@ -0,0 +1,147 @@
+<!--
+Copyright 2014 The Crashpad Authors. All rights reserved.
+
+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.
+-->
+
+# run_with_crashpad(1)
+
+## Name
+
+run_with_crashpad—Run a program with a Crashpad exception handler
+
+## Synopsis
+
+**run_with_crashpad** [_OPTION…_] _COMMAND_ [_ARG…_]
+
+## Description
+
+Starts a Crashpad exception handler server such as
+[crashpad_handler(8)](../../handler/crashpad_handler.md) and becomes its client,
+setting an exception port referencing the handler. Then, executes _COMMAND_
+along with any arguments specified (_ARG…_) with the new exception port in
+effect.
+
+The exception port is configured to receive exceptions of type `EXC_CRASH`,
+`EXC_RESOURCE`, and `EXC_GUARD`. The exception behavior is configured as
+`EXCEPTION_STATE_IDENTITY | MACH_EXCEPTION_CODES`. The thread state flavor is
+set to `MACHINE_THREAD_STATE`.
+
+Programs that use the Crashpad client library directly will not normally use
+this tool. This tool exists to allow programs that are unaware of Crashpad to be
+run with a Crashpad exception handler.
+
+## Options
+
+ * **-h**, **--handler**=_HANDLER_
+
+   Invoke _HANDLER_ as the Crashpad handler program instead of the default,
+   **crashpad_handler**.
+
+ * **--annotation**=_KEY=VALUE_
+
+   Passed to the Crashpad handler program as an **--annotation** argument.
+
+ * **--database**=_PATH_
+
+   Passed to the Crashpad handler program as its **--database** argument.
+
+ * **--url**=_URL_
+
+   Passed to the Crashpad handler program as its **--url** argument.
+
+ * **-a**, **--argument**=_ARGUMENT_
+
+   Invokes the Crashpad handler program with _ARGUMENT_ as one of its arguments.
+   This option may appear zero, one, or more times. If this program has a
+   specific option such as **--database** matching the desired Crashpad handler
+   program option, the specific option should be used in preference to
+   **--argument**. Regardless of this option’s presence, the handler will always
+   be invoked with the necessary arguments to perform a handshake.
+
+ * **--help**
+
+   Display help and exit.
+
+ * **--version**
+
+   Output version information and exit.
+
+## Examples
+
+Starts a Crashpad exception handler server by its default name,
+**crashpad_handler**, and runs a program with this handler in effect.
+
+```
+$ run_with_crashpad --database=/tmp/crashpad_database crasher
+Illegal instruction: 4
+```
+
+Starts a Crashpad exception handler server at a nonstandard path, and runs
+[exception_port_tool(1)](exception_port_tool.md) to show the task-level
+exception ports.
+
+```
+$ run_with_crashpad --handler=/tmp/crashpad_handler \
+      --database=/tmp/crashpad_database exception_port_tool \
+      --show-task
+task exception port 0, mask 0x1c00 (CRASH|RESOURCE|GUARD), port 0x30b, behavior 0x80000003 (STATE_IDENTITY|MACH), flavor 7 (THREAD)
+```
+
+## Exit Status
+
+ * **0**
+
+   Success.
+
+ * **125**
+
+   Failure, with a message printed to the standard error stream.
+
+ * **126**
+
+   The program specified by _COMMAND_ was found, but could not be invoked.
+
+ * **127**
+
+   The program specified by _COMMAND_ could not be found.
+
+## See Also
+
+[crashpad_handler(8)](../../handler/crashpad_handler.md),
+[exception_port_tool(1)](exception_port_tool.md)
+
+## Resources
+
+Crashpad home page: https://crashpad.chromium.org/.
+
+Report bugs at https://crashpad.chromium.org/bug/new.
+
+## Copyright
+
+Copyright 2014 [The Crashpad
+Authors](https://chromium.googlesource.com/crashpad/crashpad/+/master/AUTHORS).
+
+## License
+
+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.
diff --git a/third_party/crashpad/crashpad/tools/tool_support.h b/third_party/crashpad/crashpad/tools/tool_support.h
index 79dc752..e3a5061 100644
--- a/third_party/crashpad/crashpad/tools/tool_support.h
+++ b/third_party/crashpad/crashpad/tools/tool_support.h
@@ -41,6 +41,8 @@
   //!     of its arguments.
   //!
   //! \param[in] me The tool’s name, the basename of `argv[0]`.
+  //! \param[in] hint A hint to display before the suggestion to try `--help`.
+  //!     Optional, may be `nullptr`, in which case no hint will be presented.
   static void UsageHint(const base::FilePath& me, const char* hint);
 
 #if defined(OS_POSIX) || DOXYGEN
diff --git a/third_party/crashpad/crashpad/util/mac/launchd.h b/third_party/crashpad/crashpad/util/mac/launchd.h
index 2545075..21b43f8 100644
--- a/third_party/crashpad/crashpad/util/mac/launchd.h
+++ b/third_party/crashpad/crashpad/util/mac/launchd.h
@@ -27,9 +27,9 @@
 //! \{
 //! \brief Wraps the `<launch.h>` function of the same name.
 //!
-//! The Mac OS X 10.10 SDK deprecates `<launch.h>`, although the functionality
-//! it provides is still useful. These wrappers allow the deprecated functions
-//! to be called without triggering deprecated-declaration warnings.
+//! The OS X 10.10 SDK deprecates `<launch.h>`, although the functionality it
+//! provides is still useful. These wrappers allow the deprecated functions to
+//! be called without triggering deprecated-declaration warnings.
 
 inline launch_data_t LaunchDataAlloc(launch_data_type_t type) {
   return launch_data_alloc(type);
diff --git a/third_party/crashpad/crashpad/util/mac/mac_util.cc b/third_party/crashpad/crashpad/util/mac/mac_util.cc
index a792e51..7c51cc2 100644
--- a/third_party/crashpad/crashpad/util/mac/mac_util.cc
+++ b/third_party/crashpad/crashpad/util/mac/mac_util.cc
@@ -181,9 +181,8 @@
 namespace crashpad {
 
 int MacOSXMinorVersion() {
-  // The Darwin major version is always 4 greater than the Mac OS X minor
-  // version for Darwin versions beginning with 6, corresponding to Mac OS X
-  // 10.2.
+  // The Darwin major version is always 4 greater than the macOS minor version
+  // for Darwin versions beginning with 6, corresponding to Mac OS X 10.2.
   static int mac_os_x_minor_version = DarwinMajorVersion() - 4;
   DCHECK(mac_os_x_minor_version >= 2);
   return mac_os_x_minor_version;
diff --git a/third_party/crashpad/crashpad/util/mac/mac_util.h b/third_party/crashpad/crashpad/util/mac/mac_util.h
index 9cedfdf..d8b7159 100644
--- a/third_party/crashpad/crashpad/util/mac/mac_util.h
+++ b/third_party/crashpad/crashpad/util/mac/mac_util.h
@@ -21,8 +21,8 @@
 
 //! \brief Returns the version of the running operating system.
 //!
-//! \return The minor version of the operating system, such as `9` for Mac OS X
-//!     10.9.2.
+//! \return The minor version of the operating system, such as `12` for macOS
+//!     10.12.1.
 //!
 //! \note This is similar to the base::mac::IsOS*() family of functions, but
 //!     is provided for situations where the caller needs to obtain version
@@ -35,17 +35,17 @@
 //! All parameters are required. No parameter may be `nullptr`.
 //!
 //! \param[out] major The major version of the operating system, such as `10`
-//!     for Mac OS X 10.9.2.
-//! \param[out] minor The major version of the operating system, such as `9` for
-//!     Mac OS X 10.9.2.
-//! \param[out] bugfix The bugfix version of the operating system, such as `2`
-//!     for Mac OS X 10.9.2.
-//! \param[out] build The operating system’s build string, such as "13C64" for
-//!     Mac OS X 10.9.2.
-//! \param[out] server `true` for a Mac OS X Server installation, `false`
-//!     otherwise (for a desktop/laptop, client, or workstation system).
+//!     for macOS 10.12.1.
+//! \param[out] minor The major version of the operating system, such as `12`
+//!     for macOS 10.12.1.
+//! \param[out] bugfix The bugfix version of the operating system, such as `1`
+//!     for macOS 10.12.1.
+//! \param[out] build The operating system’s build string, such as `"16B2657"`
+//!     for macOS 10.12.1.
+//! \param[out] server `true` for a macOS Server installation, `false` otherwise
+//!     (for a desktop/laptop, client, or workstation system).
 //! \param[out] version_string A string representing the full operating system
-//!     version, such as `"Mac OS X 10.9.2 (13C64)"`.
+//!     version, such as `"macOS 10.12.1 (16B2657)"`.
 //!
 //! \return `true` on success, `false` on failure, with an error message logged.
 //!     A failure is considered to have occurred if any element could not be
diff --git a/third_party/crashpad/crashpad/util/mac/service_management.h b/third_party/crashpad/crashpad/util/mac/service_management.h
index 802e544..16cb45aa 100644
--- a/third_party/crashpad/crashpad/util/mac/service_management.h
+++ b/third_party/crashpad/crashpad/util/mac/service_management.h
@@ -28,8 +28,8 @@
 //!
 //! \return `true` if the job was submitted successfully, otherwise `false`.
 //!
-//! \note This function is provided because `SMJobSubmit()` is deprecated in Mac
-//!     OS X 10.10. It may or may not be implemented using `SMJobSubmit()` from
+//! \note This function is provided because `SMJobSubmit()` is deprecated in OS
+//!     X 10.10. It may or may not be implemented using `SMJobSubmit()` from
 //!     `ServiceManagement.framework`.
 bool ServiceManagementSubmitJob(CFDictionaryRef job_cf);
 
@@ -42,12 +42,11 @@
 //! \return `true` if the job was removed successfully or if an asynchronous
 //!     attempt to remove the job was started successfully, otherwise `false`.
 //!
-//! \note This function is provided because `SMJobRemove()` is deprecated in Mac
-//!     OS X 10.10. On Mac OS X 10.10, observed in DP8 14A361c, it also blocks
-//!     for far too long (`_block_until_job_exits()` contains a one-second
-//!     `sleep()`, filed as radar 18398683) and does not signal failure via its
-//!     return value when asked to remove a nonexistent job (filed as radar
-//!     18268941).
+//! \note This function is provided because `SMJobRemove()` is deprecated in OS
+//!     X 10.10. On OS X 10.10, observed in DP8 14A361c, it also blocks for far
+//!     too long (`_block_until_job_exits()` contains a one-second `sleep()`,
+//!     filed as radar 18398683) and does not signal failure via its return
+//!     value when asked to remove a nonexistent job (filed as radar 18268941).
 bool ServiceManagementRemoveJob(const std::string& label, bool wait);
 
 //! \brief Determines whether a specified job is loaded in the user launchd
@@ -60,7 +59,7 @@
 //! \note A loaded job is not necessarily presently running, nor has it
 //!     necessarily ever run in the past.
 //! \note This function is provided because `SMJobCopyDictionary()` is
-//!     deprecated in Mac OS X 10.10. It may or may not be implemented using
+//!     deprecated in OS X 10.10. It may or may not be implemented using
 //!     `SMJobCopyDictionary()` from `ServiceManagement.framework`.
 bool ServiceManagementIsJobLoaded(const std::string& label);
 
@@ -72,7 +71,7 @@
 //! \return The job’s process ID if running, otherwise `0`.
 //!
 //! \note This function is provided because `SMJobCopyDictionary()` is
-//!     deprecated in Mac OS X 10.10. It may or may not be implemented using
+//!     deprecated in OS X 10.10. It may or may not be implemented using
 //!     `SMJobCopyDictionary()` from `ServiceManagement.framework`.
 pid_t ServiceManagementIsJobRunning(const std::string& label);
 
diff --git a/third_party/crashpad/crashpad/util/mac/xattr.cc b/third_party/crashpad/crashpad/util/mac/xattr.cc
index 138de3e..75d7938 100644
--- a/third_party/crashpad/crashpad/util/mac/xattr.cc
+++ b/third_party/crashpad/crashpad/util/mac/xattr.cc
@@ -117,8 +117,8 @@
 XattrStatus ReadXattrTimeT(const base::FilePath& file,
                            const base::StringPiece& name,
                            time_t* value) {
-  // time_t on OS X is defined as a long, but it will be read into an
-  // int64_t here, since there is no string conversion method for long.
+  // time_t on macOS is defined as a long, but it will be read into an int64_t
+  // here, since there is no string conversion method for long.
   std::string tmp;
   XattrStatus status;
   if ((status = ReadXattr(file, name, &tmp)) != XattrStatus::kOK)
diff --git a/third_party/crashpad/crashpad/util/mach/child_port_handshake.h b/third_party/crashpad/crashpad/util/mach/child_port_handshake.h
index 50de118..429164a 100644
--- a/third_party/crashpad/crashpad/util/mach/child_port_handshake.h
+++ b/third_party/crashpad/crashpad/util/mach/child_port_handshake.h
@@ -218,6 +218,9 @@
   //!  - Regardless of return value, destroys the server’s receive right and
   //!    closes the pipe.
   //!
+  //! \param[in] server_write_fd The write side of the pipe shared with the
+  //!     client process. This function takes ownership of this file descriptor,
+  //!     and will close it prior to returning.
   //! \param[in] port_right_type The port right type expected to be received
   //!     from the client. If the port right received from the client does not
   //!     match the expected type, the received port right will be destroyed,
@@ -253,9 +256,9 @@
   //! `simpleroutine`, and the server does not send a reply. This allows
   //! check-in to occur without blocking to wait for a reply.
   //!
-  //! \param[in] pipe_read The “read” side of the pipe shared with the server
-  //!     process. This function takes ownership of this file descriptor, and
-  //!     will close it prior to returning.
+  //! \param[in] client_read_fd The “read” side of the pipe shared with the
+  //!     server process. This function takes ownership of this file descriptor,
+  //!     and will close it prior to returning.
   //! \param[in] port The port right that will be passed to the server by
   //!     `child_port_check_in()`.
   //! \param[in] right_type The right type to furnish the server with. If \a
diff --git a/third_party/crashpad/crashpad/util/mach/child_port_server.h b/third_party/crashpad/crashpad/util/mach/child_port_server.h
index b82e99a..47d72e4 100644
--- a/third_party/crashpad/crashpad/util/mach/child_port_server.h
+++ b/third_party/crashpad/crashpad/util/mach/child_port_server.h
@@ -37,6 +37,10 @@
     //! This behaves equivalently to a `handle_child_port_check_in()` function
     //! used with `child_port_server()`.
     //!
+    //! \param[in] server
+    //! \param[in] token
+    //! \param[in] port
+    //! \param[in] right_type
     //! \param[in] trailer The trailer received with the request message.
     //! \param[out] destroy_request `true` if the request message is to be
     //!     destroyed even when this method returns success. See
diff --git a/third_party/crashpad/crashpad/util/mach/exc_client_variants.h b/third_party/crashpad/crashpad/util/mach/exc_client_variants.h
index d96e689..3fa06a0 100644
--- a/third_party/crashpad/crashpad/util/mach/exc_client_variants.h
+++ b/third_party/crashpad/crashpad/util/mach/exc_client_variants.h
@@ -56,15 +56,25 @@
 //! and may be set to `0` (\a old_state_count) or `nullptr` (the remaining
 //! parameters).
 //!
+//! Except as noted, the parameters and return value are equivalent to those of
+//! the `*exception_raise*()` family of functions.
+//!
 //! \param[in] behavior The exception behavior, which dictates which function
 //!     will be called. It is an error to call this function with an invalid
 //!     value for \a behavior.
-//! \param[in] code If \behavior indicates a behavior without
+//! \param[in] exception_port
+//! \param[in] thread
+//! \param[in] task
+//! \param[in] exception
+//! \param[in] code If \a behavior indicates a behavior without
 //!     `MACH_EXCEPTION_CODES`, the elements of \a code will be truncated in
 //!     order to be passed to the appropriate exception handler.
-//!
-//! All other parameters are treated equivalently to their treatment by the
-//! `*exception_raise*()` family of functions.
+//! \param[in] code_count
+//! \param[in,out] flavor
+//! \param[in] old_state
+//! \param[in] old_state_count
+//! \param[out] new_state
+//! \param[out] new_state_count
 //!
 //! \return The return value of the function called.
 kern_return_t UniversalExceptionRaise(exception_behavior_t behavior,
diff --git a/third_party/crashpad/crashpad/util/mach/exc_client_variants_test.cc b/third_party/crashpad/crashpad/util/mach/exc_client_variants_test.cc
index ca3101c..29a272b9 100644
--- a/third_party/crashpad/crashpad/util/mach/exc_client_variants_test.cc
+++ b/third_party/crashpad/crashpad/util/mach/exc_client_variants_test.cc
@@ -115,7 +115,7 @@
       }
 
       // Use a flavor known to be different from the incoming flavor, for a test
-      // of the “out” side of the inout flavor parameter.
+      // of the “out” side of the in-out flavor parameter.
       *flavor = exception_ + 20;
       *new_state_count = MACHINE_THREAD_STATE_COUNT;
 
diff --git a/third_party/crashpad/crashpad/util/mach/exc_server_variants.h b/third_party/crashpad/crashpad/util/mach/exc_server_variants.h
index 0d94743..c7b35d4 100644
--- a/third_party/crashpad/crashpad/util/mach/exc_server_variants.h
+++ b/third_party/crashpad/crashpad/util/mach/exc_server_variants.h
@@ -64,17 +64,32 @@
     //! This behaves equivalently to a `catch_exception_raise_state_identity()`
     //! function used with `exc_server()`, or a
     //! `catch_mach_exception_raise_state_identity()` function used with
-    //! `mach_exc_server()`. The meanings of most parameters are identical to
-    //! their meanings to these functions.
+    //! `mach_exc_server()`. Except as noted, the parameters and return value
+    //! are equivalent to those of these other functions.
     //!
     //! \param[in] behavior `EXCEPTION_DEFAULT`, `EXCEPTION_STATE`,
     //!     or `EXCEPTION_STATE_IDENTITY`, possibly with `MACH_EXCEPTION_CODES`
     //!     ORed in. This identifies which exception request message was
     //!     processed and thus which other parameters are valid.
+    //! \param[in] exception_port
+    //! \param[in] thread
+    //! \param[in] task
+    //! \param[in] exception
+    //! \param[in] code
+    //! \param[in] code_count
+    //! \param[in,out] flavor
+    //! \param[in] old_state
+    //! \param[in] old_state_count
+    //! \param[out] new_state
+    //! \param[out] new_state_count
     //! \param[in] trailer The trailer received with the request message.
-    //! \param[out] destroy_request `true` if the request message is to be
-    //!     destroyed even when this method returns success. See
+    //! \param[out] destroy_complex_request `true` if the request message is to
+    //!     be destroyed even when this method returns success. See
     //!     MachMessageServer::Interface.
+    //!
+    //! \return A code indicating whether the exception was handled. See
+    //!     ExcServerSuccessfulReturnValue() for success codes. On failure,
+    //!     a code such as `KERN_FAILURE`.
     virtual kern_return_t CatchMachException(
         exception_behavior_t behavior,
         exception_handler_t exception_port,
@@ -201,7 +216,7 @@
 //!     from the \a new_state parameter of
 //!     internal::SimplifiedExcServer::Interface::CatchException(), for example.
 //!     This parameter is untouched if \a behavior is not state-carrying.
-//! \param[inout] new_state_count On entry, the number of `natural_t` words
+//! \param[in,out] new_state_count On entry, the number of `natural_t` words
 //!     available to be written to in \a new_state. On return, the number of
 //!     significant `natural_t` words in \a new_state. This may be taken
 //!     directly from the \a new_state_count parameter of
diff --git a/third_party/crashpad/crashpad/util/mach/exception_types.cc b/third_party/crashpad/crashpad/util/mach/exception_types.cc
index cef90f9..09366b57 100644
--- a/third_party/crashpad/crashpad/util/mach/exception_types.cc
+++ b/third_party/crashpad/crashpad/util/mach/exception_types.cc
@@ -29,9 +29,9 @@
 
 extern "C" {
 
-// proc_get_wakemon_params() is present in the Mac OS X 10.9 SDK, but no
-// declaration is provided. This provides a declaration and marks it for weak
-// import if the deployment target is below 10.9.
+// proc_get_wakemon_params() is present in the OS X 10.9 SDK, but no declaration
+// is provided. This provides a declaration and marks it for weak import if the
+// deployment target is below 10.9.
 int proc_get_wakemon_params(pid_t pid, int* rate_hz, int* flags)
     __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0);
 
@@ -76,8 +76,8 @@
 namespace {
 
 // Wraps proc_get_wakemon_params(), calling it if the system provides it. It’s
-// present on Mac OS X 10.9 and later. If it’s not available, sets errno to
-// ENOSYS and returns -1.
+// present on OS X 10.9 and later. If it’s not available, sets errno to ENOSYS
+// and returns -1.
 int ProcGetWakemonParams(pid_t pid, int* rate_hz, int* flags) {
 #if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9
   // proc_get_wakemon_params() isn’t in the SDK. Look it up dynamically.
@@ -146,17 +146,17 @@
     // RLIMIT_CPU_USAGE_MONITOR as the second argument and CPUMON_MAKE_FATAL set
     // in the flags.
     if (MacOSXMinorVersion() >= 10) {
-      // In Mac OS X 10.10, the exception code indicates whether the exception
-      // is fatal. See 10.10 xnu-2782.1.97/osfmk/kern/thread.c
+      // In OS X 10.10, the exception code indicates whether the exception is
+      // fatal. See 10.10 xnu-2782.1.97/osfmk/kern/thread.c
       // THIS_THREAD_IS_CONSUMING_TOO_MUCH_CPU__SENDING_EXC_RESOURCE().
       return resource_flavor == FLAVOR_CPU_MONITOR;
     }
 
-    // In Mac OS X 10.9, there’s no way to determine whether the exception is
-    // fatal. Unlike RESOURCE_TYPE_WAKEUPS below, there’s no way to determine
-    // this outside the kernel. proc_rlimit_control()’s RLIMIT_CPU_USAGE_MONITOR
-    // is the only interface to modify CPUMON_MAKE_FATAL, but it’s only able to
-    // set this bit, not obtain its current value.
+    // In OS X 10.9, there’s no way to determine whether the exception is fatal.
+    // Unlike RESOURCE_TYPE_WAKEUPS below, there’s no way to determine this
+    // outside the kernel. proc_rlimit_control()’s RLIMIT_CPU_USAGE_MONITOR is
+    // the only interface to modify CPUMON_MAKE_FATAL, but it’s only able to set
+    // this bit, not obtain its current value.
     //
     // Default to assuming that these exceptions are nonfatal. They are nonfatal
     // by default and no users of proc_rlimit_control() were found on 10.9.5
diff --git a/third_party/crashpad/crashpad/util/mach/exception_types_test.cc b/third_party/crashpad/crashpad/util/mach/exception_types_test.cc
index 372b57f0..d82dcbb9 100644
--- a/third_party/crashpad/crashpad/util/mach/exception_types_test.cc
+++ b/third_party/crashpad/crashpad/util/mach/exception_types_test.cc
@@ -102,7 +102,7 @@
   EXPECT_TRUE(IsExceptionNonfatalResource(EXC_RESOURCE, code, pid));
 
   if (MacOSXMinorVersion() >= 10) {
-    // FLAVOR_CPU_MONITOR_FATAL was introduced in Mac OS X 10.10.
+    // FLAVOR_CPU_MONITOR_FATAL was introduced in OS X 10.10.
     code = 0;
     EXC_RESOURCE_ENCODE_TYPE(code, RESOURCE_TYPE_CPU);
     EXC_RESOURCE_ENCODE_FLAVOR(code, FLAVOR_CPU_MONITOR_FATAL);
diff --git a/third_party/crashpad/crashpad/util/mach/mach_extensions.cc b/third_party/crashpad/crashpad/util/mach/mach_extensions.cc
index 64552f1c..eb4e330 100644
--- a/third_party/crashpad/crashpad/util/mach/mach_extensions.cc
+++ b/third_party/crashpad/crashpad/util/mach/mach_extensions.cc
@@ -157,7 +157,26 @@
 
 base::mac::ScopedMachSendRight BootstrapLookUp(
     const std::string& service_name) {
-  return BootstrapCheckInOrLookUp<BootstrapLookUpTraits>(service_name);
+  base::mac::ScopedMachSendRight send(
+      BootstrapCheckInOrLookUp<BootstrapLookUpTraits>(service_name));
+
+  // It’s possible to race the bootstrap server when the receive right
+  // corresponding to the looked-up send right is destroyed immediately before
+  // the bootstrap_look_up() call. If the bootstrap server believes that
+  // |service_name| is still registered before processing the port-destroyed
+  // notification sent to it by the kernel, it will respond to a
+  // bootstrap_look_up() request with a send right that has become a dead name,
+  // which will be returned to the bootstrap_look_up() caller, translated into
+  // the caller’s IPC port name space, as the special MACH_PORT_DEAD port name.
+  // Check for that and return MACH_PORT_NULL in its place, as though the
+  // bootstrap server had fully processed the port-destroyed notification before
+  // responding to bootstrap_look_up().
+  if (send.get() == MACH_PORT_DEAD) {
+    LOG(ERROR) << "bootstrap_look_up " << service_name << ": service is dead";
+    send.reset();
+  }
+
+  return send;
 }
 
 base::mac::ScopedMachSendRight SystemCrashReporterHandler() {
diff --git a/third_party/crashpad/crashpad/util/mach/mach_message.h b/third_party/crashpad/crashpad/util/mach/mach_message.h
index 2fd8151..df4b6b4 100644
--- a/third_party/crashpad/crashpad/util/mach/mach_message.h
+++ b/third_party/crashpad/crashpad/util/mach/mach_message.h
@@ -53,7 +53,8 @@
 //! ClockMonotonicNanoseconds(), although this is an implementation detail.
 using MachMessageDeadline = uint64_t;
 
-//! \brief Special constants used as \ref MachMessageDeadline values.
+//! \brief Special constants used as \ref crashpad::MachMessageDeadline
+//!     "MachMessageDeadline" values.
 enum : MachMessageDeadline {
   //! \brief MachMessageWithDeadline() should not block at all in its operation.
   kMachMessageDeadlineNonblocking = 0,
@@ -98,15 +99,22 @@
 //! Except as noted, the parameters and return value are identical to those of
 //! `mach_msg()`.
 //!
+//! \param[in,out] message
+//! \param[in] options
+//! \param[in] receive_size
+//! \param[in] receive_port
 //! \param[in] deadline The time by which this call should complete. If the
 //!     deadline is exceeded, this call will return `MACH_SEND_TIMED_OUT` or
 //!     `MACH_RCV_TIMED_OUT`.
+//! \param[in] notify_port
 //! \param[in] run_even_if_expired If `true`, a deadline that is expired when
 //!     this function is called will be treated as though a deadline of
 //!     #kMachMessageDeadlineNonblocking had been specified. When `false`, an
 //!     expired deadline will result in a `MACH_SEND_TIMED_OUT` or
 //!     `MACH_RCV_TIMED_OUT` return value, even if the deadline is already
 //!     expired when the function is called.
+//!
+//! \return The return value of `mach_msg()`
 mach_msg_return_t MachMessageWithDeadline(mach_msg_header_t* message,
                                           mach_msg_option_t options,
                                           mach_msg_size_t receive_size,
@@ -134,9 +142,9 @@
 
 //! \brief Sets the error code in a reply message for a MIG server routine.
 //!
-//! \param[inout] out_header The reply message to operate on. \a out_header will
-//!     be treated as a `mig_reply_error_t*` and its `RetCode` field will be
-//!     set. This argument is accepted as a `mach_msg_header_t*` instead of a
+//! \param[in,out] out_header The reply message to operate on. \a out_header
+//!     will be treated as a `mig_reply_error_t*` and its `RetCode` field will
+//!     be set. This argument is accepted as a `mach_msg_header_t*` instead of a
 //!     `mig_reply_error_t*` because that is the type that callers are expected
 //!     to possess in the C API.
 //! \param[in] error The error code to store in \a out_header.
diff --git a/third_party/crashpad/crashpad/util/mach/mach_message_server.cc b/third_party/crashpad/crashpad/util/mach/mach_message_server.cc
index 0af1901..39633730 100644
--- a/third_party/crashpad/crashpad/util/mach/mach_message_server.cc
+++ b/third_party/crashpad/crashpad/util/mach/mach_message_server.cc
@@ -147,7 +147,7 @@
 
   // mach_msg_server() and mach_msg_server_once() would consider whether
   // |options| contains MACH_SEND_TRAILER and include MAX_TRAILER_SIZE in this
-  // computation if it does, but that option is ineffective on OS X.
+  // computation if it does, but that option is ineffective on macOS.
   const mach_msg_size_t reply_size = interface->MachMessageServerReplySize();
   DCHECK_GE(reply_size, sizeof(mach_msg_empty_send_t));
   const mach_msg_size_t reply_alloc = round_page(reply_size);
diff --git a/third_party/crashpad/crashpad/util/mach/mach_message_server_test.cc b/third_party/crashpad/crashpad/util/mach/mach_message_server_test.cc
index fc45e26..a2d2eb1f 100644
--- a/third_party/crashpad/crashpad/util/mach/mach_message_server_test.cc
+++ b/third_party/crashpad/crashpad/util/mach/mach_message_server_test.cc
@@ -321,9 +321,9 @@
 
     kern_return_t kr;
     if (options_.child_send_all_requests_before_receiving_any_replies) {
-      // On Mac OS X 10.10, the queue limit of a new Mach port seems to be 2
-      // by default, which is below the value of MACH_PORT_QLIMIT_DEFAULT. Set
-      // the port’s queue limit explicitly here.
+      // On OS X 10.10, the queue limit of a new Mach port seems to be 2 by
+      // default, which is below the value of MACH_PORT_QLIMIT_DEFAULT. Set the
+      // port’s queue limit explicitly here.
       mach_port_limits limits = {};
       limits.mpl_qlimit = MACH_PORT_QLIMIT_DEFAULT;
       kr = mach_port_set_attributes(mach_task_self(),
diff --git a/third_party/crashpad/crashpad/util/misc/address_sanitizer.h b/third_party/crashpad/crashpad/util/misc/address_sanitizer.h
new file mode 100644
index 0000000..75c7239
--- /dev/null
+++ b/third_party/crashpad/crashpad/util/misc/address_sanitizer.h
@@ -0,0 +1,28 @@
+// Copyright 2016 The Crashpad Authors. All rights reserved.
+//
+// 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.
+
+#ifndef CRASHPAD_UTIL_MISC_ADDRESS_SANITIZER_H_
+#define CRASHPAD_UTIL_MISC_ADDRESS_SANITIZER_H_
+
+#include "base/compiler_specific.h"
+#include "build/build_config.h"
+
+#if !defined(ADDRESS_SANITIZER)
+#if HAS_FEATURE(address_sanitizer) || \
+    (defined(COMPILER_GCC) && defined(__SANITIZE_ADDRESS__))
+#define ADDRESS_SANITIZER 1
+#endif
+#endif  // !defined(ADDRESS_SANITIZER)
+
+#endif  // CRASHPAD_UTIL_MISC_ADDRESS_SANITIZER_H_
diff --git a/third_party/crashpad/crashpad/util/misc/arraysize_unsafe.h b/third_party/crashpad/crashpad/util/misc/arraysize_unsafe.h
new file mode 100644
index 0000000..e53c70b
--- /dev/null
+++ b/third_party/crashpad/crashpad/util/misc/arraysize_unsafe.h
@@ -0,0 +1,27 @@
+// Copyright 2016 The Crashpad Authors. All rights reserved.
+//
+// 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.
+
+#ifndef CRASHPAD_UTIL_MISC_ARRAYSIZE_UNSAFE_H_
+#define CRASHPAD_UTIL_MISC_ARRAYSIZE_UNSAFE_H_
+
+//! \file
+
+//! \brief Not the safest way of computing an array’s size…
+//!
+//! `#%include "base/macros.h"` and use its `arraysize()` instead. This macro
+//! should only be used in rare situations where `arraysize()` does not
+//! function.
+#define ARRAYSIZE_UNSAFE(array) (sizeof(array) / sizeof(array[0]))
+
+#endif  // CRASHPAD_UTIL_MISC_ARRAYSIZE_UNSAFE_H_
diff --git a/third_party/crashpad/crashpad/util/misc/arraysize_unsafe_test.cc b/third_party/crashpad/crashpad/util/misc/arraysize_unsafe_test.cc
new file mode 100644
index 0000000..a6660aee
--- /dev/null
+++ b/third_party/crashpad/crashpad/util/misc/arraysize_unsafe_test.cc
@@ -0,0 +1,75 @@
+// Copyright 2016 The Crashpad Authors. All rights reserved.
+//
+// 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.
+
+#include "util/misc/arraysize_unsafe.h"
+
+#include "base/compiler_specific.h"
+#include "gtest/gtest.h"
+
+namespace crashpad {
+namespace test {
+namespace {
+
+TEST(ArraySizeUnsafe, ArraySizeUnsafe) {
+  char c1[1];
+  static_assert(ARRAYSIZE_UNSAFE(c1) == 1, "c1");
+  ALLOW_UNUSED_LOCAL(c1);
+
+  char c2[2];
+  static_assert(ARRAYSIZE_UNSAFE(c2) == 2, "c2");
+  ALLOW_UNUSED_LOCAL(c2);
+
+  char c4[4];
+  static_assert(ARRAYSIZE_UNSAFE(c4) == 4, "c4");
+  ALLOW_UNUSED_LOCAL(c4);
+
+  int i1[1];
+  static_assert(ARRAYSIZE_UNSAFE(i1) == 1, "i1");
+  ALLOW_UNUSED_LOCAL(i1);
+
+  int i2[2];
+  static_assert(ARRAYSIZE_UNSAFE(i2) == 2, "i2");
+  ALLOW_UNUSED_LOCAL(i2);
+
+  int i4[4];
+  static_assert(ARRAYSIZE_UNSAFE(i4) == 4, "i4");
+  ALLOW_UNUSED_LOCAL(i4);
+
+  long l8[8];
+  static_assert(ARRAYSIZE_UNSAFE(l8) == 8, "l8");
+  ALLOW_UNUSED_LOCAL(l8);
+
+  int l9[9];
+  static_assert(ARRAYSIZE_UNSAFE(l9) == 9, "l9");
+  ALLOW_UNUSED_LOCAL(l9);
+
+  struct S {
+    char c;
+    int i;
+    long l;
+    bool b;
+  };
+
+  S s1[1];
+  static_assert(ARRAYSIZE_UNSAFE(s1) == 1, "s1");
+  ALLOW_UNUSED_LOCAL(s1);
+
+  S s10[10];
+  static_assert(ARRAYSIZE_UNSAFE(s10) == 10, "s10");
+  ALLOW_UNUSED_LOCAL(s10);
+}
+
+}  // namespace
+}  // namespace test
+}  // namespace crashpad
diff --git a/third_party/crashpad/crashpad/util/misc/initialization_state_dcheck.h b/third_party/crashpad/crashpad/util/misc/initialization_state_dcheck.h
index e45a6f8..7b6df98 100644
--- a/third_party/crashpad/crashpad/util/misc/initialization_state_dcheck.h
+++ b/third_party/crashpad/crashpad/util/misc/initialization_state_dcheck.h
@@ -35,9 +35,9 @@
 //! Initialize() methods. The chief advantage of InitializationStateDcheck over
 //! having a member variable to track state is that when the only use of the
 //! variable is to DCHECK, it wastes space (in memory and executable code) in
-//! non-DCHECK builds unless the code is also peppered with ugly #ifdefs.
+//! non-DCHECK builds unless the code is also peppered with ugly `#%ifdef`s.
 //!
-//! This implementation concentrates the ugly #ifdefs in one location.
+//! This implementation concentrates the ugly `#%ifdef`s in one location.
 //!
 //! Usage:
 //!
diff --git a/third_party/crashpad/crashpad/util/misc/metrics.h b/third_party/crashpad/crashpad/util/misc/metrics.h
index a6a7f986..fd2e1200 100644
--- a/third_party/crashpad/crashpad/util/misc/metrics.h
+++ b/third_party/crashpad/crashpad/util/misc/metrics.h
@@ -89,12 +89,12 @@
 
     //! \brief Unexpected exception behavior.
     //!
-    //! This value is only used on Mac OS X.
+    //! This value is only used on macOS.
     kUnexpectedExceptionBehavior = 1,
 
     //! \brief Failed due to attempt to suspend self.
     //!
-    //! This value is only used on Mac OS X.
+    //! This value is only used on macOS.
     kFailedDueToSuspendSelf = 2,
 
     //! \brief The process snapshot could not be captured.
diff --git a/third_party/crashpad/crashpad/util/misc/uuid.cc b/third_party/crashpad/crashpad/util/misc/uuid.cc
index e4b4b31..d4345a8a 100644
--- a/third_party/crashpad/crashpad/util/misc/uuid.cc
+++ b/third_party/crashpad/crashpad/util/misc/uuid.cc
@@ -42,23 +42,15 @@
 static_assert(sizeof(UUID) == 16, "UUID must be 16 bytes");
 
 #if CXX_LIBRARY_VERSION >= 2011
-static_assert(std::is_standard_layout<UUID>::value,
-              "UUID must be standard layout");
+static_assert(std::is_pod<UUID>::value, "UUID must be POD");
 #endif
 
-UUID::UUID() : data_1(0), data_2(0), data_3(0), data_4(), data_5() {
-}
-
-UUID::UUID(InitializeWithNewTag) {
-  CHECK(InitializeWithNew());
-}
-
-UUID::UUID(const uint8_t* bytes) {
-  InitializeFromBytes(bytes);
-}
-
 bool UUID::operator==(const UUID& that) const {
-  return memcmp(this, &that, sizeof(UUID)) == 0;
+  return memcmp(this, &that, sizeof(*this)) == 0;
+}
+
+void UUID::InitializeToZero() {
+  memset(this, 0, sizeof(*this));
 }
 
 void UUID::InitializeFromBytes(const uint8_t* bytes) {
@@ -103,17 +95,11 @@
   uuid_generate(uuid);
   InitializeFromBytes(uuid);
   return true;
-#elif defined(OS_WIN)
-  ::UUID system_uuid;
-  if (UuidCreate(&system_uuid) != RPC_S_OK) {
-    LOG(ERROR) << "UuidCreate";
-    return false;
-  }
-  InitializeFromSystemUUID(&system_uuid);
-  return true;
-#elif defined(OS_LINUX) || defined(OS_ANDROID)
+#elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID)
   // Linux does not provide a UUID generator in a widely-available system
   // library. uuid_generate() from libuuid is not available everywhere.
+  // On Windows, do not use UuidCreate() to avoid a dependency on rpcrt4, so
+  // that this function is usable early in DllMain().
   base::RandBytes(this, sizeof(*this));
 
   // Set six bits per RFC 4122 §4.4 to identify this as a pseudo-random UUID.
@@ -132,7 +118,7 @@
                 "unexpected system uuid size");
   static_assert(offsetof(::UUID, Data1) == offsetof(UUID, data_1),
                 "unexpected system uuid layout");
-  memcpy(this, system_uuid, sizeof(::UUID));
+  memcpy(this, system_uuid, sizeof(*this));
 }
 #endif  // OS_WIN
 
diff --git a/third_party/crashpad/crashpad/util/misc/uuid.h b/third_party/crashpad/crashpad/util/misc/uuid.h
index f25aa65..4e5884e2 100644
--- a/third_party/crashpad/crashpad/util/misc/uuid.h
+++ b/third_party/crashpad/crashpad/util/misc/uuid.h
@@ -36,27 +36,14 @@
 //!
 //! A %UUID is a unique 128-bit number specified by RFC 4122.
 //!
-//! This is a standard-layout structure.
+//! This is a POD structure.
 struct UUID {
-  //! \brief Initializes the %UUID to zero.
-  UUID();
-
-  //! \brief Tag to pass to constructor to indicate it should initialize with
-  //!     generated data.
-  struct InitializeWithNewTag {};
-
-  //! \brief Initializes the %UUID using a standard system facility to generate
-  //!     the value.
-  //!
-  //! CHECKs on failure with a message logged.
-  explicit UUID(InitializeWithNewTag);
-
-  //! \copydoc InitializeFromBytes()
-  explicit UUID(const uint8_t* bytes);
-
   bool operator==(const UUID& that) const;
   bool operator!=(const UUID& that) const { return !operator==(that); }
 
+  //! \brief Initializes the %UUID to zero.
+  void InitializeToZero();
+
   //! \brief Initializes the %UUID from a sequence of bytes.
   //!
   //! \a bytes is taken as a %UUID laid out in big-endian format in memory. On
diff --git a/third_party/crashpad/crashpad/util/misc/uuid_test.cc b/third_party/crashpad/crashpad/util/misc/uuid_test.cc
index 673cedc..f064c65 100644
--- a/third_party/crashpad/crashpad/util/misc/uuid_test.cc
+++ b/third_party/crashpad/crashpad/util/misc/uuid_test.cc
@@ -31,6 +31,7 @@
 
 TEST(UUID, UUID) {
   UUID uuid_zero;
+  uuid_zero.InitializeToZero();
   EXPECT_EQ(0u, uuid_zero.data_1);
   EXPECT_EQ(0u, uuid_zero.data_2);
   EXPECT_EQ(0u, uuid_zero.data_3);
@@ -60,7 +61,8 @@
                               0x0d,
                               0x0e,
                               0x0f};
-  UUID uuid(kBytes);
+  UUID uuid;
+  uuid.InitializeFromBytes(kBytes);
   EXPECT_EQ(0x00010203u, uuid.data_1);
   EXPECT_EQ(0x0405u, uuid.data_2);
   EXPECT_EQ(0x0607u, uuid.data_3);
@@ -78,7 +80,8 @@
   EXPECT_FALSE(uuid == uuid_zero);
   EXPECT_NE(uuid, uuid_zero);
 
-  UUID uuid_2(kBytes);
+  UUID uuid_2;
+  uuid_2.InitializeFromBytes(kBytes);
   EXPECT_EQ(uuid, uuid_2);
   EXPECT_FALSE(uuid != uuid_2);
 
@@ -155,7 +158,8 @@
   EXPECT_EQ(0x45u, uuid.data_5[5]);
   EXPECT_EQ("45454545-4545-4545-4545-454545454545", uuid.ToString());
 
-  UUID initialized_generated(UUID::InitializeWithNewTag{});
+  UUID initialized_generated;
+  initialized_generated.InitializeWithNew();
   EXPECT_NE(initialized_generated, uuid_zero);
 }
 
@@ -182,7 +186,9 @@
     {"6d247a34-53d5-40ec-a90d-d8dea9e94cc01", false}
   };
 
-  const std::string empty_uuid = UUID().ToString();
+  UUID uuid_zero;
+  uuid_zero.InitializeToZero();
+  const std::string empty_uuid = uuid_zero.ToString();
 
   for (size_t index = 0; index < arraysize(kCases); ++index) {
     const TestCase& test_case = kCases[index];
@@ -190,6 +196,7 @@
         "index %" PRIuS ": %s", index, test_case.uuid_string));
 
     UUID uuid;
+    uuid.InitializeToZero();
     EXPECT_EQ(test_case.success,
               uuid.InitializeFromString(test_case.uuid_string));
     if (test_case.success) {
diff --git a/third_party/crashpad/crashpad/util/net/http_transport.h b/third_party/crashpad/crashpad/util/net/http_transport.h
index cd31fac..f9948aa2 100644
--- a/third_party/crashpad/crashpad/util/net/http_transport.h
+++ b/third_party/crashpad/crashpad/util/net/http_transport.h
@@ -74,9 +74,9 @@
   //! \brief Performs the HTTP request with the configured parameters and waits
   //!     for the execution to complete.
   //!
-  //! \param[out] response On success, this will be set to the HTTP response
-  //!     body. This parameter is optional and may be set to `nullptr` if the
-  //!     response body is not required.
+  //! \param[out] response_body On success, this will be set to the HTTP
+  //!     response body. This parameter is optional and may be set to `nullptr`
+  //!     if the response body is not required.
   //!
   //! \return Whether or not the request was successful, defined as returning
   //!     a HTTP status 200 (OK) code.
diff --git a/third_party/crashpad/crashpad/util/net/http_transport_test.cc b/third_party/crashpad/crashpad/util/net/http_transport_test.cc
index bbfe878..e849530 100644
--- a/third_party/crashpad/crashpad/util/net/http_transport_test.cc
+++ b/third_party/crashpad/crashpad/util/net/http_transport_test.cc
@@ -279,7 +279,7 @@
 }
 
 void RunUpload33k(bool has_content_length) {
-  // On OS X, NSMutableURLRequest winds up calling into a CFReadStream’s Read()
+  // On macOS, NSMutableURLRequest winds up calling into a CFReadStream’s Read()
   // callback with a 32kB buffer. Make sure that it’s able to get everything
   // when enough is available to fill this buffer, requiring more than one
   // Read().
diff --git a/third_party/crashpad/crashpad/util/posix/close_multiple.h b/third_party/crashpad/crashpad/util/posix/close_multiple.h
index 2a66f28a..baf72b2 100644
--- a/third_party/crashpad/crashpad/util/posix/close_multiple.h
+++ b/third_party/crashpad/crashpad/util/posix/close_multiple.h
@@ -28,8 +28,8 @@
 //!
 //! Unlike the BSD function, this function may not close file descriptors
 //! immediately, but may instead mark them as close-on-exec. The actual behavior
-//! chosen is specific to the operating system. On Mac OS X, file descriptors
-//! are marked close-on-exec instead of being closed outright in order to avoid
+//! chosen is specific to the operating system. On macOS, file descriptors are
+//! marked close-on-exec instead of being closed outright in order to avoid
 //! raising `EXC_GUARD` exceptions for guarded file descriptors that are
 //! protected against `close()`.
 //!
diff --git a/third_party/crashpad/crashpad/util/posix/drop_privileges.cc b/third_party/crashpad/crashpad/util/posix/drop_privileges.cc
index 5c80990..884a411 100644
--- a/third_party/crashpad/crashpad/util/posix/drop_privileges.cc
+++ b/third_party/crashpad/crashpad/util/posix/drop_privileges.cc
@@ -31,10 +31,10 @@
   // is set not equal to the real ID. This code never specifies -1, so the
   // setreuid() and setregid() alone should work according to the standard.
   //
-  // In practice, on Mac OS X, setuid() and setgid() (or seteuid() and
-  // setegid()) must be called first. Otherwise, setreuid() and setregid() do
-  // not alter the saved IDs, leaving open the possibility for future privilege
-  // escalation.
+  // In practice, on older versions of macOS, setuid() and setgid() (or
+  // seteuid() and setegid()) must be called first. Otherwise, setreuid() and
+  // setregid() do not alter the saved IDs, leaving open the possibility for
+  // future privilege escalation.
   //
   // The problem exists in 10.9.5 xnu-2422.115.4/bsd/kern/kern_prot.c
   // setreuid(). Based on its comments, it purports to set the svuid to the new
@@ -45,8 +45,8 @@
   // is different from the desired euid. The workaround of calling setuid() or
   // seteuid() before setreuid() works because it sets the euid so that by the
   // time setreuid() runs, the old euid is actually the value that ought to be
-  // set as the svuid. setregid() is similar. This bug is filed as radar
-  // 18987552.
+  // set as the svuid. setregid() is similar. This bug was reported as radar
+  // 18987552, fixed in 10.10.3 and security updates to 10.9.5 and 10.8.5.
   //
   // setuid() and setgid() alone will only set the saved IDs when running as
   // root. When running a setuid non-root or setgid program, they do not alter
diff --git a/third_party/crashpad/crashpad/util/stdlib/map_insert.h b/third_party/crashpad/crashpad/util/stdlib/map_insert.h
index 956271b3..d2c3b84 100644
--- a/third_party/crashpad/crashpad/util/stdlib/map_insert.h
+++ b/third_party/crashpad/crashpad/util/stdlib/map_insert.h
@@ -21,12 +21,12 @@
 namespace crashpad {
 
 //! \brief Inserts a mapping from \a key to \a value into \a map, or replaces
-//!     an existing mapping so that \a key maps to \value.
+//!     an existing mapping so that \a key maps to \a value.
 //!
-//! This behaves similarly to `std::map<>::insert_or_assign()` proposed for
+//! This behaves similarly to `std::map<>::%insert_or_assign()` proposed for
 //! C++17, except that the \a old_value parameter is added.
 //!
-//! \param[inout] map The map to operate on.
+//! \param[in,out] map The map to operate on.
 //! \param[in] key The key that should be mapped to \a value.
 //! \param[in] value The value that \a key should map to.
 //! \param[out] old_value If \a key was previously present in \a map, this will
diff --git a/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.cc b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.cc
index 28f6ea11..65d5a632 100644
--- a/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.cc
+++ b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.cc
@@ -110,6 +110,13 @@
   }
 };
 
+struct StringToInt64Traits
+    : public StringToSignedIntegerTraits<int64_t, int64_t> {
+  static LongType Convert(const char* str, char** end, int base) {
+    return strtoll(str, end, base);
+  }
+};
+
 struct StringToUnsignedInt64Traits
     : public StringToUnsignedIntegerTraits<uint64_t, uint64_t> {
   static LongType Convert(const char* str, char** end, int base) {
@@ -166,6 +173,10 @@
   return StringToIntegerInternal<StringToUnsignedIntTraits>(string, number);
 }
 
+bool StringToNumber(const base::StringPiece& string, int64_t* number) {
+  return StringToIntegerInternal<StringToInt64Traits>(string, number);
+}
+
 bool StringToNumber(const base::StringPiece& string, uint64_t* number) {
   return StringToIntegerInternal<StringToUnsignedInt64Traits>(string, number);
 }
diff --git a/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.h b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.h
index 8641a69..b7bdcce 100644
--- a/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.h
+++ b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion.h
@@ -56,6 +56,7 @@
 //!     where such prefix recognition is desirable.
 bool StringToNumber(const base::StringPiece& string, int* number);
 bool StringToNumber(const base::StringPiece& string, unsigned int* number);
+bool StringToNumber(const base::StringPiece& string, int64_t* number);
 bool StringToNumber(const base::StringPiece& string, uint64_t* number);
 //! \}
 
diff --git a/third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc
index 6fe6f81..c455a38 100644
--- a/third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc
+++ b/third_party/crashpad/crashpad/util/stdlib/string_number_conversion_test.cc
@@ -221,6 +221,105 @@
   EXPECT_EQ(6u, output);
 }
 
+TEST(StringNumberConversion, StringToInt64) {
+  const struct {
+    const char* string;
+    bool valid;
+    int64_t value;
+  } kTestData[] = {
+      {"", false, 0},
+      {"0", true, 0},
+      {"1", true, 1},
+      {"2147483647", true, 2147483647},
+      {"2147483648", true, 2147483648},
+      {"4294967295", true, 4294967295},
+      {"4294967296", true, 4294967296},
+      {"9223372036854775807", true, std::numeric_limits<int64_t>::max()},
+      {"9223372036854775808", false, 0},
+      {"18446744073709551615", false, 0},
+      {"18446744073709551616", false, 0},
+      {"-1", true, -1},
+      {"-2147483648", true, INT64_C(-2147483648)},
+      {"-2147483649", true, INT64_C(-2147483649)},
+      {"-9223372036854775808", true, std::numeric_limits<int64_t>::min()},
+      {"-9223372036854775809", false, 0},
+      {"0x7fffffffffffffff", true, std::numeric_limits<int64_t>::max()},
+      {"0x8000000000000000", false, 0},
+      {"0xffffffffffffffff", false, 0},
+      {"0x10000000000000000", false, 0},
+      {"-0x7fffffffffffffff", true, -9223372036854775807},
+      {"-0x8000000000000000", true, std::numeric_limits<int64_t>::min()},
+      {"-0x8000000000000001", false, 0},
+      {"0x7Fffffffffffffff", true, std::numeric_limits<int64_t>::max()},
+  };
+
+  for (size_t index = 0; index < arraysize(kTestData); ++index) {
+    int64_t value;
+    bool valid = StringToNumber(kTestData[index].string, &value);
+    if (kTestData[index].valid) {
+      EXPECT_TRUE(valid) << "index " << index << ", string "
+                         << kTestData[index].string;
+      if (valid) {
+        EXPECT_EQ(kTestData[index].value, value)
+            << "index " << index << ", string " << kTestData[index].string;
+      }
+    } else {
+      EXPECT_FALSE(valid) << "index " << index << ", string "
+                          << kTestData[index].string << ", value " << value;
+    }
+  }
+}
+
+TEST(StringNumberConversion, StringToUnsignedInt64) {
+  const struct {
+    const char* string;
+    bool valid;
+    uint64_t value;
+  } kTestData[] = {
+      {"", false, 0},
+      {"0", true, 0},
+      {"1", true, 1},
+      {"2147483647", true, 2147483647},
+      {"2147483648", true, 2147483648},
+      {"4294967295", true, 4294967295},
+      {"4294967296", true, 4294967296},
+      {"9223372036854775807", true, 9223372036854775807},
+      {"9223372036854775808", true, 9223372036854775808u},
+      {"18446744073709551615", true, std::numeric_limits<uint64_t>::max()},
+      {"18446744073709551616", false, 0},
+      {"-1", false, 0},
+      {"-2147483648", false, 0},
+      {"-2147483649", false, 0},
+      {"-2147483648", false, 0},
+      {"-9223372036854775808", false, 0},
+      {"-9223372036854775809", false, 0},
+      {"0x7fffffffffffffff", true, 9223372036854775807},
+      {"0x8000000000000000", true, 9223372036854775808u},
+      {"0xffffffffffffffff", true, std::numeric_limits<uint64_t>::max()},
+      {"0x10000000000000000", false, 0},
+      {"-0x7fffffffffffffff", false, 0},
+      {"-0x8000000000000000", false, 0},
+      {"-0x8000000000000001", false, 0},
+      {"0xFfffffffffffffff", true, std::numeric_limits<uint64_t>::max()},
+  };
+
+  for (size_t index = 0; index < arraysize(kTestData); ++index) {
+    uint64_t value;
+    bool valid = StringToNumber(kTestData[index].string, &value);
+    if (kTestData[index].valid) {
+      EXPECT_TRUE(valid) << "index " << index << ", string "
+                         << kTestData[index].string;
+      if (valid) {
+        EXPECT_EQ(kTestData[index].value, value)
+            << "index " << index << ", string " << kTestData[index].string;
+      }
+    } else {
+      EXPECT_FALSE(valid) << "index " << index << ", string "
+                          << kTestData[index].string << ", value " << value;
+    }
+  }
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace crashpad
diff --git a/third_party/crashpad/crashpad/util/string/split_string.cc b/third_party/crashpad/crashpad/util/string/split_string.cc
index 9d0d675..fe7a7eb 100644
--- a/third_party/crashpad/crashpad/util/string/split_string.cc
+++ b/third_party/crashpad/crashpad/util/string/split_string.cc
@@ -32,21 +32,22 @@
   return true;
 }
 
-std::vector<std::string> SplitString(const std::string& str, char delimiter) {
+std::vector<std::string> SplitString(const std::string& string,
+                                     char delimiter) {
   std::vector<std::string> result;
-  if (str.empty())
+  if (string.empty())
     return result;
 
   size_t start = 0;
   while (start != std::string::npos) {
-    size_t end = str.find_first_of(delimiter, start);
+    size_t end = string.find_first_of(delimiter, start);
 
     std::string part;
     if (end == std::string::npos) {
-      part = str.substr(start);
+      part = string.substr(start);
       start = std::string::npos;
     } else {
-      part = str.substr(start, end - start);
+      part = string.substr(start, end - start);
       start = end + 1;
     }
 
diff --git a/third_party/crashpad/crashpad/util/string/split_string.h b/third_party/crashpad/crashpad/util/string/split_string.h
index 4ea89d2..af4f953 100644
--- a/third_party/crashpad/crashpad/util/string/split_string.h
+++ b/third_party/crashpad/crashpad/util/string/split_string.h
@@ -30,7 +30,7 @@
 //!     character.
 //!
 //! \return `true` if \a string was split successfully. `false` if \a string
-//!     did not contain a \delimiter character or began with a \delimiter
+//!     did not contain a \a delimiter character or began with a \a delimiter
 //!     character.
 bool SplitStringFirst(const std::string& string,
                       char delimiter,
@@ -41,8 +41,9 @@
 //!
 //! \param[in] string The string to split.
 //! \param[in] delimiter The delimiter to split at.
+//!
 //! \return The individual parts of the string.
-std::vector<std::string> SplitString(const std::string& str, char delimiter);
+std::vector<std::string> SplitString(const std::string& string, char delimiter);
 
 }  // namespace crashpad
 
diff --git a/third_party/crashpad/crashpad/util/util.gyp b/third_party/crashpad/crashpad/util/util.gyp
index 8269bd4..abf0bfdc 100644
--- a/third_party/crashpad/crashpad/util/util.gyp
+++ b/third_party/crashpad/crashpad/util/util.gyp
@@ -84,6 +84,8 @@
         'mach/task_for_pid.h',
         'mach/task_memory.cc',
         'mach/task_memory.h',
+        'misc/address_sanitizer.h',
+        'misc/arraysize_unsafe.h',
         'misc/clock.h',
         'misc/clock_mac.cc',
         'misc/clock_posix.cc',
@@ -261,8 +263,6 @@
         ['OS=="win"', {
           'link_settings': {
             'libraries': [
-              '-ladvapi32.lib',
-              '-lrpcrt4.lib',
               '-lwinhttp.lib',
             ],
           },
diff --git a/third_party/crashpad/crashpad/util/util_test.gyp b/third_party/crashpad/crashpad/util/util_test.gyp
index 9efe162a4..e6bf563 100644
--- a/third_party/crashpad/crashpad/util/util_test.gyp
+++ b/third_party/crashpad/crashpad/util/util_test.gyp
@@ -55,6 +55,7 @@
         'mach/scoped_task_suspend_test.cc',
         'mach/symbolic_constants_mach_test.cc',
         'mach/task_memory_test.cc',
+        'misc/arraysize_unsafe_test.cc',
         'misc/clock_test.cc',
         'misc/initialization_state_dcheck_test.cc',
         'misc/initialization_state_test.cc',
@@ -90,6 +91,7 @@
         'win/handle_test.cc',
         'win/initial_client_data_test.cc',
         'win/process_info_test.cc',
+        'win/registration_protocol_win_test.cc',
         'win/scoped_process_suspend_test.cc',
         'win/time_test.cc',
       ],
@@ -107,6 +109,7 @@
           ],
           'link_settings': {
             'libraries': [
+              '-ladvapi32.lib',
               '-limagehlp.lib',
               '-lrpcrt4.lib',
             ],
diff --git a/third_party/crashpad/crashpad/util/win/command_line.h b/third_party/crashpad/crashpad/util/win/command_line.h
index eb3f712..c12d653 100644
--- a/third_party/crashpad/crashpad/util/win/command_line.h
+++ b/third_party/crashpad/crashpad/util/win/command_line.h
@@ -29,7 +29,7 @@
 //! non-empty, a space will precede \a argument.
 //!
 //! \param[in] argument The argument to append to \a command_line.
-//! \param[inout] command_line The command line being constructed.
+//! \param[in,out] command_line The command line being constructed.
 void AppendCommandLineArgument(const std::wstring& argument,
                                std::wstring* command_line);
 
diff --git a/third_party/crashpad/crashpad/util/win/process_info_test.cc b/third_party/crashpad/crashpad/util/win/process_info_test.cc
index be2cfed0..e377a6ee 100644
--- a/third_party/crashpad/crashpad/util/win/process_info_test.cc
+++ b/third_party/crashpad/crashpad/util/win/process_info_test.cc
@@ -132,7 +132,8 @@
 void TestOtherProcess(const base::string16& directory_modification) {
   ProcessInfo process_info;
 
-  UUID done_uuid(UUID::InitializeWithNewTag{});
+  UUID done_uuid;
+  done_uuid.InitializeWithNew();
 
   ScopedKernelHANDLE done(
       CreateEvent(nullptr, true, false, done_uuid.ToString16().c_str()));
diff --git a/third_party/crashpad/crashpad/util/win/registration_protocol_win.cc b/third_party/crashpad/crashpad/util/win/registration_protocol_win.cc
index 1763841..e5cbd8d 100644
--- a/third_party/crashpad/crashpad/util/win/registration_protocol_win.cc
+++ b/third_party/crashpad/crashpad/util/win/registration_protocol_win.cc
@@ -15,12 +15,11 @@
 #include "util/win/registration_protocol_win.h"
 
 #include <windows.h>
-#include <sddl.h>
 
 #include "base/logging.h"
+#include "base/macros.h"
 #include "util/win/exception_handler_server.h"
 #include "util/win/scoped_handle.h"
-#include "util/win/scoped_local_alloc.h"
 
 namespace crashpad {
 
@@ -97,7 +96,6 @@
                                bool first_instance) {
   SECURITY_ATTRIBUTES security_attributes;
   SECURITY_ATTRIBUTES* security_attributes_pointer = nullptr;
-  ScopedLocalAlloc scoped_sec_desc;
 
   if (first_instance) {
     // Pre-Vista does not have integrity levels.
@@ -105,21 +103,10 @@
     const DWORD major_version = LOBYTE(LOWORD(version));
     const bool is_vista_or_later = major_version >= 6;
     if (is_vista_or_later) {
-      // Mandatory Label, no ACE flags, no ObjectType, integrity level
-      // untrusted.
-      const wchar_t kSddl[] = L"S:(ML;;;;;S-1-16-0)";
-
-      PSECURITY_DESCRIPTOR sec_desc;
-      PCHECK(ConvertStringSecurityDescriptorToSecurityDescriptor(
-          kSddl, SDDL_REVISION_1, &sec_desc, nullptr))
-          << "ConvertStringSecurityDescriptorToSecurityDescriptor";
-
-      // Take ownership of the allocated SECURITY_DESCRIPTOR.
-      scoped_sec_desc.reset(sec_desc);
-
       memset(&security_attributes, 0, sizeof(security_attributes));
       security_attributes.nLength = sizeof(SECURITY_ATTRIBUTES);
-      security_attributes.lpSecurityDescriptor = sec_desc;
+      security_attributes.lpSecurityDescriptor =
+          const_cast<void*>(GetSecurityDescriptorForNamedPipeInstance(nullptr));
       security_attributes.bInheritHandle = TRUE;
       security_attributes_pointer = &security_attributes;
     }
@@ -136,4 +123,85 @@
       security_attributes_pointer);
 }
 
+const void* GetSecurityDescriptorForNamedPipeInstance(size_t* size) {
+  // Mandatory Label, no ACE flags, no ObjectType, integrity level untrusted is
+  // "S:(ML;;;;;S-1-16-0)". Typically
+  // ConvertStringSecurityDescriptorToSecurityDescriptor() would be used to
+  // convert from a string representation. However, that function cannot be used
+  // because it is in advapi32.dll and CreateNamedPipeInstance() is called from
+  // within DllMain() where the loader lock is held. advapi32.dll is delay
+  // loaded in chrome_elf.dll because it must avoid loading user32.dll. If an
+  // advapi32.dll function were used, it would cause a load of the DLL, which
+  // would in turn cause deadlock.
+
+#pragma pack(push, 1)
+  static const struct SecurityDescriptorBlob {
+    // See https://msdn.microsoft.com/en-us/library/cc230366.aspx.
+    SECURITY_DESCRIPTOR_RELATIVE sd_rel;
+    struct {
+      ACL acl;
+      struct {
+        // This is equivalent to SYSTEM_MANDATORY_LABEL_ACE, but there's no
+        // DWORD offset to the SID, instead it's inline.
+        ACE_HEADER header;
+        ACCESS_MASK mask;
+        SID sid;
+      } ace[1];
+    } sacl;
+  } kSecDescBlob = {
+      // sd_rel.
+      {
+          SECURITY_DESCRIPTOR_REVISION1,  // Revision.
+          0x00,  // Sbz1.
+          SE_SELF_RELATIVE | SE_SACL_PRESENT,  // Control.
+          0,  // OffsetOwner.
+          0,  // OffsetGroup.
+          offsetof(SecurityDescriptorBlob, sacl),  // OffsetSacl.
+          0,  // OffsetDacl.
+      },
+
+      // sacl.
+      {
+          // acl.
+          {
+              ACL_REVISION,  // AclRevision.
+              0,  // Sbz1.
+              sizeof(kSecDescBlob.sacl),  // AclSize.
+              arraysize(kSecDescBlob.sacl.ace),  // AceCount.
+              0,  // Sbz2.
+          },
+
+          // ace[0].
+          {
+              {
+                  // header.
+                  {
+                      SYSTEM_MANDATORY_LABEL_ACE_TYPE,  // AceType.
+                      0,  // AceFlags.
+                      sizeof(kSecDescBlob.sacl.ace[0]),  // AceSize.
+                  },
+
+                  // mask.
+                  0,
+
+                  // sid.
+                  {
+                      SID_REVISION,  // Revision.
+                      // SubAuthorityCount.
+                      arraysize(kSecDescBlob.sacl.ace[0].sid.SubAuthority),
+                      // IdentifierAuthority.
+                      {SECURITY_MANDATORY_LABEL_AUTHORITY},
+                      {SECURITY_MANDATORY_UNTRUSTED_RID},  // SubAuthority.
+                  },
+              },
+          },
+      },
+  };
+#pragma pack(pop)
+
+  if (size)
+    *size = sizeof(kSecDescBlob);
+  return reinterpret_cast<const void*>(&kSecDescBlob);
+}
+
 }  // namespace crashpad
diff --git a/third_party/crashpad/crashpad/util/win/registration_protocol_win.h b/third_party/crashpad/crashpad/util/win/registration_protocol_win.h
index 122098358..5f04a46 100644
--- a/third_party/crashpad/crashpad/util/win/registration_protocol_win.h
+++ b/third_party/crashpad/crashpad/util/win/registration_protocol_win.h
@@ -145,6 +145,18 @@
 HANDLE CreateNamedPipeInstance(const std::wstring& pipe_name,
                                bool first_instance);
 
+//! \brief Returns the SECURITY_DESCRIPTOR blob that will be used for creating
+//!     the connection pipe in CreateNamedPipeInstance().
+//!
+//! This function is exposed for only for testing.
+//!
+//! \param[out] size The size of the returned blob. May be `nullptr` if not
+//!     required.
+//!
+//! \return A pointer to a self-relative `SECURITY_DESCRIPTOR`. Ownership is not
+//!     transferred to the caller.
+const void* GetSecurityDescriptorForNamedPipeInstance(size_t* size);
+
 }  // namespace crashpad
 
 #endif  // CRASHPAD_UTIL_WIN_REGISTRATION_PROTOCOL_WIN_H_
diff --git a/third_party/crashpad/crashpad/util/win/registration_protocol_win_test.cc b/third_party/crashpad/crashpad/util/win/registration_protocol_win_test.cc
new file mode 100644
index 0000000..60e7c86
--- /dev/null
+++ b/third_party/crashpad/crashpad/util/win/registration_protocol_win_test.cc
@@ -0,0 +1,53 @@
+// Copyright 2016 The Crashpad Authors. All rights reserved.
+//
+// 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.
+
+#include "util/win/registration_protocol_win.h"
+
+#include <windows.h>
+#include <sddl.h>
+#include <string.h>
+
+#include "gtest/gtest.h"
+#include "test/errors.h"
+#include "util/win/scoped_local_alloc.h"
+
+namespace crashpad {
+namespace test {
+namespace {
+
+TEST(SecurityDescriptor, MatchesAdvapi32) {
+  // This security descriptor is built manually in the connection code to avoid
+  // calling the advapi32 functions. Verify that it returns the same thing as
+  // ConvertStringSecurityDescriptorToSecurityDescriptor() would.
+
+  // Mandatory Label, no ACE flags, no ObjectType, integrity level
+  // untrusted.
+  const wchar_t kSddl[] = L"S:(ML;;;;;S-1-16-0)";
+  PSECURITY_DESCRIPTOR sec_desc;
+  ULONG sec_desc_len;
+  ASSERT_TRUE(ConvertStringSecurityDescriptorToSecurityDescriptor(
+      kSddl, SDDL_REVISION_1, &sec_desc, &sec_desc_len))
+      << ErrorMessage("ConvertStringSecurityDescriptorToSecurityDescriptor");
+  ScopedLocalAlloc sec_desc_owner(sec_desc);
+
+  size_t created_len;
+  const void* const created =
+      GetSecurityDescriptorForNamedPipeInstance(&created_len);
+  ASSERT_EQ(sec_desc_len, created_len);
+  EXPECT_EQ(0, memcmp(sec_desc, created, sec_desc_len));
+}
+
+}  // namespace
+}  // namespace test
+}  // namespace crashpad