[vm] Avoid repeating parameters from prematurely destructuring Dart_InitializeParams.
TEST=ci
Change-Id: I39288fc4d79c5933d5c8b274c0a66bdd25f6bf29
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/231529
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index 58d16b6..994f542 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -373,20 +373,19 @@
TesterState::argv = dart_argv;
TesterState::argc = dart_argc;
- error = Dart::Init(
- dart::bin::vm_snapshot_data, dart::bin::vm_snapshot_instructions,
- /*create_group=*/CreateIsolateAndSetup,
- /*initialize_isolate=*/nullptr,
- /*shutdown_isolate=*/nullptr,
- /*cleanup_isolate=*/nullptr,
- /*cleanup_group=*/CleanupIsolateGroup,
- /*thread_start=*/nullptr,
- /*thread_exit=*/nullptr, dart::bin::DartUtils::OpenFile,
- dart::bin::DartUtils::ReadFile, dart::bin::DartUtils::WriteFile,
- dart::bin::DartUtils::CloseFile, /*entropy_source=*/nullptr,
- /*get_service_assets=*/nullptr, start_kernel_isolate,
- /*code_observer=*/nullptr, /*post_task=*/nullptr,
- /*post_task_data*/ nullptr);
+ Dart_InitializeParams init_params;
+ memset(&init_params, 0, sizeof(init_params));
+ init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
+ init_params.vm_snapshot_data = dart::bin::vm_snapshot_data;
+ init_params.vm_snapshot_instructions = dart::bin::vm_snapshot_instructions;
+ init_params.create_group = CreateIsolateAndSetup;
+ init_params.cleanup_group = CleanupIsolateGroup;
+ init_params.file_open = dart::bin::DartUtils::OpenFile;
+ init_params.file_read = dart::bin::DartUtils::ReadFile;
+ init_params.file_write = dart::bin::DartUtils::WriteFile;
+ init_params.file_close = dart::bin::DartUtils::CloseFile;
+ init_params.start_kernel_isolate = start_kernel_isolate;
+ error = Dart::Init(&init_params);
if (error != nullptr) {
Syslog::PrintErr("Failed to initialize VM: %s\n", error);
free(error);
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index e4e2869..ad53435 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -246,25 +246,7 @@
#endif // !defined(IS_SIMARM_X64)
}
-char* Dart::DartInit(const uint8_t* vm_isolate_snapshot,
- const uint8_t* instructions_snapshot,
- Dart_IsolateGroupCreateCallback create_group,
- Dart_InitializeIsolateCallback initialize_isolate,
- Dart_IsolateShutdownCallback shutdown,
- Dart_IsolateCleanupCallback cleanup,
- Dart_IsolateGroupCleanupCallback cleanup_group,
- Dart_ThreadStartCallback thread_start,
- Dart_ThreadExitCallback thread_exit,
- Dart_FileOpenCallback file_open,
- Dart_FileReadCallback file_read,
- Dart_FileWriteCallback file_write,
- Dart_FileCloseCallback file_close,
- Dart_EntropySource entropy_source,
- Dart_GetVMServiceAssetsArchive get_service_assets,
- bool start_kernel_isolate,
- Dart_CodeObserver* observer,
- Dart_PostTaskCallback post_task,
- void* post_task_data) {
+char* Dart::DartInit(const Dart_InitializeParams* params) {
CheckOffsets();
if (!Flags::Initialized()) {
@@ -275,8 +257,8 @@
}
const Snapshot* snapshot = nullptr;
- if (vm_isolate_snapshot != nullptr) {
- snapshot = Snapshot::SetupFromBuffer(vm_isolate_snapshot);
+ if (params->vm_snapshot_data != nullptr) {
+ snapshot = Snapshot::SetupFromBuffer(params->vm_snapshot_data);
if (snapshot == nullptr) {
return Utils::StrDup("Invalid vm isolate snapshot seen");
}
@@ -296,16 +278,17 @@
UntaggedFrame::Init();
- set_thread_start_callback(thread_start);
- set_thread_exit_callback(thread_exit);
- SetFileCallbacks(file_open, file_read, file_write, file_close);
- set_entropy_source_callback(entropy_source);
- set_post_task_callback(post_task);
- set_post_task_data(post_task_data);
+ set_thread_start_callback(params->thread_start);
+ set_thread_exit_callback(params->thread_exit);
+ SetFileCallbacks(params->file_open, params->file_read, params->file_write,
+ params->file_close);
+ set_entropy_source_callback(params->entropy_source);
+ set_post_task_callback(params->post_task);
+ set_post_task_data(params->post_task_data);
OS::Init();
NOT_IN_PRODUCT(CodeObservers::Init());
- if (observer != nullptr) {
- NOT_IN_PRODUCT(CodeObservers::RegisterExternal(*observer));
+ if (params->code_observer != nullptr) {
+ NOT_IN_PRODUCT(CodeObservers::RegisterExternal(*params->code_observer));
}
start_time_micros_ = OS::GetCurrentMonotonicMicros();
VirtualMemory::Init();
@@ -364,8 +347,8 @@
// really an isolate itself - it acts more as a container for VM-global
// objects.
std::unique_ptr<IsolateGroupSource> source(new IsolateGroupSource(
- kVmIsolateName, kVmIsolateName, vm_isolate_snapshot,
- instructions_snapshot, nullptr, -1, api_flags));
+ kVmIsolateName, kVmIsolateName, params->vm_snapshot_data,
+ params->vm_snapshot_instructions, nullptr, -1, api_flags));
// ObjectStore should be created later, after null objects are initialized.
auto group = new IsolateGroup(std::move(source), /*embedder_data=*/nullptr,
/*object_store=*/nullptr, api_flags);
@@ -392,7 +375,7 @@
ArgumentsDescriptor::Init();
ICData::Init();
SubtypeTestCache::Init();
- if (vm_isolate_snapshot != NULL) {
+ if (params->vm_snapshot_data != nullptr) {
#if defined(SUPPORT_TIMELINE)
TimelineBeginEndScope tbes(Timeline::GetVMStream(), "ReadVMSnapshot");
#endif
@@ -405,7 +388,7 @@
return Utils::StrDup("JIT runtime cannot run a precompiled snapshot");
#endif
}
- if (instructions_snapshot == NULL) {
+ if (params->vm_snapshot_instructions == nullptr) {
return Utils::StrDup("Missing instructions snapshot");
}
} else if (Snapshot::IsFull(vm_snapshot_kind_)) {
@@ -426,7 +409,7 @@
} else {
return Utils::StrDup("Invalid vm isolate snapshot seen");
}
- FullSnapshotReader reader(snapshot, instructions_snapshot, T);
+ FullSnapshotReader reader(snapshot, params->vm_snapshot_instructions, T);
const Error& error = Error::Handle(reader.ReadVMSnapshot());
if (!error.IsNull()) {
// Must copy before leaving the zone.
@@ -496,15 +479,15 @@
Api::InitHandles();
Thread::ExitIsolate(); // Unregister the VM isolate from this thread.
- Isolate::SetCreateGroupCallback(create_group);
- Isolate::SetInitializeCallback_(initialize_isolate);
- Isolate::SetShutdownCallback(shutdown);
- Isolate::SetCleanupCallback(cleanup);
- Isolate::SetGroupCleanupCallback(cleanup_group);
+ Isolate::SetCreateGroupCallback(params->create_group);
+ Isolate::SetInitializeCallback_(params->initialize_isolate);
+ Isolate::SetShutdownCallback(params->shutdown_isolate);
+ Isolate::SetCleanupCallback(params->cleanup_isolate);
+ Isolate::SetGroupCleanupCallback(params->cleanup_group);
#ifndef PRODUCT
const bool support_service = true;
- Service::SetGetServiceAssetsCallback(get_service_assets);
+ Service::SetGetServiceAssetsCallback(params->get_service_assets);
#else
const bool support_service = false;
#endif
@@ -518,7 +501,7 @@
}
#ifndef DART_PRECOMPILED_RUNTIME
- if (start_kernel_isolate) {
+ if (params->start_kernel_isolate) {
KernelIsolate::InitializeState();
}
#endif // DART_PRECOMPILED_RUNTIME
@@ -526,37 +509,14 @@
return NULL;
}
-char* Dart::Init(const uint8_t* vm_isolate_snapshot,
- const uint8_t* instructions_snapshot,
- Dart_IsolateGroupCreateCallback create_group,
- Dart_InitializeIsolateCallback initialize_isolate,
- Dart_IsolateShutdownCallback shutdown,
- Dart_IsolateCleanupCallback cleanup,
- Dart_IsolateGroupCleanupCallback cleanup_group,
- Dart_ThreadStartCallback thread_start,
- Dart_ThreadExitCallback thread_exit,
- Dart_FileOpenCallback file_open,
- Dart_FileReadCallback file_read,
- Dart_FileWriteCallback file_write,
- Dart_FileCloseCallback file_close,
- Dart_EntropySource entropy_source,
- Dart_GetVMServiceAssetsArchive get_service_assets,
- bool start_kernel_isolate,
- Dart_CodeObserver* observer,
- Dart_PostTaskCallback post_task,
- void* post_task_data) {
+char* Dart::Init(const Dart_InitializeParams* params) {
if (!init_state_.SetInitializing()) {
return Utils::StrDup(
"Bad VM initialization state, "
"already initialized or "
"multiple threads initializing the VM.");
}
- char* retval =
- DartInit(vm_isolate_snapshot, instructions_snapshot, create_group,
- initialize_isolate, shutdown, cleanup, cleanup_group,
- thread_start, thread_exit, file_open, file_read, file_write,
- file_close, entropy_source, get_service_assets,
- start_kernel_isolate, observer, post_task, post_task_data);
+ char* retval = DartInit(params);
if (retval != NULL) {
init_state_.ResetInitializing();
return retval;
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index 5a170c2..9b88af1 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -29,25 +29,7 @@
public:
// Returns null if initialization succeeds, otherwise returns an error message
// (caller owns error message and has to free it).
- static char* Init(const uint8_t* vm_snapshot_data,
- const uint8_t* vm_snapshot_instructions,
- Dart_IsolateGroupCreateCallback create_group,
- Dart_InitializeIsolateCallback initialize_isolate,
- Dart_IsolateShutdownCallback shutdown,
- Dart_IsolateCleanupCallback cleanup,
- Dart_IsolateGroupCleanupCallback cleanup_group,
- Dart_ThreadStartCallback thread_start,
- Dart_ThreadExitCallback thread_exit,
- Dart_FileOpenCallback file_open,
- Dart_FileReadCallback file_read,
- Dart_FileWriteCallback file_write,
- Dart_FileCloseCallback file_close,
- Dart_EntropySource entropy_source,
- Dart_GetVMServiceAssetsArchive get_service_assets,
- bool start_kernel_isolate,
- Dart_CodeObserver* observer,
- Dart_PostTaskCallback post_task,
- void* post_task_data);
+ static char* Init(const Dart_InitializeParams* params);
// Returns null if cleanup succeeds, otherwise returns an error message
// (caller owns error message and has to free it).
@@ -176,25 +158,7 @@
static Dart_GCEventCallback gc_event_callback() { return gc_event_callback_; }
private:
- static char* DartInit(const uint8_t* vm_snapshot_data,
- const uint8_t* vm_snapshot_instructions,
- Dart_IsolateGroupCreateCallback create_group,
- Dart_InitializeIsolateCallback initialize_isolate,
- Dart_IsolateShutdownCallback shutdown,
- Dart_IsolateCleanupCallback cleanup,
- Dart_IsolateGroupCleanupCallback cleanup_group,
- Dart_ThreadStartCallback thread_start,
- Dart_ThreadExitCallback thread_exit,
- Dart_FileOpenCallback file_open,
- Dart_FileReadCallback file_read,
- Dart_FileWriteCallback file_write,
- Dart_FileCloseCallback file_close,
- Dart_EntropySource entropy_source,
- Dart_GetVMServiceAssetsArchive get_service_assets,
- bool start_kernel_isolate,
- Dart_CodeObserver* observer,
- Dart_PostTaskCallback post_task,
- void* post_task_data);
+ static char* DartInit(const Dart_InitializeParams* params);
static constexpr const char* kVmIsolateName = "vm-isolate";
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index b421ddc..d7d2208 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1204,15 +1204,7 @@
"Invalid Dart_InitializeParams version.");
}
- return Dart::Init(params->vm_snapshot_data, params->vm_snapshot_instructions,
- params->create_group, params->initialize_isolate,
- params->shutdown_isolate, params->cleanup_isolate,
- params->cleanup_group, params->thread_start,
- params->thread_exit, params->file_open, params->file_read,
- params->file_write, params->file_close,
- params->entropy_source, params->get_service_assets,
- params->start_kernel_isolate, params->code_observer,
- params->post_task, params->post_task_data);
+ return Dart::Init(params);
}
DART_EXPORT char* Dart_Cleanup() {