| Index: runtime/bin/dartutils.cc
 | 
| diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
 | 
| index 11c5f5b40d8f1e07c434815cac2e80c4957a6f4b..dd63bec000de6c79ed7a318f7d4231b0924039fb 100644
 | 
| --- a/runtime/bin/dartutils.cc
 | 
| +++ b/runtime/bin/dartutils.cc
 | 
| @@ -482,12 +482,6 @@ void DartUtils::WriteMagicNumber(File* file) {
 | 
|  Dart_Handle DartUtils::LoadScript(const char* script_uri,
 | 
|                                    Dart_Handle builtin_lib) {
 | 
|    Dart_Handle uri = Dart_NewStringFromCString(script_uri);
 | 
| -
 | 
| -  Dart_Port load_port = Dart_ServiceWaitForLoadPort();
 | 
| -  if (load_port == ILLEGAL_PORT) {
 | 
| -    return NewDartUnsupportedError("Service did not return load port.");
 | 
| -  }
 | 
| -  Builtin::SetLoadPort(load_port);
 | 
|    IsolateData* isolate_data =
 | 
|        reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
 | 
|    Dart_TimelineAsyncBegin("LoadScript", &(isolate_data->load_async_id));
 | 
| @@ -632,11 +626,12 @@ void FUNCTION_NAME(Builtin_GetCurrentDirectory)(Dart_NativeArguments args) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
 | 
| -                                      Dart_Handle internal_lib,
 | 
| -                                      bool is_service_isolate,
 | 
| -                                      bool trace_loading,
 | 
| -                                      const char* package_root) {
 | 
| +Dart_Handle DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
 | 
| +                                             Dart_Handle internal_lib,
 | 
| +                                             bool is_service_isolate,
 | 
| +                                             bool trace_loading,
 | 
| +                                             const char* package_root,
 | 
| +                                             const char* packages_file) {
 | 
|    // Setup the internal library's 'internalPrint' function.
 | 
|    Dart_Handle print = Dart_Invoke(
 | 
|        builtin_lib, NewString("_getPrintClosure"), 0, NULL);
 | 
| @@ -655,16 +650,20 @@ void DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
 | 
|                               NewString("_traceLoading"), Dart_True());
 | 
|        DART_CHECK_VALID(result);
 | 
|      }
 | 
| -  }
 | 
| -
 | 
| -  if (!is_service_isolate) {
 | 
|      // Set current working directory.
 | 
|      result = SetWorkingDirectory(builtin_lib);
 | 
|      DART_CHECK_VALID(result);
 | 
| +    // Wait for the service isolate to initialize the load port.
 | 
| +    Dart_Port load_port = Dart_ServiceWaitForLoadPort();
 | 
| +    if (load_port == ILLEGAL_PORT) {
 | 
| +      return NewDartUnsupportedError("Service did not return load port.");
 | 
| +    }
 | 
| +    Builtin::SetLoadPort(load_port);
 | 
|    }
 | 
|  
 | 
|    // Set up package root if specified.
 | 
|    if (package_root != NULL) {
 | 
| +    ASSERT(packages_file == NULL);
 | 
|      result = NewString(package_root);
 | 
|      DART_CHECK_VALID(result);
 | 
|      const int kNumArgs = 1;
 | 
| @@ -675,7 +674,19 @@ void DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
 | 
|                           kNumArgs,
 | 
|                           dart_args);
 | 
|      DART_CHECK_VALID(result);
 | 
| +  } else if (packages_file != NULL) {
 | 
| +    result = NewString(packages_file);
 | 
| +    DART_CHECK_VALID(result);
 | 
| +    const int kNumArgs = 1;
 | 
| +    Dart_Handle dart_args[kNumArgs];
 | 
| +    dart_args[0] = result;
 | 
| +    result = Dart_Invoke(builtin_lib,
 | 
| +                         NewString("_loadPackagesMap"),
 | 
| +                         kNumArgs,
 | 
| +                         dart_args);
 | 
| +    DART_CHECK_VALID(result);
 | 
|    }
 | 
| +  return Dart_True();
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -718,6 +729,7 @@ void DartUtils::PrepareIsolateLibrary(Dart_Handle isolate_lib) {
 | 
|  
 | 
|  
 | 
|  Dart_Handle DartUtils::PrepareForScriptLoading(const char* package_root,
 | 
| +                                               const char* packages_file,
 | 
|                                                 bool is_service_isolate,
 | 
|                                                 bool trace_loading,
 | 
|                                                 Dart_Handle builtin_lib) {
 | 
| @@ -746,11 +758,14 @@ Dart_Handle DartUtils::PrepareForScriptLoading(const char* package_root,
 | 
|    Dart_Handle result = Dart_FinalizeLoading(false);
 | 
|    DART_CHECK_VALID(result);
 | 
|  
 | 
| -  PrepareBuiltinLibrary(builtin_lib,
 | 
| -                        internal_lib,
 | 
| -                        is_service_isolate,
 | 
| -                        trace_loading,
 | 
| -                        package_root);
 | 
| +  result = PrepareBuiltinLibrary(builtin_lib,
 | 
| +                                 internal_lib,
 | 
| +                                 is_service_isolate,
 | 
| +                                 trace_loading,
 | 
| +                                 package_root,
 | 
| +                                 packages_file);
 | 
| +  DART_CHECK_VALID(result);
 | 
| +
 | 
|    PrepareAsyncLibrary(async_lib, isolate_lib);
 | 
|    PrepareCoreLibrary(core_lib, builtin_lib, is_service_isolate);
 | 
|    PrepareIsolateLibrary(isolate_lib);
 | 
| 
 |