aboutsummaryrefslogtreecommitdiffstats
path: root/misc-host/test-vaddr/vaddr.cpp
diff options
context:
space:
mode:
authorGravatar ornitorrincos 2026-08-18 12:15:05 +0200
committerGravatar ornitorrincos 2026-08-18 12:15:05 +0200
commit132d3236bb884433bf94e961f6d32264e0334aec (patch)
tree06638976b06f019ea4037175ff228f8271057c44 /misc-host/test-vaddr/vaddr.cpp
Diffstat (limited to 'misc-host/test-vaddr/vaddr.cpp')
-rw-r--r--misc-host/test-vaddr/vaddr.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/misc-host/test-vaddr/vaddr.cpp b/misc-host/test-vaddr/vaddr.cpp
new file mode 100644
index 0000000..c5af491
--- /dev/null
+++ b/misc-host/test-vaddr/vaddr.cpp
@@ -0,0 +1,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;
+}
+