Fix: stale dnode caching instance cause locked-up upon accessing (#52)
[lunaix-os.git] / lunaix-os / includes / lunaix / sections.h
1 #ifndef __LUNAIX_SECTIONS_H
2 #define __LUNAIX_SECTIONS_H
3
4 #include <lunaix/types.h>
5
6 #define __mark_name(n, s)   __##n##_##s
7 #define __section_mark(name, suffix)    \
8     ({ extern unsigned long __mark_name(name,suffix)[]; \
9        __ptr(__mark_name(name,suffix)); })
10
11
12 /*  Auto-generated data  */
13
14 #define extern_autogen(name)                                         \
15             _weak unsigned long __mark_name(autogen,name)[] = {};     \
16             extern unsigned long __mark_name(autogen,name)[];
17
18 #define autogen_name(name)  __mark_name(autogen,name)
19
20 #define autogen(type, name)     \
21             ((type*)__mark_name(autogen,name))
22
23
24 /*  Common section definitions  */
25
26 #define reclaimable         __section(".bss.reclaim")
27 #define reclaimable_start   __section_mark(bssreclaim, start)
28 #define reclaimable_end     __section_mark(bssreclaim, end)
29
30 #define kernel_start        __section_mark(kexec, start)
31 #define kernel_load_end     __section_mark(kexec, end)
32 #define kernel_end          __section_mark(kimg, end)
33
34 #ifdef CONFIG_USE_DEVICETREE
35 #define dtb_start           __section_mark(dtb, start)
36 #endif
37
38
39 /*  kernel section mapping info  */
40
41 struct ksection
42 {
43     ptr_t va;
44     ptr_t pa;
45     unsigned int size;
46     unsigned int flags;
47 } align(4);
48
49 struct ksecmap
50 {
51     unsigned int num;
52     unsigned int ksize;
53     struct ksection secs[0];
54 } align(4);
55
56 #endif /* __LUNAIX_SECTIONS_H */