Unifying the Lunaix's Physical Memory Model (#28)
[lunaix-os.git] / lunaix-os / scripts / test_ksyms.c
1 #include <errno.h>
2 #include <fcntl.h>
3 #include <stdio.h>
4 #include <sys/mman.h>
5 #include <unistd.h>
6
7 struct ksyms_meta
8 {
9     unsigned int entries;
10     unsigned int label_off_base;
11 };
12
13 struct ksyms_entry
14 {
15     unsigned int addr;
16     unsigned int off;
17 };
18
19 void
20 main()
21 {
22     int fd = open("ksyms", O_RDONLY);
23     void* data = mmap(0, 0x6000, PROT_READ, MAP_PRIVATE, fd, 0);
24
25     printf("mapped at: %p\n", data);
26
27     if (data == 0) {
28         printf("unable to map, %d", errno);
29         return;
30     }
31
32     close(fd);
33
34     struct ksyms_meta* meta = (struct ksyms_meta*)data;
35
36     printf(
37       "entires: %d, label_base: %p\n", meta->entries, meta->label_off_base);
38
39     struct ksyms_entry* entries = (struct ksyms_entry*)(meta + 1);
40     for (int i = 0; i < meta->entries; i++) {
41         struct ksyms_entry* entry = &entries[i];
42         printf(
43           "addr: %p, off: %p, label: %s\n",
44           entry->addr,
45           entry->off,
46           (char*)((unsigned long)data + meta->label_off_base + entry->off));
47     }
48 }