blob: b001b685bc5d5e3e72acb37a21a39fccc162f7f6 [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(zx.handle:EXCEPTION exception, ExceptionInfo info) -> ();
};
/// Basic exception information associated with a particular exception.
/// Maps to `zx_exception_info_t`.
// TODO(fxbug.dev/7755): 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.
/// Both |process| and |thread| will be valid if present.
resource table ProcessException {
/// `exception` is guaranteed to be valid.
1: zx.handle:EXCEPTION exception;
2: ExceptionInfo info;
/// Both `process` and `thread` will be valid if present.
3: zx.handle:PROCESS process;
/// The thread that generated the exception.
/// The process may have other threads that are not reflected here.
4: zx.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(fxbug.dev/7802): 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;
};