1#include <stdio.h> 2#include <inttypes.h> 3#include <barrelfish/barrelfish.h> 4 5int main(int argc, char *argv[]) 6{ 7 debug_printf("Hello world (debug_printf)\n"); 8 printf("Hello world (normal printf)\n"); 9 for (int i = 0;i < argc; i ++) { 10 printf("arg[%d] = %s\n", i, argv[i]); 11 } 12 13#ifdef __x86__ 14 // Check that we're in privileged mode 15 uint16_t cs; 16 __asm volatile("mov %%cs, %[reg]" 17 : [reg] "=r" (cs)); 18 19 if((cs & 3) == 0) { 20 printf("We're in privileged mode!\n"); 21 22 printf("Trying privileged operation...\n"); 23 uintptr_t cr0; 24 __asm volatile("mov %%cr0, %[reg]" 25 : [reg] "=r" (cr0)); 26 27 printf("Succeeded! CR0 is %" PRIxPTR "\n", cr0); 28 } else { 29 printf("NO privileged mode enabled\n"); 30 return EXIT_SUCCESS; 31 } 32 33 printf("Causing pagefault...\n"); 34 35 /* __asm volatile ("ud2"); */ 36 37 uintptr_t *zero = (uintptr_t *)0; 38 *zero = 0; 39 40 printf("After pagefault\n"); 41#endif // __x86__ 42 43 return EXIT_SUCCESS; 44} 45