blob: 5fadc523c508e19425accc58099836d9a94ac8f7 [file] [log] [blame]
// Copyright 2020 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 SYSROOT_ZIRCON_BOOT_CRASH_REASON_H_
#define SYSROOT_ZIRCON_BOOT_CRASH_REASON_H_
#include <stdint.h>
#include <zircon/compiler.h>
// 0 is reserved for "Invalid". It will never be used by a functioning
// crash-logger.
#define ZIRCON_CRASH_REASON_INVALID ((uint32_t)0)
// "Unknown" indicates that the system does not know the reason for a recent
// crash. The primary use of this reason is to be something which can be left
// in the crashlog in case the system spontaneously reboots without a chance to
// gracefully finalize the log, perhaps because of something like a hardware
// watchdog timer.
#define ZIRCON_CRASH_REASON_UNKNOWN ((uint32_t)1)
// "No Crash" indicates that the system deliberately rebooted in an
// orderly fashion. No crash occurred.
#define ZIRCON_CRASH_REASON_NO_CRASH ((uint32_t)2)
// "OOM" indicates a crash triggered by the system because of an unrecoverable
// out-of-memory situation.
#define ZIRCON_CRASH_REASON_OOM ((uint32_t)3)
// "Panic" indicates a crash triggered by the system because of an unrecoverable
// kernel panic situation.
#define ZIRCON_CRASH_REASON_PANIC ((uint32_t)4)
// "Software watchdog" indicates a crash triggered by a kernel level software
// watchdog construct. Note that this is distinct from a hardware based WDT.
// If the system reboots because of a hardware watchdog, it will have no chance
// to record the reboot reason, and the crashlog will indicate "unknown". The
// HW reboot reason may be known, but only if the bootloader reports it to us.
#define ZIRCON_CRASH_REASON_SOFTWARE_WATCHDOG ((uint32_t)5)
// "Userspace root job termination" indicates a crash triggered by the system
// because it detected the termination of the userspace root job, most likely
// because one its critical processes crashed.
#define ZIRCON_CRASH_REASON_USERSPACE_ROOT_JOB_TERMINATION ((uint32_t)6)
#ifndef __ASSEMBLER__
#if !__cplusplus
typedef uint32_t zircon_crash_reason_t;
#else // !__cplusplus
enum class ZirconCrashReason : uint32_t {
Invalid = ZIRCON_CRASH_REASON_INVALID,
Unknown = ZIRCON_CRASH_REASON_UNKNOWN,
NoCrash = ZIRCON_CRASH_REASON_NO_CRASH,
Oom = ZIRCON_CRASH_REASON_OOM,
Panic = ZIRCON_CRASH_REASON_PANIC,
SoftwareWatchdog = ZIRCON_CRASH_REASON_SOFTWARE_WATCHDOG,
UserspaceRootJobTermination = ZIRCON_CRASH_REASON_USERSPACE_ROOT_JOB_TERMINATION,
};
// Using alias to maintain compatibility with APIs meant to be used by both C and C++.
using zircon_crash_reason_t = ZirconCrashReason;
#endif // !__cplusplus
#endif // __ASSEMBLER__
#endif // SYSROOT_ZIRCON_BOOT_CRASH_REASON_H_