cb64a64241
When ffi code calls Dart code that requests the isolate to exit(via Isolate.exit, for example), we ensure that isolate indeed exits on return from ffi call. This is implemented by introduction of new safepoint bit which, once set, forces ExitSafepoint to propagate unwind error. TEST=isolate_exit_sandwich_test Change-Id: I2e8f5ecec7f4e59ae5f99b9525cc566f20d4b6a8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/219846 Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Aprelev <aam@google.com>
109 lines
7.6 KiB
C++
109 lines
7.6 KiB
C++
// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#ifndef RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
|
|
#define RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
|
|
|
|
namespace dart {
|
|
|
|
#define RUNTIME_ENTRY_LIST(V) \
|
|
V(AllocateArray) \
|
|
V(AllocateMint) \
|
|
V(AllocateDouble) \
|
|
V(AllocateFloat32x4) \
|
|
V(AllocateFloat64x2) \
|
|
V(AllocateInt32x4) \
|
|
V(AllocateTypedData) \
|
|
V(AllocateClosure) \
|
|
V(AllocateContext) \
|
|
V(AllocateObject) \
|
|
V(BoxDouble) \
|
|
V(BreakpointRuntimeHandler) \
|
|
V(SingleStepHandler) \
|
|
V(CloneContext) \
|
|
V(DoubleToInteger) \
|
|
V(FixCallersTarget) \
|
|
V(FixCallersTargetMonomorphic) \
|
|
V(FixAllocationStubTarget) \
|
|
V(InlineCacheMissHandlerOneArg) \
|
|
V(InlineCacheMissHandlerTwoArgs) \
|
|
V(StaticCallMissHandlerOneArg) \
|
|
V(StaticCallMissHandlerTwoArgs) \
|
|
V(Instanceof) \
|
|
V(SubtypeCheck) \
|
|
V(TypeCheck) \
|
|
V(NonBoolTypeError) \
|
|
V(InstantiateType) \
|
|
V(InstantiateTypeArguments) \
|
|
V(NoSuchMethodFromCallStub) \
|
|
V(NoSuchMethodFromPrologue) \
|
|
V(OptimizeInvokedFunction) \
|
|
V(TraceICCall) \
|
|
V(PatchStaticCall) \
|
|
V(RangeError) \
|
|
V(NullError) \
|
|
V(NullErrorWithSelector) \
|
|
V(NullCastError) \
|
|
V(ArgumentNullError) \
|
|
V(DispatchTableNullError) \
|
|
V(ArgumentError) \
|
|
V(ArgumentErrorUnboxedInt64) \
|
|
V(IntegerDivisionByZeroException) \
|
|
V(ReThrow) \
|
|
V(StackOverflow) \
|
|
V(Throw) \
|
|
V(DeoptimizeMaterialize) \
|
|
V(RewindPostDeopt) \
|
|
V(UpdateFieldCid) \
|
|
V(InitInstanceField) \
|
|
V(InitStaticField) \
|
|
V(LateFieldAssignedDuringInitializationError) \
|
|
V(LateFieldNotInitializedError) \
|
|
V(CompileFunction) \
|
|
V(SwitchableCallMiss) \
|
|
V(NotLoaded)
|
|
|
|
// Note: Leaf runtime function have C linkage, so they cannot pass C++ struct
|
|
// values like ObjectPtr.
|
|
|
|
#define LEAF_RUNTIME_ENTRY_LIST(V) \
|
|
V(intptr_t, DeoptimizeCopyFrame, uword, uword) \
|
|
V(void, DeoptimizeFillFrame, uword) \
|
|
V(void, StoreBufferBlockProcess, Thread*) \
|
|
V(void, MarkingStackBlockProcess, Thread*) \
|
|
V(void, RememberCard, uword /*ObjectPtr*/, ObjectPtr*) \
|
|
V(uword /*ObjectPtr*/, EnsureRememberedAndMarkingDeferred, \
|
|
uword /*ObjectPtr*/ object, Thread* thread) \
|
|
V(double, LibcPow, double, double) \
|
|
V(double, DartModulo, double, double) \
|
|
V(double, LibcFloor, double) \
|
|
V(double, LibcCeil, double) \
|
|
V(double, LibcTrunc, double) \
|
|
V(double, LibcRound, double) \
|
|
V(double, LibcCos, double) \
|
|
V(double, LibcSin, double) \
|
|
V(double, LibcTan, double) \
|
|
V(double, LibcAcos, double) \
|
|
V(double, LibcAsin, double) \
|
|
V(double, LibcAtan, double) \
|
|
V(double, LibcAtan2, double, double) \
|
|
V(double, LibcExp, double) \
|
|
V(double, LibcLog, double) \
|
|
V(uword /*BoolPtr*/, CaseInsensitiveCompareUCS2, uword /*StringPtr*/, \
|
|
uword /*SmiPtr*/, uword /*SmiPtr*/, uword /*SmiPtr*/) \
|
|
V(uword /*BoolPtr*/, CaseInsensitiveCompareUTF16, uword /*StringPtr*/, \
|
|
uword /*SmiPtr*/, uword /*SmiPtr*/, uword /*SmiPtr*/) \
|
|
V(void, EnterSafepoint) \
|
|
V(void, ExitSafepoint) \
|
|
V(void, ExitSafepointIgnoreUnwindInProgress) \
|
|
V(ApiLocalScope*, EnterHandleScope, Thread*) \
|
|
V(void, ExitHandleScope, Thread*) \
|
|
V(LocalHandle*, AllocateHandle, ApiLocalScope*) \
|
|
V(void, TsanLoadAcquire, uword /* address */) \
|
|
V(void, TsanStoreRelease, uword /* address */)
|
|
|
|
} // namespace dart
|
|
|
|
#endif // RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
|