vmm: Added more syscalls and helpers to linuxemu
[akaros.git] / tests / dune / dune.c
index ff9383c..94e0f90 100644 (file)
@@ -30,6 +30,7 @@
 #include <err.h>
 #include <vmm/linuxemu.h>
 #include <vmm/vmm.h>
+#include <vmm/vthread.h>
 
 struct vmm_gpcore_init gpci;
 bool linuxemu(struct guest_thread *gth, struct vm_trapframe *tf);
@@ -38,7 +39,8 @@ bool linuxemu(struct guest_thread *gth, struct vm_trapframe *tf);
 extern char **environ;
 
 static struct virtual_machine vm = {.halt_exit = true,
-                                    .root_mtx = UTH_MUTEX_INIT};
+                                    .mtx = UTH_MUTEX_INIT,
+                                    .vmcall = linuxemu};
 
 static unsigned long long memsize = GiB;
 static uintptr_t memstart = MinMemory;
@@ -135,7 +137,6 @@ void dune_test(void *stack)
 static struct option long_options[] = {
        {"aux",           required_argument, 0, 'a'},
        {"debug",         no_argument,       0, 'd'},
-       {"vmmflags",      required_argument, 0, 'v'},
        {"memsize",       required_argument, 0, 'm'},
        {"memstart",      required_argument, 0, 'M'},
        {"cmdline_extra", required_argument, 0, 'c'},
@@ -230,10 +231,9 @@ int main(int argc, char **argv)
        void *tos;
        int envc, auxc, extrac = 0;
        struct elf_aux *auxv, *extra = NULL;
-       int vmmflags = 0;
        uint64_t entry = 0;
-       int ret;
-       struct vm_trapframe *vm_tf;
+       struct vthread *vth;
+       struct vmm_gpcore_init gpci[1];
        int c;
        int test = 0;
        int option_index;
@@ -261,9 +261,6 @@ int main(int argc, char **argv)
                        fprintf(stderr, "SET DEBUG\n");
                        dune_debug++;
                        break;
-               case 'v':
-                       vmmflags = strtoull(optarg, 0, 0);
-                       break;
                case 'm':
                        memsize = strtoull(optarg, 0, 0);
                        break;
@@ -292,7 +289,7 @@ int main(int argc, char **argv)
        }
 
        init_lemu_logging(dune_debug);
-       init_syscall_table();
+       init_linuxemu();
 
        if ((uintptr_t)(memstart + memsize) >= (uintptr_t)BRK_START) {
                fprintf(stderr,
@@ -339,22 +336,13 @@ int main(int argc, char **argv)
                fprintf(stderr, "populated stack at %p; argc %d, envc %d, auxc %d\n",
                        tos, ac, envc, auxc);
 
-       ret = vthread_attr_init(&vm, vmmflags);
-       if (ret) {
-               fprintf(stderr, "vmm_init failed: %r\n");
-               exit(1);
-       }
-
-       vm.gths[0]->vmcall = linuxemu;
-       vm_tf = gth_to_vmtf(vm.gths[0]);
-
-       /* we can't use the default stack since we set one up
-        * ourselves. */
-       vm_tf->tf_rsp = (uint64_t)tos;
        if (dune_debug)
                fprintf(stderr, "stack is %p\n", tos);
 
-       vthread_create(&vm, 0, (void *)entry, tos);
+       gpci_init(gpci);
+       vth = vthread_alloc(&vm, gpci);
+       vthread_init_ctx(vth, entry, (uintptr_t)tos, (uintptr_t)tos);
+       vthread_run(vth);
 
        uthread_sleep_forever();
        return 0;