aboutsummaryrefslogtreecommitdiffstats
path: root/misc-host/test-vaddr/vaddr.cpp
blob: c5af4919afd5eb58cfd056808cc573fba4502711 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <cstdio>
#include <cstdint>

typedef struct __attribute__((packed))
{
  unsigned long page:21;
  unsigned long PD:9;
  unsigned long PDP:9;
  unsigned long PML4:9;
  unsigned long sign:16;
} s_vptr;

union v
{
s_vptr vptr;
unsigned long ptr;
};

int main()
{
  // 0x0FFFFFFFF; below 4GB
  //unsigned long vaddr = 0x40000000; // 1GB // 0x100000000; // 4GB

  unsigned long vaddr = 0x280000000; // 10GB
  
  uint64_t kr = 0xffffffff7fffffff; // -2GB mark

  //v * p = (v*)&vaddr;
  v * p = (v*)&kr;

  std::cout << "sign " << p->vptr.sign << std::endl;
  std::cout << "PML4 " << p->vptr.PML4 << std::endl;
  std::cout << "PDP " << p->vptr.PDP << std::endl;
  std::cout << "PD " << p->vptr.PD << std::endl;
  std::cout << "Page " << p->vptr.page << std::endl;  

  
  printf("%p\n", p->ptr);
  //std::cout << "Pointer " << p->ptr << std::endl;
  
  v p2;
  p2.ptr = 0;
  p2.vptr.PML4 = 1;
  
  printf("p2: %p\n", p2.ptr);
  
  return 0;
}