Setup Thread's context ClassLoader and add image DexFiles to ClassLinker's boot classpath

Change-Id: I84337c69ff743c58be9e7125d17fcccb514614ef
diff --git a/src/thread.cc b/src/thread.cc
index 4dcef55..d9c6b4f 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -27,6 +27,7 @@
 #include <list>
 
 #include "class_linker.h"
+#include "class_loader.h"
 #include "context.h"
 #include "dex_verifier.h"
 #include "heap.h"
@@ -631,6 +632,7 @@
 
   Class* boolean_class = FindPrimitiveClassOrDie(class_linker, 'Z');
   Class* int_class = FindPrimitiveClassOrDie(class_linker, 'I');
+  Class* ClassLoader_class = FindClassOrDie(class_linker, "Ljava/lang/ClassLoader;");
   Class* String_class = FindClassOrDie(class_linker, "Ljava/lang/String;");
   Class* Thread_class = FindClassOrDie(class_linker, "Ljava/lang/Thread;");
   Class* ThreadGroup_class = FindClassOrDie(class_linker, "Ljava/lang/ThreadGroup;");
@@ -654,7 +656,11 @@
       "uncaughtException", "(Ljava/lang/Thread;Ljava/lang/Throwable;)V");
 
   // Finish attaching the main thread.
-  Thread::Current()->CreatePeer("main", false);
+  Thread* self = Thread::Current();
+  self->CreatePeer("main", false);
+
+  const Field* Thread_contextClassLoader = FindFieldOrDie(Thread_class , "contextClassLoader", ClassLoader_class);
+  Thread_contextClassLoader->SetObject(self->GetPeer(), self->GetClassLoaderOverride());
 }
 
 void Thread::Shutdown() {