56819231be
With b32e5e5a91 under --experimental_shared_data flag, `LoadStaticField` calls initializer stub to confirm presence of isolate when accessing non-shared static fields. This breaks the role that `calls_initializer` attribute/parameter used to play where it was specifically describing neccessity to call initializer, which is important in how `LoadStaticField` instruction is used in static field setters - it should not attempt to call initialzer.
This CL fixes the problem by renaming current `calls_initializer` `LoadStaticFieldInstr` attribute to `does_slow_checks`, and "adding" separate `calls_initializer` parameter to the instruction to signify specifically whether initializer has to be called.
TEST=ci
Change-Id: Ib81424864c98d889fb6dbb9dd15dac9a39c530f8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/429062
Reviewed-by: Slava Egorov <vegorov@google.com>
200 lines
14 KiB
C++
200 lines
14 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)
|
|
|
|
#if (defined(DART_TARGET_OS_LINUX) || defined(DART_TARGET_OS_ANDROID)) && \
|
|
(defined(TARGET_ARCH_X64) || defined(TARGET_ARCH_ARM64))
|
|
// Currently we support probe points only Linux and Android (X64 and ARM64).
|
|
#define DART_TARGET_SUPPORTS_PROBE_POINTS 1
|
|
#endif
|
|
|
|
#define PROBE_POINT_STUBS_LIST(V) V(AllocationProbePoint)
|
|
|
|
// 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(RunExceptionHandlerUnbox) \
|
|
V(DeoptForRewind) \
|
|
V(WriteBarrier) \
|
|
V(WriteBarrierWrappers) \
|
|
V(ArrayWriteBarrier) \
|
|
PROBE_POINT_STUBS_LIST(V) \
|
|
V(AllocateArray) \
|
|
V(AllocateMint) \
|
|
V(AllocateDouble) \
|
|
V(AllocateFloat32x4) \
|
|
V(AllocateFloat64x2) \
|
|
V(AllocateInt32x4) \
|
|
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(AllocateClosure) \
|
|
V(AllocateClosureGeneric) \
|
|
V(AllocateClosureTA) \
|
|
V(AllocateClosureTAGeneric) \
|
|
V(AllocateContext) \
|
|
V(AllocateGrowableArray) \
|
|
V(AllocateObject) \
|
|
V(AllocateObjectParameterized) \
|
|
V(AllocateObjectSlow) \
|
|
V(AllocateRecord) \
|
|
V(AllocateRecord2) \
|
|
V(AllocateRecord2Named) \
|
|
V(AllocateRecord3) \
|
|
V(AllocateRecord3Named) \
|
|
V(AllocateUnhandledException) \
|
|
V(BoxDouble) \
|
|
V(BoxFloat32x4) \
|
|
V(BoxFloat64x2) \
|
|
V(CloneContext) \
|
|
V(CallToRuntime) \
|
|
V(LazyCompile) \
|
|
V(InterpretCall) \
|
|
V(ResumeInterpreter) \
|
|
V(CallBootstrapNative) \
|
|
V(CallNoScopeNative) \
|
|
V(CallAutoScopeNative) \
|
|
V(FixCallersTarget) \
|
|
V(CallStaticFunction) \
|
|
V(OptimizeFunction) \
|
|
V(InvokeDartCode) \
|
|
V(InvokeDartCodeFromBytecode) \
|
|
V(DebugStepCheck) \
|
|
V(SwitchableCallMiss) \
|
|
V(MonomorphicSmiableCheck) \
|
|
V(SingleTargetCall) \
|
|
V(ICCallThroughCode) \
|
|
V(MegamorphicCall) \
|
|
V(FixAllocationStubTarget) \
|
|
V(FixParameterizedAllocationStubTarget) \
|
|
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(NullIsAssignableToType) \
|
|
V(Subtype1TestCache) \
|
|
V(Subtype2TestCache) \
|
|
V(Subtype3TestCache) \
|
|
V(Subtype4TestCache) \
|
|
V(Subtype6TestCache) \
|
|
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(WriteErrorSharedWithFPURegs) \
|
|
V(WriteErrorSharedWithoutFPURegs) \
|
|
V(FieldAccessErrorSharedWithFPURegs) \
|
|
V(FieldAccessErrorSharedWithoutFPURegs) \
|
|
V(StackOverflowSharedWithFPURegs) \
|
|
V(StackOverflowSharedWithoutFPURegs) \
|
|
V(DoubleToInteger) \
|
|
V(OneArgCheckInlineCacheWithExactnessCheck) \
|
|
V(OneArgOptimizedCheckInlineCacheWithExactnessCheck) \
|
|
V(EnterSafepoint) \
|
|
V(ExitSafepoint) \
|
|
V(CallNativeThroughSafepoint) \
|
|
V(FfiCallbackTrampoline) \
|
|
V(InitStaticField) \
|
|
V(InitLateStaticField) \
|
|
V(InitLateFinalStaticField) \
|
|
V(InitInstanceField) \
|
|
V(InitLateInstanceField) \
|
|
V(InitLateFinalInstanceField) \
|
|
V(InitSharedLateStaticField) \
|
|
V(InitSharedLateFinalStaticField) \
|
|
V(Throw) \
|
|
V(ReThrow) \
|
|
V(InstanceOf) \
|
|
V(InstantiateType) \
|
|
V(InstantiateTypeNonNullableClassTypeParameter) \
|
|
V(InstantiateTypeNullableClassTypeParameter) \
|
|
V(InstantiateTypeNonNullableFunctionTypeParameter) \
|
|
V(InstantiateTypeNullableFunctionTypeParameter) \
|
|
V(InstantiateTypeArguments) \
|
|
V(InstantiateTypeArgumentsMayShareInstantiatorTA) \
|
|
V(InstantiateTypeArgumentsMayShareFunctionTA) \
|
|
V(NoSuchMethodDispatcher) \
|
|
V(Await) \
|
|
V(AwaitWithTypeCheck) \
|
|
V(InitAsync) \
|
|
V(Resume) \
|
|
V(ReturnAsync) \
|
|
V(ReturnAsyncNotFuture) \
|
|
V(InitAsyncStar) \
|
|
V(YieldAsyncStar) \
|
|
V(ReturnAsyncStar) \
|
|
V(InitSyncStar) \
|
|
V(SuspendSyncStarAtStart) \
|
|
V(SuspendSyncStarAtYield) \
|
|
V(AsyncExceptionHandler) \
|
|
V(CloneSuspendState) \
|
|
V(FfiAsyncCallbackSend) \
|
|
V(CheckIsolateFieldAccess) \
|
|
V(UnknownDartCode)
|
|
|
|
} // namespace dart
|
|
|
|
#endif // RUNTIME_VM_STUB_CODE_LIST_H_
|