| Index: runtime/bin/main.cc
 | 
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
 | 
| index 384931c55556f578d567363adf67a4f59b870767..b5f958d30c0ce749125811e4f223fbb4e77f0505 100644
 | 
| --- a/runtime/bin/main.cc
 | 
| +++ b/runtime/bin/main.cc
 | 
| @@ -34,14 +34,11 @@
 | 
|  namespace dart {
 | 
|  namespace bin {
 | 
|  
 | 
| -// vm_isolate_snapshot_buffer points to a snapshot for the vm isolate if we
 | 
| -// link in a snapshot otherwise it is initialized to NULL.
 | 
| -extern const uint8_t* vm_isolate_snapshot_buffer;
 | 
| -
 | 
| -// isolate_snapshot_buffer points to a snapshot for an isolate if we link in a
 | 
| -// snapshot otherwise it is initialized to NULL.
 | 
| -extern const uint8_t* core_isolate_snapshot_buffer;
 | 
| -
 | 
| +// Snapshot pieces if we link in a snapshot, otherwise initialized to NULL.
 | 
| +extern const uint8_t* vm_snapshot_data;
 | 
| +extern const uint8_t* vm_snapshot_instructions;
 | 
| +extern const uint8_t* core_isolate_snapshot_data;
 | 
| +extern const uint8_t* core_isolate_snapshot_instructions;
 | 
|  
 | 
|  /**
 | 
|   * Global state used to control and store generation of application snapshots
 | 
| @@ -98,10 +95,10 @@ static bool parse_all = false;
 | 
|  static bool use_blobs = false;
 | 
|  
 | 
|  
 | 
| -extern const char* kPrecompiledVMIsolateSymbolName;
 | 
| -extern const char* kPrecompiledIsolateSymbolName;
 | 
| -extern const char* kPrecompiledInstructionsSymbolName;
 | 
| -extern const char* kPrecompiledDataSymbolName;
 | 
| +extern const char* kVmSnapshotDataSymbolName;
 | 
| +extern const char* kVmSnapshotInstructionsSymbolName;
 | 
| +extern const char* kIsolateSnapshotDataSymbolName;
 | 
| +extern const char* kIsolateSnapshotInstructionsSymbolName;
 | 
|  
 | 
|  
 | 
|  // Global flag that is used to indicate that we want to trace resolution of
 | 
| @@ -110,7 +107,8 @@ static bool trace_loading = false;
 | 
|  
 | 
|  
 | 
|  static char* app_script_uri = NULL;
 | 
| -static const uint8_t* app_isolate_snapshot_buffer = NULL;
 | 
| +static const uint8_t* app_isolate_snapshot_data = NULL;
 | 
| +static const uint8_t* app_isolate_snapshot_instructions = NULL;
 | 
|  
 | 
|  
 | 
|  static Dart_Isolate main_isolate = NULL;
 | 
| @@ -835,17 +833,22 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate,
 | 
|  #if defined(DART_PRECOMPILED_RUNTIME)
 | 
|    // AOT: All isolates start from the app snapshot.
 | 
|    bool isolate_run_app_snapshot = true;
 | 
| -  const uint8_t* isolate_snapshot_buffer = app_isolate_snapshot_buffer;
 | 
| +  const uint8_t* isolate_snapshot_data = app_isolate_snapshot_data;
 | 
| +  const uint8_t* isolate_snapshot_instructions =
 | 
| +      app_isolate_snapshot_instructions;
 | 
|  #else
 | 
| -  // JIT: Main isolate starts from the app snapshot, if any. Other use the
 | 
| -  // core libraries snapshot.
 | 
| +  // JIT: Main isolate starts from the app snapshot, if any. Other isolates
 | 
| +  // use the core libraries snapshot.
 | 
|    bool isolate_run_app_snapshot = false;
 | 
| -  const uint8_t* isolate_snapshot_buffer = core_isolate_snapshot_buffer;
 | 
| -  if ((app_isolate_snapshot_buffer != NULL) &&
 | 
| +  const uint8_t* isolate_snapshot_data = core_isolate_snapshot_data;
 | 
| +  const uint8_t* isolate_snapshot_instructions =
 | 
| +      core_isolate_snapshot_instructions;
 | 
| +  if ((app_isolate_snapshot_data != NULL) &&
 | 
|        (is_main_isolate || ((app_script_uri != NULL) &&
 | 
|                             (strcmp(script_uri, app_script_uri) == 0)))) {
 | 
|      isolate_run_app_snapshot = true;
 | 
| -    isolate_snapshot_buffer = app_isolate_snapshot_buffer;
 | 
| +    isolate_snapshot_data = app_isolate_snapshot_data;
 | 
| +    isolate_snapshot_instructions = app_isolate_snapshot_instructions;
 | 
|    }
 | 
|  #endif
 | 
|  
 | 
| @@ -868,8 +871,9 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate,
 | 
|    Dart_Isolate isolate =
 | 
|        is_kernel ? Dart_CreateIsolateFromKernel(script_uri, main, kernel_program,
 | 
|                                                 flags, isolate_data, error)
 | 
| -                : Dart_CreateIsolate(script_uri, main, isolate_snapshot_buffer,
 | 
| -                                     flags, isolate_data, error);
 | 
| +                : Dart_CreateIsolate(script_uri, main, isolate_snapshot_data,
 | 
| +                                     isolate_snapshot_instructions, flags,
 | 
| +                                     isolate_data, error);
 | 
|    if (isolate == NULL) {
 | 
|      delete isolate_data;
 | 
|      return NULL;
 | 
| @@ -885,7 +889,7 @@ static Dart_Isolate CreateIsolateAndSetupHelper(bool is_main_isolate,
 | 
|      Dart_Handle result = Dart_LoadKernel(kernel_program);
 | 
|      CHECK_RESULT(result);
 | 
|    }
 | 
| -  if (is_kernel || (isolate_snapshot_buffer != NULL)) {
 | 
| +  if (is_kernel || (isolate_snapshot_data != NULL)) {
 | 
|      // Setup the native resolver as the snapshot does not carry it.
 | 
|      Builtin::SetNativeResolver(Builtin::kBuiltinLibrary);
 | 
|      Builtin::SetNativeResolver(Builtin::kIOLibrary);
 | 
| @@ -1290,10 +1294,10 @@ static const int64_t kAppSnapshotPageSize = 4 * KB;
 | 
|  
 | 
|  
 | 
|  static bool ReadAppSnapshotBlobs(const char* script_name,
 | 
| -                                 const uint8_t** vmisolate_buffer,
 | 
| -                                 const uint8_t** isolate_buffer,
 | 
| -                                 const uint8_t** instructions_buffer,
 | 
| -                                 const uint8_t** rodata_buffer) {
 | 
| +                                 const uint8_t** vm_data_buffer,
 | 
| +                                 const uint8_t** vm_instructions_buffer,
 | 
| +                                 const uint8_t** isolate_data_buffer,
 | 
| +                                 const uint8_t** isolate_instructions_buffer) {
 | 
|    File* file = File::Open(script_name, File::kRead);
 | 
|    if (file == NULL) {
 | 
|      return false;
 | 
| @@ -1313,51 +1317,58 @@ static bool ReadAppSnapshotBlobs(const char* script_name,
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  int64_t vmisolate_size = header[1];
 | 
| -  int64_t vmisolate_position =
 | 
| +  int64_t vm_data_size = header[1];
 | 
| +  int64_t vm_data_position =
 | 
|        Utils::RoundUp(file->Position(), kAppSnapshotPageSize);
 | 
| -  int64_t isolate_size = header[2];
 | 
| -  int64_t isolate_position =
 | 
| -      Utils::RoundUp(vmisolate_position + vmisolate_size, kAppSnapshotPageSize);
 | 
| -  int64_t rodata_size = header[3];
 | 
| -  int64_t rodata_position = isolate_position + isolate_size;
 | 
| -  if (rodata_size != 0) {
 | 
| -    rodata_position = Utils::RoundUp(rodata_position, kAppSnapshotPageSize);
 | 
| -  }
 | 
| -  int64_t instructions_size = header[4];
 | 
| -  int64_t instructions_position = rodata_position + rodata_size;
 | 
| -  if (instructions_size != 0) {
 | 
| -    instructions_position =
 | 
| -        Utils::RoundUp(instructions_position, kAppSnapshotPageSize);
 | 
| -  }
 | 
| -
 | 
| -  void* read_only_buffer =
 | 
| -      file->Map(File::kReadOnly, vmisolate_position,
 | 
| -                instructions_position - vmisolate_position);
 | 
| -  if (read_only_buffer == NULL) {
 | 
| -    Log::PrintErr("Failed to memory map snapshot\n");
 | 
| -    Platform::Exit(kErrorExitCode);
 | 
| +  int64_t vm_instructions_size = header[2];
 | 
| +  int64_t vm_instructions_position = vm_data_position + vm_data_size;
 | 
| +  if (vm_instructions_size != 0) {
 | 
| +    vm_instructions_position =
 | 
| +        Utils::RoundUp(vm_instructions_position, kAppSnapshotPageSize);
 | 
| +  }
 | 
| +  int64_t isolate_data_size = header[3];
 | 
| +  int64_t isolate_data_position = Utils::RoundUp(
 | 
| +      vm_instructions_position + vm_instructions_size, kAppSnapshotPageSize);
 | 
| +  int64_t isolate_instructions_size = header[4];
 | 
| +  int64_t isolate_instructions_position =
 | 
| +      isolate_data_position + isolate_data_size;
 | 
| +  if (isolate_instructions_size != 0) {
 | 
| +    isolate_instructions_position =
 | 
| +        Utils::RoundUp(isolate_instructions_position, kAppSnapshotPageSize);
 | 
| +  }
 | 
| +
 | 
| +  if (vm_data_size != 0) {
 | 
| +    *vm_data_buffer = reinterpret_cast<const uint8_t*>(
 | 
| +        file->Map(File::kReadOnly, vm_data_position, vm_data_size));
 | 
| +    if (vm_data_buffer == NULL) {
 | 
| +      Log::PrintErr("Failed to memory map snapshot\n");
 | 
| +      Platform::Exit(kErrorExitCode);
 | 
| +    }
 | 
|    }
 | 
|  
 | 
| -  if (vmisolate_size != 0) {
 | 
| -    *vmisolate_buffer = reinterpret_cast<const uint8_t*>(read_only_buffer) +
 | 
| -                        (vmisolate_position - vmisolate_position);
 | 
| +  if (vm_instructions_size != 0) {
 | 
| +    *vm_instructions_buffer = reinterpret_cast<const uint8_t*>(file->Map(
 | 
| +        File::kReadExecute, vm_instructions_position, vm_instructions_size));
 | 
| +    if (*vm_instructions_buffer == NULL) {
 | 
| +      Log::PrintErr("Failed to memory map snapshot\n");
 | 
| +      Platform::Exit(kErrorExitCode);
 | 
| +    }
 | 
|    }
 | 
| -  *isolate_buffer = reinterpret_cast<const uint8_t*>(read_only_buffer) +
 | 
| -                    (isolate_position - vmisolate_position);
 | 
| -  if (rodata_size == 0) {
 | 
| -    *rodata_buffer = NULL;
 | 
| -  } else {
 | 
| -    *rodata_buffer = reinterpret_cast<const uint8_t*>(read_only_buffer) +
 | 
| -                     (rodata_position - vmisolate_position);
 | 
| +
 | 
| +  *isolate_data_buffer = reinterpret_cast<const uint8_t*>(
 | 
| +      file->Map(File::kReadOnly, isolate_data_position, isolate_data_size));
 | 
| +  if (isolate_data_buffer == NULL) {
 | 
| +    Log::PrintErr("Failed to memory map snapshot\n");
 | 
| +    Platform::Exit(kErrorExitCode);
 | 
|    }
 | 
|  
 | 
| -  if (instructions_size == 0) {
 | 
| -    *instructions_buffer = NULL;
 | 
| +  if (isolate_instructions_size == 0) {
 | 
| +    *isolate_instructions_buffer = NULL;
 | 
|    } else {
 | 
| -    *instructions_buffer = reinterpret_cast<const uint8_t*>(
 | 
| -        file->Map(File::kReadExecute, instructions_position, header[4]));
 | 
| -    if (*instructions_buffer == NULL) {
 | 
| +    *isolate_instructions_buffer = reinterpret_cast<const uint8_t*>(
 | 
| +        file->Map(File::kReadExecute, isolate_instructions_position,
 | 
| +                  isolate_instructions_size));
 | 
| +    if (*isolate_instructions_buffer == NULL) {
 | 
|        Log::PrintErr("Failed to memory map snapshot\n");
 | 
|        Platform::Exit(kErrorExitCode);
 | 
|      }
 | 
| @@ -1369,45 +1380,46 @@ static bool ReadAppSnapshotBlobs(const char* script_name,
 | 
|  
 | 
|  
 | 
|  #if defined(DART_PRECOMPILED_RUNTIME)
 | 
| -static bool ReadAppSnapshotDynamicLibrary(const char* script_name,
 | 
| -                                          const uint8_t** vmisolate_buffer,
 | 
| -                                          const uint8_t** isolate_buffer,
 | 
| -                                          const uint8_t** instructions_buffer,
 | 
| -                                          const uint8_t** rodata_buffer) {
 | 
| +static bool ReadAppSnapshotDynamicLibrary(
 | 
| +    const char* script_name,
 | 
| +    const uint8_t** vm_data_buffer,
 | 
| +    const uint8_t** vm_instructions_buffer,
 | 
| +    const uint8_t** isolate_data_buffer,
 | 
| +    const uint8_t** isolate_instructions_buffer) {
 | 
|    void* library = Extensions::LoadExtensionLibrary(script_name);
 | 
|    if (library == NULL) {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  *vmisolate_buffer = reinterpret_cast<const uint8_t*>(
 | 
| -      Extensions::ResolveSymbol(library, kPrecompiledVMIsolateSymbolName));
 | 
| -  if (*vmisolate_buffer == NULL) {
 | 
| -    Log::PrintErr("Failed to resolve symbol '%s'\n",
 | 
| -                  kPrecompiledVMIsolateSymbolName);
 | 
| +  *vm_data_buffer = reinterpret_cast<const uint8_t*>(
 | 
| +      Extensions::ResolveSymbol(library, kVmSnapshotDataSymbolName));
 | 
| +  if (*vm_data_buffer == NULL) {
 | 
| +    Log::PrintErr("Failed to resolve symbol '%s'\n", kVmSnapshotDataSymbolName);
 | 
|      Platform::Exit(kErrorExitCode);
 | 
|    }
 | 
|  
 | 
| -  *isolate_buffer = reinterpret_cast<const uint8_t*>(
 | 
| -      Extensions::ResolveSymbol(library, kPrecompiledIsolateSymbolName));
 | 
| -  if (*isolate_buffer == NULL) {
 | 
| +  *vm_instructions_buffer = reinterpret_cast<const uint8_t*>(
 | 
| +      Extensions::ResolveSymbol(library, kVmSnapshotInstructionsSymbolName));
 | 
| +  if (*vm_instructions_buffer == NULL) {
 | 
|      Log::PrintErr("Failed to resolve symbol '%s'\n",
 | 
| -                  kPrecompiledIsolateSymbolName);
 | 
| +                  kVmSnapshotInstructionsSymbolName);
 | 
|      Platform::Exit(kErrorExitCode);
 | 
|    }
 | 
|  
 | 
| -  *instructions_buffer = reinterpret_cast<const uint8_t*>(
 | 
| -      Extensions::ResolveSymbol(library, kPrecompiledInstructionsSymbolName));
 | 
| -  if (*instructions_buffer == NULL) {
 | 
| +  *isolate_data_buffer = reinterpret_cast<const uint8_t*>(
 | 
| +      Extensions::ResolveSymbol(library, kIsolateSnapshotDataSymbolName));
 | 
| +  if (*isolate_data_buffer == NULL) {
 | 
|      Log::PrintErr("Failed to resolve symbol '%s'\n",
 | 
| -                  kPrecompiledInstructionsSymbolName);
 | 
| +                  kIsolateSnapshotDataSymbolName);
 | 
|      Platform::Exit(kErrorExitCode);
 | 
|    }
 | 
|  
 | 
| -  *rodata_buffer = reinterpret_cast<const uint8_t*>(
 | 
| -      Extensions::ResolveSymbol(library, kPrecompiledDataSymbolName));
 | 
| -  if (*rodata_buffer == NULL) {
 | 
| +  *isolate_instructions_buffer =
 | 
| +      reinterpret_cast<const uint8_t*>(Extensions::ResolveSymbol(
 | 
| +          library, kIsolateSnapshotInstructionsSymbolName));
 | 
| +  if (*isolate_instructions_buffer == NULL) {
 | 
|      Log::PrintErr("Failed to resolve symbol '%s'\n",
 | 
| -                  kPrecompiledDataSymbolName);
 | 
| +                  kIsolateSnapshotInstructionsSymbolName);
 | 
|      Platform::Exit(kErrorExitCode);
 | 
|    }
 | 
|  
 | 
| @@ -1417,26 +1429,26 @@ static bool ReadAppSnapshotDynamicLibrary(const char* script_name,
 | 
|  
 | 
|  
 | 
|  static bool ReadAppSnapshot(const char* script_name,
 | 
| -                            const uint8_t** vmisolate_buffer,
 | 
| -                            const uint8_t** isolate_buffer,
 | 
| -                            const uint8_t** instructions_buffer,
 | 
| -                            const uint8_t** rodata_buffer) {
 | 
| +                            const uint8_t** vm_data_buffer,
 | 
| +                            const uint8_t** vm_instructions_buffer,
 | 
| +                            const uint8_t** isolate_data_buffer,
 | 
| +                            const uint8_t** isolate_instructions_buffer) {
 | 
|    if (File::GetType(script_name, true) != File::kIsFile) {
 | 
|      // If 'script_name' refers to a pipe, don't read to check for an app
 | 
|      // snapshot since we cannot rewind if it isn't (and couldn't mmap it in
 | 
|      // anyway if it was).
 | 
|      return false;
 | 
|    }
 | 
| -  if (ReadAppSnapshotBlobs(script_name, vmisolate_buffer, isolate_buffer,
 | 
| -                           instructions_buffer, rodata_buffer)) {
 | 
| +  if (ReadAppSnapshotBlobs(script_name, vm_data_buffer, vm_instructions_buffer,
 | 
| +                           isolate_data_buffer, isolate_instructions_buffer)) {
 | 
|      return true;
 | 
|    }
 | 
|  #if defined(DART_PRECOMPILED_RUNTIME)
 | 
|    // For testing AOT with the standalone embedder, we also support loading
 | 
|    // from a dynamic library to simulate what happens on iOS.
 | 
| -  return ReadAppSnapshotDynamicLibrary(script_name, vmisolate_buffer,
 | 
| -                                       isolate_buffer, instructions_buffer,
 | 
| -                                       rodata_buffer);
 | 
| +  return ReadAppSnapshotDynamicLibrary(
 | 
| +      script_name, vm_data_buffer, vm_instructions_buffer, isolate_data_buffer,
 | 
| +      isolate_instructions_buffer);
 | 
|  #else
 | 
|    return false;
 | 
|  #endif  //  defined(DART_PRECOMPILED_RUNTIME)
 | 
| @@ -1449,47 +1461,48 @@ static bool WriteInt64(File* file, int64_t size) {
 | 
|  
 | 
|  
 | 
|  static void WriteAppSnapshot(const char* filename,
 | 
| -                             uint8_t* vmisolate_buffer,
 | 
| -                             intptr_t vmisolate_size,
 | 
| -                             uint8_t* isolate_buffer,
 | 
| -                             intptr_t isolate_size,
 | 
| -                             uint8_t* instructions_buffer,
 | 
| -                             intptr_t instructions_size,
 | 
| -                             uint8_t* rodata_buffer,
 | 
| -                             intptr_t rodata_size) {
 | 
| +                             uint8_t* vm_data_buffer,
 | 
| +                             intptr_t vm_data_size,
 | 
| +                             uint8_t* vm_instructions_buffer,
 | 
| +                             intptr_t vm_instructions_size,
 | 
| +                             uint8_t* isolate_data_buffer,
 | 
| +                             intptr_t isolate_data_size,
 | 
| +                             uint8_t* isolate_instructions_buffer,
 | 
| +                             intptr_t isolate_instructions_size) {
 | 
|    File* file = File::Open(filename, File::kWriteTruncate);
 | 
|    if (file == NULL) {
 | 
|      ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n", filename);
 | 
|    }
 | 
|  
 | 
|    file->WriteFully(&kAppSnapshotMagicNumber, sizeof(kAppSnapshotMagicNumber));
 | 
| -  WriteInt64(file, vmisolate_size);
 | 
| -  WriteInt64(file, isolate_size);
 | 
| -  WriteInt64(file, rodata_size);
 | 
| -  WriteInt64(file, instructions_size);
 | 
| +  WriteInt64(file, vm_data_size);
 | 
| +  WriteInt64(file, vm_instructions_size);
 | 
| +  WriteInt64(file, isolate_data_size);
 | 
| +  WriteInt64(file, isolate_instructions_size);
 | 
|    ASSERT(file->Position() == kAppSnapshotHeaderSize);
 | 
|  
 | 
|    file->SetPosition(Utils::RoundUp(file->Position(), kAppSnapshotPageSize));
 | 
| -  if (!file->WriteFully(vmisolate_buffer, vmisolate_size)) {
 | 
| +  if (!file->WriteFully(vm_data_buffer, vm_data_size)) {
 | 
|      ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n", filename);
 | 
|    }
 | 
|  
 | 
| -  file->SetPosition(Utils::RoundUp(file->Position(), kAppSnapshotPageSize));
 | 
| -  if (!file->WriteFully(isolate_buffer, isolate_size)) {
 | 
| -    ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n", filename);
 | 
| -  }
 | 
| -
 | 
| -  if (rodata_size != 0) {
 | 
| +  if (vm_instructions_size != 0) {
 | 
|      file->SetPosition(Utils::RoundUp(file->Position(), kAppSnapshotPageSize));
 | 
| -    if (!file->WriteFully(rodata_buffer, rodata_size)) {
 | 
| +    if (!file->WriteFully(vm_instructions_buffer, vm_instructions_size)) {
 | 
|        ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n",
 | 
|                  filename);
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  if (instructions_size != 0) {
 | 
| +  file->SetPosition(Utils::RoundUp(file->Position(), kAppSnapshotPageSize));
 | 
| +  if (!file->WriteFully(isolate_data_buffer, isolate_data_size)) {
 | 
| +    ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n", filename);
 | 
| +  }
 | 
| +
 | 
| +  if (isolate_instructions_size != 0) {
 | 
|      file->SetPosition(Utils::RoundUp(file->Position(), kAppSnapshotPageSize));
 | 
| -    if (!file->WriteFully(instructions_buffer, instructions_size)) {
 | 
| +    if (!file->WriteFully(isolate_instructions_buffer,
 | 
| +                          isolate_instructions_size)) {
 | 
|        ErrorExit(kErrorExitCode, "Unable to write snapshot file '%s'\n",
 | 
|                  filename);
 | 
|      }
 | 
| @@ -1513,61 +1526,64 @@ static void GenerateScriptSnapshot() {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -static void GeneratePrecompiledSnapshot() {
 | 
| -  uint8_t* vm_isolate_buffer = NULL;
 | 
| -  intptr_t vm_isolate_size = 0;
 | 
| -  uint8_t* isolate_buffer = NULL;
 | 
| -  intptr_t isolate_size = 0;
 | 
| +static void GenerateAppAOTSnapshotAsBlobs() {
 | 
| +  uint8_t* vm_data_buffer = NULL;
 | 
| +  intptr_t vm_data_size = 0;
 | 
| +  uint8_t* vm_instructions_buffer = NULL;
 | 
| +  intptr_t vm_instructions_size = 0;
 | 
| +  uint8_t* isolate_data_buffer = NULL;
 | 
| +  intptr_t isolate_data_size = 0;
 | 
| +  uint8_t* isolate_instructions_buffer = NULL;
 | 
| +  intptr_t isolate_instructions_size = 0;
 | 
| +  Dart_Handle result = Dart_CreateAppAOTSnapshotAsBlobs(
 | 
| +      &vm_data_buffer, &vm_data_size, &vm_instructions_buffer,
 | 
| +      &vm_instructions_size, &isolate_data_buffer, &isolate_data_size,
 | 
| +      &isolate_instructions_buffer, &isolate_instructions_size);
 | 
| +  if (Dart_IsError(result)) {
 | 
| +    ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
 | 
| +  }
 | 
| +  WriteAppSnapshot(snapshot_filename, vm_data_buffer, vm_data_size,
 | 
| +                   vm_instructions_buffer, vm_instructions_size,
 | 
| +                   isolate_data_buffer, isolate_data_size,
 | 
| +                   isolate_instructions_buffer, isolate_instructions_size);
 | 
| +}
 | 
| +
 | 
| +static void GenerateAppAOTSnapshotAsAssembly() {
 | 
|    uint8_t* assembly_buffer = NULL;
 | 
|    intptr_t assembly_size = 0;
 | 
| -  uint8_t* instructions_blob_buffer = NULL;
 | 
| -  intptr_t instructions_blob_size = 0;
 | 
| -  uint8_t* rodata_blob_buffer = NULL;
 | 
| -  intptr_t rodata_blob_size = 0;
 | 
| -  Dart_Handle result;
 | 
| -  if (use_blobs) {
 | 
| -    result = Dart_CreateAppAOTSnapshotAsBlobs(
 | 
| -        &vm_isolate_buffer, &vm_isolate_size, &isolate_buffer, &isolate_size,
 | 
| -        &instructions_blob_buffer, &instructions_blob_size, &rodata_blob_buffer,
 | 
| -        &rodata_blob_size);
 | 
| -  } else {
 | 
| -    result =
 | 
| -        Dart_CreateAppAOTSnapshotAsAssembly(&assembly_buffer, &assembly_size);
 | 
| -  }
 | 
| +  Dart_Handle result =
 | 
| +      Dart_CreateAppAOTSnapshotAsAssembly(&assembly_buffer, &assembly_size);
 | 
|    if (Dart_IsError(result)) {
 | 
|      ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
 | 
|    }
 | 
| +  WriteSnapshotFile(snapshot_filename, false, assembly_buffer, assembly_size);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +static void GenerateAppAOTSnapshot() {
 | 
|    if (use_blobs) {
 | 
| -    WriteAppSnapshot(snapshot_filename, vm_isolate_buffer, vm_isolate_size,
 | 
| -                     isolate_buffer, isolate_size, instructions_blob_buffer,
 | 
| -                     instructions_blob_size, rodata_blob_buffer,
 | 
| -                     rodata_blob_size);
 | 
| +    GenerateAppAOTSnapshotAsBlobs();
 | 
|    } else {
 | 
| -    WriteSnapshotFile(snapshot_filename, false, assembly_buffer, assembly_size);
 | 
| +    GenerateAppAOTSnapshotAsAssembly();
 | 
|    }
 | 
|  }
 | 
|  
 | 
|  
 | 
|  static void GenerateAppJITSnapshot() {
 | 
|  #if defined(TARGET_ARCH_X64)
 | 
| -  uint8_t* vm_isolate_buffer = NULL;
 | 
| -  intptr_t vm_isolate_size = 0;
 | 
| -  uint8_t* isolate_buffer = NULL;
 | 
| -  intptr_t isolate_size = 0;
 | 
| -  uint8_t* instructions_blob_buffer = NULL;
 | 
| -  intptr_t instructions_blob_size = 0;
 | 
| -  uint8_t* rodata_blob_buffer = NULL;
 | 
| -  intptr_t rodata_blob_size = 0;
 | 
| +  uint8_t* isolate_data_buffer = NULL;
 | 
| +  intptr_t isolate_data_size = 0;
 | 
| +  uint8_t* isolate_instructions_buffer = NULL;
 | 
| +  intptr_t isolate_instructions_size = 0;
 | 
|    Dart_Handle result = Dart_CreateAppJITSnapshotAsBlobs(
 | 
| -      &isolate_buffer, &isolate_size, &instructions_blob_buffer,
 | 
| -      &instructions_blob_size, &rodata_blob_buffer, &rodata_blob_size);
 | 
| +      &isolate_data_buffer, &isolate_data_size, &isolate_instructions_buffer,
 | 
| +      &isolate_instructions_size);
 | 
|    if (Dart_IsError(result)) {
 | 
|      ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
 | 
|    }
 | 
| -  WriteAppSnapshot(snapshot_filename, vm_isolate_buffer, vm_isolate_size,
 | 
| -                   isolate_buffer, isolate_size, instructions_blob_buffer,
 | 
| -                   instructions_blob_size, rodata_blob_buffer,
 | 
| -                   rodata_blob_size);
 | 
| +  WriteAppSnapshot(snapshot_filename, NULL, 0, NULL, 0, isolate_data_buffer,
 | 
| +                   isolate_data_size, isolate_instructions_buffer,
 | 
| +                   isolate_instructions_size);
 | 
|  #else
 | 
|    uint8_t* isolate_buffer = NULL;
 | 
|    intptr_t isolate_size = 0;
 | 
| @@ -1578,8 +1594,8 @@ static void GenerateAppJITSnapshot() {
 | 
|      ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
 | 
|    }
 | 
|  
 | 
| -  WriteAppSnapshot(snapshot_filename, NULL, 0, isolate_buffer, isolate_size,
 | 
| -                   NULL, 0, NULL, 0);
 | 
| +  WriteAppSnapshot(snapshot_filename, NULL, 0, NULL, 0, isolate_buffer,
 | 
| +                   isolate_size, NULL, 0);
 | 
|  #endif  // defined(TARGET_ARCH_X64)
 | 
|  }
 | 
|  
 | 
| @@ -1747,7 +1763,7 @@ bool RunMainIsolate(const char* script_name, CommandLineOptions* dart_options) {
 | 
|      }
 | 
|  
 | 
|      if (gen_snapshot_kind == kAppAOT) {
 | 
| -      GeneratePrecompiledSnapshot();
 | 
| +      GenerateAppAOTSnapshot();
 | 
|      } else {
 | 
|        if (Dart_IsNull(root_lib)) {
 | 
|          ErrorExit(kErrorExitCode, "Unable to find root library for '%s'\n",
 | 
| @@ -1945,11 +1961,9 @@ void main(int argc, char** argv) {
 | 
|      Platform::Exit(kErrorExitCode);
 | 
|    }
 | 
|  
 | 
| -  const uint8_t* instructions_snapshot = NULL;
 | 
| -  const uint8_t* data_snapshot = NULL;
 | 
| -  if (ReadAppSnapshot(script_name, &vm_isolate_snapshot_buffer,
 | 
| -                      &app_isolate_snapshot_buffer, &instructions_snapshot,
 | 
| -                      &data_snapshot)) {
 | 
| +  if (ReadAppSnapshot(script_name, &vm_snapshot_data, &vm_snapshot_instructions,
 | 
| +                      &app_isolate_snapshot_data,
 | 
| +                      &app_isolate_snapshot_instructions)) {
 | 
|      vm_run_app_snapshot = true;
 | 
|    }
 | 
|  
 | 
| @@ -1986,9 +2000,8 @@ void main(int argc, char** argv) {
 | 
|    Dart_InitializeParams init_params;
 | 
|    memset(&init_params, 0, sizeof(init_params));
 | 
|    init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
 | 
| -  init_params.vm_isolate_snapshot = vm_isolate_snapshot_buffer;
 | 
| -  init_params.instructions_snapshot = instructions_snapshot;
 | 
| -  init_params.data_snapshot = data_snapshot;
 | 
| +  init_params.vm_snapshot_data = vm_snapshot_data;
 | 
| +  init_params.vm_snapshot_instructions = vm_snapshot_instructions;
 | 
|    init_params.create = CreateIsolateAndSetup;
 | 
|    init_params.shutdown = ShutdownIsolate;
 | 
|    init_params.file_open = DartUtils::OpenFile;
 | 
| 
 |