crashpad/util/linux/exception_handler_protocol.h
Peter Boström 1aa478d161 Remove DISALLOW_* macros in crashpad
This change was partially scripted and partially done manually with vim
regex + manually placing the deleted constructors.

The script change looked for destructors in the public: section of a
class, if that existed the deleted constructors would go before the
destructor.

For manual placement I looked for any constructor in the public: section
of the corresponding class. If there wasn't one, then it would ideally
have gone as the first entry except below enums, classes and typedefs.
This may not have been perfect, but is hopefully good enough. Fingers
crossed.

#include "base/macros.h" is removed from files that don't use
ignore_result, which is the only other thing defined in base/macros.h.

Bug: chromium:1010217
Change-Id: I099526255a40b1ac1264904b4ece2f3f503c9418
Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3171034
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Peter Boström <pbos@chromium.org>
2021-09-21 15:09:44 +00:00

136 lines
4.2 KiB
C++

// Copyright 2017 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_LINUX_EXCEPTION_HANDLER_PROTOCOL_H_
#define CRASHPAD_UTIL_LINUX_EXCEPTION_HANDLER_PROTOCOL_H_
#include <errno.h>
#include <signal.h>
#include <stdint.h>
#include <sys/types.h>
#include "build/build_config.h"
#include "util/file/file_io.h"
#include "util/misc/address_types.h"
namespace crashpad {
class ExceptionHandlerProtocol {
public:
#pragma pack(push, 1)
//! \brief The type used for error reporting.
using Errno = int32_t;
static_assert(sizeof(Errno) >= sizeof(errno), "Errno type is too small");
//! \brief A boolean status suitable for communication between processes.
enum Bool : char { kBoolFalse, kBoolTrue };
//! \brief Information about a client registered with an
//! ExceptionHandlerServer.
struct ClientInformation {
//! \brief Constructs this object.
ClientInformation();
//! \brief The address in the client's address space of an
//! ExceptionInformation struct.
VMAddress exception_information_address;
//! \brief The address in the client's address space of a
//! SanitizationInformation struct, or 0 if there is no such struct.
VMAddress sanitization_information_address;
#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`.
uint64_t crash_loop_before_time;
#endif
};
//! \brief The signal used to indicate a crash dump is complete.
//!
//! When multiple clients share a single socket connection with the handler,
//! the handler sends this signal to the dump requestor to indicate when the
//! the dump is either done or has failed and the client may continue.
static constexpr int kDumpDoneSignal = SIGCONT;
//! \brief The message passed from client to server.
struct ClientToServerMessage {
static constexpr int32_t kVersion = 1;
//! \brief Constructs this object.
ClientToServerMessage();
//! \brief Indicates what message version is being used.
int32_t version;
enum Type : uint32_t {
//! \brief Request that the server respond with its credentials.
kTypeCheckCredentials,
//! \brief Used to request a crash dump for the sending client.
kTypeCrashDumpRequest
};
Type type;
//! \brief A stack address of the thread sending the message.
VMAddress requesting_thread_stack_address;
union {
//! \brief Valid for type == kCrashDumpRequest
ClientInformation client_info;
};
};
//! \brief The message passed from server to client.
struct ServerToClientMessage {
enum Type : uint32_t {
//! \brief Used to pass credentials with `SCM_CREDENTIALS`.
kTypeCredentials,
//! \brief Indicates that the client should fork a PtraceBroker process.
kTypeForkBroker,
//! \brief Inidicates that the client should set allow the handler to
//! trace it using PR_SET_PTRACER.
kTypeSetPtracer,
//! \brief Indicates that the handler has completed a requested crash
//! dump.
kTypeCrashDumpComplete,
//! \brief Indicicates that the handler was unable to produce a crash
//! dump.
kTypeCrashDumpFailed
};
Type type;
//! \brief The handler's process ID. Valid for kTypeSetPtracer.
pid_t pid;
};
ExceptionHandlerProtocol() = delete;
ExceptionHandlerProtocol(const ExceptionHandlerProtocol&) = delete;
ExceptionHandlerProtocol& operator=(const ExceptionHandlerProtocol&) = delete;
#pragma pack(pop)
};
} // namespace crashpad
#endif // CRASHPAD_UTIL_LINUX_EXCEPTION_HANDLER_PROTOCOL_H_