| Index: runtime/vm/service.cc | 
| diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc | 
| index a19f02bb882b0651e0e46ed8fb778379f8a482df..3881a1d20df837dd98f5ef168921b7bf490131cd 100644 | 
| --- a/runtime/vm/service.cc | 
| +++ b/runtime/vm/service.cc | 
| @@ -1933,7 +1933,8 @@ static bool HandleVM(JSONStream* js) { | 
| JSONObject jsobj(js); | 
| jsobj.AddProperty("type", "VM"); | 
| jsobj.AddProperty("id", "vm"); | 
| -  jsobj.AddProperty("architecture", CPU::Id()); | 
| +  jsobj.AddProperty("targetCPU", CPU::Id()); | 
| +  jsobj.AddProperty("hostCPU", HostCPUFeatures::hardware()); | 
| jsobj.AddProperty("version", Version::String()); | 
| jsobj.AddProperty("assertsEnabled", FLAG_enable_asserts); | 
| jsobj.AddProperty("typeChecksEnabled", FLAG_enable_type_checks); | 
| @@ -1953,9 +1954,47 @@ static bool HandleVM(JSONStream* js) { | 
| } | 
|  | 
|  | 
| +static bool HandleFlags(JSONStream* js) { | 
| +  if (js->num_arguments() == 1) { | 
| +    Flags::PrintJSON(js); | 
| +    return true; | 
| +  } else if (js->num_arguments() == 2) { | 
| +    const char* arg = js->GetArgument(1); | 
| +    if (strcmp(arg, "set") == 0) { | 
| +      if (js->num_arguments() > 2) { | 
| +        PrintError(js, "expected at most 2 arguments but found %" Pd "\n", | 
| +                   js->num_arguments()); | 
| +      } else { | 
| +        if (js->HasOption("name") && js->HasOption("value")) { | 
| +          JSONObject jsobj(js); | 
| +          const char* flag_name = js->LookupOption("name"); | 
| +          const char* flag_value = js->LookupOption("value"); | 
| +          const char* error = NULL; | 
| +          if (Flags::SetFlag(flag_name, flag_value, &error)) { | 
| +            jsobj.AddProperty("type", "Success"); | 
| +            jsobj.AddProperty("id", ""); | 
| +          } else { | 
| +            jsobj.AddProperty("type", "Failure"); | 
| +            jsobj.AddProperty("id", ""); | 
| +            jsobj.AddProperty("message", error); | 
| +          } | 
| +        } else { | 
| +          PrintError(js, "expected to find 'name' and 'value' options"); | 
| +        } | 
| +      } | 
| +    } | 
| +    return true; | 
| +  } else { | 
| +    PrintError(js, "Command too long"); | 
| +    return true; | 
| +  } | 
| +} | 
| + | 
| + | 
| static RootMessageHandlerEntry root_handlers[] = { | 
| { "_echo", HandleRootEcho }, | 
| { "vm", HandleVM }, | 
| +  { "flags", HandleFlags }, | 
| }; | 
|  | 
|  | 
|  |