diff --git a/loader.cc b/loader.cc index c57fd65b6f5c0f830c76578628e96a455f037f42..36f4f464d24dbe8cce45ceebe425694801221b3c 100644 --- a/loader.cc +++ b/loader.cc @@ -127,9 +127,6 @@ int main(int ac, char **av) bootfs fs; rootfs = &fs; - fileref f = fs.open("/usr/lib/jre/lib/server/libjvm.so"); - char buf[100]; - f->read(buf, 0, 100); disable_pic(); processor::sti(); @@ -154,17 +151,23 @@ int main(int ac, char **av) // ; #endif - debug(fmt("jvm: %1% bytes, contents %2% ") % f->size() % buf); elf::program prog(fs); sched::init(prog); void main_thread(elf::program& prog); new thread([&] { main_thread(prog); }, true); } -void main_thread(elf::program& prog) +#define JVM_PATH "/usr/lib/jre/lib/server/libjvm.so" + +void start_jvm(elf::program& prog) { - test_threads(); - prog.add("/usr/lib/jre/lib/server/libjvm.so"); + fileref f = rootfs->open(JVM_PATH); + char buf[100]; + f->read(buf, 0, 100); + debug(fmt("jvm: %1% bytes, contents %2% ") % f->size() % buf); + + prog.add(JVM_PATH); + auto JNI_GetDefaultJavaVMInitArgs = prog.lookup_function<void (void*)>("JNI_GetDefaultJavaVMInitArgs"); JavaVMInitArgs vm_args; @@ -174,6 +177,14 @@ void main_thread(elf::program& prog) = prog.lookup_function<jint (JavaVM**, void**, void*)>("JNI_CreateJavaVM"); JavaVM* jvm = nullptr; + auto ret = JNI_CreateJavaVM(&jvm, nullptr, &vm_args); + debug(fmt("JNI_CreateJavaVM() returned %1%") % ret); +} + +void main_thread(elf::program& prog) +{ + test_threads(); + pci::pci_devices_print(); pci::pci_device_enumeration(); DeviceFactory::Instance()->DumpDevices(); @@ -188,8 +199,7 @@ void main_thread(elf::program& prog) debug(fmt("clock@t1 %1%") % t1); debug(fmt("clock@t2 %1%") % t2); - auto ret = JNI_CreateJavaVM(&jvm, nullptr, &vm_args); - debug(fmt("JNI_CreateJavaVM() returned %1%") % ret); + start_jvm(prog); while (true) ;