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