refactor: one more step towards arch-agnostic design
[lunaix-os.git] / lunaix-os / scripts / test_ksyms.c
diff --git a/lunaix-os/scripts/test_ksyms.c b/lunaix-os/scripts/test_ksyms.c
new file mode 100644 (file)
index 0000000..dbc33b0
--- /dev/null
@@ -0,0 +1,48 @@
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+struct ksyms_meta
+{
+    unsigned int entries;
+    unsigned int label_off_base;
+};
+
+struct ksyms_entry
+{
+    unsigned int addr;
+    unsigned int off;
+};
+
+void
+main()
+{
+    int fd = open("ksyms", O_RDONLY);
+    void* data = mmap(0, 0x6000, PROT_READ, MAP_PRIVATE, fd, 0);
+
+    printf("mapped at: %p\n", data);
+
+    if (data == 0) {
+        printf("unable to map, %d", errno);
+        return;
+    }
+
+    close(fd);
+
+    struct ksyms_meta* meta = (struct ksyms_meta*)data;
+
+    printf(
+      "entires: %d, label_base: %p\n", meta->entries, meta->label_off_base);
+
+    struct ksyms_entry* entries = (struct ksyms_entry*)(meta + 1);
+    for (int i = 0; i < meta->entries; i++) {
+        struct ksyms_entry* entry = &entries[i];
+        printf(
+          "addr: %p, off: %p, label: %s\n",
+          entry->addr,
+          entry->off,
+          (char*)((unsigned long)data + meta->label_off_base + entry->off));
+    }
+}