| 1 | #pragma once |
| 2 | |
| 3 | /* defines linker sections for commonly accessed regions, |
| 4 | * .text, .bss, .rodata, etc... */ |
| 5 | #include <compiler.h> |
| 6 | #include <stdint.h> |
| 7 | |
| 8 | extern uint64_t __stext, __etext; |
| 9 | extern uint64_t __srodata, __erodata; |
| 10 | extern uint64_t __sdata, __edata; |
| 11 | extern uint64_t __sbss, __ebss; |
| 12 | extern uint64_t __slimine_requests, __elimine_requests; |
| 13 | extern uint64_t __kernel_virt_end; |
| 14 | |
| 15 | #define LINKER_SECTION_ATTRIBUTE(n) \ |
| 16 | __attribute__((section(".kernel_" #n), used)) |
| 17 | |
| 18 | #define LINKER_SECTION_OBJECT(type, section) \ |
| 19 | LINKER_SECTION_ATTRIBUTE(section) type |
| 20 | |
| 21 | #define LINKER_SECTION_DEFINE(type, name) \ |
| 22 | extern type __skernel_##name[]; \ |
| 23 | extern type __ekernel_##name[]; |
| 24 | |
| 25 | #define linker_section_for_each_object(obj, name) \ |
| 26 | for (obj = __skernel_##name; obj < __ekernel_##name; obj++) |
| 27 | |