/* * GeekOS C code entry point * Copyright (c) 2001,2003,2004 David H. Hovemeyer * Copyright (c) 2003, Jeffrey K. Hollingsworth * Copyright (c) 2004, Iulian Neamtiu * $Revision: 1.13 $ * * This is free software. You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* static inline unsigned int cpuid_ecx(unsigned int op) { unsigned int eax, ecx; __asm__("cpuid" : "=a" (eax), "=c" (ecx) : "0" (op) : "bx", "dx" ); return ecx; } */ extern void Get_MSR(ulong_t msr, unsigned int *val1, unsigned int *val2); extern void Set_MSR(ulong_t msr, ulong_t val1, ulong_t val2); extern uint_t Get_EIP(); extern uint_t Get_ESP(); extern uint_t Get_EBP(); int foo=42; #define SPEAKER_PORT 0x61 void Buzz(unsigned delay, unsigned num) { volatile int x; int i,j; unsigned char init; init=In_Byte(SPEAKER_PORT); for (i=0;ientry_ip, vm->exit_eip, vm->guest_esp); SerialPrintLevel(100,"VM_Thread: You should see nothing further from me\n"); ret = VMLaunch(vm); SerialPrintLevel(100,"VM_Thread: uh oh..."); switch (ret) { case VMX_SUCCESS: SerialPrintLevel(100,"Normal VMExit Occurred\n"); break; case VMX_FAIL_INVALID: SerialPrintLevel(100,"Possibile invalid VMCS (%.8x)\n", ret); break; case VMX_FAIL_VALID: SerialPrintLevel(100,"Valid VMCS, errorcode recorded in VMCS\n"); break; case VMM_ERROR: SerialPrintLevel(100,"VMM Error\n"); break; default: SerialPrintLevel(100,"VMLaunch returned unknown error (%.8x)\n", ret); break; } SerialPrintLevel(100,"VM_Thread: Spinning\n"); while (1) {} } */ int AllocateAndMapPagesForRange(uint_t start, uint_t length, pte_t template_pte) { uint_t address; for (address=start;address