[vm/ffi] Initialize `Library::ffi_native_resolver_` on deserializing snapshots
TEST=tests/ffi/native_assets/asset_process_test.dart
Closes: https://github.com/dart-lang/sdk/issues/54607
Change-Id: Id4e787a66f18db98473008b7da690dd2ca79a88e
Cq-Include-Trybots: luci.dart.try:vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-kernel-precomp-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/346321
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index 8ec66f2..fe4eedb 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -2447,6 +2447,7 @@
d.ReadFromTo(lib);
lib->untag()->native_entry_resolver_ = nullptr;
lib->untag()->native_entry_symbol_resolver_ = nullptr;
+ lib->untag()->ffi_native_resolver_ = nullptr;
lib->untag()->index_ = d.Read<int32_t>();
lib->untag()->num_imports_ = d.Read<uint16_t>();
lib->untag()->load_state_ = d.Read<int8_t>();
diff --git a/tests/ffi/native_assets/asset_process_test.dart b/tests/ffi/native_assets/asset_process_test.dart
index 4b7ed47..63b0374 100644
--- a/tests/ffi/native_assets/asset_process_test.dart
+++ b/tests/ffi/native_assets/asset_process_test.dart
@@ -57,6 +57,12 @@
);
await invokeSelf(
selfSourceUri: selfSourceUri,
+ runtime: Runtime.appjit,
+ arguments: [runTestsArg],
+ nativeAssetsYaml: nativeAssetsYaml,
+ );
+ await invokeSelf(
+ selfSourceUri: selfSourceUri,
runtime: Runtime.aot,
arguments: [runTestsArg],
nativeAssetsYaml: nativeAssetsYaml,
diff --git a/tests/ffi/native_assets/helpers.dart b/tests/ffi/native_assets/helpers.dart
index e17448b..fe2a11f 100644
--- a/tests/ffi/native_assets/helpers.dart
+++ b/tests/ffi/native_assets/helpers.dart
@@ -116,6 +116,7 @@
enum Runtime {
aot,
+ appjit,
jit,
}
@@ -255,13 +256,28 @@
runtime: runtime,
);
- if (runtime == Runtime.jit) {
- await runDart(scriptUri: outDillUri, arguments: runArguments);
- } else {
- final snapshotUri = tempUri.resolve('out.snapshot');
- await runGenSnapshot(dillUri: outDillUri, outputUri: snapshotUri);
- await runDartAotRuntime(
- aotSnapshotUri: snapshotUri, arguments: runArguments);
+ switch (runtime) {
+ case Runtime.aot:
+ final snapshotUri = tempUri.resolve('out.snapshot');
+ await runGenSnapshot(dillUri: outDillUri, outputUri: snapshotUri);
+ await runDartAotRuntime(
+ aotSnapshotUri: snapshotUri, arguments: runArguments);
+ case Runtime.appjit:
+ final outJitUri = tempUri.resolve('out.jit');
+ await runDart(
+ toolArgs: [
+ '--snapshot-kind=app-jit',
+ '--snapshot=${outJitUri.toFilePath()}',
+ ],
+ scriptUri: outDillUri,
+ arguments: runArguments,
+ );
+ await runDart(
+ scriptUri: outJitUri,
+ arguments: runArguments,
+ );
+ case Runtime.jit:
+ await runDart(scriptUri: outDillUri, arguments: runArguments);
}
}