#include "../../context.h" #interface "vm.h" // ---- // typedef struct vm_impl impl vm{ // union Data* vm_impl; // uint i; // pte_t* pte; // uint sz; // // __code loaduvm_ptesize_check(Type* vm_impl, __code next(...)); // __code loaduvm_loop(Type* vm_impl, uint i, pte_t* pte, uint sz, __code next(...)); // __code next(...); // // // } vm_impl; // ---- vm* createvm_impl(struct Context* cbc_context) { struct vm* vm = new vm(); struct vm_impl* vm_impl = new vm_impl(); vm->vm = (union Data*)vm_impl; vm_impl->vm_impl = NULL; vm_impl->i = 0; vm_impl->pte = NULL; vm_impl->sz = 0; vm_impl->loaduvm_ptesize_check = C_loaduvm_ptesize_checkvm_impl; vm_impl->loaduvm_loop = C_loaduvm_loopvm_impl; vm->init_vmm = C_init_vmmvm_impl; vm->kpt_freerange = C_kpt_freerangevm_impl; vm->kpt_alloc = C_kpt_allocvm_impl; vm->switchuvm = C_switchuvmvm_impl; vm->init_inituvm = C_init_inituvmvm_impl; vm->loaduvm = C_loaduvmvm_impl; vm->allocuvm = C_allocuvmvm_impl; vm->clearpteu = C_clearpteuvm_impl; vm->copyuvm = C_copyuvmvm_impl; vm->uva2ka = C_uva2kavm_impl; vm->copyout = C_copyoutvm_impl; vm->pagind_int = C_pagind_intvm_impl; return vm; } __code init_vmmvm_impl(struct vm_impl* vm, __code next(...)) { goto next(...); } __code kpt_freerangevm_impl(struct vm_impl* vm, uint low, uint hi, __code next(...)) { goto next(...); } __code kpt_allocvm_impl(struct vm_impl* vm ,__code next(...)) { goto next(...); } typedef struct proc proc; __code switchuvmvm_impl(struct vm_impl* vm ,struct proc* p, __code next(...)) { //:skip goto next(...); } __code init_inituvmvm_impl(struct vm_impl* vm, pde_t* pgdir, char* init, uint sz, __code next(...)) { //:skip goto next(...); } __code loaduvmvm_impl(struct vm_impl* vm, pde_t* pgdir, char* addr, struct inode* ip, uint offset, uint sz, __code next(...)) { vm->pgdir = pgdir; vm->addr = addr; vm->ip = ip; vm->offset = offset; vm->sz = sz; goto loaduvm_ptesize_checkvm_impl(vm, next); } __code allocuvmvm_impl(struct vm_impl* vm, pde_t* pgdir, uint oldsz, uint newsz, __code next(...)) { goto next(...); } __code clearpteuvm_impl(struct vm_impl* vm, pde_t* pgdir, char* uva, __code next(...)) { goto next(...); } __code copyuvmvm_impl(struct vm_impl* vm, pde_t* pgdir, uint sz, __code next(...)) { goto next(...); } __code uva2kavm_impl(struct vm_impl* vm, pde_t* pgdir, char* uva, __code next(...)) { goto next(...); } __code copyoutvm_impl(struct vm_impl* vm, pde_t* pgdir, uint va, void* pp, uint len, __code next(...)) { goto next(...); } __code pagind_intvm_impl(struct vm_impl* vm, uint phy_low, uint phy_hi, __code next(...)) { goto next(...); }