blob: 70ac6c9b983a83a0c446b809f90690b758d287fe [file] [log] [blame] [edit]
// Copyright 2023 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file describes the way aborts are handled in OS::Abort and the way
// DCHECKs are working.
#ifndef V8_BASE_ABORT_MODE_H_
#define V8_BASE_ABORT_MODE_H_
#include "src/base/base-export.h"
namespace v8 {
namespace base {
enum class AbortMode {
// Used for example for fuzzing when controlled crashes are harmless, such
// as for example for the sandbox. With this:
// - DCHECKs are turned into No-ops and as such V8 is allowed to continue
// execution. This way, the fuzzer can progress past them.
// - CHECKs, FATAL, etc. are turned into regular exits, which allows fuzzers
// to ignore them, as they are harmless in this context.
// - The exit code will either be zero (signaling success) or non-zero
// (signaling failure). The former is for example used in tests in which a
// controlled crash counts as success (for example in sandbox regression
// tests), the latter is typically used for fuzzing where samples that exit
// in this way should be discarded and not mutated further.
kExitWithSuccessAndIgnoreDcheckFailures,
kExitWithFailureAndIgnoreDcheckFailures,
// DCHECKs, CHECKs, etc. use IMMEDIATE_CRASH() to signal abnormal program
// termination. See the --hard-abort flag for more details.
kImmediateCrash,
// CHECKs, DCHECKs, etc. use abort() to signal abnormal program termination.
kDefault
};
V8_BASE_EXPORT extern AbortMode g_abort_mode;
V8_INLINE bool ControlledCrashesAreHarmless() {
return g_abort_mode == AbortMode::kExitWithSuccessAndIgnoreDcheckFailures ||
g_abort_mode == AbortMode::kExitWithFailureAndIgnoreDcheckFailures;
}
V8_INLINE bool DcheckFailuresAreIgnored() {
return g_abort_mode == AbortMode::kExitWithSuccessAndIgnoreDcheckFailures ||
g_abort_mode == AbortMode::kExitWithFailureAndIgnoreDcheckFailures;
}
} // namespace base
} // namespace v8
#endif // V8_BASE_ABORT_MODE_H_