| Index: components/nacl/renderer/ppb_nacl_private_impl.cc
|
| diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc
|
| index fb5e6dc9e356f52fef1a591e386cada970e43eaf..42203581c9f43d6b877787dcad27f536cf718c52 100644
|
| --- a/components/nacl/renderer/ppb_nacl_private_impl.cc
|
| +++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
|
| @@ -267,6 +267,7 @@ class ManifestServiceProxy : public ManifestServiceChannel::Delegate {
|
| PP_PNaClOptions pnacl_options;
|
| pnacl_options.translate = PP_FALSE;
|
| pnacl_options.is_debug = PP_FALSE;
|
| + pnacl_options.use_subzero = PP_FALSE;
|
| pnacl_options.opt_level = 2;
|
| bool is_helper_process = process_type_ == kPNaClTranslatorProcessType;
|
| if (!ManifestResolveKey(pp_instance_, is_helper_process, key, &url,
|
| @@ -1058,6 +1059,15 @@ PP_Bool ManifestGetProgramURL(PP_Instance instance,
|
| &error_info)) {
|
| *pp_full_url = ppapi::StringVar::StringToPPVar(full_url);
|
| *pp_uses_nonsfi_mode = PP_FromBool(uses_nonsfi_mode);
|
| + // Check if we should use Subzero (x86-32 / non-debugging case for now).
|
| + if (pnacl_options->opt_level == 0 && !pnacl_options->is_debug &&
|
| + strcmp(GetSandboxArch(), "x86-32") == 0 &&
|
| + base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kEnablePNaClSubzero)) {
|
| + pnacl_options->use_subzero = PP_TRUE;
|
| + // Subzero -O2 is closer to LLC -O0, so indicate -O2.
|
| + pnacl_options->opt_level = 2;
|
| + }
|
| return PP_TRUE;
|
| }
|
|
|
| @@ -1099,7 +1109,8 @@ bool ManifestResolveKey(PP_Instance instance,
|
|
|
| PP_Bool GetPNaClResourceInfo(PP_Instance instance,
|
| PP_Var* llc_tool_name,
|
| - PP_Var* ld_tool_name) {
|
| + PP_Var* ld_tool_name,
|
| + PP_Var* subzero_tool_name) {
|
| static const char kFilename[] = "chrome://pnacl-translator/pnacl.json";
|
| NexeLoadManager* load_manager = GetNexeLoadManager(instance);
|
| DCHECK(load_manager);
|
| @@ -1176,18 +1187,30 @@ PP_Bool GetPNaClResourceInfo(PP_Instance instance,
|
| if (json_data.isMember("pnacl-llc-name")) {
|
| Json::Value json_name = json_data["pnacl-llc-name"];
|
| if (json_name.isString()) {
|
| - std::string llc_tool_name_str = json_name.asString();
|
| - *llc_tool_name = ppapi::StringVar::StringToPPVar(llc_tool_name_str);
|
| + *llc_tool_name = ppapi::StringVar::StringToPPVar(json_name.asString());
|
| }
|
| }
|
|
|
| if (json_data.isMember("pnacl-ld-name")) {
|
| Json::Value json_name = json_data["pnacl-ld-name"];
|
| if (json_name.isString()) {
|
| - std::string ld_tool_name_str = json_name.asString();
|
| - *ld_tool_name = ppapi::StringVar::StringToPPVar(ld_tool_name_str);
|
| + *ld_tool_name = ppapi::StringVar::StringToPPVar(json_name.asString());
|
| }
|
| }
|
| +
|
| + if (json_data.isMember("pnacl-sz-name")) {
|
| + Json::Value json_name = json_data["pnacl-sz-name"];
|
| + if (json_name.isString()) {
|
| + *subzero_tool_name =
|
| + ppapi::StringVar::StringToPPVar(json_name.asString());
|
| + }
|
| + } else {
|
| + // TODO(jvoung): remove fallback after one chrome release
|
| + // or when we bump the kMinPnaclVersion.
|
| + // TODO(jvoung): Just use strings instead of PP_Var!
|
| + *subzero_tool_name = ppapi::StringVar::StringToPPVar("pnacl-sz.nexe");
|
| + }
|
| +
|
| return PP_TRUE;
|
| }
|
|
|
|
|