| Index: runtime/bin/gen_snapshot.cc
|
| diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
|
| index 53babb7c9ae823aa44e9bbe500a8ebba655c5cc2..6f4c67ed9feb2b8db6f5ab8f71cf2b4c89adb7f1 100644
|
| --- a/runtime/bin/gen_snapshot.cc
|
| +++ b/runtime/bin/gen_snapshot.cc
|
| @@ -22,6 +22,7 @@
|
| #include "bin/vmservice_impl.h"
|
|
|
| #include "include/dart_api.h"
|
| +#include "include/dart_tools_api.h"
|
|
|
| #include "platform/hashmap.h"
|
| #include "platform/globals.h"
|
| @@ -684,7 +685,8 @@ static const char StubNativeFunctionName[] = "StubNativeFunction";
|
|
|
| void StubNativeFunction(Dart_NativeArguments arguments) {
|
| // This is a stub function for the resolver
|
| - UNREACHABLE();
|
| + Dart_SetReturnValue(
|
| + arguments, Dart_NewApiError("<EMBEDDER DID NOT SETUP NATIVE RESOLVER>"));
|
| }
|
|
|
|
|
| @@ -735,6 +737,31 @@ static void SetupStubNativeResolver(size_t lib_index,
|
| }
|
|
|
|
|
| +// Iterate over all libraries and setup the stub native lookup. This must be
|
| +// run after |SetupStubNativeResolversForPrecompilation| because the former
|
| +// loads some libraries.
|
| +static void SetupStubNativeResolvers() {
|
| + Dart_Handle library_ids = Dart_GetLibraryIds();
|
| + intptr_t library_ids_length;
|
| + Dart_ListLength(library_ids, &library_ids_length);
|
| + for (intptr_t i = 0; i < library_ids_length; i++) {
|
| + Dart_Handle library_id_handle = Dart_ListGetAt(library_ids, i);
|
| + DART_CHECK_VALID(library_id_handle);
|
| + int64_t library_id;
|
| + Dart_IntegerToInt64(library_id_handle, &library_id);
|
| + Dart_Handle library = Dart_GetLibraryFromId(library_id);
|
| + DART_CHECK_VALID(library);
|
| + Dart_NativeEntryResolver old_resolver = NULL;
|
| + Dart_GetNativeResolver(library, &old_resolver);
|
| + if (old_resolver == NULL) {
|
| + Dart_Handle result =
|
| + Dart_SetNativeResolver(library, &StubNativeLookup, &StubNativeSymbol);
|
| + DART_CHECK_VALID(result);
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| static void ImportNativeEntryPointLibrariesIntoRoot(
|
| const Dart_QualifiedFunctionName* entries) {
|
| if (entries == NULL) {
|
| @@ -1305,6 +1332,8 @@ int main(int argc, char** argv) {
|
|
|
| SetupStubNativeResolversForPrecompilation(entry_points);
|
|
|
| + SetupStubNativeResolvers();
|
| +
|
| if (!is_kernel_file) {
|
| // Load the specified script.
|
| library = LoadSnapshotCreationScript(app_script_name);
|
|
|