Remove anonymous namespaces.

No one likes them and we're pretty inconsistent at using them. We're
much better with 'static'.

Change-Id: I65eeffd0fb60633edca30923af0caedb06a0105d
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 10e2e5e..7b8a02e 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -53,34 +53,32 @@
 
 namespace art {
 
-namespace {
-
-void ThrowNoClassDefFoundError(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
-void ThrowNoClassDefFoundError(const char* fmt, ...) {
+static void ThrowNoClassDefFoundError(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
+static void ThrowNoClassDefFoundError(const char* fmt, ...) {
   va_list args;
   va_start(args, fmt);
   Thread::Current()->ThrowNewExceptionV("Ljava/lang/NoClassDefFoundError;", fmt, args);
   va_end(args);
 }
 
-void ThrowClassFormatError(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
-void ThrowClassFormatError(const char* fmt, ...) {
+static void ThrowClassFormatError(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
+static void ThrowClassFormatError(const char* fmt, ...) {
   va_list args;
   va_start(args, fmt);
   Thread::Current()->ThrowNewExceptionV("Ljava/lang/ClassFormatError;", fmt, args);
   va_end(args);
 }
 
-void ThrowLinkageError(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
-void ThrowLinkageError(const char* fmt, ...) {
+static void ThrowLinkageError(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
+static void ThrowLinkageError(const char* fmt, ...) {
   va_list args;
   va_start(args, fmt);
   Thread::Current()->ThrowNewExceptionV("Ljava/lang/LinkageError;", fmt, args);
   va_end(args);
 }
 
-void ThrowNoSuchMethodError(bool is_direct, Class* c, const StringPiece& name,
-                            const StringPiece& signature) {
+static void ThrowNoSuchMethodError(bool is_direct, Class* c, const StringPiece& name,
+                                   const StringPiece& signature) {
   ClassHelper kh(c);
   std::ostringstream msg;
   msg << "no " << (is_direct ? "direct" : "virtual") << " method " << name << signature
@@ -92,8 +90,8 @@
   Thread::Current()->ThrowNewException("Ljava/lang/NoSuchMethodError;", msg.str().c_str());
 }
 
-void ThrowNoSuchFieldError(const StringPiece& scope, Class* c, const StringPiece& type,
-                           const StringPiece& name) {
+static void ThrowNoSuchFieldError(const StringPiece& scope, Class* c, const StringPiece& type,
+                                  const StringPiece& name) {
   ClassHelper kh(c);
   std::ostringstream msg;
   msg << "no " << scope << "field " << name << " of type " << type
@@ -105,15 +103,15 @@
   Thread::Current()->ThrowNewException("Ljava/lang/NoSuchFieldError;", msg.str().c_str());
 }
 
-void ThrowNullPointerException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
-void ThrowNullPointerException(const char* fmt, ...) {
+static void ThrowNullPointerException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
+static void ThrowNullPointerException(const char* fmt, ...) {
   va_list args;
   va_start(args, fmt);
   Thread::Current()->ThrowNewExceptionV("Ljava/lang/NullPointerException;", fmt, args);
   va_end(args);
 }
 
-void ThrowEarlierClassFailure(Class* c) {
+static void ThrowEarlierClassFailure(Class* c) {
   /*
    * The class failed to initialize on a previous attempt, so we want to throw
    * a NoClassDefFoundError (v2 2.17.5).  The exception to this rule is if we
@@ -133,7 +131,7 @@
   }
 }
 
-void WrapExceptionInInitializer() {
+static void WrapExceptionInInitializer() {
   JNIEnv* env = Thread::Current()->GetJniEnv();
 
   ScopedLocalRef<jthrowable> cause(env, env->ExceptionOccurred());
@@ -171,8 +169,6 @@
   return hash;
 }
 
-}  // namespace
-
 const char* ClassLinker::class_roots_descriptors_[] = {
   "Ljava/lang/Class;",
   "Ljava/lang/Object;",
diff --git a/src/dalvik_system_DexFile.cc b/src/dalvik_system_DexFile.cc
index c768776..2b86b76 100644
--- a/src/dalvik_system_DexFile.cc
+++ b/src/dalvik_system_DexFile.cc
@@ -31,8 +31,6 @@
 
 namespace art {
 
-namespace {
-
 // A smart pointer that provides read-only access to a Java string's UTF chars.
 // Unlike libcore's NullableScopedUtfChars, this will *not* throw NullPointerException if
 // passed a null jstring. The correct idiom is:
@@ -113,7 +111,7 @@
   return dex_file;
 }
 
-void DexFile_closeDexFile(JNIEnv* env, jclass, jint cookie) {
+static void DexFile_closeDexFile(JNIEnv* env, jclass, jint cookie) {
   const DexFile* dex_file = toDexFile(env, cookie);
   if (dex_file == NULL) {
     return;
@@ -124,8 +122,8 @@
   delete dex_file;
 }
 
-jclass DexFile_defineClassNative(JNIEnv* env, jclass, jstring javaName, jobject javaLoader,
-                                 jint cookie) {
+static jclass DexFile_defineClassNative(JNIEnv* env, jclass, jstring javaName, jobject javaLoader,
+                                        jint cookie) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   const DexFile* dex_file = toDexFile(env, cookie);
   if (dex_file == NULL) {
@@ -149,7 +147,7 @@
   return AddLocalReference<jclass>(env, result);
 }
 
-jobjectArray DexFile_getClassNameList(JNIEnv* env, jclass, jint cookie) {
+static jobjectArray DexFile_getClassNameList(JNIEnv* env, jclass, jint cookie) {
   const DexFile* dex_file = toDexFile(env, cookie);
   if (dex_file == NULL) {
     return NULL;
@@ -164,7 +162,7 @@
   return toStringArray(env, class_names);
 }
 
-jboolean DexFile_isDexOptNeeded(JNIEnv* env, jclass, jstring javaFilename) {
+static jboolean DexFile_isDexOptNeeded(JNIEnv* env, jclass, jstring javaFilename) {
   bool debug_logging = false;
 
   ScopedUtfChars filename(env, javaFilename);
@@ -253,8 +251,6 @@
   NATIVE_METHOD(DexFile, openDexFile, "(Ljava/lang/String;Ljava/lang/String;I)I"),
 };
 
-}  // namespace
-
 void register_dalvik_system_DexFile(JNIEnv* env) {
   jniRegisterNativeMethods(env, "dalvik/system/DexFile", gMethods, NELEM(gMethods));
 }
diff --git a/src/dalvik_system_VMDebug.cc b/src/dalvik_system_VMDebug.cc
index 62a1f43..317cd3d 100644
--- a/src/dalvik_system_VMDebug.cc
+++ b/src/dalvik_system_VMDebug.cc
@@ -29,13 +29,11 @@
 
 namespace art {
 
-namespace {
-
 /*
  * Return a set of strings describing available VM features (this is chiefly
  * of interest to DDMS).
  */
-jobjectArray VMDebug_getVmFeatureList(JNIEnv* env, jclass) {
+static jobjectArray VMDebug_getVmFeatureList(JNIEnv* env, jclass) {
   std::vector<std::string> features;
   features.push_back("method-trace-profiling");
   features.push_back("method-trace-profiling-streaming");
@@ -44,27 +42,27 @@
   return toStringArray(env, features);
 }
 
-void VMDebug_startAllocCounting(JNIEnv*, jclass) {
+static void VMDebug_startAllocCounting(JNIEnv*, jclass) {
   Runtime::Current()->SetStatsEnabled(true);
 }
 
-void VMDebug_stopAllocCounting(JNIEnv*, jclass) {
+static void VMDebug_stopAllocCounting(JNIEnv*, jclass) {
   Runtime::Current()->SetStatsEnabled(false);
 }
 
-jint VMDebug_getAllocCount(JNIEnv* env, jclass, jint kind) {
+static jint VMDebug_getAllocCount(JNIEnv* env, jclass, jint kind) {
   return Runtime::Current()->GetStat(kind);
 }
 
-void VMDebug_resetAllocCount(JNIEnv*, jclass, jint kinds) {
+static void VMDebug_resetAllocCount(JNIEnv*, jclass, jint kinds) {
   Runtime::Current()->ResetStats(kinds);
 }
 
-void VMDebug_startMethodTracingDdmsImpl(JNIEnv* env, jclass, jint bufferSize, jint flags) {
+static void VMDebug_startMethodTracingDdmsImpl(JNIEnv* env, jclass, jint bufferSize, jint flags) {
   Trace::Start("[DDMS]", -1, bufferSize, flags, true);
 }
 
-void VMDebug_startMethodTracingFd(JNIEnv* env, jclass, jstring javaTraceFilename, jobject javaFd, jint bufferSize, jint flags) {
+static void VMDebug_startMethodTracingFd(JNIEnv* env, jclass, jstring javaTraceFilename, jobject javaFd, jint bufferSize, jint flags) {
   int originalFd = jniGetFDFromFileDescriptor(env, javaFd);
   if (originalFd < 0) {
     return;
@@ -83,7 +81,7 @@
   Trace::Start(traceFilename.c_str(), fd, bufferSize, flags, false);
 }
 
-void VMDebug_startMethodTracingFilename(JNIEnv* env, jclass, jstring javaTraceFilename, jint bufferSize, jint flags) {
+static void VMDebug_startMethodTracingFilename(JNIEnv* env, jclass, jstring javaTraceFilename, jint bufferSize, jint flags) {
   ScopedUtfChars traceFilename(env, javaTraceFilename);
   if (traceFilename.c_str() == NULL) {
     return;
@@ -91,57 +89,57 @@
   Trace::Start(traceFilename.c_str(), -1, bufferSize, flags, false);
 }
 
-jboolean VMDebug_isMethodTracingActive(JNIEnv*, jclass) {
+static jboolean VMDebug_isMethodTracingActive(JNIEnv*, jclass) {
   return Runtime::Current()->IsMethodTracingActive();
 }
 
-void VMDebug_stopMethodTracing(JNIEnv*, jclass) {
+static void VMDebug_stopMethodTracing(JNIEnv*, jclass) {
   Trace::Stop();
 }
 
-void VMDebug_startEmulatorTracing(JNIEnv*, jclass) {
+static void VMDebug_startEmulatorTracing(JNIEnv*, jclass) {
   UNIMPLEMENTED(WARNING);
   //dvmEmulatorTraceStart();
 }
 
-void VMDebug_stopEmulatorTracing(JNIEnv*, jclass) {
+static void VMDebug_stopEmulatorTracing(JNIEnv*, jclass) {
   UNIMPLEMENTED(WARNING);
   //dvmEmulatorTraceStop();
 }
 
-jboolean VMDebug_isDebuggerConnected(JNIEnv*, jclass) {
+static jboolean VMDebug_isDebuggerConnected(JNIEnv*, jclass) {
   return Dbg::IsDebuggerConnected();
 }
 
-jboolean VMDebug_isDebuggingEnabled(JNIEnv*, jclass) {
+static jboolean VMDebug_isDebuggingEnabled(JNIEnv*, jclass) {
   return Dbg::IsDebuggingEnabled();
 }
 
-jlong VMDebug_lastDebuggerActivity(JNIEnv*, jclass) {
+static jlong VMDebug_lastDebuggerActivity(JNIEnv*, jclass) {
   return Dbg::LastDebuggerActivity();
 }
 
-void VMDebug_startInstructionCounting(JNIEnv* env, jclass) {
+static void VMDebug_startInstructionCounting(JNIEnv* env, jclass) {
   jniThrowException(env, "java/lang/UnsupportedOperationException", NULL);
 }
 
-void VMDebug_stopInstructionCounting(JNIEnv* env, jclass) {
+static void VMDebug_stopInstructionCounting(JNIEnv* env, jclass) {
   jniThrowException(env, "java/lang/UnsupportedOperationException", NULL);
 }
 
-void VMDebug_getInstructionCount(JNIEnv* env, jclass, jintArray javaCounts) {
+static void VMDebug_getInstructionCount(JNIEnv* env, jclass, jintArray javaCounts) {
   jniThrowException(env, "java/lang/UnsupportedOperationException", NULL);
 }
 
-void VMDebug_resetInstructionCount(JNIEnv* env, jclass) {
+static void VMDebug_resetInstructionCount(JNIEnv* env, jclass) {
   jniThrowException(env, "java/lang/UnsupportedOperationException", NULL);
 }
 
-void VMDebug_printLoadedClasses(JNIEnv*, jclass, jint flags) {
+static void VMDebug_printLoadedClasses(JNIEnv*, jclass, jint flags) {
   return Runtime::Current()->GetClassLinker()->DumpAllClasses(flags);
 }
 
-jint VMDebug_getLoadedClassCount(JNIEnv*, jclass) {
+static jint VMDebug_getLoadedClassCount(JNIEnv*, jclass) {
   return Runtime::Current()->GetClassLinker()->NumLoadedClasses();
 }
 
@@ -149,14 +147,8 @@
  * Returns the thread-specific CPU-time clock value for the current thread,
  * or -1 if the feature isn't supported.
  */
-jlong VMDebug_threadCpuTimeNanos(JNIEnv*, jclass) {
-#ifdef HAVE_POSIX_CLOCKS
-  struct timespec now;
-  clock_gettime(CLOCK_THREAD_CPUTIME_ID, &now);
-  return static_cast<jlong>(now.tv_sec*1000000000LL + now.tv_nsec);
-#else
-  return -1LL;
-#endif
+static jlong VMDebug_threadCpuTimeNanos(JNIEnv*, jclass) {
+  return ThreadCpuNanoTime();
 }
 
 /*
@@ -165,7 +157,7 @@
  * Cause "hprof" data to be dumped.  We can throw an IOException if an
  * error occurs during file handling.
  */
-void VMDebug_dumpHprofData(JNIEnv* env, jclass, jstring javaFilename, jobject javaFd) {
+static void VMDebug_dumpHprofData(JNIEnv* env, jclass, jstring javaFilename, jobject javaFd) {
   // Only one of these may be NULL.
   if (javaFilename == NULL && javaFd == NULL) {
     jniThrowNullPointerException(env, "fileName == null && fd == null");
@@ -200,7 +192,7 @@
   }
 }
 
-void VMDebug_dumpHprofDataDdms(JNIEnv* env, jclass) {
+static void VMDebug_dumpHprofDataDdms(JNIEnv* env, jclass) {
   int result = hprof::DumpHeap("[DDMS]", -1, true);
   if (result != 0) {
     // TODO: ideally we'd throw something more specific based on actual failure
@@ -209,7 +201,7 @@
   }
 }
 
-void VMDebug_dumpReferenceTables(JNIEnv* env, jclass) {
+static void VMDebug_dumpReferenceTables(JNIEnv* env, jclass) {
   LOG(INFO) << "--- reference table dump ---";
 
   JNIEnvExt* e = reinterpret_cast<JNIEnvExt*>(env);
@@ -223,7 +215,7 @@
  * Dump the current thread's interpreted stack and abort the VM.  Useful
  * for seeing both interpreted and native stack traces.
  */
-void VMDebug_crash(JNIEnv*, jclass) {
+static void VMDebug_crash(JNIEnv*, jclass) {
   LOG(FATAL) << "Crashing VM on request";
 }
 
@@ -231,11 +223,11 @@
  * Provide a hook for gdb to hang to so that the VM can be stopped when
  * user-tagged source locations are being executed.
  */
-void VMDebug_infopoint(JNIEnv*, jclass, jint id) {
+static void VMDebug_infopoint(JNIEnv*, jclass, jint id) {
   LOG(INFO) << "VMDebug infopoint " << id << " hit";
 }
 
-jlong VMDebug_countInstancesOfClass(JNIEnv* env, jclass, jclass javaClass, jboolean countAssignable) {
+static jlong VMDebug_countInstancesOfClass(JNIEnv* env, jclass, jclass javaClass, jboolean countAssignable) {
   Class* c = Decode<Class*>(env, javaClass);
   if (c == NULL) {
     return 0;
@@ -243,7 +235,7 @@
   return Runtime::Current()->GetHeap()->CountInstances(c, countAssignable);
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(VMDebug, countInstancesOfClass, "(Ljava/lang/Class;Z)J"),
   NATIVE_METHOD(VMDebug, crash, "()V"),
   NATIVE_METHOD(VMDebug, dumpHprofData, "(Ljava/lang/String;Ljava/io/FileDescriptor;)V"),
@@ -274,8 +266,6 @@
   NATIVE_METHOD(VMDebug, threadCpuTimeNanos, "()J"),
 };
 
-}  // namespace
-
 void register_dalvik_system_VMDebug(JNIEnv* env) {
   jniRegisterNativeMethods(env, "dalvik/system/VMDebug", gMethods, NELEM(gMethods));
 }
diff --git a/src/dalvik_system_VMRuntime.cc b/src/dalvik_system_VMRuntime.cc
index 33e6619..3799bcf 100644
--- a/src/dalvik_system_VMRuntime.cc
+++ b/src/dalvik_system_VMRuntime.cc
@@ -32,23 +32,21 @@
 
 namespace art {
 
-namespace {
-
-jfloat VMRuntime_getTargetHeapUtilization(JNIEnv*, jobject) {
+static jfloat VMRuntime_getTargetHeapUtilization(JNIEnv*, jobject) {
   return Runtime::Current()->GetHeap()->GetTargetHeapUtilization();
 }
 
-void VMRuntime_nativeSetTargetHeapUtilization(JNIEnv*, jobject, jfloat target) {
+static void VMRuntime_nativeSetTargetHeapUtilization(JNIEnv*, jobject, jfloat target) {
   Runtime::Current()->GetHeap()->SetTargetHeapUtilization(target);
 }
 
-void VMRuntime_startJitCompilation(JNIEnv*, jobject) {
+static void VMRuntime_startJitCompilation(JNIEnv*, jobject) {
 }
 
-void VMRuntime_disableJitCompilation(JNIEnv*, jobject) {
+static void VMRuntime_disableJitCompilation(JNIEnv*, jobject) {
 }
 
-jobject VMRuntime_newNonMovableArray(JNIEnv* env, jobject, jclass javaElementClass, jint length) {
+static jobject VMRuntime_newNonMovableArray(JNIEnv* env, jobject, jclass javaElementClass, jint length) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
 #ifdef MOVING_GARBAGE_COLLECTOR
   // TODO: right now, we don't have a copying collector, so there's no need
@@ -79,7 +77,7 @@
   return AddLocalReference<jobject>(env, result);
 }
 
-jlong VMRuntime_addressOf(JNIEnv* env, jobject, jobject javaArray) {
+static jlong VMRuntime_addressOf(JNIEnv* env, jobject, jobject javaArray) {
   if (javaArray == NULL) {  // Most likely allocation failed
     return 0;
   }
@@ -93,15 +91,15 @@
   return reinterpret_cast<uintptr_t>(array->GetRawData(array->GetClass()->GetComponentSize()));
 }
 
-void VMRuntime_clearGrowthLimit(JNIEnv*, jobject) {
+static void VMRuntime_clearGrowthLimit(JNIEnv*, jobject) {
   Runtime::Current()->GetHeap()->ClearGrowthLimit();
 }
 
-jboolean VMRuntime_isDebuggerActive(JNIEnv*, jobject) {
+static jboolean VMRuntime_isDebuggerActive(JNIEnv*, jobject) {
   return Dbg::IsDebuggerConnected();
 }
 
-jobjectArray VMRuntime_properties(JNIEnv* env, jobject) {
+static jobjectArray VMRuntime_properties(JNIEnv* env, jobject) {
   return toStringArray(env, Runtime::Current()->GetProperties());
 }
 
@@ -110,19 +108,19 @@
 // specified. Unfortunately, some tests were using java.class.path to
 // lookup relative file locations, so they are counting on this to be
 // ".", presumably some applications or libraries could have as well.
-const char* DefaultToDot(const std::string& class_path) {
+static const char* DefaultToDot(const std::string& class_path) {
   return class_path.empty() ? "." : class_path.c_str();
 }
 
-jstring VMRuntime_bootClassPath(JNIEnv* env, jobject) {
+static jstring VMRuntime_bootClassPath(JNIEnv* env, jobject) {
   return env->NewStringUTF(DefaultToDot(Runtime::Current()->GetBootClassPathString()));
 }
 
-jstring VMRuntime_classPath(JNIEnv* env, jobject) {
+static jstring VMRuntime_classPath(JNIEnv* env, jobject) {
   return env->NewStringUTF(DefaultToDot(Runtime::Current()->GetClassPathString()));
 }
 
-jstring VMRuntime_vmVersion(JNIEnv* env, jobject) {
+static jstring VMRuntime_vmVersion(JNIEnv* env, jobject) {
   return env->NewStringUTF(Runtime::Current()->GetVersion());
 }
 
@@ -131,7 +129,7 @@
   t->GetJniEnv()->SetCheckJniEnabled(false);
 }
 
-void VMRuntime_setTargetSdkVersion(JNIEnv* env, jobject, jint targetSdkVersion) {
+static void VMRuntime_setTargetSdkVersion(JNIEnv* env, jobject, jint targetSdkVersion) {
   // This is the target SDK version of the app we're about to run.
   // Note that targetSdkVersion may be CUR_DEVELOPMENT (10000).
   // Note that targetSdkVersion may be 0, meaning "current".
@@ -152,7 +150,7 @@
   }
 }
 
-void VMRuntime_trimHeap(JNIEnv* env, jobject) {
+static void VMRuntime_trimHeap(JNIEnv* env, jobject) {
   ScopedHeapLock heap_lock;
   Heap* heap = Runtime::Current()->GetHeap();
   size_t alloc_space_size = heap->GetAllocSpace()->Size();
@@ -164,7 +162,7 @@
             << " heap with " << static_cast<int>(100 * utilization) << "% utilization";
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(VMRuntime, addressOf, "(Ljava/lang/Object;)J"),
   NATIVE_METHOD(VMRuntime, bootClassPath, "()Ljava/lang/String;"),
   NATIVE_METHOD(VMRuntime, classPath, "()Ljava/lang/String;"),
@@ -181,8 +179,6 @@
   NATIVE_METHOD(VMRuntime, vmVersion, "()Ljava/lang/String;"),
 };
 
-}  // namespace
-
 void register_dalvik_system_VMRuntime(JNIEnv* env) {
   jniRegisterNativeMethods(env, "dalvik/system/VMRuntime", gMethods, NELEM(gMethods));
 }
diff --git a/src/dalvik_system_VMStack.cc b/src/dalvik_system_VMStack.cc
index 8560c22..7ba4d14 100644
--- a/src/dalvik_system_VMStack.cc
+++ b/src/dalvik_system_VMStack.cc
@@ -25,8 +25,6 @@
 
 namespace art {
 
-namespace {
-
 static jobject GetThreadStack(JNIEnv* env, jobject javaThread) {
   ScopedHeapLock heap_lock;
   ScopedThreadListLock thread_list_lock;
@@ -34,7 +32,7 @@
   return (thread != NULL) ? GetThreadStack(env, thread) : NULL;
 }
 
-jint VMStack_fillStackTraceElements(JNIEnv* env, jclass, jobject javaThread, jobjectArray javaSteArray) {
+static jint VMStack_fillStackTraceElements(JNIEnv* env, jclass, jobject javaThread, jobjectArray javaSteArray) {
   jobject trace = GetThreadStack(env, javaThread);
   if (trace == NULL) {
     return 0;
@@ -44,7 +42,7 @@
   return depth;
 }
 
-jobject VMStack_getCallingClassLoader(JNIEnv* env, jclass) {
+static jobject VMStack_getCallingClassLoader(JNIEnv* env, jclass) {
   // Returns the defining class loader of the caller's caller.
   // TODO: need SmartFrame (Thread::WalkStack-like iterator).
   Frame frame = Thread::Current()->GetTopOfStack();
@@ -56,7 +54,7 @@
   return AddLocalReference<jobject>(env, cl);
 }
 
-jobject VMStack_getClosestUserClassLoader(JNIEnv* env, jclass, jobject javaBootstrap, jobject javaSystem) {
+static jobject VMStack_getClosestUserClassLoader(JNIEnv* env, jclass, jobject javaBootstrap, jobject javaSystem) {
   struct ClosestUserClassLoaderVisitor : public Thread::StackVisitor {
     ClosestUserClassLoaderVisitor(Object* bootstrap, Object* system)
       : bootstrap(bootstrap), system(system), class_loader(NULL) {}
@@ -81,7 +79,7 @@
   return AddLocalReference<jobject>(env, visitor.class_loader);
 }
 
-jclass VMStack_getStackClass2(JNIEnv* env, jclass) {
+static jclass VMStack_getStackClass2(JNIEnv* env, jclass) {
   // Returns the class of the caller's caller's caller.
   // TODO: need SmartFrame (Thread::WalkStack-like iterator).
   Frame frame = Thread::Current()->GetTopOfStack();
@@ -94,7 +92,7 @@
   return AddLocalReference<jclass>(env, c);
 }
 
-jobjectArray VMStack_getThreadStackTrace(JNIEnv* env, jclass, jobject javaThread) {
+static jobjectArray VMStack_getThreadStackTrace(JNIEnv* env, jclass, jobject javaThread) {
   jobject trace = GetThreadStack(env, javaThread);
   if (trace == NULL) {
     return NULL;
@@ -110,8 +108,6 @@
   NATIVE_METHOD(VMStack, getThreadStackTrace, "(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement;"),
 };
 
-}  // namespace
-
 void register_dalvik_system_VMStack(JNIEnv* env) {
   jniRegisterNativeMethods(env, "dalvik/system/VMStack", gMethods, NELEM(gMethods));
 }
diff --git a/src/dalvik_system_Zygote.cc b/src/dalvik_system_Zygote.cc
index 3f57bfc..3ba5552 100644
--- a/src/dalvik_system_Zygote.cc
+++ b/src/dalvik_system_Zygote.cc
@@ -37,11 +37,9 @@
 
 namespace art {
 
-namespace {
-
 static pid_t gSystemServerPid = 0;
 
-void Zygote_nativeExecShell(JNIEnv* env, jclass, jstring javaCommand) {
+static void Zygote_nativeExecShell(JNIEnv* env, jclass, jstring javaCommand) {
   ScopedUtfChars command(env, javaCommand);
   if (command.c_str() == NULL) {
     return;
@@ -53,9 +51,8 @@
   exit(127);
 }
 
-
 // This signal handler is for zygote mode, since the zygote must reap its children
-void SigChldHandler(int s) {
+static void SigChldHandler(int s) {
   pid_t pid;
   int status;
 
@@ -100,14 +97,14 @@
   }
 }
 
-// configure sigchld handler for the zygote process This is configured
+// Configures the SIGCHLD handler for the zygote process. This is configured
 // very late, because earlier in the runtime we may fork() and exec()
 // other processes, and we want to waitpid() for those rather than
 // have them be harvested immediately.
 //
 // This ends up being called repeatedly before each fork(), but there's
 // no real harm in that.
-void SetSigChldHandler() {
+static void SetSigChldHandler() {
   struct sigaction sa;
   memset(&sa, 0, sizeof(sa));
   sa.sa_handler = SigChldHandler;
@@ -118,8 +115,8 @@
   }
 }
 
-// Set the SIGCHLD handler back to default behavior in zygote children
-void UnsetSigChldHandler() {
+// Sets the SIGCHLD handler back to default behavior in zygote children.
+static void UnsetSigChldHandler() {
   struct sigaction sa;
   memset(&sa, 0, sizeof(sa));
   sa.sa_handler = SIG_DFL;
@@ -132,7 +129,7 @@
 
 // Calls POSIX setgroups() using the int[] object as an argument.
 // A NULL argument is tolerated.
-int SetGids(JNIEnv* env, jintArray javaGids) {
+static int SetGids(JNIEnv* env, jintArray javaGids) {
   if (javaGids == NULL) {
     return 0;
   }
@@ -151,7 +148,7 @@
 // treated as an empty array.
 //
 // -1 is returned on error.
-int SetRLimits(JNIEnv* env, jobjectArray javaRlimits) {
+static int SetRLimits(JNIEnv* env, jobjectArray javaRlimits) {
   if (javaRlimits == NULL) {
     return 0;
   }
@@ -178,7 +175,7 @@
   return 0;
 }
 
-void SetCapabilities(int64_t permitted, int64_t effective) {
+static void SetCapabilities(int64_t permitted, int64_t effective) {
 #ifdef HAVE_ANDROID_OS
   struct __user_cap_header_struct capheader;
   struct __user_cap_data_struct capdata;
@@ -198,7 +195,7 @@
 #endif /*HAVE_ANDROID_OS*/
 }
 
-void EnableDebugFeatures(uint32_t debug_flags) {
+static void EnableDebugFeatures(uint32_t debug_flags) {
   // Must match values in dalvik.system.Zygote.
   enum {
     DEBUG_ENABLE_DEBUGGER           = 1,
@@ -264,9 +261,9 @@
 #endif
 
 // Utility routine to fork zygote and specialize the child process.
-pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray javaGids,
-                              jint debug_flags, jobjectArray javaRlimits,
-                              jlong permittedCapabilities, jlong effectiveCapabilities) {
+static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray javaGids,
+                                     jint debug_flags, jobjectArray javaRlimits,
+                                     jlong permittedCapabilities, jlong effectiveCapabilities) {
   Runtime* runtime = Runtime::Current();
   CHECK(runtime->IsZygote()) << "runtime instance not started with -Xzygote";
   if (false) { // TODO: do we need do anything special like !dvmGcPreZygoteFork()?
@@ -331,14 +328,14 @@
   return pid;
 }
 
-jint Zygote_nativeForkAndSpecialize(JNIEnv* env, jclass, jint uid, jint gid, jintArray gids,
-                                    jint debug_flags, jobjectArray rlimits) {
+static jint Zygote_nativeForkAndSpecialize(JNIEnv* env, jclass, jint uid, jint gid, jintArray gids,
+                                           jint debug_flags, jobjectArray rlimits) {
   return ForkAndSpecializeCommon(env, uid, gid, gids, debug_flags, rlimits, 0, 0);
 }
 
-jint Zygote_nativeForkSystemServer(JNIEnv* env, jclass, uid_t uid, gid_t gid, jintArray gids,
-                                   jint debug_flags, jobjectArray rlimits,
-                                   jlong permittedCapabilities, jlong effectiveCapabilities) {
+static jint Zygote_nativeForkSystemServer(JNIEnv* env, jclass, uid_t uid, gid_t gid, jintArray gids,
+                                          jint debug_flags, jobjectArray rlimits,
+                                          jlong permittedCapabilities, jlong effectiveCapabilities) {
   pid_t pid = ForkAndSpecializeCommon(env, uid, gid, gids,
                                       debug_flags, rlimits,
                                       permittedCapabilities, effectiveCapabilities);
@@ -364,8 +361,6 @@
   NATIVE_METHOD(Zygote, nativeForkSystemServer, "(II[II[[IJJ)I"),
 };
 
-}  // namespace
-
 void register_dalvik_system_Zygote(JNIEnv* env) {
   jniRegisterNativeMethods(env, "dalvik/system/Zygote", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_Class.cc b/src/java_lang_Class.cc
index c2cca5b..3dce559 100644
--- a/src/java_lang_Class.cc
+++ b/src/java_lang_Class.cc
@@ -26,10 +26,8 @@
 
 namespace art {
 
-namespace {
-
 // "name" is in "binary name" format, e.g. "dalvik.system.Debug$1".
-jclass Class_classForName(JNIEnv* env, jclass, jstring javaName, jboolean initialize, jobject javaLoader) {
+static jclass Class_classForName(JNIEnv* env, jclass, jstring javaName, jboolean initialize, jobject javaLoader) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   ScopedUtfChars name(env, javaName);
   if (name.c_str() == NULL) {
@@ -65,7 +63,7 @@
   return AddLocalReference<jclass>(env, c);
 }
 
-jint Class_getAnnotationDirectoryOffset(JNIEnv* env, jclass javaClass) {
+static jint Class_getAnnotationDirectoryOffset(JNIEnv* env, jclass javaClass) {
   Class* c = Decode<Class*>(env, javaClass);
   if (c->IsPrimitive() || c->IsArrayClass() || c->IsProxyClass()) {
     return 0;  // primitive, array and proxy classes don't have class definitions
@@ -79,7 +77,7 @@
 }
 
 template<typename T>
-jobjectArray ToArray(JNIEnv* env, const char* array_class_name, const std::vector<T*>& objects) {
+static jobjectArray ToArray(JNIEnv* env, const char* array_class_name, const std::vector<T*>& objects) {
   jclass array_class = env->FindClass(array_class_name);
   jobjectArray result = env->NewObjectArray(objects.size(), array_class, NULL);
   for (size_t i = 0; i < objects.size(); ++i) {
@@ -99,7 +97,7 @@
   return m->IsConstructor();
 }
 
-jobjectArray Class_getDeclaredConstructors(JNIEnv* env, jclass javaClass, jboolean publicOnly) {
+static jobjectArray Class_getDeclaredConstructors(JNIEnv* env, jclass javaClass, jboolean publicOnly) {
   Class* c = Decode<Class*>(env, javaClass);
 
   std::vector<Method*> constructors;
@@ -120,7 +118,7 @@
   return true;
 }
 
-jobjectArray Class_getDeclaredFields(JNIEnv* env, jclass javaClass, jboolean publicOnly) {
+static jobjectArray Class_getDeclaredFields(JNIEnv* env, jclass javaClass, jboolean publicOnly) {
   Class* c = Decode<Class*>(env, javaClass);
 
   std::vector<Field*> fields;
@@ -159,7 +157,7 @@
   return true;
 }
 
-jobjectArray Class_getDeclaredMethods(JNIEnv* env, jclass javaClass, jboolean publicOnly) {
+static jobjectArray Class_getDeclaredMethods(JNIEnv* env, jclass javaClass, jboolean publicOnly) {
   Class* c = Decode<Class*>(env, javaClass);
   std::vector<Method*> methods;
   for (size_t i = 0; i < c->NumVirtualMethods(); ++i) {
@@ -184,7 +182,7 @@
   return ToArray(env, "java/lang/reflect/Method", methods);
 }
 
-jobject Class_getDex(JNIEnv* env, jobject javaClass) {
+static jobject Class_getDex(JNIEnv* env, jobject javaClass) {
   Class* c = Decode<Class*>(env, javaClass);
 
   DexCache* dex_cache = c->GetDexCache();
@@ -242,8 +240,8 @@
   return result;
 }
 
-jobject Class_getDeclaredConstructorOrMethod(JNIEnv* env, jclass javaClass, jstring javaName,
-                                             jobjectArray javaArgs) {
+static jobject Class_getDeclaredConstructorOrMethod(JNIEnv* env, jclass javaClass, jstring javaName,
+                                                    jobjectArray javaArgs) {
   Class* c = Decode<Class*>(env, javaClass);
   std::string name(Decode<String*>(env, javaName)->ToModifiedUtf8());
   ObjectArray<Class>* arg_array = Decode<ObjectArray<Class>*>(env, javaArgs);
@@ -260,7 +258,7 @@
   }
 }
 
-jobject Class_getDeclaredFieldNative(JNIEnv* env, jclass jklass, jobject jname) {
+static jobject Class_getDeclaredFieldNative(JNIEnv* env, jclass jklass, jobject jname) {
   Class* klass = Decode<Class*>(env, jklass);
   DCHECK(klass->IsClass());
   String* name = Decode<String*>(env, jname);
@@ -284,13 +282,13 @@
   return NULL;
 }
 
-jstring Class_getNameNative(JNIEnv* env, jobject javaThis) {
+static jstring Class_getNameNative(JNIEnv* env, jobject javaThis) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Class* c = Decode<Class*>(env, javaThis);
   return AddLocalReference<jstring>(env, c->ComputeName());
 }
 
-jboolean Class_isAssignableFrom(JNIEnv* env, jobject javaLhs, jclass javaRhs) {
+static jboolean Class_isAssignableFrom(JNIEnv* env, jobject javaLhs, jclass javaRhs) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Class* lhs = Decode<Class*>(env, javaLhs);
   Class* rhs = Decode<Class*>(env, javaRhs);
@@ -301,7 +299,7 @@
   return lhs->IsAssignableFrom(rhs) ? JNI_TRUE : JNI_FALSE;
 }
 
-jboolean Class_isInstance(JNIEnv* env, jobject javaClass, jobject javaObject) {
+static jboolean Class_isInstance(JNIEnv* env, jobject javaClass, jobject javaObject) {
   Class* c = Decode<Class*>(env, javaClass);
   Object* o = Decode<Object*>(env, javaObject);
   if (o == NULL) {
@@ -339,7 +337,7 @@
   return access_from->IsInSamePackage(access_to);
 }
 
-jobject Class_newInstanceImpl(JNIEnv* env, jobject javaThis) {
+static jobject Class_newInstanceImpl(JNIEnv* env, jobject javaThis) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Class* c = Decode<Class*>(env, javaThis);
   if (c->IsPrimitive() || c->IsInterface() || c->IsArrayClass() || c->IsAbstract()) {
@@ -417,8 +415,6 @@
   NATIVE_METHOD(Class, newInstanceImpl, "()Ljava/lang/Object;"),
 };
 
-}  // namespace
-
 void register_java_lang_Class(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/Class", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_Object.cc b/src/java_lang_Object.cc
index 7c72604..f95d1a1 100644
--- a/src/java_lang_Object.cc
+++ b/src/java_lang_Object.cc
@@ -21,38 +21,34 @@
 
 namespace art {
 
-namespace {
-
-jobject Object_internalClone(JNIEnv* env, jobject javaThis) {
+static jobject Object_internalClone(JNIEnv* env, jobject javaThis) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Object* o = Decode<Object*>(env, javaThis);
   return AddLocalReference<jobject>(env, o->Clone());
 }
 
-void Object_notify(JNIEnv* env, jobject javaThis) {
+static void Object_notify(JNIEnv* env, jobject javaThis) {
   Object* o = Decode<Object*>(env, javaThis);
   o->Notify();
 }
 
-void Object_notifyAll(JNIEnv* env, jobject javaThis) {
+static void Object_notifyAll(JNIEnv* env, jobject javaThis) {
   Object* o = Decode<Object*>(env, javaThis);
   o->NotifyAll();
 }
 
-void Object_wait(JNIEnv* env, jobject javaThis, jlong ms, jint ns) {
+static void Object_wait(JNIEnv* env, jobject javaThis, jlong ms, jint ns) {
   Object* o = Decode<Object*>(env, javaThis);
   o->Wait(ms, ns);
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(Object, internalClone, "(Ljava/lang/Cloneable;)Ljava/lang/Object;"),
   NATIVE_METHOD(Object, notify, "()V"),
   NATIVE_METHOD(Object, notifyAll, "()V"),
   NATIVE_METHOD(Object, wait, "(JI)V"),
 };
 
-}  // namespace
-
 void register_java_lang_Object(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/Object", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_Runtime.cc b/src/java_lang_Runtime.cc
index 07af162..a057d36 100644
--- a/src/java_lang_Runtime.cc
+++ b/src/java_lang_Runtime.cc
@@ -27,14 +27,12 @@
 
 namespace art {
 
-namespace {
-
-void Runtime_gc(JNIEnv*, jclass) {
+static void Runtime_gc(JNIEnv*, jclass) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Runtime::Current()->GetHeap()->CollectGarbage(false);
 }
 
-void Runtime_nativeExit(JNIEnv* env, jclass, jint status, jboolean isExit) {
+static void Runtime_nativeExit(JNIEnv* env, jclass, jint status, jboolean isExit) {
   // isExit is true for System.exit and false for System.halt.
   if (isExit) {
     Runtime::Current()->CallExitHook(status);
@@ -49,7 +47,7 @@
  * JNI-compatible methods. Returns null on success, or a failure
  * message on failure.
  */
-jstring Runtime_nativeLoad(JNIEnv* env, jclass, jstring javaFilename, jobject javaLoader) {
+static jstring Runtime_nativeLoad(JNIEnv* env, jclass, jstring javaFilename, jobject javaLoader) {
   ScopedUtfChars filename(env, javaFilename);
   if (filename.c_str() == NULL) {
     return NULL;
@@ -66,15 +64,15 @@
   return env->NewStringUTF(detail.c_str());
 }
 
-jlong Runtime_maxMemory(JNIEnv* env, jclass) {
+static jlong Runtime_maxMemory(JNIEnv* env, jclass) {
   return Runtime::Current()->GetHeap()->GetMaxMemory();
 }
 
-jlong Runtime_totalMemory(JNIEnv* env, jclass) {
+static jlong Runtime_totalMemory(JNIEnv* env, jclass) {
   return Runtime::Current()->GetHeap()->GetTotalMemory();
 }
 
-jlong Runtime_freeMemory(JNIEnv* env, jclass) {
+static jlong Runtime_freeMemory(JNIEnv* env, jclass) {
   return Runtime::Current()->GetHeap()->GetFreeMemory();
 }
 
@@ -87,8 +85,6 @@
     NATIVE_METHOD(Runtime, totalMemory, "()J"),
 };
 
-}  // namespace
-
 void register_java_lang_Runtime(JNIEnv* env) {
     jniRegisterNativeMethods(env, "java/lang/Runtime", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_String.cc b/src/java_lang_String.cc
index ff182e1..c549c08 100644
--- a/src/java_lang_String.cc
+++ b/src/java_lang_String.cc
@@ -36,9 +36,7 @@
 
 namespace art {
 
-namespace {
-
-jint String_compareTo(JNIEnv* env, jobject javaThis, jobject javaRhs) {
+static jint String_compareTo(JNIEnv* env, jobject javaThis, jobject javaRhs) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   String* lhs = Decode<String*>(env, javaThis);
   String* rhs = Decode<String*>(env, javaRhs);
@@ -72,7 +70,7 @@
   return countDiff;
 }
 
-jboolean String_equals(JNIEnv* env, jobject javaThis, jobject javaRhs) {
+static jboolean String_equals(JNIEnv* env, jobject javaThis, jobject javaRhs) {
   String* lhs = Decode<String*>(env, javaThis);
   String* rhs = Decode<String*>(env, javaRhs);
 
@@ -128,7 +126,7 @@
  *
  * Returns -1 if no match is found.
  */
-jint String_fastIndexOf(JNIEnv* env, jobject javaThis, jint ch, jint start) {
+static jint String_fastIndexOf(JNIEnv* env, jobject javaThis, jint ch, jint start) {
   String* s = Decode<String*>(env, javaThis);
   const uint16_t* chars = s->GetCharArray()->GetData() + s->GetOffset();
 
@@ -148,21 +146,19 @@
   return -1;
 }
 
-jstring String_intern(JNIEnv* env, jobject javaThis) {
+static jstring String_intern(JNIEnv* env, jobject javaThis) {
   String* s = Decode<String*>(env, javaThis);
   String* result = s->Intern();
   return AddLocalReference<jstring>(env, result);
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(String, compareTo, "(Ljava/lang/String;)I"),
   NATIVE_METHOD(String, equals, "(Ljava/lang/Object;)Z"),
   NATIVE_METHOD(String, fastIndexOf, "(II)I"),
   NATIVE_METHOD(String, intern, "()Ljava/lang/String;"),
 };
 
-}  // namespace
-
 void register_java_lang_String(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/String", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_System.cc b/src/java_lang_System.cc
index 22a9cc6..fa8257b 100644
--- a/src/java_lang_System.cc
+++ b/src/java_lang_System.cc
@@ -102,15 +102,13 @@
 
 namespace art {
 
-namespace {
-
-void ThrowArrayStoreException_NotAnArray(const char* identifier, Object* array) {
+static void ThrowArrayStoreException_NotAnArray(const char* identifier, Object* array) {
   std::string actualType(PrettyTypeOf(array));
   Thread::Current()->ThrowNewExceptionF("Ljava/lang/ArrayStoreException;",
       "%s of type %s is not an array", identifier, actualType.c_str());
 }
 
-void System_arraycopy(JNIEnv* env, jclass, jobject javaSrc, jint srcPos, jobject javaDst, jint dstPos, jint length) {
+static void System_arraycopy(JNIEnv* env, jclass, jobject javaSrc, jint srcPos, jobject javaDst, jint dstPos, jint length) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Thread* self = Thread::Current();
 
@@ -244,18 +242,16 @@
   }
 }
 
-jint System_identityHashCode(JNIEnv* env, jclass, jobject javaObject) {
+static jint System_identityHashCode(JNIEnv* env, jclass, jobject javaObject) {
   Object* o = Decode<Object*>(env, javaObject);
   return static_cast<jint>(reinterpret_cast<uintptr_t>(o));
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(System, arraycopy, "(Ljava/lang/Object;ILjava/lang/Object;II)V"),
   NATIVE_METHOD(System, identityHashCode, "(Ljava/lang/Object;)I"),
 };
 
-}  // namespace
-
 void register_java_lang_System(JNIEnv* env) {
     jniRegisterNativeMethods(env, "java/lang/System", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_Thread.cc b/src/java_lang_Thread.cc
index f351f20..0871bdd 100644
--- a/src/java_lang_Thread.cc
+++ b/src/java_lang_Thread.cc
@@ -26,28 +26,26 @@
 
 namespace art {
 
-namespace {
-
-jobject Thread_currentThread(JNIEnv* env, jclass) {
+static jobject Thread_currentThread(JNIEnv* env, jclass) {
   return AddLocalReference<jobject>(env, Thread::Current()->GetPeer());
 }
 
-jboolean Thread_interrupted(JNIEnv* env, jclass) {
+static jboolean Thread_interrupted(JNIEnv* env, jclass) {
   return Thread::Current()->Interrupted();
 }
 
-jboolean Thread_isInterrupted(JNIEnv* env, jobject javaThread) {
+static jboolean Thread_isInterrupted(JNIEnv* env, jobject javaThread) {
   ScopedThreadListLock thread_list_lock;
   Thread* thread = Thread::FromManagedThread(env, javaThread);
   return (thread != NULL) ? thread->IsInterrupted() : JNI_FALSE;
 }
 
-void Thread_nativeCreate(JNIEnv* env, jclass, jobject javaThread, jlong stackSize) {
+static void Thread_nativeCreate(JNIEnv* env, jclass, jobject javaThread, jlong stackSize) {
   Object* managedThread = Decode<Object*>(env, javaThread);
   Thread::Create(managedThread, stackSize);
 }
 
-jint Thread_nativeGetStatus(JNIEnv* env, jobject javaThread) {
+static jint Thread_nativeGetStatus(JNIEnv* env, jobject javaThread) {
   ScopedThreadListLock thread_list_lock;
   Thread* thread = Thread::FromManagedThread(env, javaThread);
   if (thread == NULL) {
@@ -56,7 +54,7 @@
   return static_cast<jint>(thread->GetState());
 }
 
-jboolean Thread_nativeHoldsLock(JNIEnv* env, jobject javaThread, jobject javaObject) {
+static jboolean Thread_nativeHoldsLock(JNIEnv* env, jobject javaThread, jobject javaObject) {
   Object* object = Decode<Object*>(env, javaObject);
   if (object == NULL) {
     ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
@@ -68,7 +66,7 @@
   return thread->HoldsLock(object);
 }
 
-void Thread_nativeInterrupt(JNIEnv* env, jobject javaThread) {
+static void Thread_nativeInterrupt(JNIEnv* env, jobject javaThread) {
   ScopedThreadListLock thread_list_lock;
   Thread* thread = Thread::FromManagedThread(env, javaThread);
   if (thread != NULL) {
@@ -76,7 +74,7 @@
   }
 }
 
-void Thread_nativeSetName(JNIEnv* env, jobject javaThread, jstring javaName) {
+static void Thread_nativeSetName(JNIEnv* env, jobject javaThread, jstring javaName) {
   ScopedThreadListLock thread_list_lock;
   Thread* thread = Thread::FromManagedThread(env, javaThread);
   if (thread == NULL) {
@@ -94,7 +92,7 @@
  * from Thread.MIN_PRIORITY to Thread.MAX_PRIORITY (1-10), with "normal"
  * threads at Thread.NORM_PRIORITY (5).
  */
-void Thread_nativeSetPriority(JNIEnv* env, jobject javaThread, jint newPriority) {
+static void Thread_nativeSetPriority(JNIEnv* env, jobject javaThread, jint newPriority) {
   ScopedThreadListLock thread_list_lock;
   Thread* thread = Thread::FromManagedThread(env, javaThread);
   if (thread != NULL) {
@@ -108,7 +106,7 @@
  * The exact behavior is poorly defined.  Some discussion here:
  *   http://www.cs.umd.edu/~pugh/java/memoryModel/archive/0944.html
  */
-void Thread_yield(JNIEnv*, jobject) {
+static void Thread_yield(JNIEnv*, jobject) {
   sched_yield();
 }
 
@@ -125,8 +123,6 @@
   NATIVE_METHOD(Thread, yield, "()V"),
 };
 
-}  // namespace
-
 void register_java_lang_Thread(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/Thread", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_Throwable.cc b/src/java_lang_Throwable.cc
index 2ab4ed6..1d73027 100644
--- a/src/java_lang_Throwable.cc
+++ b/src/java_lang_Throwable.cc
@@ -21,27 +21,23 @@
 
 namespace art {
 
-namespace {
-
-jobject Throwable_nativeFillInStackTrace(JNIEnv* env, jclass) {
+static jobject Throwable_nativeFillInStackTrace(JNIEnv* env, jclass) {
   JNIEnvExt* env_ext = reinterpret_cast<JNIEnvExt*>(env);
   return env_ext->self->CreateInternalStackTrace(env);
 }
 
-jobjectArray Throwable_nativeGetStackTrace(JNIEnv* env, jclass, jobject javaStackState) {
+static jobjectArray Throwable_nativeGetStackTrace(JNIEnv* env, jclass, jobject javaStackState) {
   if (javaStackState == NULL) {
       return NULL;
   }
   return Thread::InternalStackTraceToStackTraceElementArray(env, javaStackState);
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(Throwable, nativeFillInStackTrace, "()Ljava/lang/Object;"),
   NATIVE_METHOD(Throwable, nativeGetStackTrace, "(Ljava/lang/Object;)[Ljava/lang/StackTraceElement;"),
 };
 
-}  // namespace
-
 void register_java_lang_Throwable(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/Throwable", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_VMClassLoader.cc b/src/java_lang_VMClassLoader.cc
index 9d2e2a8..1bb2e63 100644
--- a/src/java_lang_VMClassLoader.cc
+++ b/src/java_lang_VMClassLoader.cc
@@ -23,9 +23,7 @@
 
 namespace art {
 
-namespace {
-
-jclass VMClassLoader_findLoadedClass(JNIEnv* env, jclass, jobject javaLoader, jstring javaName) {
+static jclass VMClassLoader_findLoadedClass(JNIEnv* env, jclass, jobject javaLoader, jstring javaName) {
   ClassLoader* loader = Decode<ClassLoader*>(env, javaLoader);
   ScopedUtfChars name(env, javaName);
   if (name.c_str() == NULL) {
@@ -43,7 +41,7 @@
   }
 }
 
-jint VMClassLoader_getBootClassPathSize(JNIEnv* env, jclass) {
+static jint VMClassLoader_getBootClassPathSize(JNIEnv* env, jclass) {
   return Runtime::Current()->GetClassLinker()->GetBootClassPath().size();
 }
 
@@ -60,7 +58,7 @@
  * with '/'); if it's not we'd need to make it absolute as part of forming
  * the URL string.
  */
-jstring VMClassLoader_getBootClassPathResource(JNIEnv* env, jclass, jstring javaName, jint index) {
+static jstring VMClassLoader_getBootClassPathResource(JNIEnv* env, jclass, jstring javaName, jint index) {
   ScopedUtfChars name(env, javaName);
   if (name.c_str() == NULL) {
     return NULL;
@@ -92,8 +90,6 @@
   NATIVE_METHOD(VMClassLoader, getBootClassPathSize, "()I"),
 };
 
-}  // namespace
-
 void register_java_lang_VMClassLoader(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/VMClassLoader", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_reflect_Array.cc b/src/java_lang_reflect_Array.cc
index 3bf2680..4a5f797 100644
--- a/src/java_lang_reflect_Array.cc
+++ b/src/java_lang_reflect_Array.cc
@@ -23,12 +23,9 @@
 
 namespace art {
 
-namespace {
-
-
 // Recursively create an array with multiple dimensions.  Elements may be
 // Objects or primitive types.
-Array* CreateMultiArray(Class* array_class, int current_dimension, IntArray* dimensions) {
+static Array* CreateMultiArray(Class* array_class, int current_dimension, IntArray* dimensions) {
   int32_t array_length = dimensions->Get(current_dimension++);
   SirtRef<Array> new_array(Array::Alloc(array_class, array_length));
   if (new_array.get() == NULL) {
@@ -72,7 +69,7 @@
 // easiest way to deal with that is to create the full name once and then
 // subtract pieces off.  Besides, we want to start with the outermost
 // piece and work our way in.
-jobject Array_createMultiArray(JNIEnv* env, jclass, jclass javaElementClass, jobject javaDimArray) {
+static jobject Array_createMultiArray(JNIEnv* env, jclass, jclass javaElementClass, jobject javaDimArray) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   DCHECK(javaElementClass != NULL);
   Class* element_class = Decode<Class*>(env, javaElementClass);
@@ -120,8 +117,7 @@
   return AddLocalReference<jobject>(env, new_array);
 }
 
-jobject Array_createObjectArray(JNIEnv* env, jclass, jclass javaElementClass, jint length)
-{
+static jobject Array_createObjectArray(JNIEnv* env, jclass, jclass javaElementClass, jint length) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   DCHECK(javaElementClass != NULL);
   Class* element_class = Decode<Class*>(env, javaElementClass);
@@ -153,8 +149,6 @@
   NATIVE_METHOD(Array, createObjectArray, "(Ljava/lang/Class;I)Ljava/lang/Object;"),
 };
 
-}  // namespace
-
 void register_java_lang_reflect_Array(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/reflect/Array", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_reflect_Constructor.cc b/src/java_lang_reflect_Constructor.cc
index 36481f7..c908bb7 100644
--- a/src/java_lang_reflect_Constructor.cc
+++ b/src/java_lang_reflect_Constructor.cc
@@ -24,8 +24,6 @@
 
 namespace art {
 
-namespace {
-
 /*
  * We get here through Constructor.newInstance().  The Constructor object
  * would not be available if the constructor weren't public (per the
@@ -33,7 +31,7 @@
  * check.  We can also safely assume the constructor isn't associated
  * with an interface, array, or primitive class.
  */
-jobject Constructor_newInstance(JNIEnv* env, jobject javaMethod, jobjectArray javaArgs) {
+static jobject Constructor_newInstance(JNIEnv* env, jobject javaMethod, jobjectArray javaArgs) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Method* m = Decode<Object*>(env, javaMethod)->AsMethod();
   Class* c = m->GetDeclaringClass();
@@ -64,8 +62,6 @@
   NATIVE_METHOD(Constructor, newInstance, "([Ljava/lang/Object;)Ljava/lang/Object;"),
 };
 
-}  // namespace
-
 void register_java_lang_reflect_Constructor(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/reflect/Constructor", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_reflect_Field.cc b/src/java_lang_reflect_Field.cc
index fc1ea4e..d1b40f3 100644
--- a/src/java_lang_reflect_Field.cc
+++ b/src/java_lang_reflect_Field.cc
@@ -24,9 +24,7 @@
 
 namespace art {
 
-namespace {
-
-bool GetFieldValue(Object* o, Field* f, JValue& value, bool allow_references) {
+static bool GetFieldValue(Object* o, Field* f, JValue& value, bool allow_references) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   switch (FieldHelper(f).GetTypeAsPrimitiveType()) {
   case Primitive::kPrimBoolean:
@@ -69,7 +67,7 @@
   return false;
 }
 
-bool CheckReceiver(JNIEnv* env, jobject javaObj, Field* f, Object*& o) {
+static bool CheckReceiver(JNIEnv* env, jobject javaObj, Field* f, Object*& o) {
   if (f->IsStatic()) {
     o = NULL;
     return true;
@@ -83,7 +81,7 @@
   return true;
 }
 
-jobject Field_get(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jobject Field_get(JNIEnv* env, jobject javaField, jobject javaObj) {
   Field* f = DecodeField(env->FromReflectedField(javaField));
   Object* o = NULL;
   if (!CheckReceiver(env, javaObj, f, o)) {
@@ -100,7 +98,7 @@
   return AddLocalReference<jobject>(env, value.l);
 }
 
-JValue GetPrimitiveField(JNIEnv* env, jobject javaField, jobject javaObj, char dst_descriptor) {
+static JValue GetPrimitiveField(JNIEnv* env, jobject javaField, jobject javaObj, char dst_descriptor) {
   Field* f = DecodeField(env->FromReflectedField(javaField));
   Object* o = NULL;
   if (!CheckReceiver(env, javaObj, f, o)) {
@@ -123,39 +121,39 @@
   return wide_value;
 }
 
-jboolean Field_getBoolean(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jboolean Field_getBoolean(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'Z').z;
 }
 
-jbyte Field_getByte(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jbyte Field_getByte(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'B').b;
 }
 
-jchar Field_getChar(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jchar Field_getChar(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'C').c;
 }
 
-jdouble Field_getDouble(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jdouble Field_getDouble(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'D').d;
 }
 
-jfloat Field_getFloat(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jfloat Field_getFloat(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'F').f;
 }
 
-jint Field_getInt(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jint Field_getInt(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'I').i;
 }
 
-jlong Field_getLong(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jlong Field_getLong(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'J').j;
 }
 
-jshort Field_getShort(JNIEnv* env, jobject javaField, jobject javaObj) {
+static jshort Field_getShort(JNIEnv* env, jobject javaField, jobject javaObj) {
   return GetPrimitiveField(env, javaField, javaObj, 'S').s;
 }
 
-void SetFieldValue(Object* o, Field* f, const JValue& new_value, bool allow_references) {
+static void SetFieldValue(Object* o, Field* f, const JValue& new_value, bool allow_references) {
   switch (FieldHelper(f).GetTypeAsPrimitiveType()) {
   case Primitive::kPrimBoolean:
     f->SetBoolean(o, new_value.z);
@@ -201,7 +199,7 @@
   }
 }
 
-void Field_set(JNIEnv* env, jobject javaField, jobject javaObj, jobject javaValue) {
+static void Field_set(JNIEnv* env, jobject javaField, jobject javaObj, jobject javaValue) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Field* f = DecodeField(env->FromReflectedField(javaField));
 
@@ -221,8 +219,8 @@
   SetFieldValue(o, f, unboxed_value, true);
 }
 
-void SetPrimitiveField(JNIEnv* env, jobject javaField, jobject javaObj, char src_descriptor,
-                       const JValue& new_value) {
+static void SetPrimitiveField(JNIEnv* env, jobject javaField, jobject javaObj, char src_descriptor,
+                              const JValue& new_value) {
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Field* f = DecodeField(env->FromReflectedField(javaField));
   Object* o = NULL;
@@ -248,49 +246,49 @@
   SetFieldValue(o, f, wide_value, false);
 }
 
-void Field_setBoolean(JNIEnv* env, jobject javaField, jobject javaObj, jboolean value) {
+static void Field_setBoolean(JNIEnv* env, jobject javaField, jobject javaObj, jboolean value) {
   JValue v = { 0 };
   v.z = value;
   SetPrimitiveField(env, javaField, javaObj, 'Z', v);
 }
 
-void Field_setByte(JNIEnv* env, jobject javaField, jobject javaObj, jbyte value) {
+static void Field_setByte(JNIEnv* env, jobject javaField, jobject javaObj, jbyte value) {
   JValue v = { 0 };
   v.b = value;
   SetPrimitiveField(env, javaField, javaObj, 'B', v);
 }
 
-void Field_setChar(JNIEnv* env, jobject javaField, jobject javaObj, jchar value) {
+static void Field_setChar(JNIEnv* env, jobject javaField, jobject javaObj, jchar value) {
   JValue v = { 0 };
   v.c = value;
   SetPrimitiveField(env, javaField, javaObj, 'C', v);
 }
 
-void Field_setDouble(JNIEnv* env, jobject javaField, jobject javaObj, jdouble value) {
+static void Field_setDouble(JNIEnv* env, jobject javaField, jobject javaObj, jdouble value) {
   JValue v = { 0 };
   v.d = value;
   SetPrimitiveField(env, javaField, javaObj, 'D', v);
 }
 
-void Field_setFloat(JNIEnv* env, jobject javaField, jobject javaObj, jfloat value) {
+static void Field_setFloat(JNIEnv* env, jobject javaField, jobject javaObj, jfloat value) {
   JValue v = { 0 };
   v.f = value;
   SetPrimitiveField(env, javaField, javaObj, 'F', v);
 }
 
-void Field_setInt(JNIEnv* env, jobject javaField, jobject javaObj, jint value) {
+static void Field_setInt(JNIEnv* env, jobject javaField, jobject javaObj, jint value) {
   JValue v = { 0 };
   v.i = value;
   SetPrimitiveField(env, javaField, javaObj, 'I', v);
 }
 
-void Field_setLong(JNIEnv* env, jobject javaField, jobject javaObj, jlong value) {
+static void Field_setLong(JNIEnv* env, jobject javaField, jobject javaObj, jlong value) {
   JValue v = { 0 };
   v.j = value;
   SetPrimitiveField(env, javaField, javaObj, 'J', v);
 }
 
-void Field_setShort(JNIEnv* env, jobject javaField, jobject javaObj, jshort value) {
+static void Field_setShort(JNIEnv* env, jobject javaField, jobject javaObj, jshort value) {
   JValue v = { 0 };
   v.s = value;
   SetPrimitiveField(env, javaField, javaObj, 'S', v);
@@ -317,8 +315,6 @@
   NATIVE_METHOD(Field, setShort,   "(Ljava/lang/Object;S)V"),
 };
 
-}  // namespace
-
 void register_java_lang_reflect_Field(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/reflect/Field", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_reflect_Method.cc b/src/java_lang_reflect_Method.cc
index 7049eff..d9006dc 100644
--- a/src/java_lang_reflect_Method.cc
+++ b/src/java_lang_reflect_Method.cc
@@ -24,13 +24,11 @@
 
 namespace art {
 
-namespace {
-
-jobject Method_invoke(JNIEnv* env, jobject javaMethod, jobject javaReceiver, jobject javaArgs) {
+static jobject Method_invoke(JNIEnv* env, jobject javaMethod, jobject javaReceiver, jobject javaArgs) {
   return InvokeMethod(env, javaMethod, javaReceiver, javaArgs);
 }
 
-jobject Method_getExceptionTypesNative(JNIEnv* env, jobject javaMethod) {
+static jobject Method_getExceptionTypesNative(JNIEnv* env, jobject javaMethod) {
   Method* proxy_method = Decode<Object*>(env, javaMethod)->AsMethod();
   CHECK(proxy_method->GetDeclaringClass()->IsProxyClass());
   SynthesizedProxyClass* proxy_class =
@@ -50,7 +48,7 @@
   return AddLocalReference<jobject>(env, declared_exceptions->Clone());
 }
 
-jobject Method_findOverriddenMethodNative(JNIEnv* env, jobject javaMethod) {
+static jobject Method_findOverriddenMethodNative(JNIEnv* env, jobject javaMethod) {
   Method* method = Decode<Object*>(env, javaMethod)->AsMethod();
   return AddLocalReference<jobject>(env, method->FindOverriddenMethod());
 }
@@ -61,8 +59,6 @@
   NATIVE_METHOD(Method, findOverriddenMethodNative, "()Ljava/lang/reflect/Method;"),
 };
 
-}  // namespace
-
 void register_java_lang_reflect_Method(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/reflect/Method", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_lang_reflect_Proxy.cc b/src/java_lang_reflect_Proxy.cc
index 28fe514..7bc3e44 100644
--- a/src/java_lang_reflect_Proxy.cc
+++ b/src/java_lang_reflect_Proxy.cc
@@ -22,8 +22,6 @@
 
 namespace art {
 
-namespace {
-
 static jclass Proxy_generateProxy(JNIEnv* env, jclass, jstring javaName, jobjectArray javaInterfaces, jobject javaLoader, jobjectArray javaMethods, jobjectArray javaThrows) {
   // Allocates Class so transition thread state to runnable
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
@@ -37,12 +35,10 @@
   return AddLocalReference<jclass>(env, result);
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(Proxy, generateProxy, "(Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/ClassLoader;[Ljava/lang/reflect/Method;[[Ljava/lang/Class;)Ljava/lang/Class;"),
 };
 
-}  // namespace
-
 void register_java_lang_reflect_Proxy(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/lang/reflect/Proxy", gMethods, NELEM(gMethods));
 }
diff --git a/src/java_util_concurrent_atomic_AtomicLong.cc b/src/java_util_concurrent_atomic_AtomicLong.cc
index eda98ac..118b9e4 100644
--- a/src/java_util_concurrent_atomic_AtomicLong.cc
+++ b/src/java_util_concurrent_atomic_AtomicLong.cc
@@ -21,18 +21,14 @@
 
 namespace art {
 
-namespace {
-
-jboolean AtomicLong_VMSupportsCS8(JNIEnv*, jclass) {
+static jboolean AtomicLong_VMSupportsCS8(JNIEnv*, jclass) {
   return JNI_TRUE;
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(AtomicLong, VMSupportsCS8, "()Z"),
 };
 
-}  // namespace
-
 void register_java_util_concurrent_atomic_AtomicLong(JNIEnv* env) {
   jniRegisterNativeMethods(env, "java/util/concurrent/atomic/AtomicLong", gMethods, NELEM(gMethods));
 }
diff --git a/src/jni_internal.cc b/src/jni_internal.cc
index 64d8203..7d273ac 100644
--- a/src/jni_internal.cc
+++ b/src/jni_internal.cc
@@ -238,9 +238,7 @@
   UniquePtr<JValue[]> large_arg_array_;
 };
 
-namespace {
-
-jweak AddWeakGlobalReference(ScopedJniThreadState& ts, Object* obj) {
+static jweak AddWeakGlobalReference(ScopedJniThreadState& ts, Object* obj) {
   if (obj == NULL) {
     return NULL;
   }
@@ -253,7 +251,7 @@
 
 // For internal use.
 template<typename T>
-T Decode(ScopedJniThreadState& ts, jobject obj) {
+static T Decode(ScopedJniThreadState& ts, jobject obj) {
   return reinterpret_cast<T>(ts.Self()->DecodeJObject(obj));
 }
 
@@ -412,14 +410,14 @@
 }
 
 template<typename JniT, typename ArtT>
-JniT NewPrimitiveArray(ScopedJniThreadState& ts, jsize length) {
+static JniT NewPrimitiveArray(ScopedJniThreadState& ts, jsize length) {
   CHECK_GE(length, 0); // TODO: ReportJniError
   ArtT* result = ArtT::Alloc(length);
   return AddLocalReference<JniT>(ts.Env(), result);
 }
 
 template <typename ArrayT, typename CArrayT, typename ArtArrayT>
-CArrayT GetPrimitiveArray(ScopedJniThreadState& ts, ArrayT java_array, jboolean* is_copy) {
+static CArrayT GetPrimitiveArray(ScopedJniThreadState& ts, ArrayT java_array, jboolean* is_copy) {
   ArtArrayT* array = Decode<ArtArrayT*>(ts, java_array);
   PinPrimitiveArray(ts, array);
   if (is_copy != NULL) {
@@ -429,7 +427,7 @@
 }
 
 template <typename ArrayT>
-void ReleasePrimitiveArray(ScopedJniThreadState& ts, ArrayT java_array, jint mode) {
+static void ReleasePrimitiveArray(ScopedJniThreadState& ts, ArrayT java_array, jint mode) {
   if (mode != JNI_COMMIT) {
     Array* array = Decode<Array*>(ts, java_array);
     UnpinPrimitiveArray(ts, array);
@@ -449,7 +447,7 @@
 }
 
 template <typename JavaArrayT, typename JavaT, typename ArrayT>
-void GetPrimitiveArrayRegion(ScopedJniThreadState& ts, JavaArrayT java_array, jsize start, jsize length, JavaT* buf) {
+static void GetPrimitiveArrayRegion(ScopedJniThreadState& ts, JavaArrayT java_array, jsize start, jsize length, JavaT* buf) {
   ArrayT* array = Decode<ArrayT*>(ts, java_array);
   if (start < 0 || length < 0 || start + length > array->GetLength()) {
     ThrowAIOOBE(ts, array, start, length, "src");
@@ -460,7 +458,7 @@
 }
 
 template <typename JavaArrayT, typename JavaT, typename ArrayT>
-void SetPrimitiveArrayRegion(ScopedJniThreadState& ts, JavaArrayT java_array, jsize start, jsize length, const JavaT* buf) {
+static void SetPrimitiveArrayRegion(ScopedJniThreadState& ts, JavaArrayT java_array, jsize start, jsize length, const JavaT* buf) {
   ArrayT* array = Decode<ArrayT*>(ts, java_array);
   if (start < 0 || length < 0 || start + length > array->GetLength()) {
     ThrowAIOOBE(ts, array, start, length, "dst");
@@ -612,8 +610,6 @@
   JNI_OnLoadState jni_on_load_result_;
 };
 
-}  // namespace
-
 // This exists mainly to keep implementation details out of the header file.
 class Libraries {
  public:
diff --git a/src/org_apache_harmony_dalvik_ddmc_DdmServer.cc b/src/org_apache_harmony_dalvik_ddmc_DdmServer.cc
index b46ee1f..42568d0 100644
--- a/src/org_apache_harmony_dalvik_ddmc_DdmServer.cc
+++ b/src/org_apache_harmony_dalvik_ddmc_DdmServer.cc
@@ -22,8 +22,6 @@
 
 namespace art {
 
-namespace {
-
 static void DdmServer_nativeSendChunk(JNIEnv* env, jclass, jint type,
                                       jbyteArray javaData, jint offset, jint length)
 {
@@ -36,8 +34,6 @@
   NATIVE_METHOD(DdmServer, nativeSendChunk, "(I[BII)V"),
 };
 
-}  // namespace
-
 void register_org_apache_harmony_dalvik_ddmc_DdmServer(JNIEnv* env) {
   jniRegisterNativeMethods(env, "org/apache/harmony/dalvik/ddmc/DdmServer", gMethods, NELEM(gMethods));
 }
diff --git a/src/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc b/src/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc
index bf356dc..369abd4 100644
--- a/src/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc
+++ b/src/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc
@@ -26,8 +26,6 @@
 
 namespace art {
 
-namespace {
-
 static void DdmVmInternal_enableRecentAllocations(JNIEnv* env, jclass, jboolean enable) {
   Dbg::SetAllocTrackingEnabled(enable);
 }
@@ -163,8 +161,6 @@
   NATIVE_METHOD(DdmVmInternal, threadNotify, "(Z)V"),
 };
 
-}  // namespace
-
 void register_org_apache_harmony_dalvik_ddmc_DdmVmInternal(JNIEnv* env) {
   jniRegisterNativeMethods(env, "org/apache/harmony/dalvik/ddmc/DdmVmInternal", gMethods, NELEM(gMethods));
 }
diff --git a/src/sun_misc_Unsafe.cc b/src/sun_misc_Unsafe.cc
index a561690..d5d7444 100644
--- a/src/sun_misc_Unsafe.cc
+++ b/src/sun_misc_Unsafe.cc
@@ -21,28 +21,26 @@
 
 namespace art {
 
-namespace {
-
-jlong Unsafe_objectFieldOffset0(JNIEnv* env, jclass, jobject javaField) {
+static jlong Unsafe_objectFieldOffset0(JNIEnv* env, jclass, jobject javaField) {
   // TODO: move to Java code
   jfieldID fid = env->FromReflectedField(javaField);
   Field* field = DecodeField(fid);
   return field->GetOffset().Int32Value();
 }
 
-jint Unsafe_arrayBaseOffset0(JNIEnv* env, jclass, jclass javaArrayClass) {
+static jint Unsafe_arrayBaseOffset0(JNIEnv* env, jclass, jclass javaArrayClass) {
   // TODO: move to Java code
   ScopedThreadStateChange tsc(Thread::Current(), Thread::kRunnable);
   Class* array_class = Decode<Class*>(env, javaArrayClass);
   return Array::DataOffset(array_class->GetComponentSize()).Int32Value();
 }
 
-jint Unsafe_arrayIndexScale0(JNIEnv* env, jclass, jclass javaClass) {
+static jint Unsafe_arrayIndexScale0(JNIEnv* env, jclass, jclass javaClass) {
   Class* c = Decode<Class*>(env, javaClass);
   return c->GetComponentSize();
 }
 
-jboolean Unsafe_compareAndSwapInt(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint expectedValue, jint newValue) {
+static jboolean Unsafe_compareAndSwapInt(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint expectedValue, jint newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   byte* raw_addr = reinterpret_cast<byte*>(obj) + offset;
   volatile int32_t* address = reinterpret_cast<volatile int32_t*>(raw_addr);
@@ -51,7 +49,7 @@
   return (result == 0);
 }
 
-jboolean Unsafe_compareAndSwapLong(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong expectedValue, jlong newValue) {
+static jboolean Unsafe_compareAndSwapLong(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong expectedValue, jlong newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   byte* raw_addr = reinterpret_cast<byte*>(obj) + offset;
   volatile int64_t* address = reinterpret_cast<volatile int64_t*>(raw_addr);
@@ -60,7 +58,7 @@
   return (result == 0);
 }
 
-jboolean Unsafe_compareAndSwapObject(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaExpectedValue, jobject javaNewValue) {
+static jboolean Unsafe_compareAndSwapObject(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaExpectedValue, jobject javaNewValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   Object* expectedValue = Decode<Object*>(env, javaExpectedValue);
   Object* newValue = Decode<Object*>(env, javaNewValue);
@@ -75,97 +73,96 @@
   return (result == 0);
 }
 
-jint Unsafe_getInt(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
+static jint Unsafe_getInt(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
   Object* obj = Decode<Object*>(env, javaObj);
   return obj->GetField32(MemberOffset(offset), false);
 }
 
-jint Unsafe_getIntVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
+static jint Unsafe_getIntVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
   Object* obj = Decode<Object*>(env, javaObj);
   byte* raw_addr = reinterpret_cast<byte*>(obj) + offset;
   volatile int32_t* address = reinterpret_cast<volatile int32_t*>(raw_addr);
   return android_atomic_acquire_load(address);
 }
 
-void Unsafe_putInt(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint newValue) {
+static void Unsafe_putInt(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   obj->SetField32(MemberOffset(offset), newValue, false);
 }
 
-void Unsafe_putIntVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint newValue) {
+static void Unsafe_putIntVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   byte* raw_addr = reinterpret_cast<byte*>(obj) + offset;
   volatile int32_t* address = reinterpret_cast<volatile int32_t*>(raw_addr);
   android_atomic_release_store(newValue, address);
 }
 
-void Unsafe_putOrderedInt(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint newValue) {
+static void Unsafe_putOrderedInt(JNIEnv* env, jobject, jobject javaObj, jlong offset, jint newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   ANDROID_MEMBAR_STORE();
   obj->SetField32(MemberOffset(offset), newValue, false);
 }
 
-jlong Unsafe_getLong(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
+static jlong Unsafe_getLong(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
   Object* obj = Decode<Object*>(env, javaObj);
   byte* raw_addr = reinterpret_cast<byte*>(obj) + offset;
   int64_t* address = reinterpret_cast<int64_t*>(raw_addr);
   return *address;
 }
 
-jlong Unsafe_getLongVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
+static jlong Unsafe_getLongVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
   Object* obj = Decode<Object*>(env, javaObj);
   return obj->GetField64(MemberOffset(offset), true);
 }
 
-void Unsafe_putLong(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong newValue) {
+static void Unsafe_putLong(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   obj->SetField64(MemberOffset(offset), newValue, false);
 }
 
-void Unsafe_putLongVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong newValue) {
+static void Unsafe_putLongVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   obj->SetField64(MemberOffset(offset), newValue, true);
 }
 
-void Unsafe_putOrderedLong(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong newValue) {
+static void Unsafe_putOrderedLong(JNIEnv* env, jobject, jobject javaObj, jlong offset, jlong newValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   ANDROID_MEMBAR_STORE();
   obj->SetField64(MemberOffset(offset), newValue, false);
 }
 
-jobject Unsafe_getObjectVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
+static jobject Unsafe_getObjectVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
   Object* obj = Decode<Object*>(env, javaObj);
   Object* value = obj->GetFieldObject<Object*>(MemberOffset(offset), true);
   return AddLocalReference<jobject>(env, value);
 }
 
-jobject Unsafe_getObject(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
+static jobject Unsafe_getObject(JNIEnv* env, jobject, jobject javaObj, jlong offset) {
   Object* obj = Decode<Object*>(env, javaObj);
   Object* value = obj->GetFieldObject<Object*>(MemberOffset(offset), false);
   return AddLocalReference<jobject>(env, value);
 }
 
-void Unsafe_putObject(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaNewValue) {
+static void Unsafe_putObject(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaNewValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   Object* newValue = Decode<Object*>(env, javaNewValue);
   obj->SetFieldObject(MemberOffset(offset), newValue, false);
 }
 
-void Unsafe_putObjectVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaNewValue) {
+static void Unsafe_putObjectVolatile(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaNewValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   Object* newValue = Decode<Object*>(env, javaNewValue);
   obj->SetFieldObject(MemberOffset(offset), newValue, true);
 }
 
-
-void Unsafe_putOrderedObject(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaNewValue) {
+static void Unsafe_putOrderedObject(JNIEnv* env, jobject, jobject javaObj, jlong offset, jobject javaNewValue) {
   Object* obj = Decode<Object*>(env, javaObj);
   Object* newValue = Decode<Object*>(env, javaNewValue);
   ANDROID_MEMBAR_STORE();
   obj->SetFieldObject(MemberOffset(offset), newValue, false);
 }
 
-JNINativeMethod gMethods[] = {
+static JNINativeMethod gMethods[] = {
   NATIVE_METHOD(Unsafe, objectFieldOffset0, "(Ljava/lang/reflect/Field;)J"),
   NATIVE_METHOD(Unsafe, arrayBaseOffset0, "(Ljava/lang/Class;)I"),
   NATIVE_METHOD(Unsafe, arrayIndexScale0, "(Ljava/lang/Class;)I"),
@@ -189,8 +186,6 @@
   NATIVE_METHOD(Unsafe, putOrderedObject, "(Ljava/lang/Object;JLjava/lang/Object;)V"),
 };
 
-}  // namespace
-
 void register_sun_misc_Unsafe(JNIEnv* env) {
   jniRegisterNativeMethods(env, "sun/misc/Unsafe", gMethods, NELEM(gMethods));
 }
diff --git a/src/utils.cc b/src/utils.cc
index 4895fe5..26fe605 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -133,6 +133,17 @@
 #endif
 }
 
+uint64_t ThreadCpuNanoTime() {
+#if defined(HAVE_POSIX_CLOCKS)
+  struct timespec now;
+  clock_gettime(CLOCK_THREAD_CPUTIME_ID, &now);
+  return static_cast<uint64_t>(now.tv_sec) * 1000000000LL + now.tv_nsec;
+#else
+  UNIMPLEMENTED(WARNING);
+  return -1;
+#endif
+}
+
 std::string PrettyDescriptor(const String* java_descriptor) {
   if (java_descriptor == NULL) {
     return "null";
diff --git a/src/utils.h b/src/utils.h
index e774a3b..cdd8fad 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -240,18 +240,21 @@
 // Returns the current date in ISO yyyy-mm-dd hh:mm:ss format.
 std::string GetIsoDate();
 
-// Returns the current time in milliseconds (using the POSIX CLOCK_MONOTONIC).
+// Returns the monotonic time since some unspecified starting point in milliseconds.
 uint64_t MilliTime();
 
-// Returns the current time in microseconds (using the POSIX CLOCK_MONOTONIC).
+// Returns the monotonic time since some unspecified starting point in microseconds.
 uint64_t MicroTime();
 
-// Returns the current time in nanoseconds (using the POSIX CLOCK_MONOTONIC).
+// Returns the monotonic time since some unspecified starting point in nanoseconds.
 uint64_t NanoTime();
 
-// Returns the current time in microseconds (using the POSIX CLOCK_THREAD_CPUTIME_ID).
+// Returns the thread-specific CPU-time clock in microseconds or -1 if unavailable.
 uint64_t ThreadCpuMicroTime();
 
+// Returns the thread-specific CPU-time clock in nanoseconds or -1 if unavailable.
+uint64_t ThreadCpuNanoTime();
+
 // Converts the given number of nanoseconds to milliseconds.
 static inline uint64_t NsToMs(uint64_t ns) {
   return ns / 1000 / 1000;