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 &*
-[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-** 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*. 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-** 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-** 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