ART: Use null for the BootClassLoader in LoadLibrary

We must translate the fake BootClassLoader object to the internally
used null when loading libraries.

Bug: 29449194
Test: test-art-host

(cherry picked from commit f7e0db0ce1170b88043f7eb6afcc93c861c4611d)

Change-Id: I823d34e209149b5b96529a423c60a1d77bf8e9d1
diff --git a/runtime/java_vm_ext.cc b/runtime/java_vm_ext.cc
index c216412..c644cde 100644
--- a/runtime/java_vm_ext.cc
+++ b/runtime/java_vm_ext.cc
@@ -742,8 +742,14 @@
     // As the incoming class loader is reachable/alive during the call of this function,
     // it's okay to decode it without worrying about unexpectedly marking it alive.
     mirror::ClassLoader* loader = soa.Decode<mirror::ClassLoader*>(class_loader);
-    class_loader_allocator =
-        Runtime::Current()->GetClassLinker()->GetAllocatorForClassLoader(loader);
+
+    ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
+    if (class_linker->IsBootClassLoader(soa, loader)) {
+      loader = nullptr;
+      class_loader = nullptr;
+    }
+
+    class_loader_allocator = class_linker->GetAllocatorForClassLoader(loader);
     CHECK(class_loader_allocator != nullptr);
   }
   if (library != nullptr) {