OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Generate a snapshot file after loading all the scripts specified on the | 5 // Generate a snapshot file after loading all the scripts specified on the |
6 // command line. | 6 // command line. |
7 | 7 |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 #include <string.h> | 10 #include <string.h> |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 } \ | 54 } \ |
55 Dart_ExitScope(); \ | 55 Dart_ExitScope(); \ |
56 Dart_ShutdownIsolate(); \ | 56 Dart_ShutdownIsolate(); \ |
57 exit(exit_code); \ | 57 exit(exit_code); \ |
58 } | 58 } |
59 | 59 |
60 | 60 |
61 // The core snapshot to use when creating isolates. Normally NULL, but loaded | 61 // The core snapshot to use when creating isolates. Normally NULL, but loaded |
62 // from a file when creating script snapshots. | 62 // from a file when creating script snapshots. |
63 const uint8_t* isolate_snapshot_data = NULL; | 63 const uint8_t* isolate_snapshot_data = NULL; |
| 64 const uint8_t* isolate_snapshot_instructions = NULL; |
64 | 65 |
65 | 66 |
66 // Global state that indicates whether a snapshot is to be created and | 67 // Global state that indicates whether a snapshot is to be created and |
67 // if so which file to write the snapshot into. | 68 // if so which file to write the snapshot into. |
68 enum SnapshotKind { | 69 enum SnapshotKind { |
69 kCore, | 70 kCore, |
| 71 kCoreJIT, |
70 kScript, | 72 kScript, |
71 kAppAOTBlobs, | 73 kAppAOTBlobs, |
72 kAppAOTAssembly, | 74 kAppAOTAssembly, |
73 }; | 75 }; |
74 static SnapshotKind snapshot_kind = kCore; | 76 static SnapshotKind snapshot_kind = kCore; |
75 static const char* vm_snapshot_data_filename = NULL; | 77 static const char* vm_snapshot_data_filename = NULL; |
76 static const char* vm_snapshot_instructions_filename = NULL; | 78 static const char* vm_snapshot_instructions_filename = NULL; |
77 static const char* isolate_snapshot_data_filename = NULL; | 79 static const char* isolate_snapshot_data_filename = NULL; |
78 static const char* isolate_snapshot_instructions_filename = NULL; | 80 static const char* isolate_snapshot_instructions_filename = NULL; |
79 static const char* assembly_filename = NULL; | 81 static const char* assembly_filename = NULL; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 | 208 |
207 | 209 |
208 static bool ProcessSnapshotKindOption(const char* option) { | 210 static bool ProcessSnapshotKindOption(const char* option) { |
209 const char* kind = ProcessOption(option, "--snapshot_kind="); | 211 const char* kind = ProcessOption(option, "--snapshot_kind="); |
210 if (kind == NULL) { | 212 if (kind == NULL) { |
211 kind = ProcessOption(option, "--snapshot-kind="); | 213 kind = ProcessOption(option, "--snapshot-kind="); |
212 } | 214 } |
213 if (kind == NULL) { | 215 if (kind == NULL) { |
214 return false; | 216 return false; |
215 } | 217 } |
216 if (strcmp(kind, "core") == 0) { | 218 if (strcmp(kind, "core-jit") == 0) { |
| 219 snapshot_kind = kCoreJIT; |
| 220 return true; |
| 221 } else if (strcmp(kind, "core") == 0) { |
217 snapshot_kind = kCore; | 222 snapshot_kind = kCore; |
218 return true; | 223 return true; |
219 } else if (strcmp(kind, "script") == 0) { | 224 } else if (strcmp(kind, "script") == 0) { |
220 snapshot_kind = kScript; | 225 snapshot_kind = kScript; |
221 return true; | 226 return true; |
222 } else if (strcmp(kind, "app-aot-blobs") == 0) { | 227 } else if (strcmp(kind, "app-aot-blobs") == 0) { |
223 snapshot_kind = kAppAOTBlobs; | 228 snapshot_kind = kAppAOTBlobs; |
224 return true; | 229 return true; |
225 } else if (strcmp(kind, "app-aot-assembly") == 0) { | 230 } else if (strcmp(kind, "app-aot-assembly") == 0) { |
226 snapshot_kind = kAppAOTAssembly; | 231 snapshot_kind = kAppAOTAssembly; |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 case kCore: { | 454 case kCore: { |
450 if ((vm_snapshot_data_filename == NULL) || | 455 if ((vm_snapshot_data_filename == NULL) || |
451 (isolate_snapshot_data_filename == NULL)) { | 456 (isolate_snapshot_data_filename == NULL)) { |
452 Log::PrintErr( | 457 Log::PrintErr( |
453 "Building a core snapshot requires specifying output files for " | 458 "Building a core snapshot requires specifying output files for " |
454 "--vm_snapshot_data and --isolate_snapshot_data.\n\n"); | 459 "--vm_snapshot_data and --isolate_snapshot_data.\n\n"); |
455 return -1; | 460 return -1; |
456 } | 461 } |
457 break; | 462 break; |
458 } | 463 } |
| 464 case kCoreJIT: { |
| 465 if ((vm_snapshot_data_filename == NULL) || |
| 466 (vm_snapshot_instructions_filename == NULL) || |
| 467 (isolate_snapshot_data_filename == NULL) || |
| 468 (isolate_snapshot_instructions_filename == NULL)) { |
| 469 Log::PrintErr( |
| 470 "Building a core JIT snapshot requires specifying output " |
| 471 "files for --vm_snapshot_data, --vm_snapshot_instructions, " |
| 472 "--isolate_snapshot_data and --isolate_snapshot_instructions.\n\n"); |
| 473 return -1; |
| 474 } |
| 475 break; |
| 476 } |
459 case kScript: { | 477 case kScript: { |
460 if ((vm_snapshot_data_filename == NULL) || | 478 if ((vm_snapshot_data_filename == NULL) || |
461 (isolate_snapshot_data_filename == NULL) || | 479 (isolate_snapshot_data_filename == NULL) || |
462 (script_snapshot_filename == NULL) || (*script_name == NULL)) { | 480 (script_snapshot_filename == NULL) || (*script_name == NULL)) { |
463 Log::PrintErr( | 481 Log::PrintErr( |
464 "Building a script snapshot requires specifying input files for " | 482 "Building a script snapshot requires specifying input files for " |
465 "--vm_snapshot_data and --isolate_snapshot_data, an output file " | 483 "--vm_snapshot_data and --isolate_snapshot_data, an output file " |
466 "for --script_snapshot, and a Dart script.\n\n"); | 484 "for --script_snapshot, and a Dart script.\n\n"); |
467 return -1; | 485 return -1; |
468 } | 486 } |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 case kCore: | 704 case kCore: |
687 success &= file->Print("%s ", vm_snapshot_data_filename); | 705 success &= file->Print("%s ", vm_snapshot_data_filename); |
688 success &= file->Print("%s ", isolate_snapshot_data_filename); | 706 success &= file->Print("%s ", isolate_snapshot_data_filename); |
689 break; | 707 break; |
690 case kScript: | 708 case kScript: |
691 success &= file->Print("%s ", script_snapshot_filename); | 709 success &= file->Print("%s ", script_snapshot_filename); |
692 break; | 710 break; |
693 case kAppAOTAssembly: | 711 case kAppAOTAssembly: |
694 success &= file->Print("%s ", assembly_filename); | 712 success &= file->Print("%s ", assembly_filename); |
695 break; | 713 break; |
| 714 case kCoreJIT: |
696 case kAppAOTBlobs: | 715 case kAppAOTBlobs: |
697 success &= file->Print("%s ", vm_snapshot_data_filename); | 716 success &= file->Print("%s ", vm_snapshot_data_filename); |
698 success &= file->Print("%s ", vm_snapshot_instructions_filename); | 717 success &= file->Print("%s ", vm_snapshot_instructions_filename); |
699 success &= file->Print("%s ", isolate_snapshot_data_filename); | 718 success &= file->Print("%s ", isolate_snapshot_data_filename); |
700 success &= file->Print("%s ", isolate_snapshot_instructions_filename); | 719 success &= file->Print("%s ", isolate_snapshot_instructions_filename); |
701 break; | 720 break; |
702 } | 721 } |
703 | 722 |
704 success &= file->Print(": "); | 723 success &= file->Print(": "); |
705 } | 724 } |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1268 // First create a snapshot. | 1287 // First create a snapshot. |
1269 result = Dart_CreateSnapshot(&vm_snapshot_data_buffer, &vm_snapshot_data_size, | 1288 result = Dart_CreateSnapshot(&vm_snapshot_data_buffer, &vm_snapshot_data_size, |
1270 &isolate_snapshot_data_buffer, | 1289 &isolate_snapshot_data_buffer, |
1271 &isolate_snapshot_data_size); | 1290 &isolate_snapshot_data_size); |
1272 CHECK_RESULT(result); | 1291 CHECK_RESULT(result); |
1273 | 1292 |
1274 // Now write the vm isolate and isolate snapshots out to the | 1293 // Now write the vm isolate and isolate snapshots out to the |
1275 // specified file and exit. | 1294 // specified file and exit. |
1276 WriteSnapshotFile(vm_snapshot_data_filename, vm_snapshot_data_buffer, | 1295 WriteSnapshotFile(vm_snapshot_data_filename, vm_snapshot_data_buffer, |
1277 vm_snapshot_data_size); | 1296 vm_snapshot_data_size); |
| 1297 if (vm_snapshot_instructions_filename != NULL) { |
| 1298 WriteSnapshotFile(vm_snapshot_instructions_filename, NULL, 0); |
| 1299 } |
1278 WriteSnapshotFile(isolate_snapshot_data_filename, | 1300 WriteSnapshotFile(isolate_snapshot_data_filename, |
1279 isolate_snapshot_data_buffer, isolate_snapshot_data_size); | 1301 isolate_snapshot_data_buffer, isolate_snapshot_data_size); |
| 1302 if (isolate_snapshot_instructions_filename != NULL) { |
| 1303 WriteSnapshotFile(isolate_snapshot_instructions_filename, NULL, 0); |
| 1304 } |
1280 } | 1305 } |
1281 | 1306 |
1282 | 1307 |
| 1308 static void CreateAndWriteCoreJITSnapshot() { |
| 1309 ASSERT(snapshot_kind == kCoreJIT); |
| 1310 ASSERT(vm_snapshot_data_filename != NULL); |
| 1311 ASSERT(vm_snapshot_instructions_filename != NULL); |
| 1312 ASSERT(isolate_snapshot_data_filename != NULL); |
| 1313 ASSERT(isolate_snapshot_instructions_filename != NULL); |
| 1314 |
| 1315 Dart_Handle result; |
| 1316 uint8_t* vm_snapshot_data_buffer = NULL; |
| 1317 intptr_t vm_snapshot_data_size = 0; |
| 1318 uint8_t* vm_snapshot_instructions_buffer = NULL; |
| 1319 intptr_t vm_snapshot_instructions_size = 0; |
| 1320 uint8_t* isolate_snapshot_data_buffer = NULL; |
| 1321 intptr_t isolate_snapshot_data_size = 0; |
| 1322 uint8_t* isolate_snapshot_instructions_buffer = NULL; |
| 1323 intptr_t isolate_snapshot_instructions_size = 0; |
| 1324 |
| 1325 // First create a snapshot. |
| 1326 result = Dart_CreateCoreJITSnapshotAsBlobs( |
| 1327 &vm_snapshot_data_buffer, &vm_snapshot_data_size, |
| 1328 &vm_snapshot_instructions_buffer, &vm_snapshot_instructions_size, |
| 1329 &isolate_snapshot_data_buffer, &isolate_snapshot_data_size, |
| 1330 &isolate_snapshot_instructions_buffer, |
| 1331 &isolate_snapshot_instructions_size); |
| 1332 CHECK_RESULT(result); |
| 1333 |
| 1334 // Now write the vm isolate and isolate snapshots out to the |
| 1335 // specified file and exit. |
| 1336 WriteSnapshotFile(vm_snapshot_data_filename, vm_snapshot_data_buffer, |
| 1337 vm_snapshot_data_size); |
| 1338 WriteSnapshotFile(vm_snapshot_instructions_filename, |
| 1339 vm_snapshot_instructions_buffer, |
| 1340 vm_snapshot_instructions_size); |
| 1341 WriteSnapshotFile(isolate_snapshot_data_filename, |
| 1342 isolate_snapshot_data_buffer, isolate_snapshot_data_size); |
| 1343 WriteSnapshotFile(isolate_snapshot_instructions_filename, |
| 1344 isolate_snapshot_instructions_buffer, |
| 1345 isolate_snapshot_instructions_size); |
| 1346 } |
| 1347 |
| 1348 |
1283 static void CreateAndWriteScriptSnapshot() { | 1349 static void CreateAndWriteScriptSnapshot() { |
1284 ASSERT(snapshot_kind == kScript); | 1350 ASSERT(snapshot_kind == kScript); |
1285 ASSERT(script_snapshot_filename != NULL); | 1351 ASSERT(script_snapshot_filename != NULL); |
1286 | 1352 |
1287 // First create a snapshot. | 1353 // First create a snapshot. |
1288 uint8_t* buffer = NULL; | 1354 uint8_t* buffer = NULL; |
1289 intptr_t size = 0; | 1355 intptr_t size = 0; |
1290 Dart_Handle result = Dart_CreateScriptSnapshot(&buffer, &size); | 1356 Dart_Handle result = Dart_CreateScriptSnapshot(&buffer, &size); |
1291 CHECK_RESULT(result); | 1357 CHECK_RESULT(result); |
1292 | 1358 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1384 static Dart_Isolate CreateServiceIsolate(const char* script_uri, | 1450 static Dart_Isolate CreateServiceIsolate(const char* script_uri, |
1385 const char* main, | 1451 const char* main, |
1386 const char* package_root, | 1452 const char* package_root, |
1387 const char* package_config, | 1453 const char* package_config, |
1388 Dart_IsolateFlags* flags, | 1454 Dart_IsolateFlags* flags, |
1389 void* data, | 1455 void* data, |
1390 char** error) { | 1456 char** error) { |
1391 IsolateData* isolate_data = | 1457 IsolateData* isolate_data = |
1392 new IsolateData(script_uri, package_root, package_config, NULL); | 1458 new IsolateData(script_uri, package_root, package_config, NULL); |
1393 Dart_Isolate isolate = NULL; | 1459 Dart_Isolate isolate = NULL; |
1394 isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, NULL, | 1460 isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, |
1395 NULL, isolate_data, error); | 1461 isolate_snapshot_instructions, NULL, |
| 1462 isolate_data, error); |
1396 | 1463 |
1397 if (isolate == NULL) { | 1464 if (isolate == NULL) { |
1398 Log::PrintErr("Error: Could not create service isolate\n"); | 1465 Log::PrintErr("Error: Could not create service isolate\n"); |
1399 return NULL; | 1466 return NULL; |
1400 } | 1467 } |
1401 | 1468 |
1402 Dart_EnterScope(); | 1469 Dart_EnterScope(); |
1403 if (!Dart_IsServiceIsolate(isolate)) { | 1470 if (!Dart_IsServiceIsolate(isolate)) { |
1404 Log::PrintErr("Error: We only expect to create the service isolate\n"); | 1471 Log::PrintErr("Error: We only expect to create the service isolate\n"); |
1405 return NULL; | 1472 return NULL; |
(...skipping 14 matching lines...) Expand all Loading... |
1420 false /* trace_loading */)) { | 1487 false /* trace_loading */)) { |
1421 *error = strdup(VmService::GetErrorMessage()); | 1488 *error = strdup(VmService::GetErrorMessage()); |
1422 return NULL; | 1489 return NULL; |
1423 } | 1490 } |
1424 Dart_ExitScope(); | 1491 Dart_ExitScope(); |
1425 Dart_ExitIsolate(); | 1492 Dart_ExitIsolate(); |
1426 return isolate; | 1493 return isolate; |
1427 } | 1494 } |
1428 | 1495 |
1429 | 1496 |
| 1497 static MappedMemory* MapFile(const char* filename, File::MapType type) { |
| 1498 File* file = File::Open(filename, File::kRead); |
| 1499 if (file == NULL) { |
| 1500 Log::PrintErr("Failed to open: %s\n", filename); |
| 1501 exit(kErrorExitCode); |
| 1502 } |
| 1503 MappedMemory* mapping = file->Map(type, 0, file->Length()); |
| 1504 if (mapping == NULL) { |
| 1505 Log::PrintErr("Failed to read: %s\n", vm_snapshot_data_filename); |
| 1506 exit(kErrorExitCode); |
| 1507 } |
| 1508 file->Release(); |
| 1509 return mapping; |
| 1510 } |
| 1511 |
| 1512 |
1430 int main(int argc, char** argv) { | 1513 int main(int argc, char** argv) { |
1431 const int EXTRA_VM_ARGUMENTS = 2; | 1514 const int EXTRA_VM_ARGUMENTS = 2; |
1432 CommandLineOptions vm_options(argc + EXTRA_VM_ARGUMENTS); | 1515 CommandLineOptions vm_options(argc + EXTRA_VM_ARGUMENTS); |
1433 | 1516 |
1434 // Initialize the URL mapping array. | 1517 // Initialize the URL mapping array. |
1435 CommandLineOptions cmdline_url_mapping(argc); | 1518 CommandLineOptions cmdline_url_mapping(argc); |
1436 DartUtils::url_mapping = &cmdline_url_mapping; | 1519 DartUtils::url_mapping = &cmdline_url_mapping; |
1437 | 1520 |
1438 // Initialize the entrypoints array. | 1521 // Initialize the entrypoints array. |
1439 CommandLineOptions entry_points_files_array(argc); | 1522 CommandLineOptions entry_points_files_array(argc); |
(...skipping 13 matching lines...) Expand all Loading... |
1453 EventHandler::Start(); | 1536 EventHandler::Start(); |
1454 | 1537 |
1455 #if !defined(PRODUCT) | 1538 #if !defined(PRODUCT) |
1456 // Constant true in PRODUCT mode. | 1539 // Constant true in PRODUCT mode. |
1457 vm_options.AddArgument("--load_deferred_eagerly"); | 1540 vm_options.AddArgument("--load_deferred_eagerly"); |
1458 #endif | 1541 #endif |
1459 | 1542 |
1460 if (IsSnapshottingForPrecompilation()) { | 1543 if (IsSnapshottingForPrecompilation()) { |
1461 vm_options.AddArgument("--precompilation"); | 1544 vm_options.AddArgument("--precompilation"); |
1462 } | 1545 } |
| 1546 if (snapshot_kind == kCoreJIT) { |
| 1547 vm_options.AddArgument("--fields_may_be_reset"); |
| 1548 vm_options.AddArgument("--link_natives_lazily"); |
| 1549 #if !defined(PRODUCT) |
| 1550 vm_options.AddArgument("--collect_code=false"); |
| 1551 #endif |
| 1552 } |
1463 | 1553 |
1464 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); | 1554 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); |
1465 | 1555 |
1466 // Initialize the Dart VM. | 1556 // Initialize the Dart VM. |
1467 // Note: We don't expect isolates to be created from dart code during | 1557 // Note: We don't expect isolates to be created from dart code during |
1468 // core library snapshot generation. However for the case when a full | 1558 // core library snapshot generation. However for the case when a full |
1469 // snasphot is generated from a script (app_script_name != NULL) we will | 1559 // snasphot is generated from a script (app_script_name != NULL) we will |
1470 // need the service isolate to resolve URI and load code. | 1560 // need the service isolate to resolve URI and load code. |
1471 | 1561 |
1472 Dart_InitializeParams init_params; | 1562 Dart_InitializeParams init_params; |
1473 memset(&init_params, 0, sizeof(init_params)); | 1563 memset(&init_params, 0, sizeof(init_params)); |
1474 init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; | 1564 init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; |
1475 if (app_script_name != NULL) { | 1565 if (app_script_name != NULL) { |
1476 init_params.create = CreateServiceIsolate; | 1566 init_params.create = CreateServiceIsolate; |
1477 } | 1567 } |
1478 init_params.file_open = DartUtils::OpenFile; | 1568 init_params.file_open = DartUtils::OpenFile; |
1479 init_params.file_read = DartUtils::ReadFile; | 1569 init_params.file_read = DartUtils::ReadFile; |
1480 init_params.file_write = DartUtils::WriteFile; | 1570 init_params.file_write = DartUtils::WriteFile; |
1481 init_params.file_close = DartUtils::CloseFile; | 1571 init_params.file_close = DartUtils::CloseFile; |
1482 init_params.entropy_source = DartUtils::EntropySource; | 1572 init_params.entropy_source = DartUtils::EntropySource; |
1483 | 1573 |
1484 MappedMemory* mapped_vm_snapshot_data = NULL; | 1574 MappedMemory* mapped_vm_snapshot_data = NULL; |
| 1575 MappedMemory* mapped_vm_snapshot_instructions = NULL; |
1485 MappedMemory* mapped_isolate_snapshot_data = NULL; | 1576 MappedMemory* mapped_isolate_snapshot_data = NULL; |
| 1577 MappedMemory* mapped_isolate_snapshot_instructions = NULL; |
1486 if (snapshot_kind == kScript) { | 1578 if (snapshot_kind == kScript) { |
1487 File* file = File::Open(vm_snapshot_data_filename, File::kRead); | 1579 mapped_vm_snapshot_data = |
1488 if (file == NULL) { | 1580 MapFile(vm_snapshot_data_filename, File::kReadOnly); |
1489 Log::PrintErr("Failed to open: %s\n", vm_snapshot_data_filename); | |
1490 return kErrorExitCode; | |
1491 } | |
1492 mapped_vm_snapshot_data = file->Map(File::kReadOnly, 0, file->Length()); | |
1493 if (mapped_vm_snapshot_data == NULL) { | |
1494 Log::PrintErr("Failed to read: %s\n", vm_snapshot_data_filename); | |
1495 return kErrorExitCode; | |
1496 } | |
1497 file->Release(); | |
1498 init_params.vm_snapshot_data = | 1581 init_params.vm_snapshot_data = |
1499 reinterpret_cast<const uint8_t*>(mapped_vm_snapshot_data->address()); | 1582 reinterpret_cast<const uint8_t*>(mapped_vm_snapshot_data->address()); |
1500 | 1583 |
1501 file = File::Open(isolate_snapshot_data_filename, File::kRead); | 1584 if (vm_snapshot_instructions_filename != NULL) { |
1502 if (file == NULL) { | 1585 mapped_vm_snapshot_instructions = |
1503 Log::PrintErr("Failed to open: %s\n", isolate_snapshot_data_filename); | 1586 MapFile(vm_snapshot_instructions_filename, File::kReadExecute); |
1504 return kErrorExitCode; | 1587 init_params.vm_snapshot_instructions = reinterpret_cast<const uint8_t*>( |
| 1588 mapped_vm_snapshot_instructions->address()); |
1505 } | 1589 } |
| 1590 |
1506 mapped_isolate_snapshot_data = | 1591 mapped_isolate_snapshot_data = |
1507 file->Map(File::kReadOnly, 0, file->Length()); | 1592 MapFile(isolate_snapshot_data_filename, File::kReadOnly); |
1508 if (mapped_isolate_snapshot_data == NULL) { | |
1509 Log::PrintErr("Failed to read: %s\n", isolate_snapshot_data_filename); | |
1510 return kErrorExitCode; | |
1511 } | |
1512 file->Release(); | |
1513 isolate_snapshot_data = reinterpret_cast<const uint8_t*>( | 1593 isolate_snapshot_data = reinterpret_cast<const uint8_t*>( |
1514 mapped_isolate_snapshot_data->address()); | 1594 mapped_isolate_snapshot_data->address()); |
| 1595 |
| 1596 if (isolate_snapshot_instructions_filename != NULL) { |
| 1597 mapped_isolate_snapshot_instructions = |
| 1598 MapFile(isolate_snapshot_instructions_filename, File::kReadExecute); |
| 1599 isolate_snapshot_instructions = reinterpret_cast<const uint8_t*>( |
| 1600 mapped_isolate_snapshot_instructions->address()); |
| 1601 } |
1515 } | 1602 } |
1516 | 1603 |
1517 char* error = Dart_Initialize(&init_params); | 1604 char* error = Dart_Initialize(&init_params); |
1518 if (error != NULL) { | 1605 if (error != NULL) { |
1519 Log::PrintErr("VM initialization failed: %s\n", error); | 1606 Log::PrintErr("VM initialization failed: %s\n", error); |
1520 free(error); | 1607 free(error); |
1521 return kErrorExitCode; | 1608 return kErrorExitCode; |
1522 } | 1609 } |
1523 | 1610 |
1524 IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root, | 1611 IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root, |
1525 commandline_packages_file, NULL); | 1612 commandline_packages_file, NULL); |
1526 Dart_Isolate isolate = Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data, | 1613 Dart_Isolate isolate = Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data, |
1527 NULL, NULL, isolate_data, &error); | 1614 isolate_snapshot_instructions, NULL, |
| 1615 isolate_data, &error); |
1528 if (isolate == NULL) { | 1616 if (isolate == NULL) { |
1529 Log::PrintErr("Error: %s\n", error); | 1617 Log::PrintErr("Error: %s\n", error); |
1530 free(error); | 1618 free(error); |
1531 exit(kErrorExitCode); | 1619 exit(kErrorExitCode); |
1532 } | 1620 } |
1533 | 1621 |
1534 Dart_Handle result; | 1622 Dart_Handle result; |
1535 Dart_Handle library; | 1623 Dart_Handle library; |
1536 Dart_EnterScope(); | 1624 Dart_EnterScope(); |
1537 | 1625 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1582 void* kernel_program = NULL; | 1670 void* kernel_program = NULL; |
1583 if (is_kernel_file) { | 1671 if (is_kernel_file) { |
1584 kernel_program = Dart_ReadKernelBinary(kernel, kernel_length); | 1672 kernel_program = Dart_ReadKernelBinary(kernel, kernel_length); |
1585 free(const_cast<uint8_t*>(kernel)); | 1673 free(const_cast<uint8_t*>(kernel)); |
1586 } | 1674 } |
1587 | 1675 |
1588 Dart_Isolate isolate = | 1676 Dart_Isolate isolate = |
1589 is_kernel_file | 1677 is_kernel_file |
1590 ? Dart_CreateIsolateFromKernel(NULL, NULL, kernel_program, NULL, | 1678 ? Dart_CreateIsolateFromKernel(NULL, NULL, kernel_program, NULL, |
1591 isolate_data, &error) | 1679 isolate_data, &error) |
1592 : Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data, NULL, NULL, | 1680 : Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data, |
| 1681 isolate_snapshot_instructions, NULL, |
1593 isolate_data, &error); | 1682 isolate_data, &error); |
1594 if (isolate == NULL) { | 1683 if (isolate == NULL) { |
1595 Log::PrintErr("%s\n", error); | 1684 Log::PrintErr("%s\n", error); |
1596 free(error); | 1685 free(error); |
1597 exit(kErrorExitCode); | 1686 exit(kErrorExitCode); |
1598 } | 1687 } |
1599 Dart_EnterScope(); | 1688 Dart_EnterScope(); |
1600 result = Dart_SetEnvironmentCallback(EnvironmentCallback); | 1689 result = Dart_SetEnvironmentCallback(EnvironmentCallback); |
1601 CHECK_RESULT(result); | 1690 CHECK_RESULT(result); |
1602 | 1691 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1636 | 1725 |
1637 // Ensure that we mark all libraries as loaded. | 1726 // Ensure that we mark all libraries as loaded. |
1638 result = Dart_FinalizeLoading(false); | 1727 result = Dart_FinalizeLoading(false); |
1639 CHECK_RESULT(result); | 1728 CHECK_RESULT(result); |
1640 | 1729 |
1641 if (!dependencies_only) { | 1730 if (!dependencies_only) { |
1642 switch (snapshot_kind) { | 1731 switch (snapshot_kind) { |
1643 case kCore: | 1732 case kCore: |
1644 CreateAndWriteCoreSnapshot(); | 1733 CreateAndWriteCoreSnapshot(); |
1645 break; | 1734 break; |
| 1735 case kCoreJIT: |
| 1736 CreateAndWriteCoreJITSnapshot(); |
| 1737 break; |
1646 case kScript: | 1738 case kScript: |
1647 CreateAndWriteScriptSnapshot(); | 1739 CreateAndWriteScriptSnapshot(); |
1648 break; | 1740 break; |
1649 case kAppAOTBlobs: | 1741 case kAppAOTBlobs: |
1650 case kAppAOTAssembly: | 1742 case kAppAOTAssembly: |
1651 CreateAndWritePrecompiledSnapshot(entry_points); | 1743 CreateAndWritePrecompiledSnapshot(entry_points); |
1652 break; | 1744 break; |
1653 default: | 1745 default: |
1654 UNREACHABLE(); | 1746 UNREACHABLE(); |
1655 } | 1747 } |
1656 } | 1748 } |
1657 | 1749 |
1658 CreateAndWriteDependenciesFile(); | 1750 CreateAndWriteDependenciesFile(); |
1659 | 1751 |
1660 Dart_ExitScope(); | 1752 Dart_ExitScope(); |
1661 Dart_ShutdownIsolate(); | 1753 Dart_ShutdownIsolate(); |
1662 | 1754 |
1663 CleanupEntryPointsCollection(entry_points); | 1755 CleanupEntryPointsCollection(entry_points); |
1664 | 1756 |
1665 Dart_EnterIsolate(UriResolverIsolateScope::isolate); | 1757 Dart_EnterIsolate(UriResolverIsolateScope::isolate); |
1666 Dart_ShutdownIsolate(); | 1758 Dart_ShutdownIsolate(); |
1667 } else { | 1759 } else { |
1668 SetupForGenericSnapshotCreation(); | 1760 SetupForGenericSnapshotCreation(); |
1669 CreateAndWriteCoreSnapshot(); | 1761 switch (snapshot_kind) { |
| 1762 case kCore: |
| 1763 CreateAndWriteCoreSnapshot(); |
| 1764 break; |
| 1765 case kCoreJIT: |
| 1766 CreateAndWriteCoreJITSnapshot(); |
| 1767 break; |
| 1768 default: |
| 1769 UNREACHABLE(); |
| 1770 break; |
| 1771 } |
1670 | 1772 |
1671 Dart_ExitScope(); | 1773 Dart_ExitScope(); |
1672 Dart_ShutdownIsolate(); | 1774 Dart_ShutdownIsolate(); |
1673 } | 1775 } |
1674 error = Dart_Cleanup(); | 1776 error = Dart_Cleanup(); |
1675 if (error != NULL) { | 1777 if (error != NULL) { |
1676 Log::PrintErr("VM cleanup failed: %s\n", error); | 1778 Log::PrintErr("VM cleanup failed: %s\n", error); |
1677 free(error); | 1779 free(error); |
1678 } | 1780 } |
1679 EventHandler::Stop(); | 1781 EventHandler::Stop(); |
1680 delete mapped_vm_snapshot_data; | 1782 delete mapped_vm_snapshot_data; |
1681 delete mapped_isolate_snapshot_data; | 1783 delete mapped_isolate_snapshot_data; |
1682 return 0; | 1784 return 0; |
1683 } | 1785 } |
1684 | 1786 |
1685 } // namespace bin | 1787 } // namespace bin |
1686 } // namespace dart | 1788 } // namespace dart |
1687 | 1789 |
1688 int main(int argc, char** argv) { | 1790 int main(int argc, char** argv) { |
1689 return dart::bin::main(argc, argv); | 1791 return dart::bin::main(argc, argv); |
1690 } | 1792 } |
OLD | NEW |