Files
sdk/runtime/vm/stub_code_list.h
T
Martin Kustermann cd104aef6f [vm] Fix deoptimization environment of AssertAssignable
The deoptimization environment of AssertAssignable should not have it's
inputs in it, since those get poped before the call to the
TypeTestingStub.

A lazy deopt should therefore continue in unoptimized code after the TTS
call, without the inputs.

This was discovered by running many lightweight isolates concurrently on
the JIT.

To simplify a regression test we'll add new VM flags that can trigger
deoptimization on any runtime call (optionally filtered by name of
runtime call).

We can use this mechanism to possibly discover more bugs of the same
kind.

Closes https://github.com/dart-lang/sdk/issues/45207
Issue https://github.com/dart-lang/sdk/issues/36097

TEST=runtime/tests/vm/dart{,_2}/regress_45207_test

Change-Id: Ib713fa8be5914eaf4c7395d2e1d8dd88714f1ce2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/189202
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2021-03-09 11:27:00 +00:00

138 lines
10 KiB
C++

// Copyright (c) 2019, 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_STUB_CODE_LIST_H_
#define RUNTIME_VM_STUB_CODE_LIST_H_
namespace dart {
#define VM_TYPE_TESTING_STUB_CODE_LIST(V) \
V(DefaultTypeTest) \
V(DefaultNullableTypeTest) \
V(TopTypeTypeTest) \
V(UnreachableTypeTest) \
V(TypeParameterTypeTest) \
V(NullableTypeParameterTypeTest) \
V(SlowTypeTest) \
V(LazySpecializeTypeTest) \
V(LazySpecializeNullableTypeTest)
// List of stubs created in the VM isolate, these stubs are shared by different
// isolates running in this dart process.
#define VM_STUB_CODE_LIST(V) \
V(GetCStackPointer) \
V(JumpToFrame) \
V(RunExceptionHandler) \
V(DeoptForRewind) \
V(WriteBarrier) \
V(WriteBarrierWrappers) \
V(ArrayWriteBarrier) \
V(AllocateArray) \
V(AllocateInt8Array) \
V(AllocateUint8Array) \
V(AllocateUint8ClampedArray) \
V(AllocateInt16Array) \
V(AllocateUint16Array) \
V(AllocateInt32Array) \
V(AllocateUint32Array) \
V(AllocateInt64Array) \
V(AllocateUint64Array) \
V(AllocateFloat32Array) \
V(AllocateFloat64Array) \
V(AllocateFloat32x4Array) \
V(AllocateInt32x4Array) \
V(AllocateFloat64x2Array) \
V(AllocateMintSharedWithFPURegs) \
V(AllocateMintSharedWithoutFPURegs) \
V(AllocateContext) \
V(AllocateObject) \
V(AllocateObjectParameterized) \
V(AllocateObjectSlow) \
V(AllocateUnhandledException) \
V(CloneContext) \
V(CallToRuntime) \
V(LazyCompile) \
V(CallBootstrapNative) \
V(CallNoScopeNative) \
V(CallAutoScopeNative) \
V(FixCallersTarget) \
V(CallStaticFunction) \
V(OptimizeFunction) \
V(InvokeDartCode) \
V(DebugStepCheck) \
V(SwitchableCallMiss) \
V(MonomorphicSmiableCheck) \
V(SingleTargetCall) \
V(ICCallThroughCode) \
V(MegamorphicCall) \
V(FixAllocationStubTarget) \
V(Deoptimize) \
V(DeoptimizeLazyFromReturn) \
V(DeoptimizeLazyFromThrow) \
V(UnoptimizedIdenticalWithNumberCheck) \
V(OptimizedIdenticalWithNumberCheck) \
V(ICCallBreakpoint) \
V(UnoptStaticCallBreakpoint) \
V(RuntimeCallBreakpoint) \
V(OneArgCheckInlineCache) \
V(TwoArgsCheckInlineCache) \
V(SmiAddInlineCache) \
V(SmiLessInlineCache) \
V(SmiEqualInlineCache) \
V(OneArgOptimizedCheckInlineCache) \
V(TwoArgsOptimizedCheckInlineCache) \
V(ZeroArgsUnoptimizedStaticCall) \
V(OneArgUnoptimizedStaticCall) \
V(TwoArgsUnoptimizedStaticCall) \
V(AssertSubtype) \
V(AssertAssignable) \
V(TypeIsTopTypeForSubtyping) \
V(TypeIsTopTypeForSubtypingNullSafe) \
V(NullIsAssignableToType) \
V(NullIsAssignableToTypeNullSafe) \
V(Subtype1TestCache) \
V(Subtype3TestCache) \
V(Subtype5TestCache) \
V(Subtype7TestCache) \
VM_TYPE_TESTING_STUB_CODE_LIST(V) \
V(CallClosureNoSuchMethod) \
V(FrameAwaitingMaterialization) \
V(AsynchronousGapMarker) \
V(NotLoaded) \
V(DispatchTableNullError) \
V(LateInitializationErrorSharedWithFPURegs) \
V(LateInitializationErrorSharedWithoutFPURegs) \
V(NullErrorSharedWithFPURegs) \
V(NullErrorSharedWithoutFPURegs) \
V(NullArgErrorSharedWithFPURegs) \
V(NullArgErrorSharedWithoutFPURegs) \
V(NullCastErrorSharedWithFPURegs) \
V(NullCastErrorSharedWithoutFPURegs) \
V(RangeErrorSharedWithFPURegs) \
V(RangeErrorSharedWithoutFPURegs) \
V(StackOverflowSharedWithFPURegs) \
V(StackOverflowSharedWithoutFPURegs) \
V(OneArgCheckInlineCacheWithExactnessCheck) \
V(OneArgOptimizedCheckInlineCacheWithExactnessCheck) \
V(EnterSafepoint) \
V(ExitSafepoint) \
V(CallNativeThroughSafepoint) \
V(InitStaticField) \
V(InitInstanceField) \
V(InitLateInstanceField) \
V(InitLateFinalInstanceField) \
V(Throw) \
V(ReThrow) \
V(AssertBoolean) \
V(InstanceOf) \
V(InstantiateTypeArguments) \
V(InstantiateTypeArgumentsMayShareInstantiatorTA) \
V(InstantiateTypeArgumentsMayShareFunctionTA) \
V(NoSuchMethodDispatcher) \
V(UnknownDartCode)
} // namespace dart
#endif // RUNTIME_VM_STUB_CODE_LIST_H_