|
24 | 24 | */ |
25 | 25 | package com.oracle.svm.interpreter.metadata; |
26 | 26 |
|
| 27 | +import static com.oracle.svm.espresso.classfile.Constants.ACC_CALLER_SENSITIVE; |
27 | 28 | import static com.oracle.svm.espresso.classfile.Constants.ACC_FINAL; |
28 | 29 | import static com.oracle.svm.espresso.classfile.Constants.ACC_NATIVE; |
29 | 30 | import static com.oracle.svm.espresso.classfile.Constants.ACC_SIGNATURE_POLYMORPHIC; |
|
43 | 44 | import java.util.Set; |
44 | 45 | import java.util.function.Function; |
45 | 46 |
|
| 47 | +import org.graalvm.nativeimage.AnnotationAccess; |
46 | 48 | import org.graalvm.nativeimage.Platform; |
47 | 49 | import org.graalvm.nativeimage.Platforms; |
48 | 50 |
|
|
63 | 65 | import com.oracle.svm.espresso.shared.meta.SignaturePolymorphicIntrinsic; |
64 | 66 | import com.oracle.svm.espresso.shared.vtable.PartialMethod; |
65 | 67 | import com.oracle.svm.interpreter.metadata.serialization.VisibleForSerialization; |
| 68 | +import com.oracle.svm.util.ReflectionUtil; |
66 | 69 |
|
67 | 70 | import jdk.graal.compiler.word.Word; |
68 | 71 | import jdk.vm.ci.meta.Constant; |
|
80 | 83 | * also abstract methods for vtable calls. |
81 | 84 | */ |
82 | 85 | public class InterpreterResolvedJavaMethod implements ResolvedJavaMethod, CremaMethodAccess { |
| 86 | + @Platforms(Platform.HOSTED_ONLY.class)// |
| 87 | + @SuppressWarnings("unchecked") // |
| 88 | + private static final Class<? extends Annotation> CALLER_SENSITIVE_CLASS = (Class<? extends Annotation>) ReflectionUtil.lookupClass("jdk.internal.reflect.CallerSensitive"); |
83 | 89 | /** |
84 | 90 | * This flag denotes a method that was originally native but was substituted by a non-native |
85 | 91 | * method. |
@@ -319,9 +325,16 @@ private static int createFlags(int modifiers, InterpreterResolvedObjectType decl |
319 | 325 | if (isSubstitutedNative) { |
320 | 326 | newModifiers |= ACC_SUBSTITUTED_NATIVE; |
321 | 327 | } |
| 328 | + if (AnnotationAccess.isAnnotationPresent(originalMethod, CALLER_SENSITIVE_CLASS)) { |
| 329 | + newModifiers |= ACC_CALLER_SENSITIVE; |
| 330 | + } |
322 | 331 | return newModifiers; |
323 | 332 | } |
324 | 333 |
|
| 334 | + public final boolean isCallerSensitive() { |
| 335 | + return (flags & ACC_CALLER_SENSITIVE) != 0; |
| 336 | + } |
| 337 | + |
325 | 338 | @Override |
326 | 339 | public final boolean isDeclaredSignaturePolymorphic() { |
327 | 340 | // Note: might not be true for the instantiation of polymorphic signature intrinsics. |
|
0 commit comments