Improved ClassLoader support

Change-Id: I587c0fa439c64a0c947641b01c072149f480bf85
diff --git a/src/common_test.h b/src/common_test.h
index 685a06c..13f92d1 100644
--- a/src/common_test.h
+++ b/src/common_test.h
@@ -36,33 +36,57 @@
 // }
 //
 // package java.lang;
+// public class ClassLoader {
+//   Object packages;
+//   ClassLoader parent;
+// }
+//
+// package dalvik.system;
+// public class BaseDexClassLoader extends ClassLoader {
+//   String originalPath;
+//   Object pathList;
+// }
+//
+// package dalvik.system;
+// public class PathClassLoader extends BaseDexClassLoader {}
+//
+// package java.lang;
 // public interface Cloneable {}
 //
 // package java.io;
 // public interface Serializable {}
 static const char kJavaLangDex[] =
-  "ZGV4CjAzNQDgopvWPbyCTsLOzSYO4VPqS6aRqcz6ZQu0BAAAcAAAAHhWNBIAAAAAAAAAACAEAAAW"
-  "AAAAcAAAAAoAAADIAAAAAQAAAPAAAAAEAAAA/AAAAAUAAAAcAQAABwAAAEQBAACQAgAAJAIAAJgC"
-  "AACgAgAArAIAALwCAADIAgAAywIAAOMCAAD2AgAADQMAACEDAAA1AwAAUAMAAGwDAAB5AwAAhgMA"
-  "AJkDAACmAwAAqQMAAK0DAAC0AwAAvgMAAMYDAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAA"
-  "CwAAABAAAAARAAAAEAAAAAgAAAAAAAAABQAAABIAAAAFAAAAEwAAAAUAAAAUAAAABQAJABUAAAAC"
-  "AAAAAAAAAAQAAAAAAAAABQAAAAAAAAAGAAAAAAAAAAcAAAAAAAAABAAAAAEAAAD/////AAAAAA0A"
-  "AAAAAAAA5gMAAAAAAAABAAAAAQYAAAQAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAIAAAABAAAABAAA"
-  "AAAAAAABAAAAAAAAAPADAAAAAAAAAwAAAAEGAAAEAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAFAAAA"
-  "AQAAAAQAAAAAAAAADwAAAAAAAAD6AwAAAAAAAAYAAAABAAAABAAAAAAAAAADAAAAAAAAAAwEAAAA"
-  "AAAABwAAAAEAAAAEAAAAAAAAAAwAAAAAAAAAFgQAAAAAAAABAAEAAAAAAM0DAAABAAAADgAAAAEA"
-  "AQABAAAA0gMAAAQAAABwEAEAAAAOAAEAAQABAAAA1wMAAAQAAABwEAEAAAAOAAEAAQABAAAA3AMA"
-  "AAQAAABwEAEAAAAOAAEAAQABAAAA4QMAAAQAAABwEAEAAAAOAAY8aW5pdD4ACkNsYXNzLmphdmEA"
-  "DkNsb25lYWJsZS5qYXZhAApGaWVsZC5qYXZhAAFJABZMamF2YS9pby9TZXJpYWxpemFibGU7ABFM"
-  "amF2YS9sYW5nL0NsYXNzOwAVTGphdmEvbGFuZy9DbG9uZWFibGU7ABJMamF2YS9sYW5nL09iamVj"
-  "dDsAEkxqYXZhL2xhbmcvU3RyaW5nOwAZTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOwAaTGphdmEv"
-  "bGFuZy9yZWZsZWN0L01ldGhvZDsAC01ldGhvZC5qYXZhAAtPYmplY3QuamF2YQARU2VyaWFsaXph"
-  "YmxlLmphdmEAC1N0cmluZy5qYXZhAAFWAAJbQwAFY291bnQACGhhc2hDb2RlAAZvZmZzZXQABXZh"
-  "bHVlAAMABw4ABQAHDgAFAAcOAAUABw4ABQAHDgAAAAEAAYGABKQEAAABAACBgAS4BAAEAQAAAAEA"
-  "AQABAAKBgATQBAAAAQADgYAE6AQAAAEABIGABIAFDAAAAAAAAAABAAAAAAAAAAEAAAAWAAAAcAAA"
-  "AAIAAAAKAAAAyAAAAAMAAAABAAAA8AAAAAQAAAAEAAAA/AAAAAUAAAAFAAAAHAEAAAYAAAAHAAAA"
-  "RAEAAAEgAAAFAAAAJAIAAAIgAAAWAAAAmAIAAAMgAAAFAAAAzQMAAAAgAAAFAAAA5gMAAAAQAAAB"
-  "AAAAIAQAAA==";
+  "ZGV4CjAzNQCf+7APoNCFqeL/QKrA9vK3fihkWcSko9nIBgAAcAAAAHhWNBIAAAAAAAAAADQGAAAg"
+  "AAAAcAAAAA0AAADwAAAAAQAAACQBAAAIAAAAMAEAAAgAAABwAQAACgAAALABAADYAwAA8AIAAKwD"
+  "AAC0AwAAzQMAANkDAADrAwAA+wMAAAcEAAAKBAAALgQAAE8EAABnBAAAegQAAJMEAACqBAAAvgQA"
+  "ANIEAADtBAAACQUAABYFAAAjBQAAOQUAAEwFAABZBQAAXAUAAGAFAABnBQAAcQUAAHkFAACHBQAA"
+  "kQUAAJkFAACjBQAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAAW"
+  "AAAAFwAAABYAAAALAAAAAAAAAAEACAAbAAAAAQAHAB4AAAAFAAcAHAAAAAUABQAdAAAACAAAABgA"
+  "AAAIAAAAGQAAAAgAAAAaAAAACAAMAB8AAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAFAAAAAAAA"
+  "AAcAAAAAAAAACAAAAAAAAAAJAAAAAAAAAAoAAAAAAAAABwAAAAEAAAD/////AAAAABIAAAAAAAAA"
+  "0gUAAAAAAAAFAAAAAQAAAAcAAAAAAAAAAwAAAAAAAADcBQAAAAAAAAEAAAABAAAABQAAAAAAAAAB"
+  "AAAAAAAAAOoFAAAAAAAAAgAAAAEAAAABAAAAAAAAABMAAAAAAAAA+AUAAAAAAAADAAAAAQYAAAcA"
+  "AAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAABAAAABwAAAAAAAAACAAAAAAAAAAIGAAAAAAAABgAA"
+  "AAEGAAAHAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAIAAAAAQAAAAcAAAAAAAAAFQAAAAAAAAAMBgAA"
+  "AAAAAAkAAAABAAAABwAAAAAAAAAFAAAAAAAAAB4GAAAAAAAACgAAAAEAAAAHAAAAAAAAABEAAAAA"
+  "AAAAKAYAAAAAAAABAAEAAAAAAKoFAAABAAAADgAAAAEAAQABAAAArwUAAAQAAABwEAQAAAAOAAEA"
+  "AQABAAAAtAUAAAQAAABwEAMAAAAOAAEAAQABAAAAuQUAAAQAAABwEAAAAAAOAAEAAQABAAAAvgUA"
+  "AAQAAABwEAQAAAAOAAEAAQABAAAAwwUAAAQAAABwEAQAAAAOAAEAAQABAAAAyAUAAAQAAABwEAQA"
+  "AAAOAAEAAQABAAAAzQUAAAQAAABwEAQAAAAOAAY8aW5pdD4AF0Jhc2VEZXhDbGFzc0xvYWRlci5q"
+  "YXZhAApDbGFzcy5qYXZhABBDbGFzc0xvYWRlci5qYXZhAA5DbG9uZWFibGUuamF2YQAKRmllbGQu"
+  "amF2YQABSQAiTGRhbHZpay9zeXN0ZW0vQmFzZURleENsYXNzTG9hZGVyOwAfTGRhbHZpay9zeXN0"
+  "ZW0vUGF0aENsYXNzTG9hZGVyOwAWTGphdmEvaW8vU2VyaWFsaXphYmxlOwARTGphdmEvbGFuZy9D"
+  "bGFzczsAF0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7ABVMamF2YS9sYW5nL0Nsb25lYWJsZTsAEkxq"
+  "YXZhL2xhbmcvT2JqZWN0OwASTGphdmEvbGFuZy9TdHJpbmc7ABlMamF2YS9sYW5nL3JlZmxlY3Qv"
+  "RmllbGQ7ABpMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwALTWV0aG9kLmphdmEAC09iamVjdC5q"
+  "YXZhABRQYXRoQ2xhc3NMb2FkZXIuamF2YQARU2VyaWFsaXphYmxlLmphdmEAC1N0cmluZy5qYXZh"
+  "AAFWAAJbQwAFY291bnQACGhhc2hDb2RlAAZvZmZzZXQADG9yaWdpbmFsUGF0aAAIcGFja2FnZXMA"
+  "BnBhcmVudAAIcGF0aExpc3QABXZhbHVlAAMABw4ABQAHDgAFAAcOAAUABw4ABQAHDgAFAAcOAAUA"
+  "Bw4ABQAHDgAAAAEABIGABPAFAAIBAAIAAQADgYAEhAYAAgEAAAABAACBgAScBgAAAQABgYAEtAYA"
+  "AAEAAoGABMwGAAQBAAQAAQABAAEABYGABOQGAAABAAaBgAT8BgAAAQAHgYAElAcAAAwAAAAAAAAA"
+  "AQAAAAAAAAABAAAAIAAAAHAAAAACAAAADQAAAPAAAAADAAAAAQAAACQBAAAEAAAACAAAADABAAAF"
+  "AAAACAAAAHABAAAGAAAACgAAALABAAABIAAACAAAAPACAAACIAAAIAAAAKwDAAADIAAACAAAAKoF"
+  "AAAAIAAACAAAANIFAAAAEAAAAQAAADQGAAA=";
 
 // package java.lang;
 // public class Object {}
@@ -288,6 +312,13 @@
     class_linker_ = runtime_->GetClassLinker();
   }
 
+  PathClassLoader* AllocPathClassLoader(const DexFile* dex_file) {
+    class_linker_->RegisterDexFile(dex_file);
+    std::vector<const DexFile*> dex_files;
+    dex_files.push_back(dex_file);
+    return class_linker_->AllocPathClassLoader(dex_files);
+  }
+
   bool is_host_;
   scoped_ptr_malloc<char> android_data_;
   std::string art_cache_;