blob: 678e94ad4c7365e32b403c2993227d2b63dc173a [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.
library fuchsia.exception;
using zx;
/// Protocol meant for clients interested in handling exceptions for a
/// particular service.
[Discoverable]
protocol Handler {
/// This exception mirrors closely the information provided by exception
/// channels. The design is to have clients of this API behave as closely as
/// possible to native exception handlers that are listening to an exception
/// channel.
///
/// `exception` is an exception handle, which controls the exception's
/// lifetime. See exception zircon docs for more information.
///
/// `info` represents basic exception information as provided by the
/// exception channel.
OnException(handle<exception> exception, ExceptionInfo info) -> ();
};
/// Basic exception information associated with a particular exception.
/// Maps to `zx_exception_info_t`.
// TODO(FIDL-431): Currently there is no good support for tables within the
// llcpp bindings, which would make this API very cumbersome to
// use. When better support lands, move this to a table.
struct ExceptionInfo {
// Process ID or pid.
zx.koid process_koid;
// Thread ID or tid.
zx.koid thread_koid;
ExceptionType type;
};
/// Generic wrapper over a thread exception. Mirrors closely the information
/// given by an exception channel.
table ProcessException {
// |exception| is guaranteed to be valid.
1: handle<exception> exception;
2: ExceptionInfo info;
// Both |process| and |thread| will be valid if present.
3: handle<process> process;
// The thread that generated the exception.
// The process may have other threads that are not reflected here.
4: handle<thread> thread;
};
/// What type of exception was triggered.
/// Maps to the types defined in `zx_excp_type_t`.
/// If zircon/syscalls/exception.h changes, this needs to be updates as well to
/// reflect that.
// TODO(FIDL-478): Once there is a way to better generate zx bindings, move this
// definitions to a common library.
enum ExceptionType : uint32 {
GENERAL = 0x8;
FATAL_PAGE_FAULT = 0x108;
UNDEFINED_INSTRUCTION = 0x208;
SW_BREAKPOINT = 0x308;
HW_BREAKPOINT = 0x408;
UNALIGNED_ACCESS = 0x508;
THREAD_STARTING = 0x8008;
THREAD_EXITING = 0x8108;
POLICY_ERROR = 0x8208;
PROCESS_STARTING = 0x8308;
};