blob: 2df65a67f42bdbb48e9bb6bfd3a963cea7481201 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
#ifndef SRC_DEVELOPER_FORENSICS_EXCEPTIONS_TESTS_CRASHER_WRAPPER_H_
#define SRC_DEVELOPER_FORENSICS_EXCEPTIONS_TESTS_CRASHER_WRAPPER_H_
#include <lib/zx/channel.h>
#include <lib/zx/exception.h>
#include <lib/zx/job.h>
#include <lib/zx/port.h>
#include <lib/zx/process.h>
#include <zircon/syscalls/exception.h>
#include <string>
namespace forensics {
namespace exceptions {
// This struct represents all the state needed to keep correct track of an exception.
// It has the owning job and process from the exception.
// The thread can be obtained from the exception if needed.
struct ExceptionContext {
zx::job job;
zx::port port;
zx::channel exception_channel;
zx::exception exception;
zx_exception_info_t exception_info;
zx::process process;
zx_koid_t process_koid;
std::string process_name;
zx::thread thread;
zx_koid_t thread_koid;
std::string thread_name;
};
// Spawns a process that will crash and waits for the exception.
// Returns |true| if the process was crashed and the exception was retrieved successfully.
bool SpawnCrasher(ExceptionContext* pe);
bool MarkExceptionAsHandled(ExceptionContext* pe);
} // namespace exceptions
} // namespace forensics
#endif // SRC_DEVELOPER_FORENSICS_EXCEPTIONS_TESTS_CRASHER_WRAPPER_H_