From 3965bc7d78947b3e2932e56c7c948895858009fb Mon Sep 17 00:00:00 2001 From: Sean McAllister Date: Thu, 3 Sep 2020 12:48:55 -0600 Subject: [PATCH] Refactor OS_LINUX usage for coming LaCrOs update. We're working to decouple ChromeOS and Linux builds of Chrome. Currently OS_CHROMEOS sets OS_LINUX, so we need to refactor current OS_LINUX usage to make this explicit. More information can be found at go/cros_is_linux_os_linux BUG=chromium:1110266 TEST=manual build Change-Id: Ie765da1ab6a0bf0286538ae1df3697abaa29aeaa Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2391116 Reviewed-by: Joshua Peraza Commit-Queue: Joshua Peraza --- client/crashpad_client.h | 12 ++--- client/crashpad_client_linux.cc | 4 +- client/crashpad_info.cc | 3 +- client/simulate_crash.h | 2 +- handler/handler_main.cc | 54 +++++++++---------- minidump/minidump_misc_info_writer.cc | 2 +- .../crashpad_types/crashpad_info_reader.cc | 2 +- snapshot/elf/elf_image_reader_test.cc | 6 +-- .../process_snapshot_sanitized_test.cc | 2 +- test/multiprocess_exec_posix.cc | 4 +- test/multiprocess_posix.cc | 2 +- test/process_type.cc | 4 +- test/process_type.h | 5 +- tools/generate_dump.cc | 4 +- util/file/file_io.h | 4 +- util/file/file_io_posix.cc | 2 +- util/file/file_io_test.cc | 4 +- util/file/file_writer.cc | 2 +- util/file/file_writer.h | 2 +- util/linux/exception_handler_protocol.cc | 4 +- util/linux/exception_handler_protocol.h | 2 +- util/misc/address_types.h | 4 +- util/misc/capture_context.h | 5 +- util/misc/metrics.cc | 2 +- util/misc/time.h | 4 +- util/misc/uuid.cc | 4 +- util/net/http_transport_socket.cc | 2 +- util/numeric/checked_address_range.cc | 4 +- util/posix/close_multiple.cc | 7 +-- util/posix/drop_privileges.cc | 2 +- util/posix/process_info.h | 8 +-- util/posix/process_info_test.cc | 16 +++--- util/posix/signals.cc | 8 +-- util/posix/symbolic_constants_posix.cc | 4 +- util/posix/symbolic_constants_posix_test.cc | 4 +- util/process/process_memory_native.h | 4 +- 36 files changed, 103 insertions(+), 101 deletions(-) diff --git a/client/crashpad_client.h b/client/crashpad_client.h index 36589727..5d421392 100644 --- a/client/crashpad_client.h +++ b/client/crashpad_client.h @@ -33,7 +33,7 @@ #elif defined(OS_WIN) #include #include "util/win/scoped_handle.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include #include #endif @@ -121,7 +121,7 @@ class CrashpadClient { bool asynchronous_start, const std::vector& attachments = {}); -#if defined(OS_ANDROID) || defined(OS_LINUX) || DOXYGEN +#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) || DOXYGEN //! \brief Retrieve the socket and process ID for the handler. //! //! `StartHandler()` must have successfully been called before calling this @@ -166,7 +166,7 @@ class CrashpadClient { //! //! \return `true` on success. Otherwise `false` with a message logged. static bool InitializeSignalStackForThread(); -#endif // OS_ANDROID || OS_LINUX || DOXYGEN +#endif // OS_ANDROID || OS_LINUX || OS_CHROMEOS || DOXYGEN #if defined(OS_ANDROID) || DOXYGEN //! \brief Installs a signal handler to execute `/system/bin/app_process` and @@ -337,7 +337,7 @@ class CrashpadClient { int socket); #endif // OS_ANDROID || DOXYGEN -#if defined(OS_LINUX) || defined(OS_ANDROID) || DOXYGEN +#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_CHROMEOS) || DOXYGEN //! \brief Installs a signal handler to launch a handler process in reponse to //! a crash. //! @@ -450,7 +450,7 @@ class CrashpadClient { //! //! \param[in] unhandled_signals The set of unhandled signals void SetUnhandledSignals(const std::set& unhandled_signals); -#endif // OS_LINUX || OS_ANDROID || DOXYGEN +#endif // OS_LINUX || OS_ANDROID || OS_CHROMEOS || DOXYGEN #if defined(OS_IOS) || DOXYGEN //! \brief Configures the process to direct its crashes to the iOS in-process @@ -662,7 +662,7 @@ class CrashpadClient { #elif defined(OS_WIN) std::wstring ipc_pipe_; ScopedKernelHANDLE handler_start_thread_; -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) std::set unhandled_signals_; #endif // OS_APPLE diff --git a/client/crashpad_client_linux.cc b/client/crashpad_client_linux.cc index 117ed193..8425d779 100644 --- a/client/crashpad_client_linux.cc +++ b/client/crashpad_client_linux.cc @@ -411,7 +411,7 @@ bool CrashpadClient::StartHandler( std::move(client_sock), handler_pid, &unhandled_signals_); } -#if defined(OS_ANDROID) || defined(OS_LINUX) +#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) // static bool CrashpadClient::GetHandlerSocket(int* sock, pid_t* pid) { auto signal_handler = RequestCrashDumpHandler::Get(); @@ -515,7 +515,7 @@ bool CrashpadClient::InitializeSignalStackForThread() { } return true; } -#endif // OS_ANDROID || OS_LINUX +#endif // OS_ANDROID || OS_LINUX || OS_CHROMEOS #if defined(OS_ANDROID) diff --git a/client/crashpad_info.cc b/client/crashpad_info.cc index 12307be5..929c0df1 100644 --- a/client/crashpad_info.cc +++ b/client/crashpad_info.cc @@ -94,7 +94,8 @@ extern "C" int* CRASHPAD_NOTE_REFERENCE; // static CrashpadInfo* CrashpadInfo::GetCrashpadInfo() { -#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) || \ + defined(OS_FUCHSIA) // This otherwise-unused reference is used so that any module that // references GetCrashpadInfo() will also include the note in the // .note.crashpad.info section. That note in turn contains the address of diff --git a/client/simulate_crash.h b/client/simulate_crash.h index 68c84e58..18af98f3 100644 --- a/client/simulate_crash.h +++ b/client/simulate_crash.h @@ -21,7 +21,7 @@ #include "client/simulate_crash_mac.h" #elif defined(OS_WIN) #include "client/simulate_crash_win.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "client/simulate_crash_linux.h" #endif diff --git a/handler/handler_main.cc b/handler/handler_main.cc index c8001f45..f3730e8b 100644 --- a/handler/handler_main.cc +++ b/handler/handler_main.cc @@ -60,7 +60,7 @@ #include "handler/linux/cros_crash_report_exception_handler.h" #endif -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include #include "handler/linux/crash_report_exception_handler.h" @@ -86,9 +86,6 @@ #include "util/win/handle.h" #include "util/win/initial_client_data.h" #include "util/win/session_end_watcher.h" -#elif defined(OS_LINUX) -#include "handler/linux/crash_report_exception_handler.h" -#include "handler/linux/exception_handler_server.h" #endif // OS_APPLE namespace crashpad { @@ -125,9 +122,9 @@ void Usage(const base::FilePath& me) { " Address_debug_critical_section\n" " use precreated data to register initial client\n" #endif // OS_WIN -#if defined(OS_ANDROID) || defined(OS_LINUX) +#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) " --initial-client-fd=FD a socket connected to a client.\n" -#endif // OS_ANDROID || OS_LINUX +#endif // OS_ANDROID || OS_LINUX || OS_CHROMEOS #if defined(OS_APPLE) " --mach-service=SERVICE register SERVICE with the bootstrap server\n" #endif // OS_APPLE @@ -154,7 +151,7 @@ void Usage(const base::FilePath& me) { " --reset-own-crash-exception-port-to-system-default\n" " reset the server's exception handler to default\n" #endif // OS_APPLE -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) " --sanitization-information=SANITIZATION_INFORMATION_ADDRESS\n" " the address of a SanitizationInformation struct.\n" " --shared-client-connection the file descriptor provided by\n" @@ -162,7 +159,7 @@ void Usage(const base::FilePath& me) { " clients\n" " --trace-parent-with-exception=EXCEPTION_INFORMATION_ADDRESS\n" " request a dump for the handler's parent process\n" -#endif // OS_LINUX || OS_ANDROID +#endif // OS_LINUX || OS_CHROMEOS || OS_ANDROID " --url=URL send crash reports to this Breakpad server URL,\n" " only if uploads are enabled for the database\n" #if defined(OS_CHROMEOS) @@ -197,7 +194,7 @@ struct Options { std::string mach_service; int handshake_fd; bool reset_own_crash_exception_port_to_system_default; -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) VMAddress exception_information_address; VMAddress sanitization_information_address; int initial_client_fd; @@ -280,7 +277,8 @@ class CallMetricsRecordNormalExit { DISALLOW_COPY_AND_ASSIGN(CallMetricsRecordNormalExit); }; -#if defined(OS_APPLE) || defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_APPLE) || defined(OS_LINUX) || defined(OS_CHROMEOS) || \ + defined(OS_ANDROID) void HandleCrashSignal(int sig, siginfo_t* siginfo, void* context) { MetricsRecordExit(Metrics::LifetimeMilestone::kCrashed); @@ -539,9 +537,9 @@ int HandlerMain(int argc, #if defined(OS_WIN) kOptionInitialClientData, #endif // OS_WIN -#if defined(OS_ANDROID) || defined(OS_LINUX) +#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) kOptionInitialClientFD, -#endif // OS_ANDROID || OS_LINUX +#endif // OS_ANDROID || OS_LINUX || OS_CHROMEOS #if defined(OS_APPLE) kOptionMachService, #endif // OS_APPLE @@ -562,7 +560,7 @@ int HandlerMain(int argc, #if defined(OS_APPLE) kOptionResetOwnCrashExceptionPortToSystemDefault, #endif // OS_APPLE -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) kOptionSanitizationInformation, kOptionSharedClientConnection, kOptionTraceParentWithException, @@ -597,9 +595,9 @@ int HandlerMain(int argc, nullptr, kOptionInitialClientData}, #endif // OS_APPLE -#if defined(OS_ANDROID) || defined(OS_LINUX) +#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) {"initial-client-fd", required_argument, nullptr, kOptionInitialClientFD}, -#endif // OS_ANDROID || OS_LINUX +#endif // OS_ANDROID || OS_LINUX || OS_CHROMEOS #if defined(OS_APPLE) {"mach-service", required_argument, nullptr, kOptionMachService}, #endif // OS_APPLE @@ -635,7 +633,7 @@ int HandlerMain(int argc, nullptr, kOptionResetOwnCrashExceptionPortToSystemDefault}, #endif // OS_APPLE -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) {"sanitization-information", required_argument, nullptr, @@ -648,7 +646,7 @@ int HandlerMain(int argc, required_argument, nullptr, kOptionTraceParentWithException}, -#endif // OS_LINUX || OS_ANDROID +#endif // OS_LINUX || OS_CHROMEOS || OS_ANDROID {"url", required_argument, nullptr, kOptionURL}, #if defined(OS_CHROMEOS) {"use-cros-crash-reporter", @@ -677,7 +675,7 @@ int HandlerMain(int argc, options.handshake_fd = -1; #endif options.identify_client_via_url = true; -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) options.initial_client_fd = kInvalidFileHandle; #endif options.periodic_tasks = true; @@ -733,7 +731,7 @@ int HandlerMain(int argc, break; } #endif // OS_WIN -#if defined(OS_ANDROID) || defined(OS_LINUX) +#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) case kOptionInitialClientFD: { if (!base::StringToInt(optarg, &options.initial_client_fd)) { ToolSupport::UsageHint(me, "failed to parse --initial-client-fd"); @@ -741,7 +739,7 @@ int HandlerMain(int argc, } break; } -#endif // OS_ANDROID || OS_LINUX +#endif // OS_ANDROID || OS_LINUX || OS_CHROMEOS case kOptionMetrics: { options.metrics_dir = base::FilePath( ToolSupport::CommandLineArgumentToFilePathStringType(optarg)); @@ -797,7 +795,7 @@ int HandlerMain(int argc, break; } #endif // OS_APPLE -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) case kOptionSanitizationInformation: { if (!StringToNumber(optarg, &options.sanitization_information_address)) { @@ -819,7 +817,7 @@ int HandlerMain(int argc, } break; } -#endif // OS_LINUX || OS_ANDROID +#endif // OS_LINUX || OS_CHROMEOS || OS_ANDROID case kOptionURL: { options.url = optarg; break; @@ -885,7 +883,7 @@ int HandlerMain(int argc, me, "--initial-client-data and --pipe-name are incompatible"); return ExitFailure(); } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) if (!options.exception_information_address && options.initial_client_fd == kInvalidFileHandle) { ToolSupport::UsageHint( @@ -978,7 +976,7 @@ int HandlerMain(int argc, upload_thread.Get()->Start(); } -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) std::unique_ptr exception_handler; #else std::unique_ptr exception_handler; @@ -1029,7 +1027,7 @@ int HandlerMain(int argc, user_stream_sources); #endif // OS_CHROMEOS -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) if (options.exception_information_address) { ExceptionHandlerProtocol::ClientInformation info; info.exception_information_address = options.exception_information_address; @@ -1039,7 +1037,7 @@ int HandlerMain(int argc, ? EXIT_SUCCESS : ExitFailure(); } -#endif // OS_LINUX || OS_ANDROID +#endif // OS_LINUX || OS_CHROMEOS || OS_ANDROID ScopedStoppable prune_thread; if (options.periodic_tasks) { @@ -1101,7 +1099,7 @@ int HandlerMain(int argc, if (!options.pipe_name.empty()) { exception_handler_server.SetPipeName(base::UTF8ToUTF16(options.pipe_name)); } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) ExceptionHandlerServer exception_handler_server; #endif // OS_APPLE @@ -1123,7 +1121,7 @@ int HandlerMain(int argc, exception_handler_server.InitializeWithInheritedDataForInitialClient( options.initial_client_data, exception_handler.get()); } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) if (options.initial_client_fd == kInvalidFileHandle || !exception_handler_server.InitializeWithClient( ScopedFileHandle(options.initial_client_fd), diff --git a/minidump/minidump_misc_info_writer.cc b/minidump/minidump_misc_info_writer.cc index 13435604..45665d16 100644 --- a/minidump/minidump_misc_info_writer.cc +++ b/minidump/minidump_misc_info_writer.cc @@ -103,7 +103,7 @@ std::string MinidumpMiscInfoDebugBuildString() { static constexpr char kOS[] = "mac"; #elif defined(OS_ANDROID) static constexpr char kOS[] = "android"; -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) static constexpr char kOS[] = "linux"; #elif defined(OS_WIN) static constexpr char kOS[] = "win"; diff --git a/snapshot/crashpad_types/crashpad_info_reader.cc b/snapshot/crashpad_types/crashpad_info_reader.cc index 9d0c781f..cedab59a 100644 --- a/snapshot/crashpad_types/crashpad_info_reader.cc +++ b/snapshot/crashpad_types/crashpad_info_reader.cc @@ -22,7 +22,7 @@ #if defined(OS_WIN) #include "util/win/traits.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "util/linux/traits.h" #elif defined(OS_FUCHSIA) #include "util/fuchsia/traits.h" diff --git a/snapshot/elf/elf_image_reader_test.cc b/snapshot/elf/elf_image_reader_test.cc index 34235a7d..63da92ae 100644 --- a/snapshot/elf/elf_image_reader_test.cc +++ b/snapshot/elf/elf_image_reader_test.cc @@ -35,7 +35,7 @@ #include "base/fuchsia/fuchsia_logging.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "test/linux/fake_ptrace_connection.h" #include "util/linux/auxiliary_vector.h" @@ -84,7 +84,7 @@ void LocateExecutable(const ProcessType& process, *elf_address = base; } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) void LocateExecutable(PtraceConnection* connection, ProcessMemory* memory, @@ -133,7 +133,7 @@ void ReadThisExecutableInTarget(ProcessType process, ASSERT_TRUE(range.Initialize(&memory, am_64_bit)); VMAddress elf_address; -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) FakePtraceConnection connection; ASSERT_TRUE(connection.Initialize(process)); LocateExecutable(&connection, &memory, &elf_address); diff --git a/snapshot/sanitized/process_snapshot_sanitized_test.cc b/snapshot/sanitized/process_snapshot_sanitized_test.cc index 26bd8d77..931f5cb9 100644 --- a/snapshot/sanitized/process_snapshot_sanitized_test.cc +++ b/snapshot/sanitized/process_snapshot_sanitized_test.cc @@ -26,7 +26,7 @@ #include "util/misc/address_sanitizer.h" #include "util/numeric/safe_assignment.h" -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include #include "snapshot/linux/process_snapshot_linux.h" diff --git a/test/multiprocess_exec_posix.cc b/test/multiprocess_exec_posix.cc index 59aad829..e14a3b88 100644 --- a/test/multiprocess_exec_posix.cc +++ b/test/multiprocess_exec_posix.cc @@ -26,7 +26,7 @@ #include "util/misc/scoped_forbid_return.h" #include "util/posix/close_multiple.h" -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) #include #endif @@ -90,7 +90,7 @@ void MultiprocessExec::MultiprocessChild() { int rv; -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) __fpurge(stdin); #else rv = fpurge(stdin); diff --git a/test/multiprocess_posix.cc b/test/multiprocess_posix.cc index 782d5ba9..c16aa08f 100644 --- a/test/multiprocess_posix.cc +++ b/test/multiprocess_posix.cc @@ -143,7 +143,7 @@ void Multiprocess::Run() { if (exception_swallower.get()) { ExceptionSwallower::SwallowExceptions(); } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) if (reason_ == kTerminationSignal && Signals::IsCrashSignal(code_)) { Signals::InstallDefaultHandler(code_); } diff --git a/test/process_type.cc b/test/process_type.cc index ac0b865e..f6eec36a 100644 --- a/test/process_type.cc +++ b/test/process_type.cc @@ -16,7 +16,7 @@ #if defined(OS_FUCHSIA) #include -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include #endif @@ -26,7 +26,7 @@ namespace test { ProcessType GetSelfProcess() { #if defined(OS_FUCHSIA) return zx::process::self(); -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) return getpid(); #elif defined(OS_WIN) return GetCurrentProcess(); diff --git a/test/process_type.h b/test/process_type.h index d14514e5..cacac04f 100644 --- a/test/process_type.h +++ b/test/process_type.h @@ -19,7 +19,7 @@ #if defined(OS_FUCHSIA) #include -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include #elif defined(OS_WIN) #include @@ -32,7 +32,8 @@ namespace test { #if defined(OS_FUCHSIA) using ProcessType = zx::unowned_process; -#elif defined(OS_LINUX) || defined(OS_ANDROID) || DOXYGEN +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) || \ + DOXYGEN //! \brief Alias for platform-specific type to represent a process. using ProcessType = pid_t; #elif defined(OS_WIN) diff --git a/tools/generate_dump.cc b/tools/generate_dump.cc index dd62cd7b..e22f92a5 100644 --- a/tools/generate_dump.cc +++ b/tools/generate_dump.cc @@ -47,7 +47,7 @@ #include "snapshot/win/process_snapshot_win.h" #include "util/win/scoped_process_suspend.h" #include "util/win/xp_compat.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "snapshot/linux/process_snapshot_linux.h" #endif // OS_APPLE @@ -196,7 +196,7 @@ int GenerateDumpMain(int argc, char* argv[]) { 0)) { return EXIT_FAILURE; } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) // TODO(jperaza): https://crashpad.chromium.org/bug/30. ProcessSnapshotLinux process_snapshot; if (!process_snapshot.Initialize(nullptr)) { diff --git a/util/file/file_io.h b/util/file/file_io.h index 6fa0f96d..1f502ad4 100644 --- a/util/file/file_io.h +++ b/util/file/file_io.h @@ -398,7 +398,7 @@ FileHandle LoggingOpenFileForWrite(const base::FilePath& path, FileWriteMode mode, FilePermissions permissions); -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) //! \brief Opens an in-memory file for input and output. //! //! This function first attempts to open the file with `memfd_create()`. If @@ -420,7 +420,7 @@ FileHandle LoggingOpenFileForWrite(const base::FilePath& path, //! \sa LoggingOpenFileForWrite //! \sa LoggingOpenFileForReadAndWrite FileHandle LoggingOpenMemoryFileForReadAndWrite(const base::FilePath& name); -#endif // OS_LINUX +#endif // OS_LINUX || OS_CHROMEOS //! \brief Wraps OpenFileForReadAndWrite(), logging an error if the operation //! fails. diff --git a/util/file/file_io_posix.cc b/util/file/file_io_posix.cc index 001b2d97..2baa8114 100644 --- a/util/file/file_io_posix.cc +++ b/util/file/file_io_posix.cc @@ -153,7 +153,7 @@ FileHandle LoggingOpenFileForWrite(const base::FilePath& path, return fd; } -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) FileHandle LoggingOpenMemoryFileForReadAndWrite(const base::FilePath& name) { DCHECK(name.value().find('/') == std::string::npos); diff --git a/util/file/file_io_test.cc b/util/file/file_io_test.cc index 0efded8a..52bb6eee 100644 --- a/util/file/file_io_test.cc +++ b/util/file/file_io_test.cc @@ -473,7 +473,7 @@ TEST(FileIO, LoggingOpenFileForReadAndWrite) { TestOpenFileForWrite(LoggingOpenFileForReadAndWrite); } -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) TEST(FileIO, LoggingOpenMemoryFileForReadAndWrite) { ScopedFileHandle handle( LoggingOpenMemoryFileForReadAndWrite(base::FilePath("memfile"))); @@ -488,7 +488,7 @@ TEST(FileIO, LoggingOpenMemoryFileForReadAndWrite) { ASSERT_TRUE(LoggingReadFileExactly(handle.get(), buffer, sizeof(buffer))); EXPECT_EQ(memcmp(buffer, kTestData, sizeof(buffer)), 0); } -#endif // OS_LINUX +#endif // OS_LINUX || OS_CHROMEOS enum class ReadOrWrite : bool { kRead, diff --git a/util/file/file_writer.cc b/util/file/file_writer.cc index 6dff975a..73fe7087 100644 --- a/util/file/file_writer.cc +++ b/util/file/file_writer.cc @@ -171,7 +171,7 @@ bool FileWriter::Open(const base::FilePath& path, return true; } -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) bool FileWriter::OpenMemfd(const base::FilePath& path) { CHECK(!file_.is_valid()); file_.reset(LoggingOpenMemoryFileForReadAndWrite(path)); diff --git a/util/file/file_writer.h b/util/file/file_writer.h index 4b99b375..987c0f59 100644 --- a/util/file/file_writer.h +++ b/util/file/file_writer.h @@ -131,7 +131,7 @@ class FileWriter : public FileWriterInterface { FileWriteMode write_mode, FilePermissions permissions); -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) //! \brief Wraps LoggingOpenMemoryFileForWrite(). //! //! \return `true` if the operation succeeded, `false` if it failed, with an diff --git a/util/linux/exception_handler_protocol.cc b/util/linux/exception_handler_protocol.cc index 45590c82..27f180c6 100644 --- a/util/linux/exception_handler_protocol.cc +++ b/util/linux/exception_handler_protocol.cc @@ -19,9 +19,9 @@ namespace crashpad { ExceptionHandlerProtocol::ClientInformation::ClientInformation() : exception_information_address(0), sanitization_information_address(0) -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) , crash_loop_before_time(0) -#endif // OS_LINUX +#endif // OS_LINUX || OS_CHROMEOS {} ExceptionHandlerProtocol::ClientToServerMessage::ClientToServerMessage() diff --git a/util/linux/exception_handler_protocol.h b/util/linux/exception_handler_protocol.h index 7312b9d1..60b0b1b7 100644 --- a/util/linux/exception_handler_protocol.h +++ b/util/linux/exception_handler_protocol.h @@ -52,7 +52,7 @@ class ExceptionHandlerProtocol { //! SanitizationInformation struct, or 0 if there is no such struct. VMAddress sanitization_information_address; -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) //! \brief Indicates that the client is likely in a crash loop if a crash //! occurs before this timestamp. This value is only used by ChromeOS's //! `/sbin/crash_reporter`. diff --git a/util/misc/address_types.h b/util/misc/address_types.h index b3c69c09..14942bd8 100644 --- a/util/misc/address_types.h +++ b/util/misc/address_types.h @@ -25,7 +25,7 @@ #include #elif defined(OS_WIN) #include "util/win/address_types.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "util/linux/address_types.h" #elif defined(OS_FUCHSIA) #include @@ -55,7 +55,7 @@ using VMSize = mach_vm_size_t; using VMAddress = WinVMAddress; using VMSize = WinVMSize; -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) using VMAddress = LinuxVMAddress; using VMSize = LinuxVMSize; diff --git a/util/misc/capture_context.h b/util/misc/capture_context.h index eda4efac..d21a24f1 100644 --- a/util/misc/capture_context.h +++ b/util/misc/capture_context.h @@ -21,7 +21,7 @@ #include #elif defined(OS_WIN) #include -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include #elif defined(OS_FUCHSIA) #include @@ -37,7 +37,8 @@ using NativeCPUContext = arm_unified_thread_state; #endif #elif defined(OS_WIN) using NativeCPUContext = CONTEXT; -#elif defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FUCHSIA) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) || \ + defined(OS_FUCHSIA) using NativeCPUContext = ucontext_t; #endif // OS_APPLE diff --git a/util/misc/metrics.cc b/util/misc/metrics.cc index be75a720..4b87f107 100644 --- a/util/misc/metrics.cc +++ b/util/misc/metrics.cc @@ -25,7 +25,7 @@ #define METRICS_OS_NAME "Win" #elif defined(OS_ANDROID) #define METRICS_OS_NAME "Android" -#elif defined(OS_LINUX) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) #define METRICS_OS_NAME "Linux" #elif defined(OS_FUCHSIA) #define METRICS_OS_NAME "Fuchsia" diff --git a/util/misc/time.h b/util/misc/time.h index dffe1a8a..dc992bdc 100644 --- a/util/misc/time.h +++ b/util/misc/time.h @@ -69,13 +69,13 @@ void GetTimeOfDay(timeval* tv); #endif // OS_WIN -#if defined(OS_LINUX) || defined(OS_ANDROID) || DOXYGEN +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) || DOXYGEN //! \brief Get the kernel boot time. Subsequent calls to this function may //! return different results due to the system clock being changed or //! imprecision in measuring the boot time. //! \return `true` on success. Otherwise, `false` with a message logged. bool GetBootTime(timespec* ts); -#endif // OS_LINUX || OS_ANDROID || DOXYGEN +#endif // OS_LINUX || OS_CHROMEOS || OS_ANDROID || DOXYGEN } // namespace crashpad diff --git a/util/misc/uuid.cc b/util/misc/uuid.cc index e444a07f..681a2353 100644 --- a/util/misc/uuid.cc +++ b/util/misc/uuid.cc @@ -93,8 +93,8 @@ bool UUID::InitializeWithNew() { uuid_generate(uuid); InitializeFromBytes(uuid); return true; -#elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) || \ - defined(OS_FUCHSIA) +#elif defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || \ + defined(OS_ANDROID) || defined(OS_FUCHSIA) // Linux, Android, and Fuchsia do not provide a UUID generator in a // widely-available system library. On Linux and Android, uuid_generate() // from libuuid is not available everywhere. diff --git a/util/net/http_transport_socket.cc b/util/net/http_transport_socket.cc index b9c6c9c5..0451d2cd 100644 --- a/util/net/http_transport_socket.cc +++ b/util/net/http_transport_socket.cc @@ -123,7 +123,7 @@ class SSLStream : public Stream { return false; } } else { -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) if (SSL_CTX_load_verify_locations( ctx_.get(), nullptr, "/etc/ssl/certs") <= 0) { LOG(ERROR) << "SSL_CTX_load_verify_locations"; diff --git a/util/numeric/checked_address_range.cc b/util/numeric/checked_address_range.cc index 18d75685..4ba7ff39 100644 --- a/util/numeric/checked_address_range.cc +++ b/util/numeric/checked_address_range.cc @@ -22,7 +22,7 @@ #include #elif defined(OS_WIN) #include "util/win/address_types.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "util/linux/address_types.h" #elif defined(OS_FUCHSIA) #include @@ -130,7 +130,7 @@ std::string CheckedAddressRangeGeneric::AsString() const { template class CheckedAddressRangeGeneric; #elif defined(OS_WIN) template class CheckedAddressRangeGeneric; -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) template class CheckedAddressRangeGeneric; #elif defined(OS_FUCHSIA) template class CheckedAddressRangeGeneric; diff --git a/util/posix/close_multiple.cc b/util/posix/close_multiple.cc index 4f24df1c..0c078329 100644 --- a/util/posix/close_multiple.cc +++ b/util/posix/close_multiple.cc @@ -74,7 +74,7 @@ void CloseNowOrOnExec(int fd, bool ebadf_ok) { bool CloseMultipleNowOrOnExecUsingFDDir(int min_fd, int preserve_fd) { #if defined(OS_APPLE) static constexpr char kFDDir[] = "/dev/fd"; -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) static constexpr char kFDDir[] = "/proc/self/fd"; #endif @@ -135,7 +135,8 @@ void CloseMultipleNowOrOnExec(int fd, int preserve_fd) { max_fd = std::max(max_fd, getdtablesize()); #endif -#if !(defined(OS_LINUX) || defined(OS_ANDROID)) || defined(OPEN_MAX) +#if !(defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID)) || \ + defined(OPEN_MAX) // Linux does not provide OPEN_MAX. See // https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/include/linux/limits.h?id=77293034696e3e0b6c8b8fc1f96be091104b3d2b. max_fd = std::max(max_fd, OPEN_MAX); @@ -162,7 +163,7 @@ void CloseMultipleNowOrOnExec(int fd, int preserve_fd) { } else { PLOG(WARNING) << "sysctl"; } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) // See linux-4.4.27/fs/file.c sysctl_nr_open, referenced by kernel/sys.c // do_prlimit() and kernel/sysctl.c fs_table. Inability to open this file is // not considered an error, because /proc may not be available or usable. diff --git a/util/posix/drop_privileges.cc b/util/posix/drop_privileges.cc index 7c1fe84e..75650d5a 100644 --- a/util/posix/drop_privileges.cc +++ b/util/posix/drop_privileges.cc @@ -73,7 +73,7 @@ void DropPrivileges() { CHECK_EQ(setegid(egid), -1); } } -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) PCHECK(setresgid(gid, gid, gid) == 0) << "setresgid"; PCHECK(setresuid(uid, uid, uid) == 0) << "setresuid"; diff --git a/util/posix/process_info.h b/util/posix/process_info.h index 439284fa..d144c04b 100644 --- a/util/posix/process_info.h +++ b/util/posix/process_info.h @@ -33,7 +33,7 @@ #include #endif -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "util/linux/ptrace_connection.h" #endif @@ -44,7 +44,7 @@ class ProcessInfo { ProcessInfo(); ~ProcessInfo(); -#if defined(OS_LINUX) || defined(OS_ANDROID) || DOXYGEN +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) || DOXYGEN //! \brief Initializes this object with information about the process whose ID //! is \a pid using a PtraceConnection \a connection. //! @@ -59,7 +59,7 @@ class ProcessInfo { //! //! \return `true` on success, `false` on failure with a message logged. bool InitializeWithPtrace(PtraceConnection* connection); -#endif // OS_LINUX || OS_ANDROID || DOXYGEN +#endif // OS_LINUX || OS_CHROMEOS || OS_ANDROID || DOXYGEN #if defined(OS_APPLE) || DOXYGEN //! \brief Initializes this object with information about the process whose ID @@ -168,7 +168,7 @@ class ProcessInfo { private: #if defined(OS_APPLE) kinfo_proc kern_proc_info_; -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) // Some members are marked mutable so that they can be lazily initialized by // const methods. These are always InitializationState-protected so that // multiple successive calls will always produce the same return value and out diff --git a/util/posix/process_info_test.cc b/util/posix/process_info_test.cc index 56ee356b..78061847 100644 --- a/util/posix/process_info_test.cc +++ b/util/posix/process_info_test.cc @@ -33,7 +33,7 @@ #include "util/misc/implicit_cast.h" #include "util/string/split_string.h" -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "util/linux/direct_ptrace_connection.h" #include "test/linux/fake_ptrace_connection.h" #endif @@ -98,7 +98,7 @@ void TestProcessSelfOrClone(const ProcessInfo& process_info) { const std::vector& expect_argv = GetMainArguments(); -#if defined(OS_ANDROID) || defined(OS_LINUX) +#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS) // Prior to Linux 4.2, the kernel only allowed reading a single page from // /proc//cmdline, causing any further arguments to be truncated. Disable // testing arguments in this case. @@ -124,7 +124,7 @@ void TestProcessSelfOrClone(const ProcessInfo& process_info) { argv_size > static_cast(getpagesize())) { return; } -#endif // OS_ANDROID || OS_LINUX +#endif // OS_ANDROID || OS_LINUX || OS_CHROMEOS std::vector argv; ASSERT_TRUE(process_info.Arguments(&argv)); @@ -161,13 +161,13 @@ void TestSelfProcess(const ProcessInfo& process_info) { TEST(ProcessInfo, Self) { ProcessInfo process_info; -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) FakePtraceConnection connection; ASSERT_TRUE(connection.Initialize(getpid())); ASSERT_TRUE(process_info.InitializeWithPtrace(&connection)); #else ASSERT_TRUE(process_info.InitializeWithPid(getpid())); -#endif // OS_LINUX || OS_ANDROID +#endif // OS_LINUX || OS_ANDROID || OS_CHROMEOS TestSelfProcess(process_info); } @@ -184,7 +184,7 @@ TEST(ProcessInfo, Pid1) { // PID 1 is expected to be init or the system’s equivalent. This tests reading // information about another process. ProcessInfo process_info; -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) FakePtraceConnection connection; ASSERT_TRUE(connection.Initialize(1)); ASSERT_TRUE(process_info.InitializeWithPtrace(&connection)); @@ -212,7 +212,7 @@ class ProcessInfoForkedTest : public Multiprocess { void MultiprocessParent() override { const pid_t pid = ChildPID(); -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) DirectPtraceConnection connection; ASSERT_TRUE(connection.Initialize(pid)); @@ -221,7 +221,7 @@ class ProcessInfoForkedTest : public Multiprocess { #else ProcessInfo process_info; ASSERT_TRUE(process_info.InitializeWithPid(pid)); -#endif // OS_LINUX || OS_ANDROID +#endif // OS_LINUX || OS_CHROMEOS || OS_ANDROID EXPECT_EQ(process_info.ProcessID(), pid); EXPECT_EQ(process_info.ParentProcessID(), getpid()); diff --git a/util/posix/signals.cc b/util/posix/signals.cc index 252aff7e..e6432dd7 100644 --- a/util/posix/signals.cc +++ b/util/posix/signals.cc @@ -46,10 +46,10 @@ constexpr int kCrashSignals[] = { #if defined(SIGEMT) SIGEMT, #endif // defined(SIGEMT) -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) SIGXCPU, SIGXFSZ, -#endif // defined(OS_LINUX) +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) }; // These are the non-core-generating but terminating signals. @@ -86,9 +86,9 @@ constexpr int kTerminateSignals[] = { SIGXCPU, SIGXFSZ, #endif // defined(OS_APPLE) -#if defined(OS_LINUX) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) SIGIO, -#endif // defined(OS_LINUX) +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) }; bool InstallHandlers(const std::vector& signals, diff --git a/util/posix/symbolic_constants_posix.cc b/util/posix/symbolic_constants_posix.cc index 13bd7f96..c6e0fec7 100644 --- a/util/posix/symbolic_constants_posix.cc +++ b/util/posix/symbolic_constants_posix.cc @@ -64,7 +64,7 @@ constexpr const char* kSignalNames[] = { "INFO", "USR1", "USR2", -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #if defined(ARCH_CPU_MIPS_FAMILY) "HUP", "INT", @@ -135,7 +135,7 @@ constexpr const char* kSignalNames[] = { #endif // defined(ARCH_CPU_MIPS_FAMILY) #endif }; -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) // NSIG is 64 to account for real-time signals. static_assert(base::size(kSignalNames) == 32, "kSignalNames length"); #else diff --git a/util/posix/symbolic_constants_posix_test.cc b/util/posix/symbolic_constants_posix_test.cc index 266b0571..74d5b545 100644 --- a/util/posix/symbolic_constants_posix_test.cc +++ b/util/posix/symbolic_constants_posix_test.cc @@ -66,7 +66,7 @@ constexpr struct { #if defined(OS_APPLE) {SIGEMT, "SIGEMT", "EMT"}, {SIGINFO, "SIGINFO", "INFO"}, -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) {SIGPWR, "SIGPWR", "PWR"}, #if !defined(ARCH_CPU_MIPS_FAMILY) {SIGSTKFLT, "SIGSTKFLT", "STKFLT"}, @@ -123,7 +123,7 @@ TEST(SymbolicConstantsPOSIX, SignalToString) { kSignalTestData[index].short_name); } -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) // NSIG is 64 to account for real-time signals. constexpr int kSignalCount = 32; #else diff --git a/util/process/process_memory_native.h b/util/process/process_memory_native.h index e486c1c7..5a792d76 100644 --- a/util/process/process_memory_native.h +++ b/util/process/process_memory_native.h @@ -16,7 +16,7 @@ #if defined(OS_FUCHSIA) #include "util/process/process_memory_fuchsia.h" -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) #include "util/process/process_memory_linux.h" #elif defined(OS_WIN) #include "util/process/process_memory_win.h" @@ -29,7 +29,7 @@ namespace crashpad { #if defined(OS_FUCHSIA) || DOXYGEN //! \brief Alias for platform-specific native implementation of ProcessMemory. using ProcessMemoryNative = ProcessMemoryFuchsia; -#elif defined(OS_LINUX) || defined(OS_ANDROID) +#elif defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) using ProcessMemoryNative = ProcessMemoryLinux; #elif defined(OS_WIN) using ProcessMemoryNative = ProcessMemoryWin;