Allow late lookup for @CriticalNative methods.
Test: Add and enable tests in 178-app-image-native-method
Test: Add and enable tests in jni_compiler_test
Test: Manually step through the new stub in GDB and check
that backtrace works at various points.
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: aosp_taimen-userdebug boots.
Test: run-gtests.sh
Test: testrunner.py --target --optimizing
Bug: 112189621
Change-Id: If094e5062acbb99eefa88f2afb4815f93730cb82
diff --git a/test/178-app-image-native-method/src/Main.java b/test/178-app-image-native-method/src/Main.java
index bec7740..07990cb 100644
--- a/test/178-app-image-native-method/src/Main.java
+++ b/test/178-app-image-native-method/src/Main.java
@@ -31,17 +31,17 @@
new TestMissingCritical();
makeVisiblyInitialized(); // Make sure they are visibly initialized.
- // FIXME: @FastNative and @CriticalNative fail a state check in artFindNativeMethod().
test();
testFast();
- // testCritical();
+ testCritical();
testMissing();
testMissingFast();
- // testMissingCritical();
+ testMissingCritical();
}
static void test() {
System.out.println("test");
+ assertEquals(42, Test.nativeMethodVoid());
assertEquals(42, Test.nativeMethod(42));
assertEquals(42, Test.nativeMethodWithManyParameters(
11, 12L, 13.0f, 14.0d,
@@ -56,6 +56,7 @@
static void testFast() {
System.out.println("testFast");
+ assertEquals(42, TestFast.nativeMethodVoid());
assertEquals(42, TestFast.nativeMethod(42));
assertEquals(42, TestFast.nativeMethodWithManyParameters(
11, 12L, 13.0f, 14.0d,
@@ -70,6 +71,7 @@
static void testCritical() {
System.out.println("testCritical");
+ assertEquals(42, TestCritical.nativeMethodVoid());
assertEquals(42, TestCritical.nativeMethod(42));
assertEquals(42, TestCritical.nativeMethodWithManyParameters(
11, 12L, 13.0f, 14.0d,
@@ -86,6 +88,11 @@
System.out.println("testMissing");
try {
+ TestMissing.nativeMethodVoid();
+ throw new Error("UNREACHABLE");
+ } catch (LinkageError expected) {}
+
+ try {
TestMissing.nativeMethod(42);
throw new Error("UNREACHABLE");
} catch (LinkageError expected) {}
@@ -108,6 +115,11 @@
System.out.println("testMissingFast");
try {
+ TestMissingFast.nativeMethodVoid();
+ throw new Error("UNREACHABLE");
+ } catch (LinkageError expected) {}
+
+ try {
TestMissingFast.nativeMethod(42);
throw new Error("UNREACHABLE");
} catch (LinkageError expected) {}
@@ -130,6 +142,11 @@
System.out.println("testMissingCritical");
try {
+ TestMissingCritical.nativeMethodVoid();
+ throw new Error("UNREACHABLE");
+ } catch (LinkageError expected) {}
+
+ try {
TestMissingCritical.nativeMethod(42);
throw new Error("UNREACHABLE");
} catch (LinkageError expected) {}
@@ -158,6 +175,8 @@
}
class Test {
+ public static native int nativeMethodVoid();
+
public static native int nativeMethod(int i);
public static native int nativeMethodWithManyParameters(
@@ -173,6 +192,9 @@
class TestFast {
@FastNative
+ public static native int nativeMethodVoid();
+
+ @FastNative
public static native int nativeMethod(int i);
@FastNative
@@ -189,6 +211,9 @@
class TestCritical {
@CriticalNative
+ public static native int nativeMethodVoid();
+
+ @CriticalNative
public static native int nativeMethod(int i);
@CriticalNative
@@ -204,6 +229,8 @@
}
class TestMissing {
+ public static native int nativeMethodVoid();
+
public static native int nativeMethod(int i);
public static native int nativeMethodWithManyParameters(
@@ -219,6 +246,9 @@
class TestMissingFast {
@FastNative
+ public static native int nativeMethodVoid();
+
+ @FastNative
public static native int nativeMethod(int i);
@FastNative
@@ -235,6 +265,9 @@
class TestMissingCritical {
@CriticalNative
+ public static native int nativeMethodVoid();
+
+ @CriticalNative
public static native int nativeMethod(int i);
@CriticalNative