Updated to arc-runtime-45.5021.392.0
diff --git a/mods/android/bionic/libc/include/uchar.h b/mods/android/bionic/libc/include/uchar.h
new file mode 100644
index 0000000..a0289f1
--- /dev/null
+++ b/mods/android/bionic/libc/include/uchar.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _UCHAR_H_
+#define _UCHAR_H_
+
+#include <sys/cdefs.h>
+#include <wchar.h>
+
+__BEGIN_DECLS
+
+// ARC MOD BEGIN UPSTREAM bionic-fix-char16-definition
+#if !defined(__cplusplus) && __STDC_VERSION__ >= 201112L
+typedef __CHAR16_TYPE__ char16_t;
+typedef __CHAR32_TYPE__ char32_t;
+#endif
+// ARC MOD END UPSTREAM
+#define __STD_UTF_16__ 1
+#define __STD_UTF_32__ 1
+
+size_t c16rtomb(char* __restrict, char16_t, mbstate_t* __restrict);
+size_t c32rtomb(char* __restrict, char32_t, mbstate_t* __restrict);
+size_t mbrtoc16(char16_t* __restrict,
+                const char* __restrict,
+                size_t,
+                mbstate_t* __restrict);
+size_t mbrtoc32(char32_t* __restrict,
+                const char* __restrict,
+                size_t,
+                mbstate_t* __restrict);
+
+__END_DECLS
+
+#endif /* _UCHAR_H_ */
diff --git a/mods/chromium-ppapi/config.py b/mods/chromium-ppapi/config.py
index 2970a5e..4231ed5 100644
--- a/mods/chromium-ppapi/config.py
+++ b/mods/chromium-ppapi/config.py
@@ -54,7 +54,9 @@
   # generation and later phases.
   n.rule(rule_name,
          command=('(' + ' '.join(gen_command) + ')' +
-                  ' && touch $out.tmp && mv $out.tmp $out'),
+                  ' && touch $out.tmp && mv $out.tmp $out' +
+                  ' && printf "%s: %s" $out "$in" > $out.d'),
+         depfile='$out.d',
          description=rule_name + ' $out')
 
   idls = n.find_all_files(api_dir, '.idl', use_staging=False)
diff --git a/src/build/DEPS.chrome b/src/build/DEPS.chrome
index 3c1e66a..a9a495f 100644
--- a/src/build/DEPS.chrome
+++ b/src/build/DEPS.chrome
@@ -1 +1 @@
-330591
+332162
diff --git a/src/build/DEPS.naclsdk b/src/build/DEPS.naclsdk
index b41a8e2..cbb657b 100644
--- a/src/build/DEPS.naclsdk
+++ b/src/build/DEPS.naclsdk
@@ -41,49 +41,6 @@
       "archives": [
         {
           "checksum": {
-            "sha1": "7574819c9f07f8c8e939180d6eb4bc076cf924a8"
-          },
-          "host_os": "all",
-          "size": 75915941,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/37.0.2062.94/naclports.tar.bz2"
-        },
-        {
-          "checksum": {
-            "sha1": "98e20f1150bb4b9fcf35ceea89bf0a4d3734f02f"
-          },
-          "host_os": "linux",
-          "size": 350765766,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/37.0.2062.94/naclsdk_linux.tar.bz2"
-        },
-        {
-          "checksum": {
-            "sha1": "1577b3e7e9a59a3bc307b1fc1f745c7ffa6793c5"
-          },
-          "host_os": "mac",
-          "size": 296872323,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/37.0.2062.94/naclsdk_mac.tar.bz2"
-        },
-        {
-          "checksum": {
-            "sha1": "248243b95f509f7d1ecddc3041951c2fc09508a6"
-          },
-          "host_os": "win",
-          "size": 332414690,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/37.0.2062.94/naclsdk_win.tar.bz2"
-        }
-      ],
-      "description": "Chrome 37 bundle. Chrome revision: 290621. NaCl revision: 55a8716",
-      "name": "pepper_37",
-      "recommended": "no",
-      "repath": "pepper_37",
-      "revision": 290621,
-      "stability": "post_stable",
-      "version": 37
-    },
-    {
-      "archives": [
-        {
-          "checksum": {
             "sha1": "e851b20346337f208dc010bbdd933d03f833bc34"
           },
           "host_os": "all",
@@ -299,42 +256,42 @@
       "archives": [
         {
           "checksum": {
-            "sha1": "d8f464c08e4db0479cf82a29a8c6890e151e23f3"
+            "sha1": "61b6c9758a458ef3d038d06645391fee96a5a0a3"
           },
           "host_os": "all",
-          "size": 78016465,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.65/naclports.tar.bz2"
+          "size": 78017028,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.81/naclports.tar.bz2"
         },
         {
           "checksum": {
-            "sha1": "95346c47e2430909be8f7235eb4cc3cddbc61009"
+            "sha1": "751fa8088d9ca6ce0f5c95071efaec5dce379d9d"
           },
           "host_os": "linux",
-          "size": 364389676,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.65/naclsdk_linux.tar.bz2"
+          "size": 364379974,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.81/naclsdk_linux.tar.bz2"
         },
         {
           "checksum": {
-            "sha1": "d7f3c2d1739a4c181b931c96fcc34db0cfcf3c07"
+            "sha1": "626f74fbea644b056086fbe038340c6ba261ad37"
           },
           "host_os": "mac",
-          "size": 357686692,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.65/naclsdk_mac.tar.bz2"
+          "size": 357669712,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.81/naclsdk_mac.tar.bz2"
         },
         {
           "checksum": {
-            "sha1": "a6f5043eef32d3e42827e941294866d103faad67"
+            "sha1": "3c6807f47703d70c45283ae27f5b6f9c69465e97"
           },
           "host_os": "win",
-          "size": 359641717,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.65/naclsdk_win.tar.bz2"
+          "size": 359639375,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/43.0.2357.81/naclsdk_win.tar.bz2"
         }
       ],
-      "description": "Chrome 43 bundle. Chrome revision: 385. NaCl revision: bd095c3ad5f1f25a9c6f44b7f38cec89383a5c33",
+      "description": "Chrome 43 bundle. Chrome revision: 434. NaCl revision: bd095c3ad5f1f25a9c6f44b7f38cec89383a5c33",
       "name": "pepper_43",
       "recommended": "yes",
       "repath": "pepper_43",
-      "revision": 385,
+      "revision": 434,
       "stability": "stable",
       "version": 43
     },
@@ -342,42 +299,85 @@
       "archives": [
         {
           "checksum": {
-            "sha1": "9ab2bafffa2eeaca348308223fb36af05ac0bbbd"
+            "sha1": "b5ffe1cc4e3ea8f898771545612e693a6b9d6da5"
           },
           "host_os": "all",
-          "size": 77571079,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.330503/naclports.tar.bz2"
+          "size": 77796366,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/44.0.2403.18/naclports.tar.bz2"
         },
         {
           "checksum": {
-            "sha1": "12a50dfa547a4c5367a5af8a4ae2f595626aa79d"
+            "sha1": "649971471638a71bc266e385f2d19f2e4650ed0e"
           },
           "host_os": "linux",
-          "size": 364721471,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.330503/naclsdk_linux.tar.bz2"
+          "size": 364133812,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/44.0.2403.18/naclsdk_linux.tar.bz2"
         },
         {
           "checksum": {
-            "sha1": "3e73af15961761ea7f5cb7ae198fb85b85a36475"
+            "sha1": "bac980d11a1a9b13a0b388f63404783778292e71"
           },
           "host_os": "mac",
-          "size": 354199133,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.330503/naclsdk_mac.tar.bz2"
+          "size": 354521007,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/44.0.2403.18/naclsdk_mac.tar.bz2"
         },
         {
           "checksum": {
-            "sha1": "cb350b447f2119b8b963f68c9b27e9c82964d88f"
+            "sha1": "429dbecb1c19a98246ff81ed33f8d48e7cb318aa"
           },
           "host_os": "win",
-          "size": 356500620,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.330503/naclsdk_win.tar.bz2"
+          "size": 356566484,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/44.0.2403.18/naclsdk_win.tar.bz2"
         }
       ],
-      "description": "Chrome 45 bundle. Chrome revision: 330503. NaCl revision: 862ca265aa1fdcabe8b3ab518251381bfbf48468",
+      "description": "Chrome 44 bundle. Chrome revision: 89. NaCl revision: 862ca265aa1fdcabe8b3ab518251381bfbf48468",
+      "name": "pepper_44",
+      "recommended": "no",
+      "repath": "pepper_44",
+      "revision": 89,
+      "stability": "beta",
+      "version": 44
+    },
+    {
+      "archives": [
+        {
+          "checksum": {
+            "sha1": "f301ddc3875c3a87af2ddac7106e236b1cd13c76"
+          },
+          "host_os": "all",
+          "size": 77571501,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.332141/naclports.tar.bz2"
+        },
+        {
+          "checksum": {
+            "sha1": "00b82b26f2c26182f41ae15f9b427ad31bf01fe3"
+          },
+          "host_os": "linux",
+          "size": 364328542,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.332141/naclsdk_linux.tar.bz2"
+        },
+        {
+          "checksum": {
+            "sha1": "f24ff4c26097d6a955917050e9ea5373eb22adad"
+          },
+          "host_os": "mac",
+          "size": 353982914,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.332141/naclsdk_mac.tar.bz2"
+        },
+        {
+          "checksum": {
+            "sha1": "bb8a9386af2d7ffab145e91a0baea092c1076aee"
+          },
+          "host_os": "win",
+          "size": 355571951,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.332141/naclsdk_win.tar.bz2"
+        }
+      ],
+      "description": "Chrome 45 bundle. Chrome revision: 332141. NaCl revision: ec2d51e124a58435534985710f421145d10b093e",
       "name": "pepper_canary",
       "recommended": "no",
       "repath": "pepper_45",
-      "revision": 330503,
+      "revision": 332141,
       "stability": "canary",
       "version": 45
     },
@@ -385,18 +385,18 @@
       "archives": [
         {
           "checksum": {
-            "sha1": "3b8cba08f2e298febab39dfeb2736310fa472160"
+            "sha1": "b06dc379a2a929b3dc15eb3b2f11c63a4b3a8aea"
           },
           "host_os": "linux",
-          "size": 417287324,
-          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.330508/naclsdk_bionic.tar.bz2"
+          "size": 416722073,
+          "url": "https://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/trunk.332145/naclsdk_bionic.tar.bz2"
         }
       ],
-      "description": "Chrome 45 bundle. Chrome revision: 330508. NaCl revision: 862ca265aa1fdcabe8b3ab518251381bfbf48468",
+      "description": "Chrome 45 bundle. Chrome revision: 332145. NaCl revision: ec2d51e124a58435534985710f421145d10b093e",
       "name": "bionic_canary",
       "recommended": "no",
       "repath": "pepper_45",
-      "revision": 330508,
+      "revision": 332145,
       "stability": "canary",
       "version": 45
     }
diff --git a/src/build/build_options.py b/src/build/build_options.py
index 2b6bd41..8fdc9b9 100644
--- a/src/build/build_options.py
+++ b/src/build/build_options.py
@@ -108,7 +108,7 @@
     self._goma_dir = None
     self._system_packages = []
     self._values = {}
-    self.parse([], read_defaults_from_file=False)
+    self.parsed = False
 
   def __getattr__(self, name):
     """Provides getters for values originated from the command line options.
@@ -466,6 +466,8 @@
       parser.print_help()
       print '\n', error
       return -1
+
+    self.parsed = True
     return 0
 
   def _check_args(self, args):
@@ -589,4 +591,29 @@
   def get_configure_options_file(self):
     return os.path.join('out', 'configure.options')
 
-OPTIONS = _Options()
+  def check_access(self, name):
+    """Called by AccessControlProxy to check attribute access."""
+    if (not self.parsed and
+        name not in ('parse', 'parsed', 'parse_configure_file')):
+      raise AttributeError(
+          'Attempted to access uninitialized OPTIONS values. Please consider '
+          'calling OPTIONS.parse_configure_file() in the very beginning of '
+          'your script.')
+
+
+class _AccessControlProxy(object):
+  """Wraps an arbitrary object to add attribute access check."""
+
+  __slots__ = ['__target', '__check_access']
+
+  def __init__(self, target, check_access):
+    self.__target = target
+    self.__check_access = check_access
+
+  def __getattr__(self, name):
+    self.__check_access(name)
+    return getattr(self.__target, name)
+
+
+_real_options = _Options()
+OPTIONS = _AccessControlProxy(_real_options, _real_options.check_access)
diff --git a/src/build/make_table_of_contents.py b/src/build/make_table_of_contents.py
index d500e42..7dc3962 100755
--- a/src/build/make_table_of_contents.py
+++ b/src/build/make_table_of_contents.py
@@ -18,6 +18,7 @@
 import subprocess
 import sys
 
+from build_options import OPTIONS
 import toolchain
 from util import file_util
 
@@ -58,6 +59,8 @@
 
 
 def main(args):
+  OPTIONS.parse_configure_file()
+
   if len(args) != 3:
     return -1
 
diff --git a/src/build/ninja_generator.py b/src/build/ninja_generator.py
index e4487f3..e513eb1 100644
--- a/src/build/ninja_generator.py
+++ b/src/build/ninja_generator.py
@@ -1298,7 +1298,7 @@
     return ('$commonflags ' +
             CNinjaGenerator.get_archasmflags() +
             '-pthread -Wall ' + CNinjaGenerator._get_debug_cflags() +
-            '-DANDROID '
+            '-DANDROID -DANDROID_SMP=1 '
             # GCC sometimes predefines the _FORTIFY_SOURCE macro which is
             # not compatible with our function wrapping system. Undefine
             # the macro to turn off the feature. (crbug.com/226930)
@@ -1411,7 +1411,8 @@
 
   @staticmethod
   def get_hostasmflags():
-    return '-DHAVE_ARC_HOST ' + CNinjaGenerator.get_targetflags()
+    return ('-DHAVE_ARC_HOST -DANDROID_SMP=1 ' +
+            CNinjaGenerator.get_targetflags())
 
   @staticmethod
   def get_hostcflags():
diff --git a/src/build/prep_launch_chrome_test.py b/src/build/prep_launch_chrome_test.py
index c8bfcc2..3d2b5b9 100755
--- a/src/build/prep_launch_chrome_test.py
+++ b/src/build/prep_launch_chrome_test.py
@@ -7,6 +7,7 @@
 
 import unittest
 
+from build_options import OPTIONS
 import launch_chrome_options
 
 import prep_launch_chrome
@@ -14,6 +15,9 @@
 
 class PrepLaunchChromeTest(unittest.TestCase):
 
+  def setUp(self):
+    OPTIONS.parse([])
+
   def metadata_from_command_line(self, command):
     args = launch_chrome_options.parse_args(command.split(' '))
     return (prep_launch_chrome.
diff --git a/src/build/run_integration_tests_test.py b/src/build/run_integration_tests_test.py
index 0dc9498..038107e 100755
--- a/src/build/run_integration_tests_test.py
+++ b/src/build/run_integration_tests_test.py
@@ -387,7 +387,8 @@
 # TODO(lpique): Look into making them work without stubbing them out.
 @patch('apk_to_crx.build_crx', _stub_return_none)
 @patch('prep_launch_chrome.update_shell_command', _stub_return_none)
-@patch('build_options.OPTIONS.parse_configure_file', _stub_parse_configure_file)
+@patch('build_options._real_options.parse_configure_file',
+       _stub_parse_configure_file)
 # The unittest files may not be created yet.
 @patch('util.test.unittest_util.get_all_tests', lambda: [])
 class RunIntegrationTestsSlowTest(_RunIntegrationTestsTestBase):
@@ -450,7 +451,8 @@
 # TODO(lpique): Look into making them work without stubbing them out.
 @patch('apk_to_crx.build_crx', _stub_return_none)
 @patch('prep_launch_chrome.update_shell_command', _stub_return_none)
-@patch('build_options.OPTIONS.parse_configure_file', _stub_parse_configure_file)
+@patch('build_options._real_options.parse_configure_file',
+       _stub_parse_configure_file)
 # The unittest files may not be created yet.
 @patch('util.test.unittest_util.get_all_tests', lambda: [])
 # These tests run faster by limiting the number of tests constructed at startup
diff --git a/src/build/util/test/suite_runner_config_test.py b/src/build/util/test/suite_runner_config_test.py
index 9590d5d..24d9bf6 100755
--- a/src/build/util/test/suite_runner_config_test.py
+++ b/src/build/util/test/suite_runner_config_test.py
@@ -7,6 +7,7 @@
 import collections
 import unittest
 
+from build_options import OPTIONS
 from util.test import suite_runner_config
 from util.test.suite_runner import SuiteRunnerBase
 from util.test.suite_runner_config_flags import _ExclusiveFlag
@@ -221,6 +222,9 @@
       },
   }))
 
+  def setUp(self):
+    OPTIONS.parse([])
+
   def _make_suite_runner(self, name):
     return SuiteRunnerBase(
         name,
diff --git a/third_party/chromium-ppapi b/third_party/chromium-ppapi
index 6cdb692..2a4d4cc 160000
--- a/third_party/chromium-ppapi
+++ b/third_party/chromium-ppapi
@@ -1 +1 @@
-Subproject commit 6cdb69279cb4f83fd8d1f31f58eb0edf44d2bec3
+Subproject commit 2a4d4cc8e85d7b94388732f09261f258ed832603
diff --git a/third_party/native_client b/third_party/native_client
index 862ca26..ec2d51e 160000
--- a/third_party/native_client
+++ b/third_party/native_client
@@ -1 +1 @@
-Subproject commit 862ca265aa1fdcabe8b3ab518251381bfbf48468
+Subproject commit ec2d51e124a58435534985710f421145d10b093e
diff --git a/third_party/tools/depot_tools b/third_party/tools/depot_tools
index 79e43ff..e5d984b 160000
--- a/third_party/tools/depot_tools
+++ b/third_party/tools/depot_tools
@@ -1 +1 @@
-Subproject commit 79e43ffaad95119e9d4ba480a45a37832e43e320
+Subproject commit e5d984b90aad82e180780d95d07754aaf09ead13