4343import org .graalvm .word .Pointer ;
4444import org .graalvm .word .WordBase ;
4545
46+ import com .oracle .graal .pointsto .meta .AnalysisMetaAccess ;
4647import com .oracle .graal .pointsto .meta .AnalysisMethod ;
48+ import com .oracle .graal .pointsto .meta .AnalysisType ;
4749import com .oracle .svm .core .InvalidMethodPointerHandler ;
4850import com .oracle .svm .core .ParsingReason ;
4951import com .oracle .svm .core .Uninterruptible ;
5456import com .oracle .svm .core .interpreter .InterpreterSupport ;
5557import com .oracle .svm .core .meta .MethodPointer ;
5658import com .oracle .svm .core .util .VMError ;
59+ import com .oracle .svm .espresso .shared .meta .SignaturePolymorphicIntrinsic ;
5760import com .oracle .svm .hosted .FeatureImpl ;
5861import com .oracle .svm .hosted .code .SubstrateCompilationDirectives ;
5962import com .oracle .svm .hosted .meta .HostedMethod ;
6063import com .oracle .svm .interpreter .debug .DebuggerEventsFeature ;
64+ import com .oracle .svm .interpreter .metadata .InterpreterResolvedJavaMethod ;
65+ import com .oracle .svm .util .JVMCIReflectionUtil ;
6166import com .oracle .svm .util .ReflectionUtil ;
6267
6368import jdk .graal .compiler .api .replacements .Fold ;
@@ -198,15 +203,21 @@ public void beforeAnalysis(BeforeAnalysisAccess access) {
198203 FeatureImpl .BeforeAnalysisAccessImpl accessImpl = (FeatureImpl .BeforeAnalysisAccessImpl ) access ;
199204
200205 BuildTimeInterpreterUniverse .freshSingletonInstance ();
201- AnalysisMethod interpreterRoot = accessImpl .getMetaAccess ().lookupJavaType (Interpreter .Root .class ).getDeclaredMethods (false )[0 ];
206+ AnalysisMetaAccess metaAccess = accessImpl .getMetaAccess ();
207+
208+ AnalysisType interpreterRootType = metaAccess .lookupJavaType (Interpreter .Root .class );
209+ AnalysisMethod interpreterRoot = (AnalysisMethod ) JVMCIReflectionUtil .getDeclaredMethod (metaAccess , interpreterRootType , "executeBodyFromBCI" ,
210+ InterpreterFrame .class , InterpreterResolvedJavaMethod .class , int .class , int .class , boolean .class );
202211
203212 LocalVariableTable interpreterVariableTable = interpreterRoot .getLocalVariableTable ();
204213 int interpreterMethodSlot = findLocalSlotByName ("method" , interpreterVariableTable .getLocalsAt (0 )); // parameter
205214 int interpreterFrameSlot = findLocalSlotByName ("frame" , interpreterVariableTable .getLocalsAt (0 )); // parameter
206215 // Local variable, search all locals.
207216 int bciSlot = findLocalSlotByName ("curBCI" , interpreterVariableTable .getLocals ());
208217
209- AnalysisMethod intrinsicRoot = accessImpl .getMetaAccess ().lookupJavaType (Interpreter .IntrinsicRoot .class ).getDeclaredMethods (false )[0 ];
218+ AnalysisType intrinsicRootType = metaAccess .lookupJavaType (Interpreter .IntrinsicRoot .class );
219+ AnalysisMethod intrinsicRoot = (AnalysisMethod ) JVMCIReflectionUtil .getDeclaredMethod (metaAccess , intrinsicRootType , "execute" ,
220+ InterpreterFrame .class , InterpreterResolvedJavaMethod .class , SignaturePolymorphicIntrinsic .class , boolean .class );
210221
211222 LocalVariableTable intrinsicVariableTable = intrinsicRoot .getLocalVariableTable ();
212223 int intrinsicMethodSlot = findLocalSlotByName ("method" , intrinsicVariableTable .getLocalsAt (0 )); // parameter
@@ -222,7 +233,7 @@ public void beforeAnalysis(BeforeAnalysisAccess access) {
222233 SubstrateCompilationDirectives .singleton ().registerFrameInformationRequired (intrinsicRoot );
223234
224235 Method leaveMethod = ReflectionUtil .lookupMethod (InterpreterStubSection .class , "leaveInterpreterStub" , CFunctionPointer .class , Pointer .class , long .class , long .class );
225- leaveStub = accessImpl . getMetaAccess () .lookupJavaMethod (leaveMethod );
236+ leaveStub = metaAccess .lookupJavaMethod (leaveMethod );
226237 accessImpl .registerAsRoot (leaveStub , true , "low level entry point" );
227238 }
228239
0 commit comments