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